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
99
100
101
//! `kv` is a simple way to embed a key/value store in Rust applications. It is built using
//! [sled](https://docs.rs/sled) and aims to be as lightweight as possible while still
//! providing a nice high level interface.
//!
//! ## Getting started
//!
//! ```rust
//! use kv::*;
//!
//! #[derive(serde::Serialize, serde::Deserialize, PartialEq)]
//! struct SomeType {
//! a: i32,
//! b: i32
//! }
//!
//! fn run() -> Result<(), Error> {
//! // Configure the database
//! let mut cfg = Config::new("./test/example1");
//!
//! // Open the key/value store
//! let store = Store::new(cfg)?;
//!
//! // A Bucket provides typed access to a section of the key/value store
//! let test = store.bucket::<Raw, Raw>(Some("test"))?;
//!
//! let key = Raw::from(b"test");
//! let value = Raw::from(b"123");
//!
//! // Set test = 123
//! test.set(&key, &value)?;
//! assert!(test.get(&key).unwrap().unwrap() == value);
//! assert!(test.get(&b"something else".into()).unwrap() == None);
//!
//! // Integer keys
//! let aaa = store.bucket::<Integer, String>(Some("aaa"))?;
//! let key = Integer::from(1);
//! let value = String::from("Testing");
//! aaa.set(&key, &value);
//!
//! #[cfg(feature = "json-value")]
//! {
//! // Using a Json encoded type is easy, thanks to Serde
//! let bucket = store.bucket::<&str, Json<SomeType>>(None)?;
//!
//! let k = "example";
//! let x = Json(SomeType {a: 1, b: 2});
//! bucket.set(&k, &x)?;
//!
//! let x: Json<SomeType> = bucket.get(&k)?.unwrap();
//!
//! for item in bucket.iter() {
//! let item = item?;
//! let key: String = item.key()?;
//! let value = item.value::<Json<SomeType>>()?;
//! println!("key: {}, value: {}", key, value);
//! }
//!
//! // A transaction
//! bucket.transaction(|txn| {
//! txn.set(&"x", &Json(SomeType {a: 1, b: 2}))?;
//! txn.set(&"y", &Json(SomeType {a: 3, b: 4}))?;
//! txn.set(&"z", &Json(SomeType {a: 5, b: 6}))?;
//!
//! Ok(())
//! })?;
//! }
//! Ok(())
//! }
//! #
//! # fn main() {
//! # run().unwrap();
//! # }
//! ```
pub use ;
pub use *;
pub use Config;
pub use Error;
pub use ;
pub use Store;
pub use ;
pub use ;
/// Abort a transaction