toasty_core/schema/app/constraint/
length.rs1use super::Constraint;
2
3use crate::{Result, stmt};
4
5#[derive(Debug, Clone)]
20pub struct ConstraintLength {
21 pub min: Option<u64>,
23
24 pub max: Option<u64>,
26}
27impl ConstraintLength {
28 pub(crate) fn check(&self, expr: &crate::stmt::Entry<'_>) -> Result<()> {
29 let Some(stmt::Value::String(value)) = expr.as_value() else {
30 return Ok(());
31 };
32
33 let value_len = value.len();
34 let min = self.min.map(|m| m as usize);
35 let max = self.max.map(|m| m as usize);
36
37 if let Some(min_val) = min
39 && value_len < min_val
40 {
41 return Err(crate::Error::validation_length(value_len, min, max));
42 }
43
44 if let Some(max_val) = max
46 && value_len > max_val
47 {
48 return Err(crate::Error::validation_length(value_len, min, max));
49 }
50
51 Ok(())
52 }
53}
54
55impl From<ConstraintLength> for Constraint {
56 fn from(length: ConstraintLength) -> Self {
57 Constraint::Length(length)
58 }
59}