krossbar-settings-lib 0.5.1

Krossbar settings library
Documentation
[![Crates.io][crates-badge]][crates-url]
[![MIT licensed][mit-badge]][mit-url]
[![Build Status][actions-badge]][actions-url]

[crates-badge]: https://img.shields.io/crates/v/krossbar-settings-lib.svg
[crates-url]: https://crates.io/crates/krossbar-settings-lib
[mit-badge]: https://img.shields.io/badge/license-MIT-blue.svg
[mit-url]: https://github.com/krossbar-platform/krossbar-bus/blob/main/LICENSE
[actions-badge]: https://github.com/krossbar-platform/krossbar-settings/actions/workflows/ci.yml/badge.svg
[actions-url]: https://github.com/krossbar-platform/krossbar-settings/actions/workflows/ci.yml

# krossbar-settings-lib

Krossbar settings lib

The library provides a convenient wrapper for reading and writing
settings into JSON file.

Use [Settings](https://docs.rs/krossbar-settings-lib/latest/krossbar_settings_lib/settings/struct.Settings.html) handle to open settings file. Using the handle you can
read, insert or delete settings entries from the inner JSON.

To create an [Entry](https://docs.rs/krossbar-settings-lib/latest/krossbar_settings_lib/entry/struct.Entry.html) use [Settings::read] or [Settings::read_or_insert] method, which tries to read
the value from the settings file, or adds new JSON entry if doesn't exist.

Using [Entry](https://docs.rs/krossbar-settings-lib/latest/krossbar_settings_lib/entry/struct.Entry.html) handle you can modify corresponding JSON settings file.

## Examples
```rust
use std::path::Path;

use krossbar_settings_common::DEFAULT_SETTINGS_DIR;
use krossbar_settings_lib::Settings;

const SERVICE_NAME: &str = "krossbar.storage.example";

fn print_json(path: &Path) {
    let data = std::fs::read_to_string(path).unwrap();
    println!("Settings: '{data}'");
}

fn manage_settings() {
    let settings = Settings::init(SERVICE_NAME).unwrap();

    let settings_path = Path::new(DEFAULT_SETTINGS_DIR).join(format!("{SERVICE_NAME}.json"));
    print_json(&settings_path); // {}

    let mut value = settings.read_or_insert("test_value", 42i32).unwrap();
    print_json(&settings_path);
    // { "test_value": ${some number} } if existed or
    // { "test_value": 42 } if a newly created entry

    value.update(11).unwrap();
    print_json(&settings_path); // { "test_value": 11 }

    value.clear().unwrap(); // {}
}
```