import io.circe._
case class Fnord(thing: Int, otherThing: Double)
object Fnord {
implicit val codec: Codec[Fnord] = Codec.from(
implicitly[Decoder[(Int, Double)]].map((Fnord.apply _).tupled),
implicitly[Encoder[(Int, Double)]].contramap(r => Fnord.unapply(r).get)
)
}
Paste these lines into your scala.json
:
"Case class tuple codec": {
"prefix": "scircetuple",
"body": [
"import io.circe._",
"case class ${1:MyCaseClass}(${2:_1}: ${3:Double}, ${4:_2}: ${5:String})",
"object ${1} {",
" implicit val codec: Codec[${1}] = Codec.from(",
" implicitly[Decoder[(${3}, ${5})]].map((${1}.apply _).tupled),",
" implicitly[Encoder[(${3}, ${5})]].contramap(r => (r.${2}, r.${4}))",
" )",
"}"
],
"description": "Creates a case class and codec for dealing with tuples in circe, AKA arrays with mixed types"
},
"Case class tuple codec 2": {
"prefix": "scircetuple",
"body": [
"import io.circe._",
"case class ${1:MyCaseClass}(${2:_1}: ${3:Double}, ${4:_2}: ${5:String})",
"object ${1} {",
" implicit val codec: Codec[${1}] = Codec.from(",
" implicitly[Decoder[(${3}, ${5})]].map((${1}.apply _).tupled),",
" implicitly[Encoder[(${3}, ${5})]].contramap(r => ${1}.unapply(r).get)",
" )",
"}"
],
"description": "Creates a case class and codec for dealing with tuples in circe, AKA arrays with mixed types"
}
Cmd+Shift+P -> "Preferences: Configure User Snippets" -> "scala"
See: docs
HT to yurique from the circe gitter