JsonPrismMacro

dev.constructive.eo.circe.JsonPrismMacro

Macros backing JsonPrism.field(_.fieldName), selectDynamic, at(i), each, fields. Extracts the field name from the selector AST (same pattern as eo-generics' lens[S](_.field)) and emits a widenPath call.

 val streetPrism: JsonPrism[String] =
   codecPrism[Person].field(_.address).field(_.street)

Attributes

Source
JsonPrismMacro.scala
Graph
Supertypes
class Object
trait Matchable
class Any
Self type

Members list

Value members

Concrete methods

def atImpl[A](parent: Expr[JsonPrism[A]], iE: Expr[Int])(using evidence$1: Type[A], q: Quotes): Expr[Any]

.at(i) — verifies A <: Iterable, summons element codecs, emits widenPathIndex.

.at(i) — verifies A <: Iterable, summons element codecs, emits widenPathIndex.

Attributes

Source
JsonPrismMacro.scala
def atTraversalImpl[A](parent: Expr[JsonTraversal[A]], iE: Expr[Int])(using evidence$1: Type[A], q: Quotes): Expr[Any]

Traversal counterpart to atImpl — extends the suffix by an array index.

Traversal counterpart to atImpl — extends the suffix by an array index.

Attributes

Source
JsonPrismMacro.scala
def eachImpl[A](parent: Expr[JsonPrism[A]])(using evidence$1: Type[A], q: Quotes): Expr[Any]

.each — emits toTraversal[B] over A's element type.

.each — emits toTraversal[B] over A's element type.

Attributes

Source
JsonPrismMacro.scala
def fieldImpl[A, B](parent: Expr[JsonPrism[A]], selector: Expr[A => B], encB: Expr[Encoder[B]], decB: Expr[Decoder[B]])(using evidence$1: Type[A], evidence$2: Type[B], q: Quotes): Expr[JsonPrism[B]]

Child JsonPrism[B] from parent: JsonPrism[A] via a (_.field) selector.

Child JsonPrism[B] from parent: JsonPrism[A] via a (_.field) selector.

Attributes

Source
JsonPrismMacro.scala
def fieldTraversalImpl[A, B](parent: Expr[JsonTraversal[A]], selector: Expr[A => B], encB: Expr[Encoder[B]], decB: Expr[Decoder[B]])(using evidence$1: Type[A], evidence$2: Type[B], q: Quotes): Expr[JsonTraversal[B]]

Traversal counterpart to fieldImpl — extends the suffix by a named field.

Traversal counterpart to fieldImpl — extends the suffix by a named field.

Attributes

Source
JsonPrismMacro.scala
def fieldsImpl[A](parent: Expr[JsonPrism[A]], selectorsE: Expr[Seq[A => Any]])(using evidence$1: Type[A], q: Quotes): Expr[Any]

.fields(_.a, _.b, ...) — multi-field focus. Validates arity ≥ 2, duplicate-ness, known fields, non-nested. Synthesises an NT in SELECTOR order, summons codecs, emits toFieldsPrism. Error-message catalogue tested by FieldsMacroErrorSpec.

.fields(_.a, _.b, ...) — multi-field focus. Validates arity ≥ 2, duplicate-ness, known fields, non-nested. Synthesises an NT in SELECTOR order, summons codecs, emits toFieldsPrism. Error-message catalogue tested by FieldsMacroErrorSpec.

Attributes

Source
JsonPrismMacro.scala
def fieldsTraversalImpl[A](parent: Expr[JsonTraversal[A]], selectorsE: Expr[Seq[A => Any]])(using evidence$1: Type[A], q: Quotes): Expr[Any]

Traversal counterpart to fieldsImpl.

Traversal counterpart to fieldsImpl.

Attributes

Source
JsonPrismMacro.scala
def selectFieldImpl[A](parent: Expr[JsonPrism[A]], nameE: Expr[String])(using evidence$1: Type[A], q: Quotes): Expr[Any]

Drives codecPrism[Person].address. Looks the field up on A's schema, summons its codecs, emits widenPath. Returns Expr[Any] so transparent inline refines per call site.

Drives codecPrism[Person].address. Looks the field up on A's schema, summons its codecs, emits widenPath. Returns Expr[Any] so transparent inline refines per call site.

Attributes

Source
JsonPrismMacro.scala
def selectFieldTraversalImpl[A](parent: Expr[JsonTraversal[A]], nameE: Expr[String])(using evidence$1: Type[A], q: Quotes): Expr[Any]

Traversal counterpart to selectFieldImpl — drives Dynamic sugar by extending the suffix.

Traversal counterpart to selectFieldImpl — drives Dynamic sugar by extending the suffix.

Attributes

Source
JsonPrismMacro.scala