sentaku 0.4.1

Provide sentaku CUI interface
Documentation
use sentaku::cli::{MultiSentakuAction, MultiSentakuCli};
use sentaku::{SentakuError, SentakuItem};
use std::io::stdin;
use termion::event::Key;
use webbrowser;

fn main() {
    let mut stdin = stdin();
    let items = vec!["apple", "banana", "berry"]
        .iter()
        .map(|s| SentakuItem::from_str(s))
        .collect();
    let open_browser = |values: &Vec<String>| {
        for value in values.iter() {
            webbrowser::open(&format!("https://crates.io/search?q={}", value)).unwrap();
        }
    };
    let mut cli = MultiSentakuCli::new(&items);
    cli.add_key_assign(
        Key::Char('o'),
        MultiSentakuAction::Action(Box::new(open_browser)),
    );
    let result = cli.wait_for_input(&mut stdin);
    match result {
        Ok(values) => println!("{}", values.join(", ")),
        Err(SentakuError::Canceled) => println!("Canceled"),
        Err(SentakuError::NotTTY) => println!("Not in TTY mode"),
        _ => println!("Unexpected io error"),
    }
}