rskey 0.4.0

A simple persistent key-value store that wraps HashMap, with a basic CLI tool to list, get, and set key-value pairs.
Documentation
use anyhow::Context;
use rskey::Store;
use std::env;

const USAGE: &str = r"Usage:
rskey list - list all key-value pairs
rskey get KEY - show value for KEY
rskey set KEY VALUE - set KEY to VALUE";

fn main() -> anyhow::Result<()> {
    let path = "store.kv";
    let mut s = Store::<String>::open(path).with_context(|| format!("reading {path}"))?;
    let raw_args: Vec<_> = env::args().collect();
    let args: Vec<_> = raw_args.iter().map(String::as_str).collect();
    match args.get(1..) {
        Some(["list"]) => {
            for (k, v) in s {
                println!("{k}: {v}");
            }
        }
        Some(["get", key]) => {
            if let Some(value) = s.get(*key) {
                println!("{key}: {value}");
            } else {
                println!(r#"key "{key}" not found"#);
            };
        }
        Some(["set", key, value]) => {
            s.insert((*key).to_string(), (*value).to_string());
            s.sync().with_context(|| format!("writing {path}"))?;
        }
        _ => {
            println!("{USAGE}");
        }
    }
    Ok(())
}