use std::io; use zsh_history as zh; fn print_usage(prog: &str) { eprintln!("Usage:"); eprintln!(" {} merge # two–way merge", prog); eprintln!(" {} merge # three–way merge", prog); } fn main() -> Result<(), Box> { let args: Vec = std::env::args().collect(); let prog = &args[0]; if args.len() < 4 || args.len() > 5 || args[1] != "merge" { print_usage(prog); return Ok(()); } // Open files and create readers in one go. let mut readers: Vec<_> = args[2..] .iter() .map(|name| { std::fs::File::open(name) .map_err(zh::Error::Io) .map(zh::Reader::new) }) .collect::>()?; let mut out = io::stdout().lock(); let result = match readers.len() { 2 => { let ancestor = zh::Reader::new(io::empty()); zh::merge(readers.remove(0), readers.remove(0), ancestor, &mut out) } 3 => zh::merge( readers.remove(0), readers.remove(0), readers.remove(0), &mut out, ), _ => unreachable!(), }; result?; Ok(()) }