shardmap 0.2.1

Sharded embedded in-memory map with optional cache, protocol, and server internals
Documentation
use shardmap::ShardMap;

fn set_flag(cache: &ShardMap, name: &str, enabled: bool) {
    let key = format!("flag:{name}");
    let value = if enabled {
        b"on".as_slice()
    } else {
        b"off".as_slice()
    };
    cache.insert_slice_with_ttl(key.as_bytes(), value, Some(60_000));
}

fn is_enabled(cache: &ShardMap, name: &str) -> bool {
    let key = format!("flag:{name}");
    let prepared = cache.prepare_key(key.as_bytes());
    cache
        .get_prepared_owned(&prepared)
        .is_some_and(|value| value.as_ref() == b"on")
}

fn refresh_flags(cache: &ShardMap) -> shardmap::Result<()> {
    if !cache.try_acquire_lock(b"lock:refresh-flags", b"worker-1", 5_000)? {
        return Ok(());
    }

    set_flag(cache, "semantic-cache", true);
    set_flag(cache, "tcp-server", false);
    assert!(cache.release_lock(b"lock:refresh-flags", b"worker-1"));
    Ok(())
}

fn main() -> shardmap::Result<()> {
    let cache = ShardMap::new();

    refresh_flags(&cache)?;

    assert!(is_enabled(&cache, "semantic-cache"));
    assert!(!is_enabled(&cache, "tcp-server"));
    Ok(())
}