jeeves 0.1.0

WIP: Automatically move or delete files
Documentation
use serde::Deserialize;

use crate::{Action, Flag, Predicate, SerializableRegex};

#[derive(Debug, Deserialize, PartialEq)]
pub struct Rule {
    #[serde(default)]
    pub flags: Vec<Flag>,
    #[serde(default)]
    pub patterns: Vec<SerializableRegex>,
    #[serde(default)]
    pub predicate: Option<Predicate>,
    pub action: Action,
}

#[test]
fn can_parse_rule() {
    use std::path::PathBuf;

    const S: &str = r#"{
        "flags": ["ignore case"],
        "patterns": [".*\\.pdf", ".*\\.md", ".*\\.csv", ".*\\.doc", ".*\\.docx"],
        "action": "move archives"
    }"#;

    let rule = serde_json::from_str::<Rule>(S).unwrap();
    println!("{:?}", rule);

    assert_eq!(
        rule,
        Rule {
            flags: vec![Flag::IgnoreCase],
            patterns: vec![".*\\.pdf", ".*\\.md", ".*\\.csv", ".*\\.doc", ".*\\.docx"]
                .into_iter()
                .map(|s| s.parse::<SerializableRegex>().unwrap())
                .collect(),
            predicate: None,
            action: Action::Move {
                to: PathBuf::from("archives")
            },
        }
    );
}