gpt4 book ai didi

rust - 如何在不知 Prop 体IP版本的情况下创建 `IpAddr`?

转载 作者:行者123 更新时间:2023-11-29 08:12:32 24 4
gpt4 key购买 nike

我在玩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)

最佳答案

你的 friend 是FromStr来自标准库的特性。它抽象了可以从字符串创建的类型。如你所见Ipv4Addr , Ipv6AddrIpAddr所有人都实现了这一特征!所以你可以写:

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 来表示字符串是否有效。

关于rust - 如何在不知 Prop 体IP版本的情况下创建 `IpAddr`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42030345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com