kivis 0.5.3

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

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

manifest![Manifest: UserRecord];

#[test]
fn test_lifecycle() -> anyhow::Result<()> {
    let mut store = Database::<_, Manifest>::new(MemoryStorage::default())?;

    let user = UserRecord {
        id: 1,
        data: vec![1, 2, 3, 4],
    };
    let key = store.insert(user.clone())?;
    assert_eq!(store.get(&key)?, Some(user.clone()));
    assert_eq!(key, UserRecordKey(1));
    store.remove(&key)?;
    assert_eq!(store.get(&key)?, None);
    Ok(())
}

#[test]
fn test_autoincrement_iter() -> anyhow::Result<()> {
    let mut store = Database::<_, Manifest>::new(MemoryStorage::default())?;

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

    store.insert(user)?;
    store.insert(another)?;

    let iter = store
        .iter_keys(UserRecordKey(0)..UserRecordKey(3))?
        .collect::<Result<Vec<_>, _>>()?;
    assert_eq!(iter, vec![UserRecordKey(2), UserRecordKey(1)]);
    Ok(())
}