rucksack 0.9.0

A terminal-based secrets manager, generator, and importer/exporter (Firefox, Chrome) backed with a concurrent hashmap
Documentation
use rucksack_db::records::Kind;

use super::Column;

#[derive(Clone, Debug, Default)]
pub struct Opts {
    pub all_tags: Option<Vec<String>>,
    pub any_tags: Option<Vec<String>>,
    pub backup_files: bool,
    pub category: String,
    pub categories: bool,
    pub decrypted: bool,
    pub group_by_category: bool,
    pub group_by_kind: bool,
    pub group_by_name: bool,
    pub group_by_password: bool,
    pub group_by_hash: bool,
    pub hash_fields: Vec<Column>,
    pub kind: Kind,
    pub kinds: bool,
    pub latest_only: bool,
    pub only_deleted: bool,
    pub only_keys: bool,
    pub password_history: bool,
    pub reveal: bool,
    pub skip_deleted: bool,
    pub tags: bool,
    pub with_passwd: bool,
    pub with_status: bool,
}

pub fn defaults() -> Opts {
    Opts {
        ..Default::default()
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_defaults() {
        let opts = defaults();
        assert!(!opts.backup_files);
        assert!(!opts.categories);
        assert!(!opts.decrypted);
        assert_eq!(opts.category, "");
    }

    #[test]
    fn test_opts_default() {
        let opts = Opts::default();
        assert!(!opts.backup_files);
        assert!(!opts.reveal);
        assert!(!opts.skip_deleted);
        assert!(opts.all_tags.is_none());
        assert!(opts.any_tags.is_none());
    }

    #[test]
    fn test_opts_clone() {
        let opts1 = Opts::default();
        let opts2 = opts1.clone();
        assert_eq!(opts1.backup_files, opts2.backup_files);
        assert_eq!(opts1.categories, opts2.categories);
    }
}