From 24fd3f79f09896b3b250cbb5bb68c9981287c6f0 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Tue, 15 Mar 2022 10:03:28 +0100 Subject: [PATCH] common: Add a test for Raw::get_field --- crates/ruma-common/src/serde/raw.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/crates/ruma-common/src/serde/raw.rs b/crates/ruma-common/src/serde/raw.rs index 0cb4b45c..332a73bf 100644 --- a/crates/ruma-common/src/serde/raw.rs +++ b/crates/ruma-common/src/serde/raw.rs @@ -228,3 +228,32 @@ impl Serialize for Raw { self.json.serialize(serializer) } } + +#[cfg(test)] +mod tests { + use serde::Deserialize; + use serde_json::{from_str as from_json_str, value::RawValue as RawJsonValue}; + + use super::Raw; + + #[test] + fn get_field() -> serde_json::Result<()> { + #[derive(Debug, PartialEq, Deserialize)] + struct A<'a> { + #[serde(borrow)] + b: Vec<&'a str>, + } + + const OBJ: &str = r#"{ "a": { "b": [ "c"] }, "z": 5 }"#; + let raw: Raw<()> = from_json_str(OBJ)?; + + assert_eq!(raw.get_field::("z")?, Some(5)); + assert_eq!(raw.get_field::<&RawJsonValue>("a")?.unwrap().get(), r#"{ "b": [ "c"] }"#); + assert_eq!(raw.get_field::>("a")?, Some(A { b: vec!["c"] })); + + assert!(raw.get_field::("b")?.is_none()); + assert!(raw.get_field::("a").is_err()); + + Ok(()) + } +}