verify_string/verifier/
length.rs1use std::ops::RangeBounds;
2use derive_builder::Builder;
3use dyn_clone::DynClone;
4use crate::verifier::Verifier;
5
6#[derive(Debug, Clone, Builder)]
8pub struct LengthVerifier<T>
9where T: Iterator<Item=usize> + RangeBounds<usize> + DynClone + Clone + Send + Sync {
10 range: T
11}
12
13impl<T> LengthVerifier<T>
14where T: Iterator<Item=usize> + RangeBounds<usize> + DynClone + Clone + Send + Sync {
15 pub fn new(range: T) -> Self {
16 Self {
17 range
18 }
19 }
20}
21
22impl<T> Verifier for LengthVerifier<T>
23where T: Iterator<Item=usize> + RangeBounds<usize> + DynClone + Clone + Send + Sync {
24
25 fn verify(&self, name: &str) -> Result<(), anyhow::Error> {
26 let len = name.chars().count();
27
28 if self.range.contains(&len) {
29 Ok(())
30 } else {
31 Err(anyhow::anyhow!("Length is out of range: {}", len))
32 }
33 }
34}