1
extern crate pretty_env_logger;
2
#[macro_use]
3
extern crate log;
4
use std::{env, str::FromStr};
5

            
6
use clap::Parser;
7
use commands::{run, Command};
8
use log::LevelFilter;
9
use protontweaks_api::Protontweaks;
10

            
11
pub mod apps;
12
pub mod commands;
13
pub mod config;
14
pub mod utils;
15

            
16
static VERSION_LONG: &str = concat!(env!("CARGO_PKG_VERSION"), " (", env!("COMPILE_TIME"), ")");
17

            
18
pub const API: Protontweaks = Protontweaks::new_with_url(env!("PROTONTWEAKS_API"));
19

            
20
#[derive(Parser, Debug)]
21
#[command(author, version, about)]
22
#[command(long_version = VERSION_LONG)]
23
#[command(args_conflicts_with_subcommands = true)]
24
struct Cli {
25
    #[command(subcommand)]
26
    command: Option<Command>,
27

            
28
    #[command(flatten)]
29
    run: run::CommandArgs,
30
}
31

            
32
fn get_log_level() -> LevelFilter {
33
    let default_level = env::var("RUST_LOG").unwrap_or_default();
34
    LevelFilter::from_str(&default_level).unwrap_or(LevelFilter::Warn)
35
}
36

            
37
#[tokio::main]
38
async fn main() {
39
    pretty_env_logger::formatted_builder()
40
        .filter(None, LevelFilter::Warn)
41
        .filter(Some("protontweaks"), get_log_level())
42
        .filter(Some("protontweaks_api"), get_log_level())
43
        .init();
44

            
45
    let args = Cli::parse();
46

            
47
    let command = args.command.unwrap_or(Command::Run(args.run));
48

            
49
    if let Err(error) = commands::handle(command).await {
50
        error!("{0}", error);
51
    }
52
}