dnp3 1.6.0

Rust implementation of DNP3 (IEEE 1815) with idiomatic bindings for C, C++, .NET, and Java
Documentation
#[derive(Copy, Clone, PartialEq, Debug)]
pub(crate) enum Function {
    PriResetLinkStates,
    PriTestLinkStates,
    PriConfirmedUserData,
    PriUnconfirmedUserData,
    PriRequestLinkStatus,
    SecAck,
    SecNack,
    SecLinkStatus,
    SecNotSupported,
    Unknown(u8),
}

mod constants {
    pub(crate) const PRI_RESET_LINK_STATES: u8 = 0x40;
    pub(crate) const PRI_TEST_LINK_STATES: u8 = 0x42;
    pub(crate) const PRI_CONFIRMED_USER_DATA: u8 = 0x43;
    pub(crate) const PRI_UNCONFIRMED_USER_DATA: u8 = 0x44;
    pub(crate) const PRI_REQUEST_LINK_STATUS: u8 = 0x49;
    pub(crate) const SEC_ACK: u8 = 0x00;
    pub(crate) const SEC_NACK: u8 = 0x01;
    pub(crate) const SEC_LINK_STATUS: u8 = 0x0B;
    pub(crate) const SEC_NOT_SUPPORTED: u8 = 0x0F;
}

impl Function {
    pub(crate) fn from(byte: u8) -> Function {
        match byte {
            constants::PRI_RESET_LINK_STATES => Function::PriResetLinkStates,
            constants::PRI_TEST_LINK_STATES => Function::PriTestLinkStates,
            constants::PRI_CONFIRMED_USER_DATA => Function::PriConfirmedUserData,
            constants::PRI_UNCONFIRMED_USER_DATA => Function::PriUnconfirmedUserData,
            constants::PRI_REQUEST_LINK_STATUS => Function::PriRequestLinkStatus,
            constants::SEC_ACK => Function::SecAck,
            constants::SEC_NACK => Function::SecNack,
            constants::SEC_LINK_STATUS => Function::SecLinkStatus,
            constants::SEC_NOT_SUPPORTED => Function::SecNotSupported,
            _ => Function::Unknown(byte),
        }
    }

    pub(crate) fn to_u8(self) -> u8 {
        match self {
            Function::PriResetLinkStates => constants::PRI_RESET_LINK_STATES,
            Function::PriTestLinkStates => constants::PRI_TEST_LINK_STATES,
            Function::PriConfirmedUserData => constants::PRI_CONFIRMED_USER_DATA,
            Function::PriUnconfirmedUserData => constants::PRI_UNCONFIRMED_USER_DATA,
            Function::PriRequestLinkStatus => constants::PRI_REQUEST_LINK_STATUS,
            Function::SecAck => constants::SEC_ACK,
            Function::SecNack => constants::SEC_NACK,
            Function::SecLinkStatus => constants::SEC_LINK_STATUS,
            Function::SecNotSupported => constants::SEC_NOT_SUPPORTED,
            Function::Unknown(x) => x,
        }
    }
}