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}