use crate::PrimitiveValues;
use alloc::vec::Vec;
use core::fmt;
use pnet_macros::packet;
use pnet_macros_support::types::u16be;
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct FlowControlOpcode(pub u16);
impl FlowControlOpcode {
pub fn new(value: u16) -> Self {
FlowControlOpcode(value)
}
}
impl PrimitiveValues for FlowControlOpcode {
type T = (u16,);
fn to_primitive_values(&self) -> (u16,) {
(self.0,)
}
}
impl fmt::Display for FlowControlOpcode {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f,
"{}",
match self {
&FlowControlOpcodes::Pause => "pause",
_ => "unknown",
})
}
}
#[allow(non_snake_case)]
#[allow(non_upper_case_globals)]
pub mod FlowControlOpcodes {
use super::FlowControlOpcode;
pub const Pause: FlowControlOpcode = FlowControlOpcode(1);
}
#[packet]
#[allow(non_snake_case)]
pub struct FlowControl {
#[construct_with(u16)]
pub command: FlowControlOpcode,
pub quanta: u16be,
#[payload]
pub payload: Vec<u8>,
}