28 releases

0.1.0-pre+beta.15 Jul 16, 2022
0.1.0-beta.14 Jul 13, 2022
0.1.0-beta.8 Jun 30, 2022
0.1.0-alpha.18 May 27, 2022
0.1.0-alpha.4 Mar 21, 2022

#98 in Database implementations

Download history 1/week @ 2024-06-28 47/week @ 2024-07-05 168/week @ 2024-07-26 21/week @ 2024-08-02

105 downloads per month
Used in doublets-decorators

LGPL-3.0

150KB
4K SLoC

Doublets

A library that represents database engine that uses doublets.

Overview

Example

A basic CRUD in doublets

use doublets::{
    data::Flow::Continue,
    mem::FileMappedMem,
    unit, Doublets, Error
};
use std::fs::File;

fn main() -> Result<(), Error<usize>> {
    // create or open read/write file
    let file = File::options()
        .create(true)
        .read(true)
        .write(true)
        .open("db.links")?;

    let mem = FileMappedMem::new(file)?;
    let mut links = united::Store::<usize, _>::new(mem)?;

    // Creation of the empty doublet in tiny style
    let mut point = links.create()?;

    // Update of the doublet in handler style
    // The link is updated to reference itself twice (as source and target):
    links.update_with(point, point, point, |_, after| {
        // link is { index, source, target }
        point = after.index;
        // give handler state (any ops::Try)
        Continue
    })?;

    // print all links from store
    links.each(|link| {
        println!("{link}");
        Continue
    });

    // The link deletion in full style:
    // `any` constant denotes any link
    let any = links.constants().any;
    // query in [index source target] style
    // delete all links with index = point
    links.delete_by_with([point, any, any], |before, _| {
        println!("Goodbye {}", before);
        Continue
    })?;
    Ok(())
}

Dependencies

~2–11MB
~145K SLoC