xcell_types/boolean/
der.rs

1use super::*;
2
3use crate::default_deserialize;
4
5default_deserialize![BooleanDescription];
6impl Default for BooleanDescription {
7    fn default() -> Self {
8        Self {
9            accept: BTreeSet::from_iter(vec!["true".to_string()]),
10            reject: BTreeSet::from_iter(vec!["false".to_string()]),
11            default: false,
12        }
13    }
14}
15
16impl<'de> Visitor<'de> for BooleanDescription {
17    type Value = Self;
18
19    fn expecting(&self, formatter: &mut Formatter) -> std::fmt::Result {
20        formatter.write_str(type_name::<Self>())
21    }
22    fn visit_map<A>(mut self, mut map: A) -> Result<Self::Value, A::Error>
23    where
24        A: MapAccess<'de>,
25    {
26        while let Some(key) = map.next_key::<&str>()? {
27            match key {
28                "default" => read_map_next_value(&mut map, |e| self.default = e),
29                "accept" | "true" => {
30                    read_map_next_value(&mut map, |e: OneOrMany<String>| self.accept = BTreeSet::from_iter(e.unwrap()))
31                }
32                "reject" | "false" => {
33                    read_map_next_value(&mut map, |e: OneOrMany<String>| self.reject = BTreeSet::from_iter(e.unwrap()))
34                }
35                _ => read_map_next_extra(&mut map, type_name::<Self>(), key),
36            }
37        }
38        Ok(self)
39    }
40}