2

Argonaut では、ケース クラスにいずれかが含まれているインスタンスで、対応する JSON プロパティ名を簡単に変更する方法を教えてください。

たとえば、次の定義があるとします。

  case class Foo(f: String)
  case class Bar(b: String)
  case class FooBar(e: Either[Foo, Bar])

  implicit def FooCodecJson: CodecJson[Foo] = casecodec1(Foo.apply, Foo.unapply)("f")

  implicit def BarCodecJson: CodecJson[Bar] = casecodec1(Bar.apply, Bar.unapply)("b")

  implicit def FooBarCodecJson: CodecJson[FooBar] = casecodec1(FooBar.apply, FooBar.unapply)("e")

FooBarを JSON のような形式に変換するとFooBar(Right(Bar("hello"))).asJson.spaces4、次のようになります。

{
    "e" : {
        "Right" : {
            "b" : "hello"
        }
    }
}

上記の出力で「Right」の名前をより意味のある名前に変更する最も簡単な方法は何ですか? (私の実際のシナリオには、多くのイーザーを持つ多くのケース クラスがあるため、可能な限り最も簡潔な方法を探しています。)

4

1 に答える 1