aboutsummaryrefslogtreecommitdiffstats
path: root/src/bin/git-sugpatch.rs
blob: 01593071b5824ed9694542c03b4549596496ca01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
use std::env;
use std::process;

use exitcode;

use github_suggestion::{Client, Suggestion, SuggestionUrl};
use github_suggestion_cli::gseprintln;
use github_suggestion_cli::config::Config;
use github_suggestion_cli::error::Error;
use github_suggestion_cli::is_suggestion_id;


fn main() {
    let args: Vec<_> = env::args().collect();

    let config = match Config::get(&args) {
        Ok(c) => c,
        Err(e) => {
            gseprintln!(e);

            process::exit(exitcode::DATAERR);
        },
    };

    if config.suggestions.is_empty() {
        process::exit(111);
    }

    let suggestions: Vec<Result<Suggestion, Error>> = config.suggestions
        .iter()
        .map(|s| {
            let suggestion = if is_suggestion_id(s)? {
                let client = Client::new(
                    &config.github_token,
                    &config.owner,
                    &config.repo,
                ).unwrap();

                client.fetch(&s).unwrap()
            } else {
                let url: SuggestionUrl = args[1].parse().unwrap();

                let client = Client::new(
                    &config.github_token,
                    &url.owner,
                    &url.repo,
                ).unwrap();

                client.fetch(&url.comment_id).unwrap()
            };

            Ok(suggestion)
        })
        .collect();

    let errors: Vec<&Error> = suggestions.iter()
        .filter(|r| r.is_err())

        // We know these `Results` are `Err`s.
        .map(|r| r.as_ref().err().unwrap())
        .collect();

    if !errors.is_empty() {
        for error in errors {
            eprintln!("error: {}", error);
        }

        return;
    }

    suggestions
        .iter()

        // We've already checked for `Err`s above.
        .map(|r| r.as_ref().unwrap())
        .for_each(|s| print!("{}", s.diff().unwrap()));
}