9 个版本
使用旧的 Rust 2015
0.2.8 | 2018 年 12 月 19 日 |
---|---|
0.2.7 | 2018 年 12 月 18 日 |
#166 in #settings
在 2 个 crate 中使用 (通过 lpsettings)
72KB
936 行
Settingsfile-rs
使用 Serde 轻松访问设置和配置文件的库。
状态
可用,但处于测试阶段。如果您遇到任何问题,请告诉我。
简介
Settingsfile-rs 尝试抽象出为 cli 和其他程序定义、解析和保存配置文件的过程。这样您可以专注于制作一个易于使用且具有强大组织配置选项的程序。
特性
Settigsfile-rs 使用 'tree' 方法来组织设置文件。这意味着您可以将不同的选项分组组织,允许您在选项和配置中 '深入探索',并且让您的用户轻松地进行调整、自定义,并使一切恰好如您所愿。
嵌套
每个配置都可以在树中存储属性,有多个分支,以下是一个基本示例(JSON 格式)
{
"user" : {
"name" : "the user's name",
"email" : "the user's email",
"key" : "SDH23UIRWDFHIJSDJF234IOF"
},
"display" : {
"tab-spaces": 2,
"options" : [ "green", "auto-break" ]
}
}
如您所见,您可以根据功能组织不同的设置,并且可以有多种类型的使用,例如数字、列表或布尔值。
阴影
在查找设置时,Settingsfile-rs 默认会在两个地方查找。首先是在本地工作目录中,其次是配置中定义的位置。这允许用户为每个文件夹/每个项目设置设置。一个好的例子是 git,可能是一个个人项目,所以您需要您的个人密钥,但如果是一个工作项目,则需要使用该组织的工作密钥。
Settingsfile-rs 会自动用工作文件夹中的本地文件(在配置中定义)覆盖全局设置,这样用户就可以定义在此工作文件夹中可能需要的特定设置,而不会影响全局设置。
使用方法
将 Settingsfile-rs 添加到您的 Cargo.toml
文件中。
[dependencies]
settingsfile = "^0.2"
然后创建一个结构体并实现 Clone
+ Format
特性,然后创建一个新的 File
,在大多数情况下,您可以使用 #[derive(Clone)]
为 Clone
。这个结构体只是您想要物理设置文件格式化的容器。
extern crate settingsfile;
use settingsfile::Settings;
use settingsfile::Format;
// ...
struct Configuration { }
impl Format for Configuration {
// implement the functions you need ...
}
fn main() {
// ...
// create the `File`
let settings = Settings::new(Configuration{});
// reading a value from the settings.
match settings.get_value("user.name") {
Ok(user_name) => println!("{}",user_name),
Err(error) => println!("user.name is not defined."),
}
// reading a value and supplying a default in case it doesn't exist or
println!("{}",settings.get_value_or("user.name","username is not defined"));
// and saving data is just as easy.
settings.set_value("user.name","snsvrno");
// ...
}
键通过使用“点表示法”来访问,这意味着您不能在键名中包含“.”,但您可以嵌套值并轻松地处理树结构。
// using the previous initalization
if let Ok(user_tree) = settings.get_value("user") {
// this will give you all the settings nested under user,
// so you can access or save them as a different file / or
// you can easily just remove them all by using `delete_key`.
settings.get_value("name") // equivalent to "user.name" because we are inside "user"
...
}
一点需要注意的是,这些都是副本,因此从get_value
中操作内容将不会生效。您需要使用set_value
来执行任何永久性操作。
依赖项
~0.6–1.6MB
~31K SLoC