bp-util 0.11.0-beta.5

Modern, minimalistic & standard-compliant cold wallet library
Documentation
// Modern, minimalistic & standard-compliant cold wallet library.
//
// SPDX-License-Identifier: Apache-2.0
//
// Written in 2020-2023 by
//     Dr Maxim Orlovsky <orlovsky@lnp-bp.org>
//
// Copyright (C) 2020-2023 LNP/BP Standards Association. All rights reserved.
// Copyright (C) 2020-2023 Dr Maxim Orlovsky. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#[macro_use]
extern crate log;
extern crate serde_crate as serde;

use std::process::ExitCode;

use bp_util::{Args, BpCommand, Config, DescrStdOpts, Exec, LogLevel, RuntimeError};
use clap::Parser;

fn main() -> ExitCode {
    if let Err(err) = run() {
        eprintln!("Error: {err}");
        ExitCode::FAILURE
    } else {
        ExitCode::SUCCESS
    }
}

fn run() -> Result<(), RuntimeError> {
    let mut args = Args::<BpCommand, DescrStdOpts>::parse();
    args.process();
    LogLevel::from_verbosity_flag_count(args.verbose).apply();
    trace!("Command-line arguments: {:#?}", &args);

    eprintln!("BP: command-line wallet for bitcoin protocol");
    eprintln!("    by LNP/BP Standards Association\n");

    // TODO: Update arguments basing on the configuration
    let conf = Config::load(&args.conf_path("bp"));
    debug!("Executing command: {}", args.command);
    args.exec(conf, "bp")
}