in avro/src/types.rs [1434:1507]
fn validate_enum() -> TestResult {
let schema = Schema::Enum(EnumSchema {
name: Name::new("some_enum").unwrap(),
aliases: None,
doc: None,
symbols: vec![
"spades".to_string(),
"hearts".to_string(),
"diamonds".to_string(),
"clubs".to_string(),
],
default: None,
attributes: Default::default(),
});
assert!(Value::Enum(0, "spades".to_string()).validate(&schema));
assert!(Value::String("spades".to_string()).validate(&schema));
let value = Value::Enum(1, "spades".to_string());
assert!(!value.validate(&schema));
assert_logged(
format!(
"Invalid value: {:?} for schema: {:?}. Reason: {}",
value, schema, "Symbol 'spades' is not at position '1'"
)
.as_str(),
);
let value = Value::Enum(1000, "spades".to_string());
assert!(!value.validate(&schema));
assert_logged(
format!(
"Invalid value: {:?} for schema: {:?}. Reason: {}",
value, schema, "No symbol at position '1000'"
)
.as_str(),
);
let value = Value::String("lorem".to_string());
assert!(!value.validate(&schema));
assert_logged(
format!(
"Invalid value: {:?} for schema: {:?}. Reason: {}",
value, schema, "'lorem' is not a member of the possible symbols"
)
.as_str(),
);
let other_schema = Schema::Enum(EnumSchema {
name: Name::new("some_other_enum").unwrap(),
aliases: None,
doc: None,
symbols: vec![
"hearts".to_string(),
"diamonds".to_string(),
"clubs".to_string(),
"spades".to_string(),
],
default: None,
attributes: Default::default(),
});
let value = Value::Enum(0, "spades".to_string());
assert!(!value.validate(&other_schema));
assert_logged(
format!(
"Invalid value: {:?} for schema: {:?}. Reason: {}",
value, other_schema, "Symbol 'spades' is not at position '0'"
)
.as_str(),
);
Ok(())
}