diff --git a/kernel/src/device_tree.rs b/kernel/src/device_tree.rs index cffa06980..51d822e62 100644 --- a/kernel/src/device_tree.rs +++ b/kernel/src/device_tree.rs @@ -53,26 +53,26 @@ impl DeviceTree { } } use crate::utils::TAB; - +use crate::tab; impl fmt::Display for DeviceTree { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { writeln!(f)?; for (device_type, devices) in &self.devices { - writeln!(f, "\r{TAB}{}/\r", device_type)?; + writeln!(f, "\r{}{}/\r", tab!(1), device_type)?; for device in devices { - writeln!(f, "{TAB}{TAB}{}/\r", device.name)?; + writeln!(f, "{}{}/\r", tab!(2), device.name)?; for attr in &device.attributes { - writeln!(f, "{TAB}{TAB}{TAB}{}\r", attr)?; + writeln!(f, "{}{}\r", tab!(3), attr)?; } for child in &device.children { - writeln!(f, "{TAB}{TAB}{TAB}{}\r", child.name)?; + writeln!(f, "{}{}\r", tab!(4), child.name)?; for attr in &child.attributes { - writeln!(f, "{TAB}{TAB}{TAB}{TAB}{}\r", attr)?; + writeln!(f, "{}{}\r", tab!(4), attr)?; } for child in &child.children { - writeln!(f, "{TAB}{TAB}{TAB}{TAB}{}\r", child.name)?; + writeln!(f, "{}{}\r", tab!(4), child.name)?; for attr in &child.attributes { - writeln!(f, "{TAB}{TAB}{TAB}{TAB}{TAB}{}\r", attr)?; + writeln!(f, "{}{}\r", tab!(5), attr)?; } } } diff --git a/kernel/src/utils.rs b/kernel/src/utils.rs index 405bf7e88..e62fbbc02 100644 --- a/kernel/src/utils.rs +++ b/kernel/src/utils.rs @@ -3,3 +3,14 @@ /// Used when tab `\t` in hardware is not known and we will default to two spaces pub const TAB: &str = " "; + + +// NOTE: this only reduces the code duplication in source code not in generated code! +// Written by Yours Truly: Munir +/// A simple macro to reduce code duplication when we use TAB internally +#[macro_export] +macro_rules! tab { + ($num:expr) => { + TAB.repeat($num) + } +} \ No newline at end of file