15 releases

0.4.1 Nov 12, 2021
0.4.0 Jul 12, 2021
0.3.4 May 3, 2019
0.3.3 Feb 25, 2019
0.1.1 Sep 27, 2017

#50 in Network programming

Download history 68962/week @ 2024-07-17 71546/week @ 2024-07-24 49977/week @ 2024-07-31 68807/week @ 2024-08-07 63413/week @ 2024-08-14 60546/week @ 2024-08-21 69607/week @ 2024-08-28 71020/week @ 2024-09-04 65856/week @ 2024-09-11 67847/week @ 2024-09-18 66068/week @ 2024-09-25 74568/week @ 2024-10-02 74474/week @ 2024-10-09 76055/week @ 2024-10-16 73438/week @ 2024-10-23 68423/week @ 2024-10-30

305,877 downloads per month
Used in 215 crates (25 directly)

BSD-2-Clause

150KB
2.5K SLoC

ip_network

IPv4 and IPv6 network structs.

Documentation Build Status Coverage Status Crates.io

Usage

Add this to your Cargo.toml:

[dependencies]
ip_network = "0.4"

this to your crate root (not necessary when your project is Rust 2018 edition):

extern crate ip_network;

and then you can use it like this:

use std::net::Ipv4Addr;
use ip_network::Ipv4Network;

let ip_network = Ipv4Network::new(Ipv4Addr::new(192, 168, 1, 0), 24)?;
assert_eq!(Ipv4Addr::new(192, 168, 1, 0), ip_network.network_address());
assert_eq!(24, ip_network.netmask());
assert_eq!(254, ip_network.hosts().len());
assert_eq!("192.168.1.0/24", ip_network.to_string());

Minimal required version of Rust compiler is:

  • 1.31 for version 0.3 and newer (because of 2018 edition),
  • 1.26 for version 0.2 (because of support u128 data type),
  • for older compiler you can use 0.1 version.

Optional features

When using this crate, you can choose to compile with these features:

Serde support

To enable serialization and deserialization by Serde framework, just add serde feature to package in your Cargo.toml:

[dependencies]
ip_network = { version = "0.4", features = ["serde"] }

Diesel support

To enable support for diesel CIDR type for PostgreSQL, just add diesel feature to package in your Cargo.toml:

[dependencies]
ip_network = { version = "0.4", features = ["diesel"] }

You can then use ip_network::diesel_support::PqCidrExtensionMethods trait for CIDR operators support.

Postgres support

To enable support for postgres crate CIDR type, just add postgres feature to package in your Cargo.toml:

[dependencies]
ip_network = { version = "0.4", features = ["postgres"] }

Comparison with ipnetwork crate

Similar functionality also provides ipnetwork crate. This table shows the differences between these two crates:

Feature ip_network ipnetwork
IPv4
IPv6
IPv4 and IPv6 enum
IPv4 network types
IPv6 network types
Hosts iterator
Subnetworks iterator
Check host bits set
Serde
Serde binary
Diesel CIDR
Diesel operators
Postgres CIDR
IPv4 string parsing 65 ns 379 ns
IPv6 string parsing 126 ns 434 ns
IPv4 contains method 7 ns 15 ns
IPv6 contains method 28 ns 49 ns

Dependencies

~0–8.5MB
~82K SLoC