6 个版本 (3 个重大更新)
0.3.1 | 2023年12月28日 |
---|---|
0.3.0 | 2023年12月28日 |
0.2.0 | 2023年11月26日 |
0.1.1 | 2023年10月17日 |
0.0.1 | 2023年9月23日 |
#217 in 配置
每月 112 次下载
用于 plugx-config
150KB
4.5K SLoC
Plugx Input (开发中)
用于插件配置和状态操作的一个简单灵活的数据结构。
示例
use plugx_input::Input;
let mut map = Input::new_map();
map.map_mut().insert("key".into(), Input::from([1, 2, 3]));
let inner_list = map
.map_mut() // &mut Hashmap<String, Input>
.get_mut("key") // Option<&mut Input>
.unwrap() // &mut Input (which is a list)
.list_mut(); // &mut Vec<Input>
*inner_list.get_mut(0).unwrap() = 3.14.into();
*inner_list.get_mut(1).unwrap() = true.into();
*inner_list.get_mut(2).unwrap() = "hello world".into();
println!("{map}");
// prints:
// {"key": [3.14, true, "hello world"]}
功能
差异
use plugx_input::Input;
use plugx_input::diff::{diff, InputDiff};
let mut map = Input::new_map(); // {}
map.map_mut().insert("foo".into(), Input::new_map()); // {"foo": {}}
map // {"foo": {"bar": [50, 60, 70]}}
.map_mut()
.get_mut("foo").unwrap()
.map_mut()
.insert("bar".into(), Input::from([50, 60, 70]));
let mut map2 = map.clone(); // {"foo": {"bar": [50, 60, 70]}}
*map2 // {"foo": {"bar": [100, 60, 70]}}
.map_mut()
.get_mut("foo").unwrap()
.map_mut()
.get_mut("bar").unwrap()
.list_mut()
.get_mut(0).unwrap()
.int_mut() = 100;
diff(
&map,
&map2,
&mut |diff: InputDiff| {
println!("value {} {}", diff.position(), diff.action())
}
);
// prints:
// value [foo][bar][0] increased by 50
合并
use plugx_input::Input;
use plugx_input::merge::merge;
let mut map = Input::new_map(); // {}
map.map_mut().insert("foo".into(), Input::new_map()); // {"foo": {}}
map // {"foo": {"bar": false}}
.map_mut()
.get_mut("foo").unwrap()
.map_mut()
.insert("bar".into(), false.into());
let mut map2 = Input::new_map(); // {}
map2.map_mut().insert("foo".into(), Input::new_map()); // {"foo": {}}
map2 // {"foo": {"baz": true}}
.map_mut()
.get_mut("foo").unwrap()
.map_mut()
.insert("baz".into(), true.into());
merge(&mut map, &map2);
println!("{map}");
// prints:
// {"foo": {"bar": false, "baz": true}}
Cargo 功能
- default: 无
- schema: 启用 schema 和验证
Input
。 - logging: 通过 log crate 启用日志记录。
- tracing: 通过 tracing crate 启用日志记录。
给贡献者
我喜欢来自每个人的 PR,并感谢您的帮助,但在打开 PR 之前,请先提交一个问题,并描述您的功能、修复等。
依赖关系
~0.5–2MB
~36K SLoC