1
mod server;
2
use review_harvest::index::{check_index, read_entries, write_index};
3
use std::{error::Error, path::PathBuf};
4

            
5
const HELP: &str = "\
6
App
7

            
8
USAGE:
9
  update_ldpc [DIR]
10

            
11
FLAGS:
12
  -h, --help            Prints help information
13
";
14

            
15
#[derive(Debug)]
16
struct Args {
17
    dir: PathBuf,
18
}
19

            
20
fn parse_path(s: &std::ffi::OsStr) -> Result<std::path::PathBuf, &'static str> {
21
    Ok(s.into())
22
}
23

            
24
fn parse_args() -> Result<Args, pico_args::Error> {
25
    let mut pargs = pico_args::Arguments::from_env();
26

            
27
    // Help has a higher priority and should be handled separately.
28
    if pargs.contains(["-h", "--help"]) {
29
        print!("{}", HELP);
30
        std::process::exit(0);
31
    }
32
    let args = Args {
33
        dir: pargs.free_from_os_str(parse_path)?,
34
    };
35
    let remaining_arguments = pargs.finish();
36
    if !remaining_arguments.is_empty() {
37
        eprintln!("There are unused arguments:");
38
        for remaining in remaining_arguments {
39
            if let Ok(remaining) = remaining.into_string() {
40
                eprintln!("Unused argument: {}", remaining);
41
            }
42
        }
43
        eprint!("{}", HELP);
44
        std::process::exit(1);
45
    }
46

            
47
    Ok(args)
48
}
49

            
50
fn main() -> Result<(), Box<dyn Error>> {
51
    let args = match parse_args() {
52
        Ok(v) => v,
53
        Err(e) => {
54
            eprintln!("Error: {}.", e);
55
            eprint!("{}", HELP);
56
            std::process::exit(1);
57
        }
58
    };
59
    let entries = read_entries(&args.dir)?;
60
    write_index(&args.dir, &entries)?;
61
    check_index(&args.dir)?;
62
    Ok(())
63
}