From cd940a0df5b83f1ab9ce34a9e9ed77f68da3303d Mon Sep 17 00:00:00 2001 From: Stanislav Ravas Date: Wed, 11 Oct 2023 18:03:42 +0200 Subject: [PATCH] Add ser_as_str feature to serialize using serialize_str() Serializer may not support collect_str, as is the case with serde_json_core crate. --- Cargo.toml | 2 ++ src/ipnet_serde.rs | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 86df0c2..b646957 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,10 +16,12 @@ default = ["std"] std = [] # Implements "schemars::JsonSchema". Also implies "serde". json = ["serde", "schemars"] +ser_as_str = ["heapless"] [dependencies] serde = { package = "serde", version = "1", features = ["derive"], optional = true, default-features=false } schemars = { version = "0.8", optional = true } +heapless = { version = "*", optional = true } [dev-dependencies] serde_test = "1" diff --git a/src/ipnet_serde.rs b/src/ipnet_serde.rs index ea32035..cda12e3 100644 --- a/src/ipnet_serde.rs +++ b/src/ipnet_serde.rs @@ -84,6 +84,13 @@ impl Serialize for Ipv4Net { where S: Serializer { if serializer.is_human_readable() { + #[cfg(feature = "ser_as_str")] + { + let mut buf = heapless::String::<18>::new(); + fmt::write(&mut buf, format_args!("{self}")).unwrap(); + serializer.serialize_str(&buf) + } + #[cfg(not(feature = "ser_as_str"))] serializer.collect_str(self) } else { let mut seq = serializer.serialize_tuple(5)?; @@ -130,6 +137,13 @@ impl Serialize for Ipv6Net { where S: Serializer { if serializer.is_human_readable() { + #[cfg(feature = "ser_as_str")] + { + let mut buf = heapless::String::<43>::new(); + fmt::write(&mut buf, format_args!("{self}")).unwrap(); + serializer.serialize_str(&buf) + } + #[cfg(not(feature = "ser_as_str"))] serializer.collect_str(self) } else { let mut seq = serializer.serialize_tuple(17)?;