ipzone 0.4.0

Ipzone provides a simple and powerful IP architecture to Rust.
Documentation
#![cfg(not(doctest))]
#![doc = include_str!("../README.md")]

#[macro_use]
mod global;
mod address;

pub mod ip;
pub mod port;

pub mod prelude {
    pub use super::{ip, port};

    pub use super::{address::*, cmn::FromEnvError, global::*};

    pub use std::net::IpAddr as Ip;
    pub use std::net::Ipv4Addr as Ipv4;
    pub use std::net::Ipv6Addr as Ipv6;
    pub use std::net::SocketAddr;
    pub use std::net::ToSocketAddrs;
}

// -----------
//
mod cmn;
use cmn::*;

use port::*;
use prelude::*;

#[cfg(test)]
mod tests {
    use super::*;

    use std::net::{Ipv6Addr, SocketAddr};

    #[test]
    fn it_works() {
        std::env::set_var("IP", "::ffff:192.1.56.10");
        std::env::set_var("PORT", "8080");

        let address = ip::from_env("IP").unwrap().with([
            80,
            port::from_str("123").unwrap(),
            port::from_env("PORT").unwrap(),
        ]);

        assert_eq!(
            address.to_socket_addrs().unwrap().collect::<Vec<_>>(),
            vec![
                SocketAddr::new(
                    Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc001, 0x380a).into(),
                    80
                ),
                SocketAddr::new(
                    Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc001, 0x380a).into(),
                    123
                ),
                SocketAddr::new(
                    Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc001, 0x380a).into(),
                    8080
                ),
            ]
        );
    }
}