shrine 0.1.0

Secrets manager written in rust
Documentation
use crate::shrine::{Closed, Shrine};
use crate::utils::read_password;
use crate::Error;
use regex::Regex;
use secrecy::Secret;

pub fn ls(
    shrine: Shrine<Closed>,
    password: Option<Secret<String>>,
    pattern: Option<&String>,
) -> Result<(), Error> {
    let regex = pattern
        .map(|p| Regex::new(p.as_ref()))
        .transpose()
        .map_err(Error::InvalidPattern)?;

    let password = password.unwrap_or_else(|| read_password(&shrine));

    let shrine = shrine.open(&password)?;

    let mut keys = shrine
        .keys()
        .into_iter()
        .filter(|k| regex.as_ref().map(|r| r.is_match(k)).unwrap_or(true))
        .collect::<Vec<String>>();
    keys.sort_unstable();

    for key in keys.iter() {
        println!("{}", key)
    }

    println!("-> {} keys found", keys.len());

    Ok(())
}