jisho 0.2.10

Jisho is a CLI tool & Rust library that provides a Japanese-English dictionary.
Documentation
use std::env;

use rustyline::DefaultEditor;

use jisho::{Entry, lookup};

fn print_results(results: Vec<&Entry>) {
    for entry in results.iter() {
        if entry.kanji.is_empty() {
            println!(
                "{} - {}",
                entry.reading,
                entry
                    .meanings
                    .iter()
                    .map(|s| s.glosses.join(", "))
                    .collect::<Vec<_>>()
                    .join("; ")
            );
        } else {
            println!(
                "{}{}】- {}",
                entry.kanji,
                entry.reading,
                entry
                    .meanings
                    .iter()
                    .map(|s| s.glosses.join(", "))
                    .collect::<Vec<_>>()
                    .join("; ")
            );
        }
    }
}

fn main() {
    let args: Vec<String> = env::args().collect();
    if args.contains(&"-v".to_string()) || args.contains(&"--version".to_string()) {
        let name = env!("CARGO_PKG_NAME");
        let version = env!("CARGO_PKG_VERSION");
        let jmdict_version = include_str!(concat!(env!("OUT_DIR"), "/jmdict_version"));
        println!("{} {} (JMdict {})", name, version, jmdict_version);
        std::process::exit(0);
    }
    if args.len() < 2 {
        let mut rl = DefaultEditor::new().unwrap();
        loop {
            let readline = rl.readline("> ");
            match readline {
                Ok(line) => {
                    if line.is_empty() {
                        continue;
                    }
                    let _ = rl.add_history_entry(line.as_str());
                    let input = line.trim().to_lowercase();
                    let results = lookup(&input);
                    print_results(results);
                }
                Err(_) => break,
            }
        }
    } else {
        let input = &args[1..].join(" ").trim().to_lowercase();
        let results = lookup(input);
        print_results(results);
    }
}