私は既存のプロジェクトでディスクリミネータを使用しようとしています。scodec.Codecが存在しないため、暗黙の値です。値のないフィールドを持つクラスのため暗黙的です
これを考慮するscodec example。私は
sealed class TurnLeft(degrees: Int) extends Command {
def getDegrees: Int = degrees
}
implicit val leftCodec: Codec[TurnLeft] = uint8or16.xmap[TurnLeft](v => new TurnLeft(v), _.getDegrees)
にTurnLeft
、そのコーデックを変更した場合、私はdegrees
フィールド値フィールドを作る場合、私は
Error:(x, x) could not find Lazy implicit value of type scodec.Codec[Command]
val codec: Codec[Either[UnrecognizedCommand, Command]] = discriminatorFallback(unrecognizedCodec, Codec[Command])
それはすべての作品を取得します。私は、それは形がつかないとやっかいなことだと思う。それを機能させるために私は何をすべきですか?
問題を示すサンプルプロジェクトはhereです。
恐ろしく!ありがとう、マイルス。これについての側面の質問。これらの値の定義は、指定されたクラスの2倍のメモリフットプリントですか? – expert
ここにvalが1つしかありません。非大文字クラスのコンストラクタ引数は明示的にそのようにマークされない限りvalを生成しません。 –
私は参照してください。 'def getDegrees'がそれを返すことができるならば、まだどこかに格納しなければならないと思いました。 – expert