nidrs_valid/
validator.rs

1use axum::Json;
2use serde_json::Value;
3use std::fmt;
4
5pub type ValidResult = Result<(), ValidError>;
6
7pub trait Rule<T> {
8    fn valid(&self, value: T, field_path: &str, message: Option<String>) -> ValidResult;
9    fn example(&self) -> Vec<Value>;
10}
11
12#[derive(thiserror::Error, Debug)]
13pub struct ValidError {
14    pub message: String,
15}
16
17impl fmt::Display for ValidError {
18    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19        write!(f, "{}", self.message)
20    }
21}
22
23pub trait Validator {
24    fn valid(&self) -> ValidResult;
25    fn example(&self) -> Vec<Value>;
26}
27
28impl<T: Validator> Validator for Json<T> {
29    fn valid(&self) -> ValidResult {
30        self.0.valid()
31    }
32
33    fn example(&self) -> Vec<Value> {
34        self.0.example()
35    }
36}
37
38impl Validator for axum::body::Body {
39    fn valid(&self) -> ValidResult {
40        Ok(())
41    }
42
43    fn example(&self) -> Vec<Value> {
44        vec![]
45    }
46}