use apache_avro::{
AvroResult,
schema::Namespace,
validator::{
EnumSymbolNameValidator, RecordFieldNameValidator, SchemaNameValidator,
SchemaNamespaceValidator, set_enum_symbol_name_validator, set_record_field_name_validator,
set_schema_name_validator, set_schema_namespace_validator,
},
};
use apache_avro_test_helper::TestResult;
struct CustomValidator;
impl SchemaNameValidator for CustomValidator {
fn validate(&self, schema_name: &str) -> AvroResult<(String, Namespace)> {
Ok((schema_name.to_string(), None))
}
}
impl SchemaNamespaceValidator for CustomValidator {
fn validate(&self, _ns: &str) -> AvroResult<()> {
Ok(())
}
}
impl EnumSymbolNameValidator for CustomValidator {
fn validate(&self, _ns: &str) -> AvroResult<()> {
Ok(())
}
}
impl RecordFieldNameValidator for CustomValidator {
fn validate(&self, _ns: &str) -> AvroResult<()> {
Ok(())
}
}
#[test]
fn avro_3900_custom_validator_with_spec_invalid_names() -> TestResult {
assert!(set_schema_name_validator(Box::new(CustomValidator)).is_ok());
assert!(set_schema_namespace_validator(Box::new(CustomValidator)).is_ok());
assert!(set_enum_symbol_name_validator(Box::new(CustomValidator)).is_ok());
assert!(set_record_field_name_validator(Box::new(CustomValidator)).is_ok());
let invalid_schema = r#"{
"name": "invalid-schema-name",
"namespace": "invalid-namespace",
"type": "record",
"fields": [
{
"name": "invalid-field-name",
"type": "int"
},
{
"type": "enum",
"name": "Test",
"symbols": ["A-B", "B-A"]
}
]
}"#;
apache_avro::Schema::parse_str(invalid_schema)?;
Ok(())
}