1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
#![deny(missing_docs)]
//! `kv` is a simple way to embed a key/value store in Rust applications. It is build on LMDB and
//! aims to be as lightweight as possible, while still providing a nice high level interface.
//!
//! ## Getting started
//!
//! ```rust
//! use kv::{Config, Error, Manager, ValueRef};
//!
//! fn run() -> Result<(), Error> {
//! // First step create a manager, this ensured that each LMDB environment will only be
//! // accessed once per process
//! let mut mgr = Manager::new();
//!
//! // Next configure a database
//! let mut cfg = Config::default("/tmp/rust-kv");
//!
//! // Add a bucket named `test`
//! cfg.bucket("test", None);
//!
//! // Get a Store handle
//! let handle = mgr.open(cfg)?;
//!
//! // Get read-write access to the underlying store
//! let store = handle.write()?;
//!
//! // A Bucket provides typed access to an LMDB database
//! let bucket = store.bucket::<&str, &str>(Some("test"))?;
//!
//! {
//! // Finally, a transaction is needed, they can be read-write or readonly, here we will use a
//! // write transaction to add data
//! let mut txn = store.write_txn()?;
//!
//! // To set a value
//! let () = txn.set(&bucket, "testing", "abc123")?;
//!
//! // Make sure to commit the transaction. There is also an `abort` function to abandon
//! // the transaction
//! txn.commit()?;
//! }
//!
//! {
//! // This time a readonly transaction
//! let txn = store.read_txn()?;
//!
//! // Getting a value is easy once everything is set up
//! let val = txn.get(&bucket, "testing")?;
//! println!("testing => {}", val);
//! }
//!
//! Ok(())
//! }
//! #
//! # fn main() {
//! # run().unwrap();
//! # }
//! ```
#[macro_use]
extern crate failure;
extern crate lmdb;
extern crate serde;
#[macro_use]
extern crate serde_derive;
extern crate toml;
mod config;
mod error;
mod txn;
mod store;
mod cursor;
mod types;
mod buf;
mod manager;
mod encoding;
#[cfg(test)]
mod test;
#[cfg(feature = "cbor-value")]
pub use crate::encoding::cbor;
#[cfg(feature = "json-value")]
pub use crate::encoding::json;
#[cfg(feature = "bincode-value")]
pub use crate::encoding::bincode;
#[cfg(feature = "msgpack-value")]
pub use crate::encoding::msgpack;
pub use crate::config::{Config, DatabaseFlags};
pub use crate::error::Error;
pub use crate::txn::Txn;
pub use crate::store::{Bucket, Store};
pub use crate::cursor::{Cursor, CursorOp};
pub use crate::buf::ValueBuf;
pub use crate::types::{Integer, Key, Value, ValueMut, ValueRef};
pub use crate::manager::Manager;
pub use crate::encoding::{Encoding, Serde};