dnp3 1.6.0

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

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

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

impl<'a> std::fmt::Display for LinkDisplay<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        if self.level.header_enabled() {
            write!(
                f,
                "{:?} source: {} destination: {} payload: {} bytes",
                self.header.control,
                self.header.source.value(),
                self.header.destination.value(),
                self.payload.len()
            )?;
        }
        if self.level.payload_enabled() {
            crate::util::decode::format_bytes(f, self.payload)?;
        }
        Ok(())
    }
}