xcell_types/string/
der.rs1use 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)) }),
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}