Skip to content

bson decoder can't handle optional values in case classes with 22+ fields #940

@sinha-abhi

Description

@sinha-abhi

zio-schema-bson can't properly handle missing fields in bson even if the field is marked as optional. see example below

  final case class Test(
    a: Option[String] = None,
    b: Option[String] = None,
    d: Option[String] = None,
    e: Option[String] = None,
    f: Option[String] = None,
    g: Option[String] = None,
    h: Option[String] = None,
    i: Option[String] = None,
    j: Option[String] = None,
    k: Option[String] = None,
    l: Option[String] = None,
    m: Option[String] = None,
    n: Option[String] = None,
    o: Option[String] = None,
    p: Option[String] = None,
    q: Option[String] = None,
    r: Option[String] = None,
    s: Option[String] = None,
    t: Option[String] = None,
    u: Option[String] = None,
    v: Option[String] = None,
    w: Option[String] = None,
    x: Option[String] = None
  )

  implicit val schema: Schema[Test] = DeriveSchema.gen

  implicit val codec: BsonCodec[Test] = BsonSchemaCodec.bsonCodec(schema)

  codec.decoder.fromBsonValue(BsonDocument.parse("{}"))

the last line returns

Left(zio.bson.BsonDecoder$Error: Path: , error: Field a is missing. Don't use `decodeUnsafe` and `fromBsonValueUnsafe` methods.)
  • scala version: 2.12.20
  • java version: 11.0.28
  • bson version: 5.5.1
  • zio-schema/zio-schema-bson version: 1.7.3

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions