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§
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
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.