aboutsummaryrefslogtreecommitdiff
path: root/utils/macro_rules
diff options
context:
space:
mode:
Diffstat (limited to 'utils/macro_rules')
-rw-r--r--utils/macro_rules/Cargo.toml6
-rw-r--r--utils/macro_rules/src/lib.rs29
2 files changed, 35 insertions, 0 deletions
diff --git a/utils/macro_rules/Cargo.toml b/utils/macro_rules/Cargo.toml
new file mode 100644
index 0000000..18cc902
--- /dev/null
+++ b/utils/macro_rules/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ch-macro-rules"
+version.workspace = true
+edition.workspace = true
+
+[dependencies]
diff --git a/utils/macro_rules/src/lib.rs b/utils/macro_rules/src/lib.rs
new file mode 100644
index 0000000..cbc4730
--- /dev/null
+++ b/utils/macro_rules/src/lib.rs
@@ -0,0 +1,29 @@
+//! CH Utilities - Macro Rules
+//!
+//! Provides convenient macros for developing the game CH
+
+#![deny(missing_docs)]
+
+/// Import modules and re-export all of their public items.
+///
+/// This macro declares modules with `mod $module;` and then re-exports
+/// everything from them with `pub use $module::*;`, making the items of the
+/// modules available as if they were defined in the current scope.
+///
+/// Supports both single and multiple module imports:
+///
+/// # Examples
+///
+/// ```
+/// import!(my_module);
+/// import!(foo, bar, zsq);
+/// ```
+#[macro_export]
+macro_rules! import {
+ ($($module:ident),+ $(,)?) => {
+ $(
+ mod $module;
+ pub use $module::*;
+ )+
+ };
+}