diff options
Diffstat (limited to 'vendor/globset/src/serde_impl.rs')
-rw-r--r-- | vendor/globset/src/serde_impl.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/vendor/globset/src/serde_impl.rs b/vendor/globset/src/serde_impl.rs new file mode 100644 index 000000000..6affc5904 --- /dev/null +++ b/vendor/globset/src/serde_impl.rs @@ -0,0 +1,38 @@ +use serde::de::Error; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; + +use crate::Glob; + +impl Serialize for Glob { + fn serialize<S: Serializer>( + &self, + serializer: S, + ) -> Result<S::Ok, S::Error> { + serializer.serialize_str(self.glob()) + } +} + +impl<'de> Deserialize<'de> for Glob { + fn deserialize<D: Deserializer<'de>>( + deserializer: D, + ) -> Result<Self, D::Error> { + let glob = <&str as Deserialize>::deserialize(deserializer)?; + Glob::new(glob).map_err(D::Error::custom) + } +} + +#[cfg(test)] +mod tests { + use Glob; + + #[test] + fn glob_json_works() { + let test_glob = Glob::new("src/**/*.rs").unwrap(); + + let ser = serde_json::to_string(&test_glob).unwrap(); + assert_eq!(ser, "\"src/**/*.rs\""); + + let de: Glob = serde_json::from_str(&ser).unwrap(); + assert_eq!(test_glob, de); + } +} |