1 use crate::{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<'de> Deserialize<'de> for Version { deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de>,25 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> 26 where 27 D: Deserializer<'de>, 28 { 29 struct VersionVisitor; 30 31 impl<'de> Visitor<'de> for VersionVisitor { 32 type Value = Version; 33 34 fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { 35 formatter.write_str("semver version") 36 } 37 38 fn visit_str<E>(self, string: &str) -> Result<Self::Value, E> 39 where 40 E: Error, 41 { 42 string.parse().map_err(Error::custom) 43 } 44 } 45 46 deserializer.deserialize_str(VersionVisitor) 47 } 48 } 49 50 impl<'de> Deserialize<'de> for VersionReq { deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de>,51 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> 52 where 53 D: Deserializer<'de>, 54 { 55 struct VersionReqVisitor; 56 57 impl<'de> Visitor<'de> for VersionReqVisitor { 58 type Value = VersionReq; 59 60 fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { 61 formatter.write_str("semver version") 62 } 63 64 fn visit_str<E>(self, string: &str) -> Result<Self::Value, E> 65 where 66 E: Error, 67 { 68 string.parse().map_err(Error::custom) 69 } 70 } 71 72 deserializer.deserialize_str(VersionReqVisitor) 73 } 74 } 75