ipzone 0.4.0

Ipzone provides a simple and powerful IP architecture to Rust.
Documentation
use ipzone::prelude::*;
use std::env;

#[test]
fn ipv4_array() {
    let ip = ip::from([186, 23, 123, 1]).with([80, 443]);
    assert_eq!(
        ip.to_socket_addrs().unwrap().collect::<Vec<_>>(),
        vec![
            SocketAddr::new(Ipv4::new(186, 23, 123, 1).into(), 80),
            SocketAddr::new(Ipv4::new(186, 23, 123, 1).into(), 443),
        ]
    );
}

#[test]
fn ipv6_array() {
    let ip = ip::from([186, 23, 123, 1, 0, 0, 0, 0]).with([80, 443]);
    assert_eq!(
        ip.to_socket_addrs().unwrap().collect::<Vec<_>>(),
        vec![
            SocketAddr::new(Ipv6::new(186, 23, 123, 1, 0, 0, 0, 0).into(), 80),
            SocketAddr::new(Ipv6::new(186, 23, 123, 1, 0, 0, 0, 0).into(), 443),
        ]
    );
}

#[test]
fn ipv4_u32() {
    let ip = ip::from(0x0a000001u32.to_be_bytes()).with([80, 443]);
    assert_eq!(
        ip.to_socket_addrs().unwrap().collect::<Vec<_>>(),
        vec![
            SocketAddr::new(Ipv4::new(10, 0, 0, 1).into(), 80),
            SocketAddr::new(Ipv4::new(10, 0, 0, 1).into(), 443),
        ]
    );
}

#[test]
fn ipv6_u128() {
    let ip = ip::from(0x00000000000000000000ffffaabbccddu128.to_be_bytes()).with([80, 443]);
    assert_eq!(
        ip.to_socket_addrs().unwrap().collect::<Vec<_>>(),
        vec![
            SocketAddr::new(Ipv6::new(0, 0, 0, 0, 0, 0xffff, 0xaabb, 0xccdd).into(), 80),
            SocketAddr::new(Ipv6::new(0, 0, 0, 0, 0, 0xffff, 0xaabb, 0xccdd).into(), 443),
        ]
    );
}

#[test]
fn ipv4_str() {
    let ip = ip::from_str("164.23.1.2").unwrap().with([80, 443]);
    assert_eq!(
        ip.to_socket_addrs().unwrap().collect::<Vec<_>>(),
        vec![
            SocketAddr::new(Ipv4::new(164, 23, 1, 2).into(), 80),
            SocketAddr::new(Ipv4::new(164, 23, 1, 2).into(), 443),
        ]
    );
}

#[test]
fn ipv6_str() {
    let ip = ip::from_str("::ffff:aabb:ccdd").unwrap().with([80, 443]);
    assert_eq!(
        ip.to_socket_addrs().unwrap().collect::<Vec<_>>(),
        vec![
            SocketAddr::new(Ipv6::new(0, 0, 0, 0, 0, 0xffff, 0xaabb, 0xccdd).into(), 80),
            SocketAddr::new(Ipv6::new(0, 0, 0, 0, 0, 0xffff, 0xaabb, 0xccdd).into(), 443),
        ]
    );
}

#[test]
fn ipv4_env() {
    env::set_var("IP", "127.0.0.1");
    let ip = ip::from_env("IP").unwrap().with([80, 443]);
    assert_eq!(
        ip.to_socket_addrs().unwrap().collect::<Vec<_>>(),
        vec![
            SocketAddr::new(Ipv4::new(127, 0, 0, 1).into(), 80),
            SocketAddr::new(Ipv4::new(127, 0, 0, 1).into(), 443),
        ]
    );
}

#[test]
fn ipv6_env() {
    env::set_var("IP", "::ffff:aabb:ccdd");
    let ip = ip::from_env("IP").unwrap().with([80, 443]);
    assert_eq!(
        ip.to_socket_addrs().unwrap().collect::<Vec<_>>(),
        vec![
            SocketAddr::new(Ipv6::new(0, 0, 0, 0, 0, 0xffff, 0xaabb, 0xccdd).into(), 80),
            SocketAddr::new(Ipv6::new(0, 0, 0, 0, 0, 0xffff, 0xaabb, 0xccdd).into(), 443),
        ]
    );
}