zigbee 0.1.0-alpha.3

ZigBee protocol stack in `no-std` based on the ZigBee specification 22 1.0
Documentation
#![allow(dead_code)]

use super::error::ApsError;

#[derive(Debug, Clone, Default, PartialEq)]
pub enum SrcAddrMode {
    Reserved = 0x00,
    #[default]
    Short,
    Extended = 0x02,
}

#[derive(Debug, Clone, Default, PartialEq)]
pub enum DstAddrMode {
    #[default]
    None,
    Group = 0x01,
    Network = 0x02,
    Extended = 0x03,
}

#[derive(Debug, Clone, Default, PartialEq)]
pub enum Address {
    #[default]
    None,
    Group(u16),
    Network(u16),
    Extended(u64),
}

#[derive(Debug, Clone, Default, PartialEq)]
pub enum TxOptions {
    SecurityEnabled = 0x01,
    UseNetworkKey = 0x02,
    #[default]
    Acknowledged,
    FragmentationPermitted = 0x08,
    IncludeExtendedNonce = 0x10,
}

#[derive(Debug, Clone, Default, PartialEq)]
pub struct SrcEndpoint {
    pub(crate) value: u8,
}

impl SrcEndpoint {
    pub fn new(value: u8) -> Result<Self, ApsError> {
        if value <= 254 {
            Ok(SrcEndpoint { value })
        } else {
            Err(ApsError::InvalidValue)
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn valid_value_should_succeed() {
        let src_endpoint = SrcEndpoint::new(254);

        assert!(src_endpoint.is_ok());
    }

    #[test]
    fn oversized_value_should_fail() {
        let src_endpoint = SrcEndpoint::new(255);

        assert!(src_endpoint.is_err());
    }
}