3个不稳定版本
0.2.2 | 2023年4月20日 |
---|---|
0.2.1 | 2023年3月7日 |
0.1.1 | 2023年2月26日 |
0.1.0 |
|
979 在 文本处理
每月21次下载
15KB
165 行
ini_puga
ini_puga
ini_puga
以一种简单的方式处理INI文件,无需处理错误(1),并且由于泛型类型,只需2个方法 get
和 get_vector
就足以获取整数、浮点数、布尔值等。
还有两个方法 get_from_hex
和 get_vector_from_hex
用于将字符串中的十六进制数字转换为整数类型。
- 可以获取带有分隔符的值的向量
- 缩进无关紧要。
- 大小写敏感!。
- [Config] 与 [config] 不相同
- 空白行被忽略
- 键和值将左右两边修剪。
(1) Load
是唯一可能返回Result IO:Error的方法。
use ini_puga::Ini;
const DEFAULT_CONFIG: &str = r#"
my value without section = true
pi=3.14159
[config]
theme = Dark
text scale = 1.2
background color = faee89
font color =
favourites colors = f53298,a0ffff,fa0e78
empty value =
screen width = 1080
resolutions = 640,480,3.5,whatever,720,1080
resolutions =
use plugins = true
themes path = themes/
plugins path = plugins/
[user data]
name = José Puga
id = 700101
fav lang = Rust
fav pet = Rustacean
"#;
let mut ini = Ini::new();
ini.read(DEFAULT_CONFIG.to_string());
// Of course, you can also load from a file.
// ini.load("config.ini").expect("***ERROR OPENING FILE ***");
assert_eq!(ini.get::<f32>("config", "text scale", 0.0), 1.2);
assert_eq!(ini.get::<i64>("user data", "id", 999), 700101);
assert_eq!(ini.get::<i64>("user data", "id2", 999), 999);
//Vectors. Non valid values are inserted in the vector as default value
let v = ini.get_vector::<i32>("config", "resolutions", 240, ',');
assert_eq!(v[2], 240);
assert_eq!(v[5], 1080);
//Prints [640,480,240,240,720,1080]
println!("{:?}", v);
let no_name: String = String::from("anonymous");
assert_ne!(
ini.get::<String>("user data", "name", no_name), "anonymous");
// Check Hex numbers
assert_eq!(ini.get_from_hex::<u32>("config", "background color", 0), 0xfaee89);
//Empty or erroneus values always gets default.
assert_eq!(ini.get_from_hex::<u32>("config", "font color", 25), 25);
let vh = ini.get_vector_from_hex::<u32>("config", "favourites colors", 0xffffff, ',');
assert_eq!(vh[1], 0xa0ffff);
assert_eq!(vh[2], 0xfa0e78);
//Prints [16069272,10551295,16387704]
println!("{:?}", vh);
// Check sections and keys
assert_eq!(ini.section_exists("config"), true);
assert_eq!(ini.key_exists("NONEXISTENT section", "foo"), false);
let sn = ini.get_sections_names();
//len +1 because empty section always exists
assert_eq!(sn.len(), 3);
//Prints (random order) ["config", "", "user data"]
println!("{:#?}", sn);
let ks = ini.get_keys_from_section("");
assert_eq!(ks.len(), 2);
//Prints (random order) ["my value without section", "pi"]
println!("{:#?}", ks);
// Case sensitive
assert_eq!(ini.key_exists("", "pi"), true);
assert_eq!(ini.key_exists("", "PI"), false);
// Print trait implemented
println!("{}", ini);
许可证:MIT
依赖关系
~150KB