2 unstable releases

0.2.0 May 13, 2021
0.1.0 Nov 30, 2020

#183 in Database implementations

MIT license

25KB
304 lines

Koit

Crates.io MIT licensed

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

[dependencies]
koit = "0.2"

Example

use std::default::Default;

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

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

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let db = FileDatabase::<Data, Json>::load_from_path_or_default("./db.json").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 formatter and Bincode formatter enabled. You can cherry-pick features instead.

[dependencies.koit]
version = "0.2"
default-features = false
features = ["bincode-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, a similar (synchronous) database.

License

This project is licensed under the MIT 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.

Dependencies

~2.5–9MB
~74K SLoC