dnp3 1.6.0

Rust implementation of DNP3 (IEEE 1815) with idiomatic bindings for C, C++, .NET, and Java
Documentation
use crate::transport::real::constants::{FIN_MASK, FIR_MASK};
use crate::transport::real::sequence::Sequence;

#[derive(Copy, Clone)]
pub(crate) struct Header {
    pub(crate) fin: bool,
    pub(crate) fir: bool,
    pub(crate) seq: Sequence,
}

impl Header {
    pub(crate) fn new(fin: bool, fir: bool, seq: Sequence) -> Self {
        Header { fin, fir, seq }
    }

    pub(crate) fn from_u8(value: u8) -> Self {
        Self {
            fin: value & FIN_MASK != 0,
            fir: value & FIR_MASK != 0,
            seq: Sequence::new(value),
        }
    }
    pub(crate) fn to_u8(self) -> u8 {
        let mut acc: u8 = 0;

        if self.fin {
            acc |= FIN_MASK;
        }
        if self.fir {
            acc |= FIR_MASK;
        }

        acc | self.seq.value()
    }
}