#re-exports #macro #module-management

export-magic

一个用于通过宏简化模块管理和重新导出的crate

3个不稳定版本

0.3.6 2024年6月21日
0.3.1 2024年6月21日
0.1.0 2024年5月5日

#60 in #re-exports


5 个crate中使用

MIT 许可证

6KB

export-magic

export-magic 是一个Rust crate,旨在通过宏简化模块管理和重新导出。

它提供了一组强大的宏,允许开发者轻松管理模块导入和导出,减少样板代码并提高代码组织。

功能

  • x!:自动定义并从指定模块重新导出所有内容。
  • xp!:定义一个模块,并使用其项目而无需重新导出它们。
  • ix!:使用单个宏调用导入crate根目录和特定 导入 模块中的所有项目。

示例用法

使用 xp! 宏

如果您想在另一个模块中使用来自模块 bar 的所有项目,而无需重新导出它们

xp!(bar);

通常,这在 proc_macro crate 中的 src/lib.rs 文件中很有用。

例如,在 error-tree proc_macro crate 中,我们有以下 lib.rs 文件

extern crate proc_macro;

#[macro_use] mod imports; use imports::*;

xp!{conversion_chain}
xp!{error_enum}
xp!{error_field}
xp!{error_tree_parse}
xp!{error_tree_visitor}
xp!{error_tree}
xp!{error_variant}
xp!{errors}
xp!{from_impl_generation_config}
xp!{from_impl_generation_config_emitter}
xp!{types}
xp!{validate}

#[proc_macro]
pub fn error_tree(input: TokenStream) -> TokenStream {

    let error_tree = parse_macro_input!(input as ErrorTree);

    error_tree.into_token_stream().into()
}

在这里,我们使用 xp! 宏调用使列表中源文件中找到的模型在我们的 error_tree 函数调用中可用。

这可以在不需要向 error_tree crate 消费者公开这些底层模型的情况下工作。

使用 ix! 宏

将您的crate的根目录和导入模块中的所有内容导入到当前作用域

ix!();

我们通常在每个源文件顶部使用此宏调用,以使公开定义的相邻项在我们的文件中可用,而无需样板代码。

它还将来自 src/imports.rs 的第三方项引入调用源文件。

在上面的 xp! 示例中,我们在每个文件顶部(conversion_chain.rs、error_enum.rs、error_field.rs 等)使用 crate::ix!()

因此,我们可以编写整个系统,而无需很多使用语句的样板代码。

通常,src/imports.rs 将看起来像这样

pub(crate) use std::sync::Arc;
pub(crate) use std::fs::*;

src/imports.rs 中指定的任何内容都将对调用 crate::ix!() 的任何 src/sourcefile.rs 可用。

使用 x!

假设你有一个模块 foo,其中包含各种公共结构和函数,并且你希望将它们暴露在库的根目录下。只需使用

x!(foo);

这使得我们能够干净且容易地组织我们的crate,使其内容可供客户端使用。通常,我们的 src/lib.rs 文件可能看起来就像这样,不多也不少

#[macro_use] mod imports; use imports::*;

x!{errors}
x!{traits}
x!{sourcefile1}
x!{sourcefile2}
x!{sourcefile3}

在每个文件 src/errors.rssrc/traits.rssrc/sourcefile1.rssrc/sourcefile2.rs 等,我们将在顶部指定 crate::ix!()(见上面章节)。

任何第三方依赖都通过在 src/imports.rs 中使用 pub(crate) use some_third_party_dep::* 来导出,因此所有源文件都变得非常干净。

安装

将此添加到你的 Cargo.toml

[dependencies]
export-magic = "0.1.0"

许可证

本crate采用MIT许可证。

无运行时依赖