Skip to content

Commit 4b6fd9d

Browse files
committed
feat: add debug trait for node
Signed-off-by: Woshiluo Luo <woshiluo.luo@outlook.com>
1 parent f9e8ec1 commit 4b6fd9d

File tree

2 files changed

+39
-4
lines changed

2 files changed

+39
-4
lines changed

examples/qemu-virt.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,15 +132,13 @@ fn main() -> Result<(), Error> {
132132
);
133133
}
134134

135+
println!("{:?}", t.soc);
135136
for current_node in t.soc.nodes().unwrap() {
136137
if current_node.get_parsed_name().0 == "virtio_mmio" {
137138
let mmio = current_node.deserialize::<VirtIoMmio>();
138139
println!("{:?} {:?}", current_node.get_parsed_name(), mmio.reg);
139140
}
140141
}
141-
for current_prop in t.soc.props().unwrap() {
142-
println!("{}", current_prop.get_name());
143-
}
144142

145143
// 解析过程中,设备树的内容被修改了。
146144
// 因此若要以其他方式再次访问设备树,先将这次解析的结果释放。

src/de_mut/node.rs

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
BodyCursor, BorrowedValueDeserializer, Cursor, PropCursor, RefDtb, RegConfig,
33
StructDeserializer,
44
};
5+
use core::fmt::Debug;
56
use core::marker::PhantomData;
67
use serde::{de, Deserialize};
78

@@ -103,7 +104,7 @@ impl<'de> Node<'de> {
103104

104105
/// 获得属性迭代器。
105106
pub const fn props<'b>(&'b self) -> Option<PropIter<'de, 'b>> {
106-
match self.nodes_start {
107+
match self.props_start {
107108
None => None,
108109
Some(node_cursor) => Some(PropIter {
109110
node: self,
@@ -114,6 +115,42 @@ impl<'de> Node<'de> {
114115
}
115116
}
116117

118+
impl Debug for Node<'_> {
119+
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
120+
let props = self.props();
121+
write!(f, "Props: [")?;
122+
if let Some(s) = props {
123+
let mut first_written = true;
124+
for prop in s {
125+
if first_written {
126+
write!(f, "\"{}\"", prop.get_name())?;
127+
first_written = false;
128+
} else {
129+
write!(f, ",\"{}\"", prop.get_name())?;
130+
}
131+
}
132+
}
133+
write!(f, "]\n")?;
134+
135+
let children = self.nodes();
136+
write!(f, "Children: [")?;
137+
if let Some(s) = children {
138+
let mut first_written = true;
139+
for child in s {
140+
if first_written {
141+
write!(f, "\"{}\"", child.get_full_name())?;
142+
first_written = false;
143+
} else {
144+
write!(f, ",\"{}\"", child.get_full_name())?;
145+
}
146+
}
147+
}
148+
write!(f, "]\n")?;
149+
150+
Ok(())
151+
}
152+
}
153+
117154
impl<'de, 'b> Iterator for NodeIter<'de, 'b> {
118155
type Item = NodeItem<'de>;
119156

0 commit comments

Comments
 (0)