dnp3/link/
display.rs

1use crate::decode::LinkDecodeLevel;
2use crate::link::header::Header;
3
4pub(crate) struct LinkDisplay<'a> {
5    header: Header,
6    payload: &'a [u8],
7    level: LinkDecodeLevel,
8}
9
10impl<'a> LinkDisplay<'a> {
11    pub(crate) fn new(header: Header, payload: &'a [u8], level: LinkDecodeLevel) -> Self {
12        LinkDisplay {
13            header,
14            payload,
15            level,
16        }
17    }
18}
19
20impl<'a> std::fmt::Display for LinkDisplay<'a> {
21    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
22        if self.level.header_enabled() {
23            write!(
24                f,
25                "{:?} source: {} destination: {} payload: {} bytes",
26                self.header.control,
27                self.header.source.value(),
28                self.header.destination.value(),
29                self.payload.len()
30            )?;
31        }
32        if self.level.payload_enabled() {
33            crate::util::decode::format_bytes(f, self.payload)?;
34        }
35        Ok(())
36    }
37}