valor_config/dependency/
der.rs

1use super::*;
2
3impl Default for DependencyResolver {
4    fn default() -> Self {
5        Self { items: Default::default() }
6    }
7}
8
9impl Default for DependencyItem {
10    fn default() -> Self {
11        Self {
12            name: PackageName::default(),
13            version: VersionReq::default(),
14            kind: DependencyKind::Normal,
15            path: "".to_string(),
16            git: "".to_string(),
17            branch: "".to_string(),
18            tag: "".to_string(),
19            registry: "".to_string(),
20        }
21    }
22}
23
24impl Default for DependencyKind {
25    fn default() -> Self {
26        Self::Normal
27    }
28}
29
30bind_writer!(DependencyResolverWriter, DependencyResolver);
31
32impl<'i, 'de> Visitor<'de> for DependencyResolverWriter<'i> {
33    type Value = ();
34
35    fn expecting(&self, formatter: &mut Formatter) -> std::fmt::Result {
36        formatter.write_str("expecting a dependency resolver")
37    }
38
39    fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error>
40    where
41        A: MapAccess<'de>,
42    {
43        while let Some((key, mut item)) = map.next_entry::<String, DependencyItem>()? {
44            match PackageName::from_str(&key) {
45                Ok(o) => {
46                    item.name = o;
47                    self.ptr.register(item);
48                }
49                Err(e) => Err(Error::custom(e))?,
50            }
51        }
52        Ok(())
53    }
54}
55
56bind_writer!(DependencyWriter, DependencyItem);
57
58impl<'i, 'de> Visitor<'de> for DependencyWriter<'i> {
59    type Value = ();
60
61    fn expecting(&self, formatter: &mut Formatter) -> std::fmt::Result {
62        formatter.write_str("expecting a dependency")
63    }
64
65    fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
66    where
67        E: Error,
68    {
69        match VersionReq::from_str(v) {
70            Ok(version) => {
71                self.ptr.version = version;
72            }
73            Err(s) => Err(E::custom(s.to_string()))?,
74        }
75        Ok(())
76    }
77
78    fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error>
79    where
80        A: MapAccess<'de>,
81    {
82        while let Some(key) = map.next_key::<String>()? {
83            match key.as_str() {
84                "name" => self.ptr.name = map.next_value()?,
85                "version" => {
86                    self.ptr.version = map.next_value()?;
87                }
88                "kind" => {
89                    self.ptr.kind = map.next_value()?;
90                }
91                "path" => {
92                    self.ptr.path = map.next_value()?;
93                }
94                "git" => {
95                    self.ptr.git = map.next_value()?;
96                }
97                "branch" => {
98                    self.ptr.branch = map.next_value()?;
99                }
100                "tag" => {
101                    self.ptr.tag = map.next_value()?;
102                }
103                "registry" => {
104                    self.ptr.registry = map.next_value()?;
105                }
106                _ => {
107                    return Err(A::Error::custom(format!("Unknown key: {}", key)));
108                }
109            }
110        }
111        Ok(())
112    }
113}