14 个稳定版本
1.3.0 | 2020 年 8 月 29 日 |
---|---|
1.2.8 | 2020 年 7 月 22 日 |
1.2.5 | 2020 年 6 月 28 日 |
#215 in 配置
1,843 个月下载量
在 8 crates 中使用
18KB
ini
此 crate 提供了 ini!
宏,它实现了一种基本的配置语言,提供类似于 Windows ini
文件中找到的结构。您可以使用它编写可以轻松由最终用户定制的 Rust 程序。
这是一个简单宏工具,基于 configparser
构建,没有其他基于 Rust 的依赖项。对于更高级的功能,您应使用 configparser crate。
快速入门
一个基本的 ini
语法文件(我们称其为 ini 语法文件,因为文件不一定是 .ini
)看起来像这样
[DEFAULT]
key1 = value1
pizzatime = yes
cost = 9
[topsecrets]
nuclear launch codes = topsecret
[github.com]
User = QEDK
基本上,语法由部分组成,每个部分都可以包含键和值。
安装
您可以通过在 Cargo.toml
文件中包含它来轻松使用 cargo
安装此软件,如下所示
[dependencies]
ini = "1.3.0"
ini!
宏
ini!
宏允许您简单地获取一个类型为 HashMap
的哈希表,用于文件列表。计划在将来提供 shell 扩展和文件写入功能
#[macro_use]
extern crate ini;
fn main() {
let map = ini!("...path/to/file");
// Proceed to use normal HashMap functions on the map:
let val = map["section"]["key"].clone().unwrap();
// To load multiple files, just do:
let (map1, map2, map3) = ini!("path/to/file1", "path/to/file2", "path/to/file3");
// Each map is a cloned hashmap with no relation to other ones
}
如果加载文件失败或解析器无法解析文件,代码将使用适当的错误 panic
。在这种情况下,如果您想优雅地处理它,建议您使用 safe
变量。这将确保您的代码不会崩溃,而是以 Result<HashMap, String>
类型退出,并允许您优雅地处理错误。
let map = ini!(safe "...path/to/file");
// Proceed to use normal HashMap functions on the map:
let val = map.unwrap()["section"]["key"].clone().unwrap();
// Note the extra unwrap here, which is required because our HashMap is inside a Result type.
inistr!
宏
inistr!
宏允许您轻松地获取一个字符串列表的 HashMap<String, HashMap<String, Option<String>>>
类型哈希表。
#[macro_use]
extern crate ini;
fn main() {
let configstring = "[section]
key = value
top = secret";
let map = inistr!(configstring);
// Proceed to use normal HashMap functions on the map:
let val = map["section"]["top"].clone().unwrap();
// The type of the map is HashMap<String, HashMap<String, Option<String>>>
assert_eq!(val, "secret"); // value accessible!
// To load multiple string, just do:
let (map1, map2, map3) = inistr!(&String::from(configstring), configstring, "[section]
key = value
top = secret");
// Each map is a cloned hashmap with no relation to other ones
}
如果加载文件失败或解析器无法解析文件,代码将使用适当的错误 panic
。在这种情况下,如果您想优雅地处理它,建议您使用 safe
变量。这将确保您的代码不会崩溃,而是以 Result<HashMap, String>
类型退出,并允许您优雅地处理错误。
let map = inistr!(safe strvariable_or_strliteral);
// Proceed to use normal HashMap functions on the map:
let val = map.unwrap()["section"]["key"].clone().unwrap();
// Note the extra unwrap here, which is required because our HashMap is inside a Result type.
支持的 数据类型
configparser
不会猜测配置文件中值的类型,并将所有内容存储为字符串,同样适用于 ini
。如果您需要为您解析值的获取器,您可能希望使用 configparser
crate。当然,您也可以自行解析字符串值。
let my_string = map["section"]["key"].clone().unwrap();
let my_int = my_string.parse::<i32>().unwrap();
支持的 ini
文件结构
配置文件可以由部分组成,每个部分以一个 [section-name]
标题开始,后面跟着用 =
分隔的键值条目。默认情况下,部分名称和键名称不区分大小写。从存储的键、值和部分名称中移除了所有前导和尾随空白。键值可以省略,在这种情况下,键值分隔符(=
)也可以省略(但这与放置分隔符不同,我们将在后面解释)。您可以使用注释符号(;
和 #
)表示注释。请注意,键值对或部分标题不能跨多行。由于 ini 文件通常是这样,这意味着 [
、]
、=
、;
和 #
是特殊符号(此 crate 将允许您适当地使用 ]
)。
让我们举一个例子
[section headers are case-insensitive]
[ section headers are case-insensitive ]
are the section headers above same? = yes
sectionheaders_and_keysarestored_in_lowercase? = yes
keys_are_also_case_insensitive = Values are case sensitive
;anything after a comment symbol is ignored
#this is also a comment
spaces in keys=allowed ;and everything before this is still valid!
spaces in values=allowed as well
spaces around the delimiter = also OK
[All values are strings]
values like this= 0000
or this= 0.999
are they treated as numbers? = no
integers, floats and booleans are held as= strings
[value-less?]
a_valueless_key_has_None
this key has an empty string value has Some("") =
[indented sections]
can_values_be_as_well = True
purpose = formatting for readability
is_this_same = yes
is_this_same=yes
需要注意的是,具有相同键的值将得到更新,这意味着最后插入的键(无论是部分标题还是属性键)将保留在 HashMap
中。API 执行的唯一一点魔法是将无部分的属性放入名为 "default" 的部分。
许可证
根据您的选择,许可如下
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
- 较弱的通用公共许可证 v3.0 或更高版本(LICENSE-LGPL 或 https://www.gnu.org/licenses/lgpl-3.0.html)
。
贡献
除非您明确声明,否则根据 LGPL-3.0 许可证定义的,您提交的任何有意包含在作品中的贡献,都应如上所述双重许可,不附加任何其他条款或条件。
依赖关系
~73KB