Field
Library is called Fields solely because it is built around Field
data type.
Field[P]
has path of type FieldPath
and value of type P
.
All validations are defined throught syntax available for Field
Various ways to create and transform Field
is described in Syntax section
Syntaxβ
Createβ
import jap.fields._
import jap.fields.DefaultAccumulateVM._
case class Request(name: String)
val request = Request("Ann")
// request: Request = Request(name = "Ann")
Field(request.name)
// res0: Field[String] = Field(path = FieldPath(parts = List()), value = "Ann")
Field(FieldPath.parse("request.name"),request.name)
// res1: Field[String] = Field(
// path = FieldPath(parts = List(Path(value = "request"), Path(value = "name"))),
// value = "Ann"
// )
Field.from(request.name)
// res2: Field[String] = Field(
// path = FieldPath(parts = List(Path(value = "request"), Path(value = "name"))),
// value = "Ann"
// )
Field.sub(request.name)
// res3: Field[String] = Field(path = FieldPath(parts = List(Path(value = "name"))), value = "Ann")
Transformβ
case class B()
case class A(b: B)
val a = Field(FieldPath.fromPath("a"), A(B()))
// a: Field[A] = Field(path = FieldPath(parts = List(Path(value = "a"))), value = A(b = B()))
a.sub(_.b)
// res4: Field[B] = Field(
// path = FieldPath(parts = List(Path(value = "a"), Path(value = "b"))),
// value = B()
// )
a.down("b", a.value.b)
// res5: Field[B] = Field(
// path = FieldPath(parts = List(Path(value = "a"), Path(value = "b"))),
// value = B()
// )
a.down("b", _.b)
// res6: Field[B] = Field(
// path = FieldPath(parts = List(Path(value = "a"), Path(value = "b"))),
// value = B()
// )
a.map(_.b)
// res7: Field[B] = Field(path = FieldPath(parts = List(Path(value = "a"))), value = B())
a.mapPath(_ + "A")
// res8: Field[A] = Field(
// path = FieldPath(parts = List(Path(value = "a"), Path(value = "A"))),
// value = A(b = B())
// )
a.named("A")
// res9: Field[A] = Field(path = FieldPath(parts = List(Path(value = "A"))), value = A(b = B()))
a.withPath(FieldPath.fromPath("b"))
// res10: Field[A] = Field(path = FieldPath(parts = List(Path(value = "b"))), value = A(b = B()))
a.withValue(3)
// res11: Field[Int] = Field(path = FieldPath(parts = List(Path(value = "a"))), value = 3)
Specialβ
Field(1 -> "2").first
// res12: Field[Int] = Field(path = FieldPath(parts = List()), value = 1)
Field(1 -> "2").second
// res13: Field[String] = Field(path = FieldPath(parts = List()), value = "2")
Field(Option(1)).option
// res14: Option[Field[Int]] = Some(value = Field(path = FieldPath(parts = List()), value = 1))