aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
blob: f0482d0807052cc17793bb8710956af26c72cd04 (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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#[macro_use]
extern crate error_chain;
extern crate getopts;

extern crate meetup_find_events_rss;

use getopts::Options;

use std::env;
use std::process::exit;

use meetup_find_events_rss::build_rss;

mod errors {
    error_chain! {}
}

use errors::*;

fn main() {
    if let Err(ref e) = run() {
        use error_chain::ChainedError;

        eprintln!("{}", e.display_chain());
        exit(1);
    }
}

fn print_usage(opts: Options) {
    let brief = "usage: meetup-find-events-rss";
    print!("{}", opts.usage(&brief));
}

fn run() -> Result<()> {
    let args: Vec<String> = env::args().collect();

    let mut opts = Options::new();
    opts.reqopt(
        "",
        "meetup-api-token",
        "Meetup.com API token (required)",
        "TOKEN"
    );
    opts.reqopt(
        "",
        "latitude",
        "Origin latitude (required)",
        "LATITUDE",
    );
    opts.reqopt(
        "",
        "longitude",
        "Origin longitude (required)",
        "LONGITUDE",
    );
    opts.reqopt(
        "",
        "end-date",
        "Search for events from now until DATE (e.g. \"2018-01-31\") (required)",
        "DATE",
    );
    opts.optflag("h", "help", "print this help menu");

    let opt_matches = match opts.parse(&args[1..]) {
        Ok(m) => m,
        Err(f) => {
            if args.contains(&"-h".to_owned()) ||
                    args.contains(&"--help".to_owned()) {
                print_usage(opts);

                return Ok(());
            }

            eprintln!("meetup-find-events-rss: error: {}", f.to_string());
            exit(1);
        },
    };

    if opt_matches.opt_present("h") {
        print_usage(opts);

        return Ok(());
    }

    let meetup_token = opt_matches.opt_str("meetup-api-token").unwrap();
    let latitude = opt_matches.opt_str("latitude").unwrap();
    let longitude = opt_matches.opt_str("longitude").unwrap();
    let end_date = opt_matches.opt_str("end-date").unwrap();

    build_rss::write_feed(
        meetup_token,
        latitude,
        longitude,
        end_date,
        None,
        None,
    ).chain_err(|| "could not write RSS feed.")?;

    Ok(())
}