I have the following case classes. Trying to produce a avro message to Kafka, using FS2 and Vulcan to do the Codec.
case class People(name: String, address: Seq[AddressAvro])
case class AddressAvro(`type`: AddressTypeAvro.Value, street: String, number: Int, suburb: String)
object AddressTypeAvro extends Enumeration {
type AddressTypeAvro = Value
val H, P = Value
}
I created the following Codec:
implicit val peopleEncoder: Codec[People] = Codec.derive[People]
implicit val addressAvroCodec: Codec[AddressAvro] = Codec.derive[AddressAvro]
And the following for Enum Codec:
implicit val AddressTypeCodec: Aux[EnumSymbol, AddressTypeAvro] = Codec.enumeration[AddressTypeAvro](
name = "AddressTypeAvro",
namespace = "au.com.tabcorp.cam.avro",
symbols = List("H", "P"),
encode = {
case AddressTypeAvro.H => "H"
case AddressTypeAvro.P => "P"
},
decode = {
case "H" => Right(AddressTypeAvro.H)
case "P" => Right(AddressTypeAvro.P)
case e => Left(AvroError(s"$e is not a AddressTypeAvro"))
},
default = Some(AddressTypeAvro.H)
)
To Codec the Seq[AddressAvro], I am writing this:
implicit val seqAddressAvroCodec = Codec.seq[AddressAvro]
Looks like it does not work. Can anyone help?