cses-cli 0.1.4

CSES CLI is a lightweight tool for using CSES from the command line.
pub mod api;
pub use api::{CsesApi, CsesHttpApi};

pub mod storage;
pub use storage::{FileStorage, Storage};

pub mod filesystem;
pub use filesystem::{ConcreteFilesystem, Filesystem};

pub mod resources;
use resources::DefaultResources;
pub use resources::{Resources, ResourcesProvider};
pub use ResourcesProvider as RP;

pub mod service;

pub mod command;
pub use command::Command;

pub mod ui;
use ui::Ui;

pub mod entities;

#[cfg(test)]
mod test;

#[cfg(custom_abort)]
mod abort_handler;
fn run() -> anyhow::Result<()> {
    #[cfg(custom_abort)]
    abort_handler::setup();
    let test = match std::env::var("CSES_CLI_TEST") {
        Ok(val) => !val.is_empty(),
        Err(_) => false,
    };
    let trace = match std::env::var("CSES_CLI_TRACE") {
        Ok(val) => !val.is_empty(),
        Err(_) => false,
    };
    let url = std::env::var("CSES_API_URL").unwrap_or_else(|_| "https://cses.fi/api".to_owned());

    let command = Command::from_command_line()?;
    let api = CsesHttpApi::new(url, trace);
    let storage = FileStorage::new(test)?;
    let filesystem = ConcreteFilesystem::default();
    let resources: Resources<DefaultResources> = Resources {
        api,
        storage,
        filesystem,
    };
    let mut ui = Ui::with_resources(test, resources);
    ui.run(command)?;
    Ok(())
}

fn main() {
    if let Err(err) = run() {
        ui::print_error(&err);
        std::process::exit(1);
    }
}