From 900122d131d2b510e88820832627a489c334cc98 Mon Sep 17 00:00:00 2001 From: Olivier Date: Wed, 23 Mar 2022 22:07:18 +0000 Subject: [PATCH] BROKEN start of prototyping --- .gitignore | 4 ++++ Cargo.toml | 23 +++++++++++++++++++++++ src/environment.rs | 30 ++++++++++++++++++++++++++++++ src/lib.rs | 11 +++++++++++ 4 files changed, 68 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.toml create mode 100644 src/environment.rs create mode 100644 src/lib.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7a53b1c --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/target +Cargo.lock + +.idea \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..ae0d64e --- /dev/null +++ b/Cargo.toml @@ -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" diff --git a/src/environment.rs b/src/environment.rs new file mode 100644 index 0000000..8ee8fa6 --- /dev/null +++ b/src/environment.rs @@ -0,0 +1,30 @@ +use std::sync::Arc; +use libmdbx::{Database, Environment, EnvironmentKind, WriteMap}; + +pub struct Env { + pub mdbx_env: Environment, +} + +#[self_referencing] +pub struct Table { + pub mdbx_env: Arc, + + #[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 { + todo!() + } + + pub fn open_ +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..e3be3a4 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,11 @@ + +mod environment; + +#[cfg(test)] +mod tests { + #[test] + fn it_works() { + let result = 2 + 2; + assert_eq!(result, 4); + } +}