nanondef 0.0.1

A no-std, no-alloc, minimal NDEF encoding and decoding library.
Documentation
#[cfg(any(feature = "std", feature = "alloc"))]
pub use alloc::vec::Vec;

pub trait AsBytes {
    fn as_bytes(&self) -> &[u8];
}

impl AsBytes for [u8] {
    #[inline]
    fn as_bytes(&self) -> &[u8] {
        self
    }
}

impl AsBytes for &[u8] {
    #[inline]
    fn as_bytes(&self) -> &[u8] {
        self
    }
}

impl AsBytes for str {
    #[inline]
    fn as_bytes(&self) -> &[u8] {
        self.as_bytes()
    }
}

#[cfg(any(feature = "std", feature = "alloc"))]
impl AsBytes for Vec<u8> {
    #[inline]
    fn as_bytes(&self) -> &[u8] {
        self.as_slice()
    }
}

impl<const L: usize> AsBytes for heapless::Vec<u8, L> {
    #[inline]
    fn as_bytes(&self) -> &[u8] {
        self.as_slice()
    }
}

#[inline(always)]
pub(crate) fn encode_u32_be(n: u32, out: &mut [u8]) {
    debug_assert!(out.len() >= 4);

    out[0] = (n >> 24) as u8;
    out[1] = (n >> 16) as u8;
    out[2] = (n >> 8) as u8;
    out[3] = n as u8;
}

#[inline(always)]
pub(crate) fn decode_u32_be(bytes: &[u8]) -> u32 {
    debug_assert!(bytes.len() >= 4);

    ((bytes[0] as u32) << 24)
        | ((bytes[1] as u32) << 16)
        | ((bytes[2] as u32) << 8)
        | (bytes[3] as u32)
}