koit-toml 0.2.1

A simple, asynchronous, pure-Rust, structured, embedded database
Documentation
# Koit
[![Crates.io][crates-badge]][crates-url]
[![MIT licensed][mit-badge]][mit-url]

[crates-badge]: https://img.shields.io/crates/v/koit.svg
[crates-url]: https://crates.io/crates/koit
[mit-badge]: https://img.shields.io/badge/license-MIT-blue.svg
[mit-url]: https://github.com/tomcur/koit/blob/master/LICENSE

Koit is a simple, asynchronous, pure-Rust, structured, embedded database.

```toml
[dependencies]
koit = "0.2"
```

## Example

```rust
use std::default::Default;

use koit::{FileDatabase, format::Toml};
use serde::{Deserialize, Serialize};

#[derive(Default, Deserialize, Serialize)]
struct Data {
    cats: u64,
    yaks: u64,
}

#[async_std::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let db = FileDatabase::<Data, Toml>::load_from_path_or_default("./db.toml").await?;
  
    db.write(|data| {
        data.cats = 10;
        data.yaks = 32;
    }).await;
    
    assert_eq!(db.read(|data| data.cats + data.yaks).await, 42);

    db.save().await?;

    Ok(())
}
```

## Features
- built-in, future-aware, reader-writer synchronization
- works with arbitrary data formatters
- works with arbitrary storage backends
- comes with default formatters and backends that fit more purposes

By default, Koit comes with its file-backend, JSON / Toml formatter and Bincode
formatter enabled. You can cherry-pick features instead.

```toml
[dependencies.koit]
version = "0.2"
default-features = false
features = ["toml-format"]
```

## Purpose

Koit enables quickly implementing persistence and concurrent access to
structured data. It is meant to be used with relatively small amounts
(megabytes) of data.

It is not a performant database. Upon loading, the entire data structure is
kept in memory. Upon saving, the entire data structure is formatted and written
to the storage backend.

## Other crates

Koit is inspired by [Rustbreak](https://github.com/TheNeikos/rustbreak), a
similar (synchronous) database.

## License

This project is licensed under the [MIT license].

[MIT license]: https://github.com/tomcur/koit/blob/master/LICENSE

### Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in Koit by you, shall be licensed as MIT, without any additional
terms or conditions.