From c2474bf6ee1a85f3084ad27df1ea740561d948e5 Mon Sep 17 00:00:00 2001 From: Markus Westerlind Date: Mon, 11 Sep 2017 17:18:35 +0200 Subject: [PATCH] Document that is_human_readable == false is a breaking change --- serde/src/de/mod.rs | 3 +++ serde/src/ser/impls.rs | 13 ++++++++++--- serde/src/ser/mod.rs | 3 +++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/serde/src/de/mod.rs b/serde/src/de/mod.rs index a590f4c6..71a707ef 100644 --- a/serde/src/de/mod.rs +++ b/serde/src/de/mod.rs @@ -1016,6 +1016,9 @@ pub trait Deserializer<'de>: Sized { /// /// Some formats are not intended to be human readable. For these formats /// a type being serialized may opt to serialize into a more compact form. + /// + /// NOTE: Implementing this method and returning `false` is considered a breaking + /// change as it may alter how any given type tries to deserialize itself. fn is_human_readable(&self) -> bool { true } } diff --git a/serde/src/ser/impls.rs b/serde/src/ser/impls.rs index 014a6c52..e513f98a 100644 --- a/serde/src/ser/impls.rs +++ b/serde/src/ser/impls.rs @@ -506,9 +506,16 @@ impl Serialize for net::IpAddr { where S: Serializer, { - match *self { - net::IpAddr::V4(ref a) => a.serialize(serializer), - net::IpAddr::V6(ref a) => a.serialize(serializer), + if serializer.is_human_readable() { + match *self { + net::IpAddr::V4(ref a) => a.serialize(serializer), + net::IpAddr::V6(ref a) => a.serialize(serializer), + } + } else { + match *self { + net::IpAddr::V4(ref a) => (0u8, a).serialize(serializer), + net::IpAddr::V6(ref a) => (1u8, a).serialize(serializer), + } } } } diff --git a/serde/src/ser/mod.rs b/serde/src/ser/mod.rs index fd7daf05..bbcceac7 100644 --- a/serde/src/ser/mod.rs +++ b/serde/src/ser/mod.rs @@ -1368,6 +1368,9 @@ pub trait Serializer: Sized { /// /// Some formats are not intended to be human readable. For these formats /// a type being serialized may opt to serialize into a more compact form. + /// + /// NOTE: Implementing this method and returning `false` is considered a breaking + /// change as it may alter how any given type tries to serialize itself. fn is_human_readable(&self) -> bool { true } }