use apache_avro::{
AvroResult,
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<usize> {
Ok(0)
}
}
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"
},
{
"name": "field-name",
"type": {
"type": "enum",
"name": "Test",
"symbols": ["A-B", "B-A"]
}
}
]
}"#;
apache_avro::Schema::parse_str(invalid_schema)?;
Ok(())
}