BROKEN start of prototyping

This commit is contained in:
Olivier 'reivilibre' 2022-03-23 22:07:18 +00:00
commit 900122d131
4 changed files with 68 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
/target
Cargo.lock
.idea

23
Cargo.toml Normal file
View File

@ -0,0 +1,23 @@
[package]
name = "fancy_mdbx"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
anyhow = "1.0.56"
log = "0.4.16"
thiserror = "1.0.30"
libmdbx = "0.1.1"
# 0.11.1+zstd.1.5.2
zstd = "0.11.1"
serde = "1.0.136"
serde_bare = "0.5.0"
ouroboros = "0.14.2"

30
src/environment.rs Normal file
View File

@ -0,0 +1,30 @@
use std::sync::Arc;
use libmdbx::{Database, Environment, EnvironmentKind, WriteMap};
pub struct Env {
pub mdbx_env: Environment<WriteMap>,
}
#[self_referencing]
pub struct Table {
pub mdbx_env: Arc<Env>,
#[borrows(mdbx_env)]
#[covariant]
pub mdbx_db: Database<'this>
}
// TODO:
// - raw if wanted
// - serde if wanted
// - compression if wanted
// - ??? does it make sense to offer ALL these things in one interface; could the raw stuff
// be done slightly differently?
impl Env {
pub fn open_table(&self, name: &str, flags: ()) -> anyhow::Result<Table> {
todo!()
}
pub fn open_
}

11
src/lib.rs Normal file
View File

@ -0,0 +1,11 @@
mod environment;
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
let result = 2 + 2;
assert_eq!(result, 4);
}
}