#[derive(
Debug,
Clone,
Copy,
Default,
PartialEq,
Eq,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
)]
#[serde(rename_all = "snake_case")]
pub enum ValidationLevel {
#[default]
Error,
Warning,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct ValidationRuleConfig {
pub level: ValidationLevel,
pub message: Option<String>,
pub tags: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(untagged)]
pub enum ValidationNumber {
Finite(serde_json::Number),
Invalid(String),
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(transparent)]
pub struct ValidationValue(pub serde_json::Value);
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum ValidationRule {
NonEmpty,
Min(ValidationNumber),
Max(ValidationNumber),
MinLength(usize),
MaxLength(usize),
MinItems(usize),
MaxItems(usize),
MinProperties(usize),
MaxProperties(usize),
MultipleOf(ValidationNumber),
Pattern(String),
UniqueItems,
OneOf(Vec<ValidationValue>),
Hostname,
Url,
Email,
IpAddr,
SocketAddr,
AbsolutePath,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum ValidationCheck {
AtLeastOneOf { paths: Vec<String> },
ExactlyOneOf { paths: Vec<String> },
MutuallyExclusive { paths: Vec<String> },
RequiredWith { path: String, requires: Vec<String> },
RequiredIf {
path: String,
equals: ValidationValue,
requires: Vec<String>,
},
}