Skip to main content

Validated

Validated provides projections for cats.data.Validated. Valid(r) holds a success value and Invalid(l) holds an error value. The two projections route each side into the pipeline independently, yielding Status.Success in both the matching and non-matching cases.

  • Validated.Valid[T] extracts the success value; yields nothing for Invalid.
  • Validated.Invalid[T] extracts the error value; yields nothing for Valid.

Both are polymorphic singletons. Use Validated.Valid[T] and Validated.Invalid[T] to obtain typed Projection[cats.data.Validated[Any, T], T] and Projection[cats.data.Validated[T, Any], T] respectively.

import h8io.stages.cats.*
val validStage = Validated.Valid[String]
// validStage: h8io.stages.base.Projection[Validated.Validated[Any, String], String] = <function1>
val invalidStage = Validated.Invalid[String]
// invalidStage: h8io.stages.base.Projection[Validated.Validated[String, Any], String] = <function1>

validStage(success)
// res0: h8io.stages.Yield[Validated.Validated[Any, String], String, Nothing] = Some(
// out = "hello",
// status = Success,
// evolution = <function1>
// )
validStage(failure)
// res1: h8io.stages.Yield[Validated.Validated[Any, String], String, Nothing] = None(
// status = Success,
// evolution = <function1>
// )

invalidStage(success)
// res2: h8io.stages.Yield[Validated.Validated[String, Any], String, Nothing] = None(
// status = Success,
// evolution = <function1>
// )
invalidStage(failure)
// res3: h8io.stages.Yield[Validated.Validated[String, Any], String, Nothing] = Some(
// out = "error",
// status = Success,
// evolution = <function1>
// )