fn avro_3674_with_or_without_namespace()

in avro/src/types.rs [2780:2861]


    fn avro_3674_with_or_without_namespace(with_namespace: bool) -> TestResult {
        use crate::ser::Serializer;
        use serde::Serialize;

        let schema_str = r#"
        {
            "type": "record",
            "name": "NamespacedMessage",
            [NAMESPACE]
            "fields": [
                {
                    "name": "field_a",
                    "type": {
                        "type": "record",
                        "name": "NestedMessage",
                        "fields": [
                            {
                                "name": "enum_a",
                                "type": {
                                "type": "enum",
                                "name": "EnumType",
                                "symbols": ["SYMBOL_1", "SYMBOL_2"],
                                "default": "SYMBOL_1"
                                }
                            },
                            {
                                "name": "enum_b",
                                "type": "EnumType"
                            }
                        ]
                    }
                }
            ]
        }
        "#;
        let schema_str = schema_str.replace(
            "[NAMESPACE]",
            if with_namespace {
                r#""namespace": "com.domain","#
            } else {
                ""
            },
        );

        let schema = Schema::parse_str(&schema_str)?;

        #[derive(Serialize)]
        enum EnumType {
            #[serde(rename = "SYMBOL_1")]
            Symbol1,
            #[serde(rename = "SYMBOL_2")]
            Symbol2,
        }

        #[derive(Serialize)]
        struct FieldA {
            enum_a: EnumType,
            enum_b: EnumType,
        }

        #[derive(Serialize)]
        struct NamespacedMessage {
            field_a: FieldA,
        }

        let msg = NamespacedMessage {
            field_a: FieldA {
                enum_a: EnumType::Symbol2,
                enum_b: EnumType::Symbol1,
            },
        };

        let mut ser = Serializer::default();
        let test_value: Value = msg.serialize(&mut ser)?;
        assert!(test_value.validate(&schema), "test_value should validate");
        assert!(
            test_value.resolve(&schema).is_ok(),
            "test_value should resolve"
        );

        Ok(())
    }