プロジェクトのコンポーネントへの依存関係として json デコーダーを挿入するために使用される特性があります。
trait JsonDecoder {
def apply[T](s: String): Option[T]
}
Circeで実装しようとすると:
import io.circe.generic.auto._
import io.circe.parser.decode
case class CirceJsonDecoder() extends JsonDecoder {
def apply[T](s: String): Option[T] = {
decode[T](s).fold(_ => None, s => Some(s))
}
}
そして実行します:
case class C()
def test(d: JsonDecoder) = d[C]("{}")
test(CirceJsonDecoder())
エラーでコンパイルされません:
could not find implicit value for parameter decoder: io.circe.Decoder[T]
またはコンテキスト境界を追加しようとしましたがClassTag
、の暗黙的な値をまだ見つけることができません。TypeTag
WeakTypeTag
T
Decoder
Decoder
コンテキスト バインドまたは暗黙のパラメーターを追加することはできませんJsonDecoder.apply
。これを使用するコンポーネントは実装の詳細を認識できないためです。
暗黙的に提供するにはどうすればよいio.circe.Decoder
ですか? からそれを取得する方法があるかもしれTypeTag
ませんか?