address 0.20.0-rc.3

Network address types with strict validation, owned & borrowed variants, and standard library conversions.
Documentation
use crate::{SocketAddress, SocketAddressV4, SocketAddressV6};
use std::fmt::{Debug, Display, Formatter};

impl Debug for SocketAddressV4 {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        Display::fmt(self, f)
    }
}

impl Display for SocketAddressV4 {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        Display::fmt(&self.to_std(), f)
    }
}

impl Debug for SocketAddressV6 {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        Display::fmt(self, f)
    }
}

impl Display for SocketAddressV6 {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        Display::fmt(&self.to_std(), f)
    }
}

impl Debug for SocketAddress {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        Display::fmt(self, f)
    }
}

impl Display for SocketAddress {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        Display::fmt(&self.to_std(), f)
    }
}

#[cfg(test)]
mod tests {
    use crate::{IPv4Address, IPv6Address, SocketAddress, SocketAddressV4, SocketAddressV6};

    #[test]
    fn v4() {
        let socket: SocketAddressV4 = IPv4Address::LOCALHOST.to_socket(80);
        let result: String = socket.to_string();
        let expected: &str = "127.0.0.1:80";
        assert_eq!(result, expected);
    }

    #[test]
    fn v6() {
        let socket: SocketAddressV6 = IPv6Address::LOCALHOST.to_socket(80);
        let result: String = socket.to_string();
        let expected: &str = "[::1]:80";
        assert_eq!(result, expected);
    }

    #[test]
    fn socket() {
        let socket: SocketAddress = IPv4Address::LOCALHOST.to_socket(80).to_socket();
        let result: String = socket.to_string();
        let expected: &str = "127.0.0.1:80";
        assert_eq!(result, expected);

        let socket: SocketAddress = IPv6Address::LOCALHOST.to_socket(80).to_socket();
        let result: String = socket.to_string();
        let expected: &str = "[::1]:80";
        assert_eq!(result, expected);
    }

    #[test]
    fn display_spec() {
        assert_eq!(
            format!("{:>15}", IPv4Address::LOCALHOST.to_socket(80)),
            "   127.0.0.1:80"
        );
        assert_eq!(
            format!("{:<15}|", IPv4Address::LOCALHOST.to_socket(80)),
            "127.0.0.1:80   |"
        );
        assert_eq!(format!("{:>11}", IPv6Address::LOCALHOST.to_socket(80)), "   [::1]:80");
        assert_eq!(
            format!("{:>15}", IPv4Address::LOCALHOST.to_socket(80).to_socket()),
            "   127.0.0.1:80"
        );
    }
}