Improve docs for impl Display for CanonicalJsonValue

and extract the doctest into a regular test.
This commit is contained in:
Jonas Platte 2020-10-19 17:56:30 +02:00
parent f85d98f557
commit 16dd20d64e
No known key found for this signature in database
GPG Key ID: CC154DE0E30B7C67

View File

@ -103,19 +103,14 @@ impl fmt::Debug for CanonicalJsonValue {
}
impl fmt::Display for CanonicalJsonValue {
/// Display a JSON value as a string.
/// Display this value as a string.
///
/// ```
/// # use serde_json::json;
/// #
/// let json = json!({ "city": "London", "street": "10 Downing Street" });
/// This `Display` implementation is intentionally unaffected by any formatting parameters,
/// because adding extra whitespace or otherwise pretty-printing it would make it not the
/// canonical form anymore.
///
/// // Canonical format:
/// //
/// // {"city":"London","street":"10 Downing Street"}
/// let compact = format!("{}", json);
/// assert_eq!(compact,
/// "{\"city\":\"London\",\"street\":\"10 Downing Street\"}");
/// If you want to pretty-print a `CanonicalJsonValue` for debugging purposes, use
/// one of `serde_json::{to_string_pretty, to_vec_pretty, to_writer_pretty}`.
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", to_json_string(&self).map_err(|_| fmt::Error)?)
}
@ -179,3 +174,23 @@ impl<'de> Deserialize<'de> for CanonicalJsonValue {
Ok(val.try_into().map_err(serde::de::Error::custom)?)
}
}
#[cfg(test)]
mod tests {
use std::convert::TryInto;
use serde_json::json;
use super::CanonicalJsonValue;
#[test]
fn to_string() {
const CANONICAL_STR: &str = r#"{"city":"London","street":"10 Downing Street"}"#;
let json: CanonicalJsonValue =
json!({ "city": "London", "street": "10 Downing Street" }).try_into().unwrap();
assert_eq!(format!("{}", json), CANONICAL_STR);
assert_eq!(format!("{:#}", json), CANONICAL_STR);
}
}