scala - Scodec: Coproducts could not find implicit value for parameter auto: scodec.codecs.CoproductBuilderAuto -
i trying define scodec coproduct codec communicating eelink gps.
here code:
import scodec.codec import scodec.bits.bytevector import scodec.codecs._ trait message object message { implicit val discriminated: discriminated[ message, int ] = discriminated(uint8) val codec: codec[ message ] = codec.coproduct[ message ].discriminatedbyindex(uint8) } case class gpsid(value: bytevector) object gpsid { val codec = bytes(8).as[ gpsid ] } case class serialnumber(value: int) object serialnumber { val codec = uint16.as[ serialnumber ] } case class header(protocolnumber: int, length: int, serial: serialnumber) object header { val codec = (uint8 :: uint16 :: serialnumber.codec).as[ header ] } case class login(header: header, id: gpsid, language: int) extends message object login { val protocolnumber = 0x01 implicit val discriminator: discriminator[ message, login, int ] = discriminator(protocolnumber) implicit val codec: codec[login] = (header.codec :: gpsid.codec :: uint8).as[ login ] }
i getting following:
error:(14, 48) not find implicit value parameter auto: scodec.codecs.coproductbuilderauto[com.tecnoguru.ridespark.gps.eelink.messages.message] val codec: codec[ message ] = codec.coproduct[ message ].discriminatedbyindex(uint8) ^
i have looked @ scodec - coproducts not find implicit value parameter auto: scodec.codecs.coproductbuilderauto did not help, see defining codec , discriminator correctly.
i running on scala 2.11.5 scodec-core 1.7.0 , scodec-bits 1.0.5
the code there needs 2 minor changes:
- the
message
trait mustsealed
, or otherwise, shapeless not providegeneric.aux[message, somecoproduct]
instance. - the call
codec.coproduct[message]
must after subtypes defined. moving companion end of file sufficient.
with these 2 changes, example compiles successfully.
Comments
Post a Comment