From 87c3d0bb3ab4a4b2aa2ed98bef046ee0b6c4ddc6 Mon Sep 17 00:00:00 2001 From: IntoTheNight Date: Sun, 9 Jul 2023 16:30:16 +0530 Subject: [PATCH] add a shrimple macro add a shrimple macro --- kernel/src/device_tree.rs | 16 ++++++++-------- kernel/src/utils.rs | 11 +++++++++++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/kernel/src/device_tree.rs b/kernel/src/device_tree.rs index cffa069..5946a64 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!(3), 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 405bf7e..e62fbbc 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