Skip to content

Commit 6cfee2c

Browse files
committed
Implement Serialize and Deserialize from serde in Pattern
1 parent 952da29 commit 6cfee2c

File tree

3 files changed

+35
-0
lines changed

3 files changed

+35
-0
lines changed

Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,13 @@ Support for matching file paths against Unix shell style patterns.
1212
categories = ["filesystem"]
1313
rust-version = "1.63.0"
1414

15+
[dependencies]
16+
serde = { version = "1.0", optional = true, default-features = false, features = ["std"] }
17+
1518
[dev-dependencies]
1619
# FIXME: This should be replaced by `tempfile`
1720
tempdir = "0.3"
1821
doc-comment = "0.3"
22+
23+
[features]
24+
serde = ["dep:serde"]

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,7 @@ for entry in glob("/media/**/*.jpg").expect("Failed to read glob pattern") {
3636
}
3737
}
3838
```
39+
40+
### `serde` Support
41+
42+
The `Pattern` type implements `Serialize` and `Deserialize` from the `serde` crate when the `serde` feature is enabled. This allows `Pattern` instances to be easily serialized to and deserialized from various formats, such as JSON.

src/lib.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@
5454
//! }
5555
//! }
5656
//! ```
57+
//!
58+
//! # `serde` Support
59+
//!
60+
//! The `Pattern` type implements `Serialize` and `Deserialize` from the `serde` crate when the `serde` feature is enabled. This allows `Pattern` instances to be easily serialized to and deserialized from various formats, such as JSON.
5761
5862
#![doc(
5963
html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
@@ -573,6 +577,27 @@ impl FromStr for Pattern {
573577
}
574578
}
575579

580+
#[cfg(feature = "serde")]
581+
impl serde::ser::Serialize for Pattern {
582+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
583+
where
584+
S: serde::ser::Serializer,
585+
{
586+
serializer.serialize_str(&self.original)
587+
}
588+
}
589+
590+
#[cfg(feature = "serde")]
591+
impl<'de> serde::de::Deserialize<'de> for Pattern {
592+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
593+
where
594+
D: serde::de::Deserializer<'de>,
595+
{
596+
let s = String::deserialize(deserializer)?;
597+
Self::new(&s).map_err(serde::de::Error::custom)
598+
}
599+
}
600+
576601
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
577602
enum PatternToken {
578603
Char(char),

0 commit comments

Comments
 (0)