use galm;
const VERSIONSTR: &'static str = env!("CARGO_PKG_VERSION");
const HELPSTR: &'static str = r"Usage:
galm [-f | --file (<file_path> | <string>)]
[-h | --help] [-v | --version]
Options:
-f --file file path.
-h --help Show this message.
-v --version Show version number.";
fn get_similar_param(input_param: &str) -> &str {
use galm::search::Iterator;
return [
"-f", "--file",
"-h", "--help",
"-v", "--version"
].iter().get_similar_word(input_param);
}
fn print_vec(vec: &Vec<&str>) {
use std::io::{stdout, Write, BufWriter};
let out = stdout();
let mut out = BufWriter::new(out.lock());
for word in vec {
out.write_all(word.as_bytes()).unwrap();
out.write_all(b"\n").unwrap();
}
}
fn main() {
let args: Vec<String> = std::env::args().collect();
for arg in args.iter() {
match &*arg.to_string() {
"-v" | "--version" => {
println!("galm version {}", VERSIONSTR);
return;
},
"-h" | "--help" => {
println!("{}", HELPSTR);
return;
},
_ => {}
}
}
match args.len() {
1 => {
println!("{}", HELPSTR);
return;
},
2 => {
use std::io::{self, Read};
let stdin = io::stdin();
let mut handle = stdin.lock();
let mut buffer = String::new();
let _ = handle.read_to_string(&mut buffer);
let galm = galm::new();
let sort_key = &*args[1];
let mut vec = buffer.lines().collect::<Vec<&str>>();
vec.sort_by_cached_key( |candidate| galm.get_word_distance(sort_key, candidate) );
print_vec(&vec);
return;
},
_ => {}
}
match &*args[2] {
"-f" | "--file" => {
if args.len() > 3 {
use std::fs::File;
use std::io::prelude::*;
let mut file = File::open(&*args[3]).unwrap();
let mut buffer = String::new();
let _ = file.read_to_string(&mut buffer);
let galm = galm::new();
let sort_key = &*args[1];
let mut vec = buffer.lines().collect::<Vec<&str>>();
vec.sort_by_cached_key( |candidate| galm.get_word_distance(sort_key, candidate) );
print_vec(&vec);
} else {
println!(r"Error:
filepath is not specified.");
}
},
arg => {
println!(r"Error:
not exists option: `{}`
most similar param name: `{}`
try 'galm --help' for more information",
arg,
get_similar_param(arg));
}
}
}