validate_ro/
traits.rs

1use std::any::Any;
2use std::sync::Arc;
3use async_trait::async_trait;
4use mongodb::Database;
5use serde_json::Value;
6use crate::error::ValidationError;
7
8#[async_trait]
9pub trait Validator: Any+Send + Sync {
10    fn validate(&self, value: &Value) -> ValidationResult;
11
12    async fn validate_async(&self, _db: &Arc<Database>, value: &Value) -> ValidationResult {
13        self.validate(value)
14    }
15
16    fn as_any(&self) -> &dyn Any;
17}
18
19// Implement Validator for functions with matching signature
20impl<F> Validator for F
21where
22    F: Fn(&Value) -> ValidationResult+Sync+Send+ 'static
23{
24    fn validate(&self, value: &Value) -> ValidationResult {
25        self(value)
26    }
27
28    fn as_any(&self) -> &dyn Any {
29        self
30    }
31}
32
33pub type ValidationResult = Result<(), ValidationError>;