dhallj-magnolia


License

License

MIT
GroupId

GroupId

pl.msitko
ArtifactId

ArtifactId

dhallj-magnolia_2.13
Last Version

Last Version

0.1.3-M8
Release Date

Release Date

Type

Type

jar
Description

Description

dhallj-magnolia
dhallj-magnolia
Project URL

Project URL

https://github.com/note/dhallj-magnolia
Project Organization

Project Organization

pl.msitko
Source Code Management

Source Code Management

https://github.com/note/dhallj-magnolia

Download dhallj-magnolia_2.13

How to add to project

<!-- https://jarcasting.com/artifacts/pl.msitko/dhallj-magnolia_2.13/ -->
<dependency>
    <groupId>pl.msitko</groupId>
    <artifactId>dhallj-magnolia_2.13</artifactId>
    <version>0.1.3-M8</version>
</dependency>
// https://jarcasting.com/artifacts/pl.msitko/dhallj-magnolia_2.13/
implementation 'pl.msitko:dhallj-magnolia_2.13:0.1.3-M8'
// https://jarcasting.com/artifacts/pl.msitko/dhallj-magnolia_2.13/
implementation ("pl.msitko:dhallj-magnolia_2.13:0.1.3-M8")
'pl.msitko:dhallj-magnolia_2.13:jar:0.1.3-M8'
<dependency org="pl.msitko" name="dhallj-magnolia_2.13" rev="0.1.3-M8">
  <artifact name="dhallj-magnolia_2.13" type="jar" />
</dependency>
@Grapes(
@Grab(group='pl.msitko', module='dhallj-magnolia_2.13', version='0.1.3-M8')
)
libraryDependencies += "pl.msitko" % "dhallj-magnolia_2.13" % "0.1.3-M8"
[pl.msitko/dhallj-magnolia_2.13 "0.1.3-M8"]

Dependencies

compile (3)

Group / Artifact Type Version
org.scala-lang : scala-library jar 2.13.5
org.dhallj : dhall-scala-codec_2.13 jar 0.8.0-M1
com.propensive : magnolia_2.13 jar 0.17.0

provided (1)

Group / Artifact Type Version
org.scala-lang : scala-reflect jar 2.13.5

test (2)

Group / Artifact Type Version
org.scalameta : munit_2.13 jar 0.7.22
org.dhallj : dhall-javagen_2.13 jar 0.8.0-M1

Project Modules

There are no modules declared in this project.

dhallj-magnolia

This library provides generic derivation of dhallj Encoder and Decoder typeclasses using magnolia.

To use dhallj-magnolia add the following dependency to your build.sbt:

libraryDependencies += "pl.msitko" %% "dhallj-magnolia" % "0.1.3-M9"

Examples

Consider the following ADT:

sealed trait Bar
final case class Bar1(a: Int) extends Bar
final case class Bar2(b: String) extends Bar
final case class Foo(a: Int, b: String, bar: Bar)

Automatic Encoder derivation

import org.dhallj.codec.syntax._
import pl.msitko.dhallj.generic.encoder.auto._

val input = Foo(12, "abc", Bar2("abcd"))
input.asExpr.toString
// """{a = 12, b = "abc", bar = (<Bar1 : {a : Natural} | Bar2 : {b : Text}>.Bar2) {b = "abcd"}}"""

Additionally, dhallj's Encoder[A] has dhallType method which prints out dhall type for A. So, following the example, we can:

import org.dhallj.codec.Encoder
println(Encoder[Foo].dhallType(None, None))
// {a : Natural, b : Text, bar : <Bar1 : {a : Natural} | Bar2 : {b : Text}>}

Automatic Decoder derivation

import org.dhallj.syntax._
import pl.msitko.dhallj.generic.decoder.auto._

val input = """{a = 12, b = "abc", bar = (<Bar1 : {a : Natural} | Bar2 : {b : Text}>.Bar2) {b = "abcd"}}"""

for {
  parsed  <- input.parseExpr
  decoded <- parsed.normalize().as[Foo]
} yield decoded
// Right(Foo(12,abc,Bar2(abcd)))

Semi-automatic Encoder derivation

import org.dhallj.codec.syntax._
import pl.msitko.dhallj.generic.encoder.semiauto._

implicit val barEncoder = deriveEncoder[Bar]
implicit val fooEncoder = deriveEncoder[Foo]

val input = Foo(12, "abc", Bar2("abcd"))
input.asExpr.toString
// """{a = 12, b = "abc", bar = (<Bar1 : {a : Natural} | Bar2 : {b : Text}>.Bar2) {b = "abcd"}}"""

Semi-automatic Decoder derivation

import org.dhallj.syntax._
import pl.msitko.dhallj.generic.decoder.semiauto._

implicit val barDecoder = deriveDecoder[Bar]
implicit val fooDecoder = deriveDecoder[Foo]

val input = """{a = 12, b = "abc", bar = (<Bar1 : {a : Natural} | Bar2 : {b : Text}>.Bar2) {b = "abcd"}}"""

for {
  parsed  <- input.parseExpr
  decoded <- parsed.normalize().as[Foo]
} yield decoded
// Right(Foo(12,abc,Bar2(abcd)))

Versions

Version
0.1.3-M8
0.1.3-M7
0.1.3-M5
0.1.2
0.1.2-M4
0.1.1
0.1.1-RC3
0.1.0