Skip to content

Commit ed350e1

Browse files
Remove ipnetwork from the public API
1 parent 2134037 commit ed350e1

File tree

3 files changed

+32
-10
lines changed

3 files changed

+32
-10
lines changed

src/lib.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,6 @@ use std::{
6868
slice,
6969
};
7070

71-
pub use ipnetwork;
72-
7371
mod ffi;
7472

7573
#[macro_use]

src/rule/ip.rs

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ use crate::{
1212
pooladdr::{PoolAddr, PoolAddrList},
1313
AddrFamily, Result,
1414
};
15-
use ipnetwork::{IpNetwork, Ipv4Network, Ipv6Network};
1615
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
1716

1817
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash)]
@@ -26,14 +25,19 @@ impl Ip {
2625
pub fn get_af(&self) -> AddrFamily {
2726
match *self {
2827
Ip::Any => AddrFamily::Any,
29-
Ip::Net(IpNetwork::V4(_)) => AddrFamily::Ipv4,
30-
Ip::Net(IpNetwork::V6(_)) => AddrFamily::Ipv6,
28+
Ip::Net(network) => match network.0 {
29+
ipnetwork::IpNetwork::V4(_) => AddrFamily::Ipv4,
30+
ipnetwork::IpNetwork::V6(_) => AddrFamily::Ipv6,
31+
},
3132
}
3233
}
3334

3435
/// Returns `Ip::Any` represented an as an `IpNetwork`, used for ffi.
35-
fn any_ffi_repr() -> IpNetwork {
36-
IpNetwork::V6(Ipv6Network::new(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0), 0).unwrap())
36+
const fn any_ffi_repr() -> IpNetwork {
37+
let any = ipnetwork::IpNetwork::V6(
38+
ipnetwork::Ipv6Network::new_checked(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0), 0).unwrap(),
39+
);
40+
IpNetwork(any)
3741
}
3842

3943
/// Returns PoolAddrList initialized with receiver
@@ -42,6 +46,25 @@ impl Ip {
4246
}
4347
}
4448

49+
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
50+
pub struct IpNetwork(ipnetwork::IpNetwork);
51+
52+
impl IpNetwork {
53+
pub fn new(ip: IpAddr, prefix: u8) -> IpNetwork {
54+
// TODO: Do not unwrap
55+
let network = ipnetwork::IpNetwork::new(ip, prefix).unwrap();
56+
IpNetwork(network)
57+
}
58+
59+
pub fn ip(&self) -> IpAddr {
60+
self.0.ip()
61+
}
62+
63+
pub fn mask(&self) -> IpAddr {
64+
self.0.mask()
65+
}
66+
}
67+
4568
impl From<IpNetwork> for Ip {
4669
fn from(net: IpNetwork) -> Self {
4770
Ip::Net(net)
@@ -50,13 +73,15 @@ impl From<IpNetwork> for Ip {
5073

5174
impl From<Ipv4Addr> for Ip {
5275
fn from(ip: Ipv4Addr) -> Self {
53-
Ip::Net(IpNetwork::V4(Ipv4Network::new(ip, 32).unwrap()))
76+
let network = ipnetwork::IpNetwork::V4(ipnetwork::Ipv4Network::new(ip, 32).unwrap());
77+
Ip::Net(IpNetwork(network))
5478
}
5579
}
5680

5781
impl From<Ipv6Addr> for Ip {
5882
fn from(ip: Ipv6Addr) -> Self {
59-
Ip::Net(IpNetwork::V6(Ipv6Network::new(ip, 128).unwrap()))
83+
let network = ipnetwork::IpNetwork::V6(ipnetwork::Ipv6Network::new(ip, 128).unwrap());
84+
Ip::Net(IpNetwork(network))
6085
}
6186
}
6287

src/rule/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ use crate::{
1010
conversion::{CopyTo, TryCopyTo},
1111
ffi, Error, ErrorInternal, Result,
1212
};
13-
use ipnetwork::IpNetwork;
1413
use std::{
1514
net::{IpAddr, Ipv4Addr, Ipv6Addr},
1615
ops::Deref,

0 commit comments

Comments
 (0)