From: Ben Pfaff Date: Mon, 6 Oct 2025 16:26:11 +0000 (-0700) Subject: rust: Add serde support to paper-sizes. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b56495d0833ce93b2c4c2576bff3f00b2cce43d6;p=pspp rust: Add serde support to paper-sizes. --- diff --git a/rust/Cargo.lock b/rust/Cargo.lock index f67759c596..c27356daed 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -1575,6 +1575,8 @@ version = "0.1.0" dependencies = [ "bindgen", "libc", + "serde", + "serde_json", "xdg", ] @@ -1953,18 +1955,28 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -1973,14 +1985,15 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.141" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] diff --git a/rust/paper-sizes/Cargo.toml b/rust/paper-sizes/Cargo.toml index 88c8d94f69..11e4e7a17d 100644 --- a/rust/paper-sizes/Cargo.toml +++ b/rust/paper-sizes/Cargo.toml @@ -8,9 +8,13 @@ description = "Detects paper sizes and defaults" [dependencies] xdg = "3.0.0" +serde = { version = "1.0", optional = true } [target.'cfg(target_os = "linux")'.dependencies] libc = "0.2.176" [build-dependencies] bindgen = "0.72.1" + +[dev-dependencies] +serde_json = "1.0.145" diff --git a/rust/paper-sizes/src/lib.rs b/rust/paper-sizes/src/lib.rs index f795356e04..3303ee1033 100644 --- a/rust/paper-sizes/src/lib.rs +++ b/rust/paper-sizes/src/lib.rs @@ -240,6 +240,29 @@ impl Display for PaperSize { } } +#[cfg(feature = "serde")] +impl serde::Serialize for PaperSize { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + self.to_string().serialize(serializer) + } +} + +#[cfg(feature = "serde")] +impl<'de> serde::Deserialize<'de> for PaperSize { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + use serde::de::Error; + String::deserialize(deserializer)? + .parse() + .map_err(D::Error::custom) + } +} + /// An error parsing a [PaperSpec]. #[derive(Copy, Clone, Debug, PartialEq, Eq)] pub enum ParsePaperSpecError { @@ -1005,4 +1028,17 @@ mod tests { ); } } + + #[cfg(feature = "serde")] + #[test] + fn test_serde() { + assert_eq!( + serde_json::to_string(&PaperSize::new(8.5, 11.0, Unit::Inch)).unwrap(), + "\"8.5x11in\"" + ); + assert_eq!( + serde_json::from_str::("\"8.5x11in\"").unwrap(), + PaperSize::new(8.5, 11.0, Unit::Inch) + ) + } }