pub trait PacketVisitor {
type Output;
// Required methods
fn visit_ethernet(&mut self, pkt: &EthernetPacket<'_>) -> Self::Output;
fn visit_arp(&mut self, pkt: &ArpPacket<'_>) -> Self::Output;
fn visit_ipv4(&mut self, pkt: &Ipv4Packet<'_>) -> Self::Output;
fn visit_ipv6(&mut self, pkt: &Ipv6Packet<'_>) -> Self::Output;
fn visit_tcp(&mut self, pkt: &TcpPacket<'_>) -> Self::Output;
fn visit_udp(&mut self, pkt: &UdpPacket<'_>) -> Self::Output;
fn visit_icmp(&mut self, pkt: &IcmpPacket<'_>) -> Self::Output;
fn visit_icmpv6(&mut self, pkt: &Icmpv6Packet<'_>) -> Self::Output;
}Expand description
Visitor for type-safe dispatch across all Packet variants.
Implement this trait to add new operations over the packet hierarchy
without modifying the Packet enum itself (Open-Closed Principle).
Each visit_* method receives a reference to a concrete packet type.
Required Associated Types§
Required Methods§
fn visit_ethernet(&mut self, pkt: &EthernetPacket<'_>) -> Self::Output
fn visit_arp(&mut self, pkt: &ArpPacket<'_>) -> Self::Output
fn visit_ipv4(&mut self, pkt: &Ipv4Packet<'_>) -> Self::Output
fn visit_ipv6(&mut self, pkt: &Ipv6Packet<'_>) -> Self::Output
fn visit_tcp(&mut self, pkt: &TcpPacket<'_>) -> Self::Output
fn visit_udp(&mut self, pkt: &UdpPacket<'_>) -> Self::Output
fn visit_icmp(&mut self, pkt: &IcmpPacket<'_>) -> Self::Output
fn visit_icmpv6(&mut self, pkt: &Icmpv6Packet<'_>) -> Self::Output
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".