pub trait EntryValidator: Send + Sync {
// Required method
fn validate(
&self,
key: &str,
data: &HashMap<String, DataValue>,
) -> Result<(), Box<dyn Error + Send + Sync>>;
}Expand description
Trait for custom entry validation
Implement this trait to provide custom validation logic for entries
being added to a DatabaseBuilder. Use with
DatabaseBuilder::with_validator.
For schema-based validation, use DatabaseBuilderExt::with_schema instead,
which uses the built-in SchemaValidator.
Trait for validating entry data before insertion into a database
Implement this trait to provide custom validation logic for entries
being added to a DatabaseBuilder.
§Example
ⓘ
use matchy_format::{DatabaseBuilder, EntryValidator};
use matchy_data_format::DataValue;
use std::collections::HashMap;
use std::error::Error;
struct RequiredFieldValidator {
required_fields: Vec<String>,
}
impl EntryValidator for RequiredFieldValidator {
fn validate(
&self,
key: &str,
data: &HashMap<String, DataValue>,
) -> Result<(), Box<dyn Error + Send + Sync>> {
for field in &self.required_fields {
if !data.contains_key(field) {
return Err(format!(
"Entry '{}': missing required field '{}'",
key, field
).into());
}
}
Ok(())
}
}
let validator = RequiredFieldValidator {
required_fields: vec!["threat_level".to_string(), "source".to_string()],
};
let mut builder = DatabaseBuilder::new(MatchMode::CaseSensitive)
.with_validator(Box::new(validator));
// This will fail validation
builder.add_entry("1.2.3.4", HashMap::new())?;Required Methods§
Implementors§
impl EntryValidator for SchemaValidator
Implement EntryValidator trait for SchemaValidator
This allows SchemaValidator to be used with DatabaseBuilder::with_validator() for automatic schema validation during database construction.