dnp3 1.6.0

Rust implementation of DNP3 (IEEE 1815) with idiomatic bindings for C, C++, .NET, and Java
Documentation
use crate::decode::TransportDecodeLevel;
use crate::transport::real::header::Header;

pub(crate) struct SegmentDisplay<'a> {
    pub(crate) header: Header,
    pub(crate) payload: &'a [u8],
    level: TransportDecodeLevel,
}

impl<'a> SegmentDisplay<'a> {
    pub(crate) fn new(header: Header, payload: &'a [u8], level: TransportDecodeLevel) -> Self {
        Self {
            header,
            payload,
            level,
        }
    }
}

impl<'a> std::fmt::Display for SegmentDisplay<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        if self.level.header_enabled() {
            write!(
                f,
                "FIN: {} FIR: {} SEQ: {} length: {}",
                self.header.fin,
                self.header.fir,
                self.header.seq.value(),
                self.payload.len()
            )?;
        }
        if self.level.payload_enabled() {
            crate::util::decode::format_bytes(f, self.payload)?;
        }
        Ok(())
    }
}