diff --git a/Cargo.lock b/Cargo.lock index af6ffdd..d634e68 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -477,6 +477,8 @@ dependencies = [ "criterion", "rand", "serde", + "serde_derive", + "serde_json", "test-case", "thiserror", ] diff --git a/Cargo.toml b/Cargo.toml index 28d2830..ec939ed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,6 +27,8 @@ test-case = "3.3.1" criterion = { version = "0.8", features = ["html_reports"] } rand = "0.10.0" base32 = "0.5.1" +serde_derive = "1.0.228" +serde_json = "1.0.149" [profile.bench] opt-level = 2 diff --git a/src/serde.rs b/src/serde.rs index 3cb8fd5..50ea65f 100644 --- a/src/serde.rs +++ b/src/serde.rs @@ -41,3 +41,50 @@ impl Serialize for Did { serializer.serialize_str(&self.to_string()) } } + +#[cfg(test)] +mod tests { + use serde_derive::{Deserialize, Serialize}; + use serde_json::{self, json}; + + use super::*; + + #[derive(Debug, Serialize, Deserialize)] + struct Container { + did: Did, + } + + #[test] + fn deser_ok() { + let json = json!({ + "did": "did:plc:c6te24qg5hx54qgegqylpqkx" + }); + + let c: Container = serde_json::from_value(json).unwrap(); + assert_eq!(c.did.to_string(), "did:plc:c6te24qg5hx54qgegqylpqkx") + } + + #[test] + fn deser_err() { + let json = json!({ + "did": "did:plc:invalid" + }); + + serde_json::from_value::(json).unwrap_err(); + } + + #[test] + fn ser_ok() { + let c = Container { did: Did::from_str("did:plc:c6te24qg5hx54qgegqylpqkx").unwrap() }; + + let json = serde_json::to_string(&c).unwrap(); + + assert_eq!( + json, + json!({ + "did": "did:plc:c6te24qg5hx54qgegqylpqkx" + }) + .to_string() + ) + } +}