Skip to main content

FieldLens

Library is called Fields solely because it is built around Field data type. But creating Field instance for every validation can be memory consuming, so the new modules fields-lens was introduced built around lenses.

FieldLens[P, +V] has path of type FieldPath and selector of type P => V.

All validations are defined through syntax available for FieldLens

Syntax​

Create​

import fields.lens.FieldsDsl.default._

case class Request(name: String)
val request = Request("Ann")
// request: Request = Request("Ann")
FieldLens[Request]
// res0: FieldLens[Request, Request] = Strict(
// path = .,
// selector = fields.lens.FieldLens$$$Lambda/0x0000007002eee548@25cfebf3
// )
FieldLens[Request](FieldPath.fromPath("request"))
// res1: FieldLens[Request, Request] = Strict(
// path = .request,
// selector = fields.lens.FieldLens$$$Lambda/0x0000007002efe5a8@115fd7ae
// )
FieldLens[Request].sub(_.name)
// res2: FieldLens[Request, String] = Strict(
// path = .name,
// selector = scala.Function1$$Lambda/0x0000007002ee19b0@99485a2
// )

Transform​

case class B()
case class A(b: B)

val a = FieldLens[A]
// a: FieldLens[A, A] = Strict(
// path = .,
// selector = fields.lens.FieldLens$$$Lambda/0x0000007002eee548@25cfebf3
// )
a.sub(_.b)
// res3: FieldLens[A, B] = Strict(
// path = .b,
// selector = scala.Function1$$Lambda/0x0000007002ee19b0@3ddee0e0
// )
a.down("b", _.b)
// res4: FieldLens[A, B] = Strict(
// path = .b,
// selector = scala.Function1$$Lambda/0x0000007002ee19b0@679404db
// )
a.map(_.b)
// res5: FieldLens[A, B] = Strict(
// path = .,
// selector = scala.Function1$$Lambda/0x0000007002ee19b0@8995d20
// )
a.mapPath(_ + "A")
// res6: FieldLens[A, A] = Strict(
// path = .A,
// selector = fields.lens.FieldLens$$$Lambda/0x0000007002eee548@25cfebf3
// )
a.named("A")
// res7: FieldLens[A, A] = Strict(
// path = .A,
// selector = fields.lens.FieldLens$$$Lambda/0x0000007002eee548@25cfebf3
// )
a.withPath(FieldPath.fromPath("b"))
// res8: FieldLens[A, A] = Strict(
// path = .b,
// selector = fields.lens.FieldLens$$$Lambda/0x0000007002eee548@25cfebf3
// )
a.withSelector(_.b)
// res9: FieldLens[A, B] = Strict(
// path = .,
// selector = repl.MdocSession$MdocApp$$Lambda/0x0000007002f020c8@258d7004
// )