
validation.Field.scala Maven / Gradle / Ivy
package jap
package validation
import scala.quoted.*
import cats.implicits._
import scala.util.Try
import cats.data.NonEmptyList
case class Field[P] private[validation] (
path: FieldPath,
value: P,
) {
given FieldPath = path
val name = path.name
val fullPath = path.full
inline def sub[S](inline selector: P => S): Field[S] = ${ FieldMacro.subImpl('this, 'selector) }
def sub[S](subName: String, value: S): Field[S] = Field(path + FieldPath(subName), value)
def withName(name: String): Field[P] = copy(path = path.withName(name))
def withPath(path: FieldPath): Field[P] = copy(path = path)
def withValue[V](value: V): Field[V] = copy(value = value)
def map[B](f: P => B): Field[B] = withValue(f(value))
override def toString = fullPath + ":" + value
}
object Field {
def from[V](name: String, value: V): Field[V] = Field(FieldPath(name), value)
inline def from[V](inline value: V): Field[V] = ${ FieldMacro.fieldImpl('value) }
implicit def fieldConversion[A, B](field: Field[A])(implicit f: A => B): Field[B] = field.map(f)
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy