flowparser-sflow 0.3.0

Parser for sFlow v5 datagrams
Documentation
use nom::IResult;
use nom::number::complete::be_u32;
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct QueueLength {
    pub queue_index: u32,
    pub segment_size: u32,
    pub queue_segments: u32,
    pub queue_length_0: u32,
    pub queue_length_1: u32,
    pub queue_length_2: u32,
    pub queue_length_4: u32,
    pub queue_length_8: u32,
    pub queue_length_32: u32,
    pub queue_length_128: u32,
    pub queue_length_1024: u32,
    pub queue_length_more: u32,
    pub dropped: u32,
}

pub(crate) fn parse_queue_length(input: &[u8]) -> IResult<&[u8], QueueLength> {
    let (input, queue_index) = be_u32(input)?;
    let (input, segment_size) = be_u32(input)?;
    let (input, queue_segments) = be_u32(input)?;
    let (input, queue_length_0) = be_u32(input)?;
    let (input, queue_length_1) = be_u32(input)?;
    let (input, queue_length_2) = be_u32(input)?;
    let (input, queue_length_4) = be_u32(input)?;
    let (input, queue_length_8) = be_u32(input)?;
    let (input, queue_length_32) = be_u32(input)?;
    let (input, queue_length_128) = be_u32(input)?;
    let (input, queue_length_1024) = be_u32(input)?;
    let (input, queue_length_more) = be_u32(input)?;
    let (input, dropped) = be_u32(input)?;

    Ok((
        input,
        QueueLength {
            queue_index,
            segment_size,
            queue_segments,
            queue_length_0,
            queue_length_1,
            queue_length_2,
            queue_length_4,
            queue_length_8,
            queue_length_32,
            queue_length_128,
            queue_length_1024,
            queue_length_more,
            dropped,
        },
    ))
}