fn main()

in rust-query-crlite/src/main.rs [641:695]


fn main() {
    let args = Cli::parse();

    stderrlog::new()
        .module(module_path!())
        .verbosity(args.verbose)
        .init()
        .unwrap();

    if std::fs::create_dir_all(&args.db).is_err() {
        error!("Could not create directory: {}", args.db.display());
        std::process::exit(1);
    }

    if args.update.is_some() {
        let (attachment_url, base_url) = match args.update.unwrap() {
            RemoteSettingsInstance::Dev => (STAGE_ATTACH_URL, STAGE_URL),
            RemoteSettingsInstance::Stage => (STAGE_ATTACH_URL, STAGE_URL),
            RemoteSettingsInstance::Prod => (PROD_ATTACH_URL, PROD_URL),
        };

        if let Err(e) = update_db(&args.db, attachment_url, base_url, &args.channel) {
            error!("{}", e.message);
            std::process::exit(1);
        }
    }

    let db = match CRLiteDB::load(&args.db) {
        Ok(db) => db,
        Err(e) => {
            error!("Error loading CRLite DB: {}", e.message);
            error!("Use --update [prod | stage] to populate DB.");
            std::process::exit(1);
        }
    };

    let result = match args.command {
        Subcommand::Signoff { ref host_file_url } => signoff(&db, host_file_url),
        Subcommand::Https { ref hosts } => {
            let hosts: Vec<&str> = hosts.iter().map(|x| x.as_str()).collect();
            query_https_hosts(&db, &hosts)
        }
        Subcommand::X509 { ref files } => query_certs(&db, files),
        Subcommand::Crtsh { ref id } => query_crtsh_id(&db, id),
    };

    match result {
        Ok(CmdResult::NoneRevoked) => std::process::exit(0),
        Ok(CmdResult::SomeRevoked) => std::process::exit(1),
        Err(e) => {
            error!("{}", e.message);
            std::process::exit(1)
        }
    }
}