File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -506,6 +506,7 @@ object ProtobufCodec {
506506 case c : Message [_] => handleMessage(c, registers, offset)
507507 case c : RecursiveMessage [_] => handleMessage(c.codec, registers, offset)
508508 case c : Transform [_, _] => c.from(loop(c.codec, offset))
509+ case c : Enum [_] => c.valuesByIndex(input.readEnum())
509510 case _ => throw new Exception (s " Invalid root codec: $codec" )
510511 }
511512
Original file line number Diff line number Diff line change @@ -92,6 +92,23 @@ object ProtobufCodecSpec extends ZIOSpecDefault {
9292
9393 assert(results.map(_.status))(equalTo(variants))
9494 },
95+ test(" enum as root codec encoding/decoding" ) {
96+ enum Status derives Schema { case Active , Inactive , Pending }
97+
98+ // Create a direct codec for the enum (this tests the new Enum case in loop function)
99+ val enumCodec = Schema [Status ].derive(deriver)
100+
101+ val testCases = List (Status .Active , Status .Inactive , Status .Pending )
102+
103+ val results = testCases.map { enumValue =>
104+ val encoded = enumCodec.encode(enumValue)
105+ val decoded = enumCodec.decode(encoded)
106+ decoded == enumValue
107+ }
108+
109+ // Verify all enum values can be used as root codec
110+ assert(results.forall(identity))(isTrue)
111+ },
95112 test(" oneOf field variants" ) {
96113 enum ContactInfo derives Schema {
97114 case Email (address : String )
You can’t perform that action at this time.
0 commit comments