4 个版本

0.2.1 2020年6月8日
0.2.0 2020年6月8日
0.1.1 2020年6月7日
0.1.0 2020年6月7日

#2044Rust 模式

27 每月下载次数

GPL-3.0+

13KB
147

proc_use — 最新版本 API proc_use: rustc 1.43.1+

proc_use 是一个 Rust 包,用于帮助半动态导入包和模块。所有逻辑都在编译时运行,主要包含在 build.rs 中。

使用场景

在什么情况下这个包有用?比如说你有以下目录结构

project
├─Cargo.toml
├─build.rs
└─src
  ├─main.rs
  ├─core
  │ └─core.rs
  └─util
    ├─foo.rs
    ├─bar.rs
    └─baz.rs

你经常向 util 添加新文件并将它们包含在 core.rs 中。在纯 Rust 中这样做的方式如下

// main.rs
#[path = "util/foo.rs"]
mod foo;
#[path = "util/bar.rs"]
mod bar;
#[path = "util/baz.rs"]
mod baz;
// core.rs
use foo::*;
use bar::*;
use baz::*;

当然有更干净的方式来避免 #[path],但这需要更多的工作。每次添加新的 util 时都需要编辑多个文件。真烦人!这就是 proc_use 出现的地方。上面的可以替换为

// core.rs
include!(concat!(env!("OUT_DIR"), "/proc_use.rs"));
// build.rs
use proc_use::UseBuilder;
use std::env;
use std::path::PathBuf;

fn main() {
    let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
    UseBuilder::new()
		.use_glob("src/util/*.rs", "*".into())
		.write_to_file_all(out_path.join("proc_use.rs"));
}

这需要更多的初始代码,但现在模块和导入过程是自动的。向 util 添加你想要的任意多的 Rust 文件;use_glob 方法将自动选择并导入所有这些文件。
要查看使用此目录结构的示例,请参阅 globbing

依赖项

~510KB