Skip to content

Instantly share code, notes, and snippets.

@teigen
Created December 5, 2016 19:25
Show Gist options
  • Save teigen/367e15caacc23224e954a8842870e62d to your computer and use it in GitHub Desktop.
Save teigen/367e15caacc23224e954a8842870e62d to your computer and use it in GitHub Desktop.
auto derive codecs for new types from underlying type codecs
import argonaut.{EncodeJson, DecodeJson}
import shapeless._
object Argonautype {
implicit def EncodeHList[A](implicit encode:EncodeJson[A]):EncodeJson[A :: HNil] =
encode.contramap(_.head)
implicit def DecodeHList[A](implicit decode:DecodeJson[A]):DecodeJson[A :: HNil] =
decode.map(a => a :: HNil)
implicit def DeriveEncodeNewType[A, R](implicit gen:Generic.Aux[A, R], encode:EncodeJson[R]):EncodeJson[A] =
encode.contramap(gen.to)
implicit def DeriveDecodeNewType[A, R](implicit gen:Generic.Aux[A, R], decode:DecodeJson[R]):DecodeJson[A] =
decode.map(gen.from)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment