7个版本
0.0.7 | 2023年6月14日 |
---|---|
0.0.6 | 2023年6月14日 |
#39 在 #root-directory
42 每月下载量
用于 example_crate_with_settin…
14KB
242 行
crate-settings
这个crate允许你在package.metadata.settings
表中指定crate特定的元数据设置。然后可以使用settings!
宏在编译时读取这些设置。crate-settings
旨在自动找到当前项目的实际工作空间根目录,并使用此目录作为搜索相关Cargo.toml
的键。
示例
# Cargo.toml
[package]
name = "my-crate"
# ..
[package.metadata.settings.some-crate]
some_setting = "value in settings"
some_int = 567
an_array = [1, 2, 3]
use crate_settings::*;
const SOME_SETTING: &'static str = settings!("some-crate", "some_setting", "my default value");
const SOME_INT: isize = settings!("some-crate", "some_int", 145);
fn main() {
let items = settings!("some-crate", "an_array", [4, 5, 6]);
for item in items {
println!("{}", item);
}
}
传递给settings!
的第一个值是这些设置相关的crate的名称。这应该是当前crate的名称,并且应与你的Cargo.toml
中的[package]
部分中的内容相匹配。此字段是必需的,以避免不同crate之间的键名冲突,并在某些情况下用于定位crate的Cargo.toml
。
传递给settings!
的第二个值应该是你想要从设置中读取的键。这应该是一个有效的TOML
字段名称。
最后一个值是可选的,允许你指定一个默认值,如果指定的键找不到,则将使用该默认值。如果不指定默认值,则在找不到键时将引发编译器错误。然而,当指定默认值时,任何失败都将导致使用默认值,这意味着这些失败将是静默的。
目录遍历
在存在多个Cargo.toml
级别(即嵌套在彼此内部的crate)的情况下,将使用最具体的键版本,例如,如果一个主crate和一个子crate都指定了相同的crate名称和键对,则将使用子crate的值。这允许主crate设置一个值,子crate可以选择使用或覆盖。
注意事项
这还不是生产就绪的。我需要发布到crates.io以正确测试它在多工作空间环境中的行为。API可能会更改。
依赖关系
~0.7–8.5MB
~69K SLoC