From c9e25e15fa0d0be3060bed2e38a86d5717d9c76b Mon Sep 17 00:00:00 2001 From: admwrd Date: Wed, 14 Mar 2018 04:32:45 -0700 Subject: [PATCH] Add Serde Feature for IpNetwork --- .travis.yml | 2 +- Cargo.toml | 3 +++ src/ipv4.rs | 1 + src/ipv6.rs | 1 + src/lib.rs | 7 +++++++ 5 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6a24e10..868d2c9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ env: matrix: include: - rust: nightly - env: FEATURES=ipv6-iterator,ipv6-methods + env: FEATURES=ipv6-iterator,ipv6-methods,with-serde script: - cargo build --features $FEATURES --verbose diff --git a/Cargo.toml b/Cargo.toml index f751662..2deac20 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,8 @@ categories = ["network-programming", "os"] [dependencies] clippy = {version = "0.0.104", optional = true} +serde = { version = ">=0.8.0, <2.0", optional = true } +serde_derive = { version = ">=0.8.0, <2.0", optional = true } [badges] travis-ci = { repository = "achanda/ipnetwork" } @@ -21,3 +23,4 @@ default = [] dev = ["clippy"] ipv6-iterator = [] ipv6-methods = [] +with-serde = ["serde", "serde_derive"] diff --git a/src/ipv4.rs b/src/ipv4.rs index 38bc6ae..76af8b4 100644 --- a/src/ipv4.rs +++ b/src/ipv4.rs @@ -7,6 +7,7 @@ use common::{cidr_parts, parse_addr, parse_prefix, IpNetworkError}; const IPV4_BITS: u8 = 32; /// Represents a network range where the IP addresses are of v4 +#[cfg_attr(feature = "with-serde", derive(Serialize, Deserialize))] #[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, PartialOrd, Ord)] pub struct Ipv4Network { addr: Ipv4Addr, diff --git a/src/ipv6.rs b/src/ipv6.rs index 5fe9ed1..850654f 100644 --- a/src/ipv6.rs +++ b/src/ipv6.rs @@ -9,6 +9,7 @@ const IPV6_BITS: u8 = 128; const IPV6_SEGMENT_BITS: u8 = 16; /// Represents a network range where the IP addresses are of v6 +#[cfg_attr(feature = "with-serde", derive(Serialize, Deserialize))] #[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, PartialOrd, Ord)] pub struct Ipv6Network { addr: Ipv6Addr, diff --git a/src/lib.rs b/src/lib.rs index 75f4588..d9fd09a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,6 +8,12 @@ #![crate_type = "lib"] #![doc(html_root_url = "https://docs.rs/ipnetwork/0.12.7")] +#[cfg(feature = "with-serde")] +extern crate serde; +#[cfg(feature = "with-serde")] +#[macro_use] +extern crate serde_derive; + use std::fmt; use std::net::IpAddr; @@ -23,6 +29,7 @@ pub use common::IpNetworkError; /// Represents a generic network range. This type can have two variants: /// the v4 and the v6 case. +#[cfg_attr(feature = "with-serde", derive(Serialize, Deserialize))] #[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, PartialOrd, Ord)] pub enum IpNetwork { V4(Ipv4Network),