我在玩Iron
,并且遇到了这个问题。
fn main() {
let mut router = Router::new();
let address = "127.0.0.1"; // or maybe "::1/128"
let port = 3000;
let ip = std::net::IpAddr::new(address); // does not exist
Iron::new(router).http((ip, port)).unwrap();
}
该http()
方法采用实现的结构ToSocketAddrs
。(&str, u16)
实现此特征,但是我更喜欢在http()
调用该方法之前验证用户输入的有效性。
我看到(std::net::IpAddr, u16)
实现了此特征,但是我不知道如何构建IpAddr
“不可知论的”:也许用户写了一个IPv4地址,也许是一个IPv6。
有没有一种方法IpAddr
只能从字符串创建?我认为这是可能的,因为我可以给它一个(&str, u16)
。
您的朋友是FromStr
标准库中的特征。它抽象了可以从字符串创建的类型。正如你所看到的Ipv4Addr
,Ipv6Addr
并且IpAddr
都实现该特性!所以你可以写:
use std::str::FromStr;
let addr = IpAddr::from_str("127.0.0.1");
或者,通过使用str::parse()
方法,稍微更常见的方法:
let addr = "127.0.0.1".parse::<IpAddr>();
该from_str()
/parse()
方法返回一个Result
信号字符串是否是有效的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句