Lines
97.14 %
Functions
37.5 %
mod server;
use review_harvest::git::harvest;
use std::path::PathBuf;
const HELP: &str = "\
harvest
USAGE:
harvest [OPTIONS]
FLAGS:
-h, --help Prints help information
OPTIONS:
--input PATH Sets an input path
--output-dir PATH Sets an output path
";
#[derive(Debug)]
struct Args {
input: PathBuf,
output_dir: PathBuf,
}
fn parse_path(s: &std::ffi::OsStr) -> Result<std::path::PathBuf, &'static str> {
Ok(s.into())
fn parse_args() -> Result<Args, pico_args::Error> {
let mut pargs = pico_args::Arguments::from_env();
// Help has a higher priority and should be handled separately.
if pargs.contains(["-h", "--help"]) {
print!("{}", HELP);
std::process::exit(0);
let args = Args {
input: pargs.value_from_os_str("--input", parse_path)?,
output_dir: pargs.value_from_os_str("--output-dir", parse_path)?,
};
let remaining_arguments = pargs.finish();
if !remaining_arguments.is_empty() {
eprintln!("There are unused arguments:");
for remaining in remaining_arguments {
if let Ok(remaining) = remaining.into_string() {
eprintln!("Unused argument: {}", remaining);
std::process::exit(1);
Ok(args)
fn main() {
let args = match parse_args() {
Ok(v) => v,
Err(e) => {
eprintln!("Error: {}.", e);
harvest(&args.input, &args.output_dir);