use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr}; use ipzone::prelude::*; fn main() { std::env::set_var("PORT", "8080"); let localhost = ip::localhost().with([ // 1234, port::from_env("PORT").unwrap(), port::from_env("PORT2").unwrap_or(5050), ]); assert_eq!( localhost.to_socket_addrs().unwrap().collect::>(), vec![ SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 1234), SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080), SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 5050), ] ); let ip = ip::from([186, 23, 123, 1]).with([ // 80, port::from_str("123").unwrap(), port::from_env("PORT").unwrap(), ]); assert_eq!( ip.to_socket_addrs().unwrap().collect::>(), vec![ SocketAddr::new(Ipv4Addr::new(186, 23, 123, 1).into(), 80), SocketAddr::new(Ipv4Addr::new(186, 23, 123, 1).into(), 123), SocketAddr::new(Ipv4Addr::new(186, 23, 123, 1).into(), 8080), ] ); let ip2 = ip::from_str("::ffff:aabb:ccdd").unwrap().with([80, 443]); assert_eq!( ip2.to_socket_addrs().unwrap().collect::>(), vec![ SocketAddr::new( Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xaabb, 0xccdd).into(), 80 ), SocketAddr::new( Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xaabb, 0xccdd).into(), 443 ), ] ); std::env::set_var("IP", "168.32.12.1"); let ip3 = ip::from_env("IP").unwrap().with([80, 443]); assert_eq!( ip3.to_socket_addrs().unwrap().collect::>(), vec![ SocketAddr::new(Ipv4Addr::new(168, 32, 12, 1).into(), 80), SocketAddr::new(Ipv4Addr::new(168, 32, 12, 1).into(), 443), ] ); }