Skip to main content

PacketVisitor

Trait PacketVisitor 

Source
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§

Source

fn visit_ethernet(&mut self, pkt: &EthernetPacket<'_>) -> Self::Output

Source

fn visit_arp(&mut self, pkt: &ArpPacket<'_>) -> Self::Output

Source

fn visit_ipv4(&mut self, pkt: &Ipv4Packet<'_>) -> Self::Output

Source

fn visit_ipv6(&mut self, pkt: &Ipv6Packet<'_>) -> Self::Output

Source

fn visit_tcp(&mut self, pkt: &TcpPacket<'_>) -> Self::Output

Source

fn visit_udp(&mut self, pkt: &UdpPacket<'_>) -> Self::Output

Source

fn visit_icmp(&mut self, pkt: &IcmpPacket<'_>) -> Self::Output

Source

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".

Implementors§