Estou tentando fazer isso usando a etherparse
biblioteca:
match deserialized_packet.payload_ether_type() {
Some(payload_type) => match payload_type {
EtherType::Arp as u16 => {
},
_ => continue
},
None => continue,
}
mas Rust não parece gostar muito disso, pois recebo este erro: '!', '(', ')', ',', '::', '{' or '|' expected, got 'as'
. Como posso lançar o Arp para um u16 na declaração de correspondência?
A propósito, funciona para usar ether_type::Arp
porque é definido como uma constante em vez de um valor em uma enumeração, mas a documentação diz que a enumeração EtherType pode ser convertida para um u16 e acho mais limpo usar a enumeração em vez de uma constante .
Braços de correspondência são padrões, não expressões.
as
não pode ser usado em padrões dessa maneira.Em vez de converter as
EtherType
variantes parau16
, useEtherType::from_u16()
para converteru16
paraEtherType
. Observe que esta função retorna umOption
porque a conversão pode falhar se o valor estiver fora do intervalo; oOption::and_then()
utilitário é útil aqui:Você pode armazenar o valor em uma constante, pois as constantes podem ser comparadas com:
No nightly, você pode usar const inline: