skp_validator_core/schema/
impls.rs

1use super::{TypeValidation, ValidationMetadata};
2
3// Primitive types have no validation by default
4macro_rules! impl_empty_metadata {
5    ($($t:ty),*) => {
6        $(
7            impl ValidationMetadata for $t {
8                fn get_validation_rules() -> TypeValidation {
9                    TypeValidation::default()
10                }
11            }
12        )*
13    };
14}
15
16impl_empty_metadata!(String, bool, char, u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize, f32, f64);
17impl_empty_metadata!(&str);
18
19// Option delegates to T's metadata
20impl<T: ValidationMetadata> ValidationMetadata for Option<T> {
21    fn get_validation_rules() -> TypeValidation {
22        T::get_validation_rules()
23    }
24}
25
26// Vec delegates to T's metadata
27impl<T: ValidationMetadata> ValidationMetadata for Vec<T> {
28    fn get_validation_rules() -> TypeValidation {
29        T::get_validation_rules()
30    }
31}
32
33// Smart pointers delegate
34impl<T: ValidationMetadata> ValidationMetadata for Box<T> {
35    fn get_validation_rules() -> TypeValidation {
36        T::get_validation_rules()
37    }
38}
39
40impl<T: ValidationMetadata> ValidationMetadata for std::rc::Rc<T> {
41    fn get_validation_rules() -> TypeValidation {
42        T::get_validation_rules()
43    }
44}
45
46impl<T: ValidationMetadata> ValidationMetadata for std::sync::Arc<T> {
47    fn get_validation_rules() -> TypeValidation {
48        T::get_validation_rules()
49    }
50}
51
52// Collections that hold values
53impl<K, V: ValidationMetadata> ValidationMetadata for std::collections::HashMap<K, V> {
54    fn get_validation_rules() -> TypeValidation {
55        V::get_validation_rules()
56    }
57}
58
59impl<K, V: ValidationMetadata> ValidationMetadata for std::collections::BTreeMap<K, V> {
60    fn get_validation_rules() -> TypeValidation {
61        V::get_validation_rules()
62    }
63}
64
65impl<T: ValidationMetadata> ValidationMetadata for std::collections::HashSet<T> {
66    fn get_validation_rules() -> TypeValidation {
67        T::get_validation_rules()
68    }
69}
70
71impl<T: ValidationMetadata> ValidationMetadata for std::collections::BTreeSet<T> {
72    fn get_validation_rules() -> TypeValidation {
73        T::get_validation_rules()
74    }
75}