All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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