use crate::domain::error::A2AError;
pub type ValidationResult<T> = Result<T, A2AError>;
pub trait Validate {
fn validate(&self) -> ValidationResult<()>;
}
pub mod validators {
use super::*;
pub fn not_empty(value: &str, field_name: &str) -> ValidationResult<()> {
if value.trim().is_empty() {
Err(A2AError::ValidationError {
field: field_name.to_string(),
message: format!("{} cannot be empty", field_name),
})
} else {
Ok(())
}
}
pub fn optional_not_empty(value: &Option<String>, field_name: &str) -> ValidationResult<()> {
if let Some(val) = value {
not_empty(val, field_name)
} else {
Ok(())
}
}
pub fn valid_uuid(value: &str, field_name: &str) -> ValidationResult<()> {
if uuid::Uuid::parse_str(value).is_err() {
Err(A2AError::ValidationError {
field: field_name.to_string(),
message: format!("{} must be a valid UUID", field_name),
})
} else {
Ok(())
}
}
}