fdt-parser 0.5.1

A crate for parsing FDT
Documentation
#![no_std]

extern crate alloc;

macro_rules! none_ok {
    ($e:expr) => {{
        let Some(v) = $e else {
            return Err(crate::FdtError::NotFound);
        };
        v
    }};
    ($e:expr, $err:expr) => {{
        let Some(v) = $e else {
            return Err($err);
        };
        v
    }};
}

mod data;
mod define;
mod header;
mod property;

pub mod base;
pub mod cache;

use core::ffi::FromBytesUntilNulError;

pub use cache::*;
pub use define::*;
pub use header::Header;
pub use property::Property;

#[derive(thiserror::Error, Debug, Clone)]
pub enum FdtError {
    #[error("not found")]
    NotFound,
    #[error("buffer too small at position {pos}")]
    BufferTooSmall { pos: usize },
    #[error("invalid magic number {0:#x} != {FDT_MAGIC:#x}")]
    InvalidMagic(u32),
    #[error("invalid pointer")]
    InvalidPtr,
    #[error("data provided does not contain a nul")]
    FromBytesUntilNull,
    #[error("failed to parse UTF-8 string")]
    Utf8Parse,
    #[error("no aliase found")]
    NoAlias,
    #[error("system out of memory")]
    NoMemory,
    #[error("node `{0}` not found")]
    NodeNotFound(&'static str),
    #[error("property `{0}` not found")]
    PropertyNotFound(&'static str),
}

impl From<core::str::Utf8Error> for FdtError {
    fn from(_: core::str::Utf8Error) -> Self {
        FdtError::Utf8Parse
    }
}
impl From<FromBytesUntilNulError> for FdtError {
    fn from(_: FromBytesUntilNulError) -> Self {
        FdtError::FromBytesUntilNull
    }
}