From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- third_party/rust/unic-langid-impl/src/serde.rs | 60 ++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 third_party/rust/unic-langid-impl/src/serde.rs (limited to 'third_party/rust/unic-langid-impl/src/serde.rs') diff --git a/third_party/rust/unic-langid-impl/src/serde.rs b/third_party/rust/unic-langid-impl/src/serde.rs new file mode 100644 index 0000000000..faac0b0288 --- /dev/null +++ b/third_party/rust/unic-langid-impl/src/serde.rs @@ -0,0 +1,60 @@ +use crate::LanguageIdentifier; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; + +impl Serialize for LanguageIdentifier { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + serializer.serialize_str(&self.to_string()) + } +} + +impl<'de> Deserialize<'de> for LanguageIdentifier { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + struct LanguageIdentifierVisitor; + + impl<'de> serde::de::Visitor<'de> for LanguageIdentifierVisitor { + type Value = LanguageIdentifier; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "A valid Unicode Language Identifier") + } + + fn visit_str(self, s: &str) -> Result + where + E: serde::de::Error, + { + s.parse::() + .map_err(serde::de::Error::custom) + } + } + + deserializer.deserialize_string(LanguageIdentifierVisitor) + } +} + +#[test] +fn serialize() -> Result<(), Box> { + let fr = serde_json::json!("fr".parse::()?); + let en = serde_json::json!("en-US".parse::()?); + + assert_eq!(serde_json::to_string(&fr)?, r#""fr""#); + assert_eq!(serde_json::to_string(&en)?, r#""en-US""#); + + Ok(()) +} + +#[test] +fn deserialize() -> Result<(), Box> { + let fr = serde_json::from_str::(r#""fr""#)?; + let en = serde_json::from_str::(r#""en-US""#)?; + + assert_eq!(fr, "fr".parse::()?); + assert_eq!(en, "en-US".parse::()?); + + Ok(()) +} -- cgit v1.2.3