librustconfig 0.1.1

libRustConfig is rust wrapper around libconfig library. Library for processing configuration files.
Documentation
# libRustConfig

It is rust bindings and wrapper around [libconfig](https://github.com/hyperrealm/libconfig) library. Library for processing configuration files. 


### Table of contents

* [Requierements]#requirements
* [Installation]#installation
* [Usage]#usage
* [Bindings]#bindings
* [Wrapper]#wrapper
* [Usage example]#usage-example
  * [Create]#create
  * [Insert]#insert
  * [Insert group]#insert-group
  * [Search]#search
  * [Search default]#search-default
  * [Iterate]#iterate
  * [Save]#save


### Requirements

* [Rust Compiler]https://www.rust-lang.org/
* [Cargo package manager]https://www.rust-lang.org/

Library is writing used latest stable Rust Compiler (rustc 1.46.0 (04488afe3 2020-08-24)).



### Installation

Add this to your `Cargo.toml`:

```toml
[dependencies]
librustconfig = "0.1.*"
```



### Usage

Add to your crate root:

```rust
extern crate config;
```



### Bindings

[libconfig-sys](https://github.com/isemenkov/librustconfig/tree/master/libconfig-sys) crate contains the libconfig translated headers to use this library in Rust programs.



### Wrapper

[libconfig](https://github.com/isemenkov/librustconfig/tree/master/src) crate contains the libconfig safe wrapper.



#### Usage example

##### Create

```rust
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!");
}
```

##### Insert

```rust
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!");
}
```

##### Insert group

```rust
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!");
}
```

##### Search

```rust
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 ... */ }
}
```

##### Search default

```rust
let _bool_val = cfg.value("section1.boolean_value").unwrap().as_bool_default(false);
```

##### Iterate

```rust
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 ... */
}
```

##### Save

```rust
if cfg.save_to_file(Path::new("config.cfg")).is_err() {
    panic!("Can't save configuration to file!");
}
```