1use std::collections::HashMap;
2
3#[cfg(feature = "core")]
4use serde::{Deserialize, Serialize};
5
6#[cfg(feature = "proc")]
7use procmeta::prelude::*;
8
9#[cfg_attr(feature = "core", derive(Debug, Serialize, Deserialize, Clone, PartialEq))]
10#[cfg_attr(feature = "proc", derive(GetTokenStream))]
11pub enum Value {
12 Null,
13
14 Bool(bool),
15
16 Number(Number),
17
18 String(String),
19
20 Array(Vec<Value>),
21
22 Object(HashMap<String, Value>),
23}
24
25#[cfg_attr(feature = "core", derive(Debug, Serialize, Deserialize, Clone, PartialEq))]
26#[cfg_attr(feature = "proc", derive(GetTokenStream))]
27pub enum Number {
28 PosInt(u64),
29 NegInt(i64),
30 Float(f64),
31}
32
33#[cfg_attr(feature = "core", derive(Debug, Serialize, Deserialize, Clone, PartialEq))]
34#[cfg_attr(feature = "proc", derive(GetTokenStream))]
35pub enum ConstraintType {
36 None,
38
39 Description(String),
41
42 SelfValidator,
44
45 Regex(String),
47
48 Value(Value),
50
51 Range(Number, Number),
53
54 Length(usize, usize),
56
57 Anyone(Vec<ConstraintType>),
59
60 Enumer(String),
62}
63
64#[cfg_attr(feature = "core", derive(Debug, Serialize, Deserialize, Clone, PartialEq))]
65#[cfg_attr(feature = "proc", derive(GetTokenStream))]
66pub struct LengthError {
67 pub min: usize,
68 pub max: usize,
69 pub len: usize,
70}
71
72#[cfg_attr(feature = "core", derive(Debug, Serialize, Deserialize, Clone, PartialEq))]
73#[cfg_attr(feature = "proc", derive(GetTokenStream))]
74pub struct RangeError {
75 pub min: String,
76 pub max: String,
77 pub value: String,
78}
79
80#[cfg_attr(feature = "core", derive(Debug, Serialize, Deserialize, Clone, PartialEq))]
81#[cfg_attr(feature = "proc", derive(GetTokenStream))]
82pub struct RegexError {
83 pub regex: String,
84 pub value: String,
85}
86
87#[cfg_attr(feature = "core", derive(Debug, Serialize, Deserialize, Clone, PartialEq))]
88#[cfg_attr(feature = "proc", derive(GetTokenStream))]
89pub struct EnumError;
90
91#[cfg_attr(feature = "core", derive(Debug, Serialize, Deserialize, Clone, PartialEq))]
92#[cfg_attr(feature = "proc", derive(GetTokenStream))]
93pub enum ErrorType {
94 Regex(RegexError),
95
96 Length(LengthError),
97
98 Range(RangeError),
99
100 Model(ModelValidatorError),
101
102 Enumer(EnumError),
103
104 Value,
105
106 Other,
107}
108
109#[cfg_attr(feature = "core", derive(Debug, Serialize, Deserialize, Clone, PartialEq))]
110#[cfg_attr(feature = "proc", derive(GetTokenStream))]
111pub struct ModelValidatorError {
112 pub error_ty: Box<ErrorType>,
113 pub error_message: Option<String>,
114 pub field_ident: Option<String>,
115 pub field_name: Option<String>,
116}
117
118impl From<LengthError> for ErrorType {
119 fn from(value: LengthError) -> Self {
120 Self::Length(value)
121 }
122}
123
124impl From<RangeError> for ErrorType {
125 fn from(value: RangeError) -> Self {
126 Self::Range(value)
127 }
128}
129
130impl From<ModelValidatorError> for ErrorType {
131 fn from(value: ModelValidatorError) -> Self {
132 Self::Model(value)
133 }
134}
135
136impl From<RegexError> for ErrorType {
137 fn from(value: RegexError) -> Self {
138 Self::Regex(value)
139 }
140}
141
142impl From<EnumError> for ErrorType {
143 fn from(value: EnumError) -> Self {
144 Self::Enumer(value)
145 }
146}