fdt_parser/
lib.rs

1#![no_std]
2
3extern crate alloc;
4
5macro_rules! none_ok {
6    ($e:expr) => {{
7        let Some(v) = $e else {
8            return Err(crate::FdtError::NotFound);
9        };
10        v
11    }};
12    ($e:expr, $err:expr) => {{
13        let Some(v) = $e else {
14            return Err($err);
15        };
16        v
17    }};
18}
19
20mod data;
21mod define;
22mod header;
23mod property;
24
25pub mod base;
26pub mod cache;
27
28use core::ffi::FromBytesUntilNulError;
29
30pub use cache::*;
31pub use define::*;
32pub use header::Header;
33pub use property::Property;
34
35#[derive(thiserror::Error, Debug, Clone)]
36pub enum FdtError {
37    #[error("not found")]
38    NotFound,
39    #[error("buffer too small at position {pos}")]
40    BufferTooSmall { pos: usize },
41    #[error("invalid magic number {0:#x} != {FDT_MAGIC:#x}")]
42    InvalidMagic(u32),
43    #[error("invalid pointer")]
44    InvalidPtr,
45    #[error("data provided does not contain a nul")]
46    FromBytesUntilNull,
47    #[error("failed to parse UTF-8 string")]
48    Utf8Parse,
49    #[error("no aliase found")]
50    NoAlias,
51    #[error("system out of memory")]
52    NoMemory,
53    #[error("node `{0}` not found")]
54    NodeNotFound(&'static str),
55    #[error("property `{0}` not found")]
56    PropertyNotFound(&'static str),
57}
58
59impl From<core::str::Utf8Error> for FdtError {
60    fn from(_: core::str::Utf8Error) -> Self {
61        FdtError::Utf8Parse
62    }
63}
64impl From<FromBytesUntilNulError> for FdtError {
65    fn from(_: FromBytesUntilNulError) -> Self {
66        FdtError::FromBytesUntilNull
67    }
68}