skp_validator_core/
schema.rs1use std::collections::BTreeMap;
4#[cfg(feature = "serde")]
5use serde::{Serialize, Deserialize};
6
7pub trait ValidationMetadata {
9 fn get_validation_rules() -> TypeValidation;
11}
12
13#[derive(Debug, Clone, PartialEq, Default)]
15#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16pub struct TypeValidation {
17 pub fields: BTreeMap<String, FieldValidation>,
19 pub nested: BTreeMap<String, TypeValidation>,
21}
22
23#[derive(Debug, Clone, PartialEq, Default)]
25#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
26pub struct FieldValidation {
27 pub rules: Vec<RuleSchema>,
29}
30
31#[derive(Debug, Clone, PartialEq)]
33#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
34#[cfg_attr(feature = "serde", serde(tag = "type", content = "params"))]
35pub enum RuleSchema {
36 Length { min: Option<u64>, max: Option<u64>, equal: Option<u64> },
38 Email,
40 Url,
42 Ip { version: Option<String> },
44 Uuid { version: Option<usize> },
46 Phone,
48 CreditCard,
50 Pattern { regex: String },
52 Range { min: Option<f64>, max: Option<f64>, min_exclusive: Option<f64>, max_exclusive: Option<f64> },
54 AllowedValues { values: Vec<String> },
56 MustMatch { other_field: String },
58 Required,
60 Custom { name: String },
62}
63
64impl TypeValidation {
65 pub fn new() -> Self {
67 Self::default()
68 }
69}
70
71mod impls;