Skip to content

Repository files navigation

Mapping

An extension of cats.Inject built on top of singleton structure derivation

Installation

libraryDependencies ++="io.taig"%%"mapping-core"%"x.y.z"::"io.taig"%%"mapping-circe"%"x.y.z"::"io.taig"%%"mapping-skunk"%"x.y.z"::Nil

Usage

importio.taig.mapping.*enumAnimal:caseBirdcaseCatcaseDog
singletonValues[Animal]
// > NonEmptyList(Bird, Cat, Dog)givenmapping:Mapping[Animal, String] =Mapping.of:caseAnimal.Bird=>"bird"caseAnimal.Cat=>"cat"caseAnimal.Dog=>"dog"
mapping.values
// > NonEmptyList(Bird, Cat, Dog)
mapping.values.map(mapping.inj)
// > NonEmptyList(bird, cat, dog)
mapping.inj(Animal.Dog)
// > "dog"
mapping.prj("cat")
// > Some(Cat)
mapping.prj("whale")
// > None

Circe

importio.circe.{Decoder, Encoder}
importio.taig.mapping.circe.*Decoder[Animal].decodeJson(Json.fromString("dog"))
// > Right(Dog)Decoder[Animal].decodeJson(Json.fromString("whale"))
// > "Couldn't decode value 'whale.' Allowed values: 'bird,cat,dog'"Encoder[Animal].apply(Animal.Dog)
// > "dog"

Ciris

importskunk.Codecimportskunk.data.Typeimportio.taig.mapping.ciris.*
summon[ConfigDecoder[String, Animal]]

About

Derive enumeration values and codecs for enums and nested sealed class/trait hierarchies

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages