From fa5deed40ba0d5792e6e69609cd331c433026257 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20F=C3=A4rnstrand?= Date: Tue, 10 Dec 2019 09:13:44 +0100 Subject: [PATCH] Make the serde dependency optional --- Cargo.toml | 4 ++-- src/ipv4.rs | 13 +++++++------ src/ipv6.rs | 13 +++++++------ src/lib.rs | 14 ++++++++------ tests/test_json.rs | 2 ++ 5 files changed, 26 insertions(+), 20 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index c540730..e88a627 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ edition = "2018" [dependencies] clippy = {version = "0.0.302", optional = true} -serde = ">=0.8.0, <2.0" +serde = { version = ">=0.8.0, <2.0", optional = true } [dev-dependencies] serde_json = "1.0" @@ -23,7 +23,7 @@ criterion = "0.3.0" travis-ci = { repository = "achanda/ipnetwork" } [features] -default = [] +default = ["serde"] dev = ["clippy"] [[bench]] diff --git a/src/ipv4.rs b/src/ipv4.rs index 95e2a27..1d411bb 100644 --- a/src/ipv4.rs +++ b/src/ipv4.rs @@ -1,5 +1,4 @@ use crate::common::{cidr_parts, parse_prefix, IpNetworkError}; -use serde::{de, Deserialize, Deserializer, Serialize, Serializer}; use std::{fmt, net::Ipv4Addr, str::FromStr}; const IPV4_BITS: u8 = 32; @@ -11,20 +10,22 @@ pub struct Ipv4Network { prefix: u8, } -impl<'de> Deserialize<'de> for Ipv4Network { +#[cfg(feature = "serde")] +impl<'de> serde::Deserialize<'de> for Ipv4Network { fn deserialize(deserializer: D) -> Result where - D: Deserializer<'de>, + D: serde::Deserializer<'de>, { let s = ::deserialize(deserializer)?; - Ipv4Network::from_str(&s).map_err(de::Error::custom) + Ipv4Network::from_str(&s).map_err(serde::de::Error::custom) } } -impl Serialize for Ipv4Network { +#[cfg(feature = "serde")] +impl serde::Serialize for Ipv4Network { fn serialize(&self, serializer: S) -> Result where - S: Serializer, + S: serde::Serializer, { serializer.serialize_str(&self.to_string()) } diff --git a/src/ipv6.rs b/src/ipv6.rs index 0790f93..0996ab4 100644 --- a/src/ipv6.rs +++ b/src/ipv6.rs @@ -1,5 +1,4 @@ use crate::common::{cidr_parts, parse_prefix, IpNetworkError}; -use serde::{de, Deserialize, Deserializer, Serialize, Serializer}; use std::{cmp, fmt, net::Ipv6Addr, str::FromStr}; const IPV6_BITS: u8 = 128; @@ -12,20 +11,22 @@ pub struct Ipv6Network { prefix: u8, } -impl<'de> Deserialize<'de> for Ipv6Network { +#[cfg(feature = "serde")] +impl<'de> serde::Deserialize<'de> for Ipv6Network { fn deserialize(deserializer: D) -> Result where - D: Deserializer<'de>, + D: serde::Deserializer<'de>, { let s = ::deserialize(deserializer)?; - Ipv6Network::from_str(&s).map_err(de::Error::custom) + Ipv6Network::from_str(&s).map_err(serde::de::Error::custom) } } -impl Serialize for Ipv6Network { +#[cfg(feature = "serde")] +impl serde::Serialize for Ipv6Network { fn serialize(&self, serializer: S) -> Result where - S: Serializer, + S: serde::Serializer, { serializer.serialize_str(&self.to_string()) } diff --git a/src/lib.rs b/src/lib.rs index 24abf7a..0964177 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,7 +6,6 @@ #![crate_type = "lib"] #![doc(html_root_url = "https://docs.rs/ipnetwork/0.15.1")] -use serde::{de, Deserialize, Deserializer, Serialize, Serializer}; use std::{fmt, net::IpAddr, str::FromStr}; mod common; @@ -25,20 +24,22 @@ pub enum IpNetwork { V6(Ipv6Network), } -impl<'de> Deserialize<'de> for IpNetwork { +#[cfg(feature = "serde")] +impl<'de> serde::Deserialize<'de> for IpNetwork { fn deserialize(deserializer: D) -> Result where - D: Deserializer<'de>, + D: serde::Deserializer<'de>, { let s = ::deserialize(deserializer)?; - IpNetwork::from_str(&s).map_err(de::Error::custom) + IpNetwork::from_str(&s).map_err(serde::de::Error::custom) } } -impl Serialize for IpNetwork { +#[cfg(feature = "serde")] +impl serde::Serialize for IpNetwork { fn serialize(&self, serializer: S) -> Result where - S: Serializer, + S: serde::Serializer, { serializer.serialize_str(&self.to_string()) } @@ -318,6 +319,7 @@ pub fn ip_mask_to_prefix(mask: IpAddr) -> Result { #[cfg(test)] mod test { #[test] + #[cfg(feature = "serde")] fn deserialize_from_serde_json_value() { use super::*; let network = IpNetwork::from_str("0.0.0.0/0").unwrap(); diff --git a/tests/test_json.rs b/tests/test_json.rs index aaf511e..2ad039f 100644 --- a/tests/test_json.rs +++ b/tests/test_json.rs @@ -1,3 +1,5 @@ +#![cfg(feature = "serde")] + #[cfg(test)] mod tests { use ipnetwork::{IpNetwork, Ipv4Network, Ipv6Network};