oneTenCubed-hey 0.2.0

keyword-based note retrieval tool
Documentation
use crate::{search, task};
use std::io::{self, Write};

pub fn parse_args(args: &Vec<String>) -> Result<task::Task, ()> {
    let task: task::Task;

    if args.len() < 2 {
        return Err(());
    }

    if args[1] == "." {
        task = task::Task {
            cmnd: task::Command::New,
            input: None,
        }
    } else {
        task = task::Task {
            cmnd: task::Command::Search,
            input: Some(args[1..].join(" ")),
        }
    }

    Ok(task)
}

fn parse_title(title: String) -> String {
    let title: String = title.trim().parse().unwrap();
    let title: String = title.to_lowercase();
    let title: Vec<&str> = title.split(' ').collect();
    let title = title.join(" ");

    title
}

pub fn get_title() -> String {
    print!("Enter a title: ");
    io::stdout().flush().unwrap();

    let mut title = String::new();
    io::stdin().read_line(&mut title).expect("Error reading!");

    parse_title(title)
}

pub fn search_result(result_arr: Vec<search::Field>) {
    if result_arr.is_empty() {
        println!("No matches!");
        return;
    }

    for i in 0..result_arr.len() {
        println!("  {}. {}", i + 1, result_arr[i].file);
    }

    let mut input = String::new();
    print!("\n:: Enter file number to interact: ");
    io::stdout().flush().unwrap();
    io::stdin().read_line(&mut input).expect("Error reading!");

    if input.trim() == "" {
        return;
    }

    let mut title = String::new();
    let n = input.trim().parse::<usize>().expect("Invalid input!");
    match n <= result_arr.len() {
        true => {
            title = result_arr[n - 1].file.clone();
        }
        false => {
            println!("Invalid input!");
        }
    }

    input.clear();
    print!(":: Display content (r) OR open in editor (w)? [R/w] ");
    io::stdout().flush().unwrap();
    io::stdin().read_line(&mut input).expect("Error reading!");

    let mode: char = match input.trim() {
        "" => 'r',
        "r" => 'r',
        "R" => 'r',
        "w" => 'w',
        "W" => 'w',
        _ => {
            println!("Invalid input!");
            return;
        }
    };

    task::do_task(Ok(task::Task {
        cmnd: match mode {
            'r' => task::Command::Cat,
            'w' => task::Command::Editor,
            _ => {
                println!("");
                return;
            }
        },
        input: Some(title),
    }));
}