xcell_types/string/
der.rs

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