我正在尝试使用库来做到这一点etherparse
:
match deserialized_packet.payload_ether_type() {
Some(payload_type) => match payload_type {
EtherType::Arp as u16 => {
},
_ => continue
},
None => continue,
}
但 Rust 似乎不太喜欢这样,因为我收到了这个错误:'!', '(', ')', ',', '::', '{' or '|' expected, got 'as'
。如何在比赛声明中将 Arp 投射到 u16?
顺便说一句,它可以使用ether_type::Arp
,因为它被定义为常量而不是枚举中的值,但文档说 EtherType 枚举可以转换为 u16,我认为使用枚举而不是常量看起来更干净。
火柴臂是图案,而不是表达。
as
不能以这种方式在模式中使用。不要将
EtherType
变体强制转换为u16
,而是使用EtherType::from_u16()
将 转换u16
为EtherType
。请注意,此函数返回一个,Option
因为如果值超出范围,转换可能会失败;该Option::and_then()
实用程序在这里很有用:您可以将该值存储在常量中,因为常量可以匹配:
在 nightly 上,您可以使用内联 const: