diff --git a/kernel/src/device_tree.rs b/kernel/src/device_tree.rs index 5946a64..e02bd19 100644 --- a/kernel/src/device_tree.rs +++ b/kernel/src/device_tree.rs @@ -23,36 +23,26 @@ impl DeviceTree { let mut dt = Self { devices: HashMap::new(), }; - - // Human input devices - { - dt.devices.insert("Mice".to_string(), Vec::new()); - dt.devices.insert("Keyboards".to_string(), Vec::new()); - dt.devices.insert("Controllers".to_string(), Vec::new()); - // Human Input Devices that do not fit into other catagories go in this spot - dt.devices.insert("Generic HIDs".to_string(), Vec::new()); - } - - { - dt.devices.insert("Disk Drives".to_string(), Vec::new()); - dt.devices.insert("CD Drives".to_string(), Vec::new()); - } - - dt.devices.insert("Batteries".to_string(), Vec::new()); - dt.devices.insert("Monitors".to_string(), Vec::new()); - dt.devices.insert("GPUs".to_string(), Vec::new()); - dt.devices.insert("CPUs".to_string(), Vec::new()); - - dt.devices.insert("USB".to_string(), Vec::new()); - dt.devices.insert("Serial Ports".to_string(), Vec::new()); - dt.devices.insert("Cameras".to_string(), Vec::new()); - dt.devices - .insert("Biometric Devices".to_string(), Vec::new()); - + device_tree!(dt, [ + "Mice", + "Keyboards", + "Controllers", + "Generic HIDs", + "Disk Drives", + "CD Drives", + "Batteries", + "Monitors", + "GPUs", + "CPUs", + "USB", + "Serial Ports", + "Cameras", + "Biometric Devices", + ]); dt } } -use crate::utils::TAB; +use crate::{utils::TAB, device_tree}; use crate::tab; impl fmt::Display for DeviceTree { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { diff --git a/kernel/src/utils.rs b/kernel/src/utils.rs index e62fbbc..f733eec 100644 --- a/kernel/src/utils.rs +++ b/kernel/src/utils.rs @@ -13,4 +13,16 @@ macro_rules! tab { ($num:expr) => { TAB.repeat($num) } +} + +// 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 insert device types into the device tree +#[macro_export] +macro_rules! device_tree { + ($devtree:expr, $dev_type_vec:expr) => { + for each_device_type in $dev_type_vec { + $devtree.devices.insert(each_device_type.to_string(), Vec::new()); + } + }; } \ No newline at end of file