kivis 0.2.3

Type-safe database schema generation for Rust with support for custom storage backends, automatic indexing, and layered cache architectures
Documentation
use kivis::{manifest, Database, MemoryStorage, Record};
use serde::{Deserialize, Serialize};

#[derive(Record, Default, Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
struct UserRecord {
    data: Vec<u8>,
}

manifest![Manifest: UserRecord];

#[test]
fn test_lifecycle() {
    let mut store = Database::<MemoryStorage, Manifest>::default();

    let user = UserRecord {
        data: vec![1, 2, 3, 4],
    };

    let user_key = store.put(user.clone()).unwrap();
    assert_eq!(store.get(&user_key).unwrap(), Some(user.clone()));
    store.remove(&user_key).unwrap();
    assert_eq!(store.get(&user_key).unwrap(), None);
}

#[test]
fn test_iter() {
    let mut store = Database::<MemoryStorage, Manifest>::default();

    let user = UserRecord {
        data: vec![1, 2, 3, 4],
    };
    let another = UserRecord {
        data: vec![5, 6, 7, 8],
    };

    let user_key = store.put(user.clone()).unwrap();
    let another_key = store.put(another.clone()).unwrap();

    assert_ne!(user_key, another_key);

    let iter = store
        .iter_keys(UserRecordKey(0)..UserRecordKey(3))
        .unwrap()
        .collect::<Result<Vec<_>, _>>()
        .unwrap();
    assert_eq!(iter, vec![another_key, user_key]);
}