mindb 0.1.2

Lightweight embedded key–value store with write-ahead log and zstd compression.
Documentation
use std::error::Error;
use std::sync::Arc;

use mindb::db::{Database, DatabaseOptions, SecondaryIndexConfig};

#[test]
fn database_facade_crud_roundtrip() -> Result<(), Box<dyn Error>> {
    let tempdir = tempfile::tempdir()?;

    let mut options = DatabaseOptions::new(tempdir.path());
    options.wal_direct_io = false;
    options.secondary_indexes = SecondaryIndexConfig {
        full_text: Some(Arc::new(|_, value: &[u8]| {
            String::from_utf8(value.to_vec()).ok()
        })),
        ..SecondaryIndexConfig::default()
    };

    let db = Database::open(options)?;

    let key = b"crud-key".to_vec();
    let initial = b"alpha".to_vec();

    db.put(key.clone(), initial.clone())?;

    let fetched = db.get(&key)?;
    assert_eq!(fetched.as_deref(), Some(initial.as_slice()));

    let search_results = db.search("alpha")?.collect(&db)?;
    assert_eq!(search_results.len(), 1);
    assert_eq!(search_results[0], (key.clone(), initial.clone()));

    db.delete(key.clone())?;
    assert!(db.get(&key)?.is_none());

    db.sync()?;

    Ok(())
}