xref: /aosp_15_r20/external/cronet/third_party/rust/chromium_crates_io/vendor/semver-1.0.22/src/serde.rs (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 use crate::{Comparator, Version, VersionReq};
2 use core::fmt;
3 use serde::de::{Deserialize, Deserializer, Error, Visitor};
4 use serde::ser::{Serialize, Serializer};
5 
6 impl Serialize for Version {
serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer,7     fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
8     where
9         S: Serializer,
10     {
11         serializer.collect_str(self)
12     }
13 }
14 
15 impl Serialize for VersionReq {
serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer,16     fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
17     where
18         S: Serializer,
19     {
20         serializer.collect_str(self)
21     }
22 }
23 
24 impl Serialize for Comparator {
serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer,25     fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
26     where
27         S: Serializer,
28     {
29         serializer.collect_str(self)
30     }
31 }
32 
33 impl<'de> Deserialize<'de> for Version {
deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de>,34     fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
35     where
36         D: Deserializer<'de>,
37     {
38         struct VersionVisitor;
39 
40         impl<'de> Visitor<'de> for VersionVisitor {
41             type Value = Version;
42 
43             fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
44                 formatter.write_str("semver version")
45             }
46 
47             fn visit_str<E>(self, string: &str) -> Result<Self::Value, E>
48             where
49                 E: Error,
50             {
51                 string.parse().map_err(Error::custom)
52             }
53         }
54 
55         deserializer.deserialize_str(VersionVisitor)
56     }
57 }
58 
59 impl<'de> Deserialize<'de> for VersionReq {
deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de>,60     fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
61     where
62         D: Deserializer<'de>,
63     {
64         struct VersionReqVisitor;
65 
66         impl<'de> Visitor<'de> for VersionReqVisitor {
67             type Value = VersionReq;
68 
69             fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
70                 formatter.write_str("semver version")
71             }
72 
73             fn visit_str<E>(self, string: &str) -> Result<Self::Value, E>
74             where
75                 E: Error,
76             {
77                 string.parse().map_err(Error::custom)
78             }
79         }
80 
81         deserializer.deserialize_str(VersionReqVisitor)
82     }
83 }
84 
85 impl<'de> Deserialize<'de> for Comparator {
deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de>,86     fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
87     where
88         D: Deserializer<'de>,
89     {
90         struct ComparatorVisitor;
91 
92         impl<'de> Visitor<'de> for ComparatorVisitor {
93             type Value = Comparator;
94 
95             fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
96                 formatter.write_str("semver comparator")
97             }
98 
99             fn visit_str<E>(self, string: &str) -> Result<Self::Value, E>
100             where
101                 E: Error,
102             {
103                 string.parse().map_err(Error::custom)
104             }
105         }
106 
107         deserializer.deserialize_str(ComparatorVisitor)
108     }
109 }
110