fn serialize_unit_struct_with_schema()

in avro/src/ser_schema.rs [1106:1152]


    fn serialize_unit_struct_with_schema(
        &mut self,
        name: &'static str,
        schema: &Schema,
    ) -> Result<usize, Error> {
        let create_error = |cause: String| Error::SerializeValueWithSchema {
            value_type: "unit struct",
            value: format!("{name}. Cause: {cause}"),
            schema: schema.clone(),
        };

        match schema {
            Schema::Record(sch) => match sch.fields.len() {
                0 => Ok(0),
                too_many => Err(create_error(format!(
                    "Too many fields: {}. Expected: 0",
                    too_many
                ))),
            },
            Schema::Null => Ok(0),
            Schema::Ref { name: ref_name } => {
                let ref_schema = self.get_ref_schema(ref_name)?;
                self.serialize_unit_struct_with_schema(name, ref_schema)
            }
            Schema::Union(union_schema) => {
                for (i, variant_schema) in union_schema.schemas.iter().enumerate() {
                    match variant_schema {
                        Schema::Record(record_schema) if record_schema.fields.is_empty() => {
                            encode_int(i as i32, &mut *self.writer)?;
                            return self.serialize_unit_struct_with_schema(name, variant_schema);
                        }
                        Schema::Null | Schema::Ref { name: _ } => {
                            encode_int(i as i32, &mut *self.writer)?;
                            return self.serialize_unit_struct_with_schema(name, variant_schema);
                        }
                        _ => { /* skip */ }
                    }
                }
                Err(create_error(format!(
                    "Cannot find a matching Null schema in {union_schema:?}"
                )))
            }
            unsupported => Err(create_error(format!(
                "Expected Null or Union schema. Got: {unsupported}"
            ))),
        }
    }