It is rust bindings and wrapper around libconfig library. Library for processing configuration files.
Library is writing used latest stable Rust Compiler (rustc 1.46.0 (04488afe3 2020-08-24)).
Add this to your Cargo.toml
:
[dependencies]
librustconfig = "0.1.*"
Add to your crate root:
extern crate config;
libconfig-sys crate contains the libconfig translated headers to use this library in Rust programs.
libconfig crate contains the libconfig safe wrapper.
use libconfig::config::{Config, OptionType};
use std::path::Path;
let mut cfg = Config::new();
if cfg.load_from_string(
"section1 : {
integer_value = -12;
boolean_value = true;
int64_value = 99999L;
float_value = 0.9999991;
string_value = \"test string value \";
}";
).is_err() {
panic!("Can\t load configuration from string value!");
}
let group = cfg.create_section("group");
if group.is_none() {
panic!("Can't create new group section!");
}
if group.unwrap().write_string("value", "string value").is_none() {
panic!("Can't write string value!");
}
let array = group.create_array("array_list");
if array.is_none() {
panic!("Can't create new array option group!");
}
if array.write_int32(12).is_none() {
panic!("Can't write array element value!");
}
if !cfg.value("section1").unwrap().is_section().unwrap() {
panic!("Value must be a group!");
}
let _int_val = cfg.value("section1.integer_Value").unwrap().as_int32();
if int_val.is_none() {
panic!("Can't read integer_value from configuration");
}
match cfg.value("section1.int64_value").unwrap().value_type().unwrap() {
OptionType::Int64Type => { /* ... do something ... */ }
_ => { /* ... do nothing ... */ }
}
let _bool_val = cfg.value("section1.boolean_value").unwrap().as_bool_default(false);
for arr_val in cfg.value("group.array_list").unwrap().as_array() {
if arr_val.as_int32().in_none() {
panic!("Can't read array item value!");
}
/* ... do something with array item ... */
}
if cfg.save_to_file(Path::new("config.cfg")).is_err() {
panic!("Can't save configuration to file!");
}