3个不稳定版本

0.2.2 2023年4月20日
0.2.1 2023年3月7日
0.1.1 2023年2月26日
0.1.0 2023年2月26日

979文本处理

每月21次下载

MIT 许可证

15KB
165

ini_puga

ini_puga

ini_puga 以一种简单的方式处理INI文件,无需处理错误(1),并且由于泛型类型,只需2个方法 getget_vector 就足以获取整数、浮点数、布尔值等。

还有两个方法 get_from_hexget_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