Macro nar_dev_utils::mods
source · macro_rules! mods { {} => { ... }; {@SINGLE $([$cfg:meta])* $mod_name:ident } => { ... }; {@SINGLE $([$cfg:meta])* pub $mod_name:ident } => { ... }; {@SINGLE $([$cfg:meta])* use $mod_name:ident } => { ... }; {@SINGLE $([$cfg:meta])* use pub $mod_name:ident } => { ... }; {@SINGLE $([$cfg:meta])* pub use $mod_name:ident } => { ... }; {@SINGLE $([$cfg:meta])* pub pub $mod_name:ident } => { ... }; {@SINGLE $feature_name:literal => $($pub_use_mod:ident)+ } => { ... }; {@SINGLE (!$feature_name:literal) => $($pub_use_mod:ident)+ } => { ... }; { $feature_setting:tt => $($pub_use_mod:ident)+ ; $($tail:tt)* } => { ... }; { $($pub_use_mod:ident)+ ; $($tail:tt)* } => { ... }; }
Expand description
批量封装:在限定的特性(feature)下,导入并重新导出模块
- 🎯用于简化重复的
#[cfg(feature = XXX)]以及(pub) mod、(pub) use逻辑- 📌若默认全都需要
pub mod+pub use,可直接使用feature_pub_mod_and_reexport
- 📌若默认全都需要
- ✨使用简化的「mod-pub-use」语法(无需)
- ✅
<module>=>mod - ✅
pub <module>=>pub mod - 🆕
use <module>=>mod+use - 🆕
pub use <module>=>mod+pub use - 🆕
use pub <module>=>pub mod+use - 🆕
pub pub <module>=>pub mod+pub use
- ✅
- ✨简化【依赖于特性】的「mod-pub-use」语法(会同时应用在
mod和use语句中)- 🆕
"feature" => <mod-pub-use>=>#[cfg(feature = "feature")] <mod-pub-use> - 🆕
(!"feature") => <mod-pub-use>=>#[cfg(not(feature = "feature"))] <mod-pub-use>
- 🆕
- 🚩使用「标签树撕咬机」模型
- ⚠️已知问题:无法以此覆盖【内部导出了宏】的模块
§用例
mods! {
mod1;
pub mod2;
use mod3;
pub use mod4;
use pub mod5;
pub pub mod6;
"feature1" => pub pub mod7;
(!"feature1") => pub pub mod8;
}
=>
mod mod1;
pub mod mod2;
mod mod3;
use mod3::*;
mod mod4;
pub use mod4::*;
pub mod mod5;
use mod5::*;
pub mod mod6;
pub use mod6::*;
#[cfg(feature = "feature1")]
pub mod mod7;
#[cfg(feature = "feature1")]
pub use mod7::*;
#[cfg(not(feature = "feature1"))]
pub mod mod8;
#[cfg(not(feature = "feature1"))]
pub use mod8::*;