toasty_core/schema/app/constraint/
length.rs1use super::Constraint;
2
3use crate::{stmt, Result};
4
5#[derive(Debug, Clone)]
6pub struct ConstraintLength {
7 pub min: Option<u64>,
9
10 pub max: Option<u64>,
12}
13impl ConstraintLength {
14 pub(crate) fn check(&self, expr: &crate::stmt::Entry<'_>) -> Result<()> {
15 let Some(stmt::Value::String(value)) = expr.try_as_value() else {
16 return Ok(());
17 };
18
19 let value_len = value.len();
20 let min = self.min.map(|m| m as usize);
21 let max = self.max.map(|m| m as usize);
22
23 if let Some(min_val) = min {
25 if value_len < min_val {
26 return Err(crate::Error::validation_length(value_len, min, max));
27 }
28 }
29
30 if let Some(max_val) = max {
32 if value_len > max_val {
33 return Err(crate::Error::validation_length(value_len, min, max));
34 }
35 }
36
37 Ok(())
38 }
39}
40
41impl From<ConstraintLength> for Constraint {
42 fn from(length: ConstraintLength) -> Self {
43 Constraint::Length(length)
44 }
45}