Skip to content

getting BinaryCodec from Schema for sealed trait hierarchy doesn't work #3801

@dontgitit

Description

@dontgitit

Describe the bug

Trying to get a BinaryCodec from a Schema fails for sealed trait / case object hierarchies.

Given the following class hierarchy:

sealed trait Foo derives Schema
case object Foo1 extends Foo
sealed trait Bar extends Foo
case object Bar1 extends Bar

zio.http.codec.TextBinaryCodec.fromSchema[Foo] throws:

java.lang.ClassCastException: class zio.schema.Schema$Enum1 cannot be cast to class zio.schema.Schema$CaseClass0 (zio.schema.Schema$Enum1 and zio.schema.Schema$CaseClass0 are in unnamed module of loader 'app')
[info]  at zio.http.codec.TextBinaryCodec$.$anonfun$1(TextBinaryCodec.scala:58)
[info]  at scala.collection.ArrayOps$.map$extension(ArrayOps.scala:936)
[info]  at zio.Chunk$Arr.mapChunk(Chunk.scala:1774)
[info]  at zio.ChunkLike.map(ChunkLike.scala:125)
[info]  at zio.ChunkLike.map$(ChunkLike.scala:39)
[info]  at zio.Chunk.map(Chunk.scala:44)
[info]  at zio.http.codec.TextBinaryCodec$.fromSchema(TextBinaryCodec.scala:57)

and val jsonCodec = zio.schema.codec.JsonCodec.schemaBasedBinaryCodec[Foo] succeeds, but using it via jsonCodec.encode(Foo1) fails with:

java.lang.ClassCastException: class zio.schema.Schema$Enum1 cannot be cast to class zio.schema.Schema$CaseClass0 (zio.schema.Schema$Enum1 and zio.schema.Schema$CaseClass0 are in unnamed module of loader 'app')
[info]  at zio.schema.codec.JsonCodec$.zio$schema$codec$JsonCodec$JsonEncoder$$$_$caseMap$$anonfun$1(JsonCodec.scala:643)
[info]  at scala.collection.ArrayOps$.map$extension(ArrayOps.scala:936)
[info]  at zio.Chunk$Arr.mapChunk(Chunk.scala:1774)
[info]  at zio.ChunkLike.map(ChunkLike.scala:125)
[info]  at zio.ChunkLike.map$(ChunkLike.scala:39)
[info]  at zio.Chunk.map(Chunk.scala:44)
[info]  at zio.schema.codec.JsonCodec$JsonEncoder$.caseMap(JsonCodec.scala:642)
[info]  at zio.schema.codec.JsonCodec$JsonEncoder$.enumEncoder(JsonCodec.scala:651)
[info]  at zio.schema.codec.JsonCodec$JsonEncoder$.schemaEncoderSlow(JsonCodec.scala:495)
[info]  at zio.schema.codec.JsonCodec$JsonEncoder$.schemaEncoder(JsonCodec.scala:471)
[info]  at zio.schema.codec.JsonCodec$JsonEncoder$.encode(JsonCodec.scala:452)
[info]  at zio.schema.codec.JsonCodec$$anon$2.encode(JsonCodec.scala:331)
[info]  at zio.schema.codec.JsonCodec$$anon$2.encode(JsonCodec.scala:330)

To Reproduce
https://scastie.scala-lang.org/tYRKPj1gSdeVmfdXcJmssw

Expected behaviour
I would expect no exceptions.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):
tested on Scala 3.7.3 and 3.74, zio-http 3.5.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions