[#153] Add optional JSONSchema implementation for IpNetwork

Problem: No instance of `JSONSchema` is implemented for
`IpNetwork`.

Solution: Derive implementation via `schemars`. Add corresponding
feature to the crate.
This commit is contained in:
Aleksandr Pak
2022-05-31 23:37:44 +03:00
parent 372f9bdbb7
commit 86dbbd997a
4 changed files with 4 additions and 0 deletions

View File

@ -12,6 +12,7 @@ edition = "2021"
[dependencies]
serde = { version = "1", optional = true }
schemars = { version = "0.8.10", optional = true }
[dev-dependencies]
serde_json = "1.0"

View File

@ -5,6 +5,7 @@ const IPV4_BITS: u8 = 32;
/// Represents a network range where the IP addresses are of v4
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, PartialOrd, Ord)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Ipv4Network {
addr: Ipv4Addr,
prefix: u8,

View File

@ -6,6 +6,7 @@ const IPV6_SEGMENT_BITS: u8 = 16;
/// Represents a network range where the IP addresses are of v6
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, PartialOrd, Ord)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct Ipv6Network {
addr: Ipv6Addr,
prefix: u8,

View File

@ -23,6 +23,7 @@ pub use crate::ipv6::{ipv6_mask_to_prefix, Ipv6Network};
/// Represents a generic network range. This type can have two variants:
/// the v4 and the v6 case.
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, PartialOrd, Ord)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub enum IpNetwork {
V4(Ipv4Network),
V6(Ipv6Network),