Expand description
kv
is a simple way to embed a key/value store in Rust applications. It is built using
sled and aims to be as lightweight as possible while still
providing a nice high level interface.
Getting started
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(())
}
Macros
- Define a codec type and implement the Codec trait
Structs
- Batch update
- Provides typed access to the key/value store
- Config is used to create a new store
- Integer key type
- Key/value pair
- Iterator over Bucket keys and values
- Store is used to read/write data to disk using
sled
- Transaction
- Subscribe to key updated
Enums
- Error type
- Event is used to describe the type of update
Traits
- Base trait for values that can be encoded using serde
- A Key can be used as a key to a database
- A trait used to convert between types and
Raw
Functions
- Abort a transaction
Type Aliases
- Raw is an alias for
sled::IVec
- Transaction error