Crates.io | dbstruct |
lib.rs | dbstruct |
version | 0.4.1 |
source | src |
created_at | 2022-08-07 16:47:18.740297 |
updated_at | 2023-08-18 22:07:23.003399 |
description | Build a typed database by defining a struct |
homepage | |
repository | https://github.com/dvdsk/dbstruct |
max_upload_size | |
id | 640302 |
size | 99,927 |
Derive a database from a struct
This is an early release, the API is mostly stable but might still change
Create a typed embedded database by defining a struct. Interact with the database through getters and setters. Choose how values missing in the database are represented. Standard library types Vec
, HashMap
and Option
have special getters and setters to mimic their standard library functionality. You can push and pop from vecs.
Choose out of various popular key-value databases then instantiate the struct providing only the db path. Alternatively pass any object that implements dbstruct::DataStore
.
dbstruct is ideal when:
Writing a simple app that needs some form of persistence.
Quickly getting a storage layer done when developing a system that you can later replace.
use std::path::Path;
#[dbstruct::dbstruct(db=sled)]
pub struct Test {
#[dbstruct(Default)]
the_awnser: u8,
primes: Vec<u32>,
#[dbstruct(Default="format!(\"{}\", 20+2+20)")]
the_result: String,
}
fn main() {
// a wrapper around a HashMap that implements the
// `DataStore` trait
let db = Test::new(&Path::new("the_db")).unwrap();
db.the_awnser().set(&42).unwrap();
assert_eq!(42u8, db.the_awnser().get().unwrap());
db.primes().push(&2).unwrap();
db.primes().push(&3).unwrap();
db.primes().push(&5).unwrap();
db.primes().push(&7).unwrap();
assert_eq!(Some(7), db.primes().pop().unwrap());
assert_eq!(String::from("42"), db.the_result().get().unwrap());
}
Name | advantage | attribute option |
---|---|---|
Sled | pure Rust | db=sled |
BTreeMap, does not store anything! | testing | db=btreemap |
work in progress: rocksdb
These are some features I am planning to work on, in no particular order. If you miss anything please let me know via an issue!
BTreeMap<K, V>