#string-literal #macro #literals #mac-address #networking #ip-address #ipv4

const-addrs

一套用于从字符串字面量创建网络类型的宏

2个版本

0.1.1 2024年2月18日
0.1.0 2024年2月18日

#421 in 过程宏

MIT许可证

15KB
208

const-addrs

一套用于从字符串字面量创建网络类型的宏。

每个宏都会使用相应类型的 FromStr 实现进行解析。如果存在,生成的代码将使用类型的 const 构造函数。

use std::net::Ipv4Addr;
use const_addrs::ip4;

let a = ip4!("192.168.1.1");
let b = Ipv4Addr::new(192,168,1,1);
assert_eq!(a, b);

并将无效的字符串转换为编译时错误

error: invalid IPv4 address syntax
  --> bad.rs:10:18
   |
10 |     let a = ip4!("192.1681.1");
   |                  ^^^^^^^^^^^^

提供了以下宏

类型
std::net::IpAddr ip!
std::net::Ipv4Addr ip4!
std::net::Ipv6Addr ip6!
std::net::SocketAddr sock!
std::net::SocketAddrV4 sock4!
std::net::SocketAddrV6 sock6!
ipnetwork::IpNetwork net!
ipnetwork::Ipv4Network net4!
ipnetwork::Ipv6Network net6!
macaddr::MacAddr mac!
macaddr::MacAddr6 mac6!
macaddr::MacAddr8 mac8!

注意:使用 ipnetwork::* 类型需要您在依赖项中包含 ipnetwork crate。这些类型可以通过 ipnet 功能启用(默认)。

注意:使用 macaddr::* 需要在依赖项中包含 macaddr crate。这些类型可以通过 mac 功能启用。

在可能的情况下,展开的宏使用 const 构造函数,允许以简单字符串表示网络类型,而无需运行时解析的开销。

依赖项

~0.3–0.9MB
~20K SLoC