summaryrefslogtreecommitdiff
path: root/src/main.rs
blob: e2b74d396115306de53d198440f66f9d11d471cd (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
//! Orrery: an ASCII sci-fi-fantasy game.
//!
//! `orrery` plays; `orrery names` and `orrery ship` print what the
//! generators make, without the TUI.

mod app;
mod cli;
mod dungeon;
mod names;
mod scenes;
mod seed;
mod term;

use std::process::ExitCode;

fn main() -> ExitCode {
    let args: Vec<String> = std::env::args().skip(1).collect();
    match cli::parse(&args) {
        Ok(cli::Command::Play { seed }) => match app::run(seed.unwrap_or_else(seed::from_clock)) {
            Ok(()) => ExitCode::SUCCESS,
            Err(e) => {
                eprintln!("orrery: {e}");
                ExitCode::FAILURE
            }
        },
        Ok(cli::Command::Names(opts)) => {
            cli::print_names(&opts);
            ExitCode::SUCCESS
        }
        Ok(cli::Command::Ship { seed, which }) => {
            cli::print_ship(seed, which);
            ExitCode::SUCCESS
        }
        Ok(cli::Command::Help) => {
            print!("{}", cli::USAGE);
            ExitCode::SUCCESS
        }
        Err(msg) => {
            eprintln!("orrery: {msg}\n\n{}", cli::USAGE);
            ExitCode::from(2)
        }
    }
}