Skip to main content

soroban_cli/commands/
global.rs

1use clap::builder::styling::{AnsiColor, Effects, Styles};
2use std::path::PathBuf;
3
4use super::{config, HEADING_GLOBAL};
5
6const USAGE_STYLES: Styles = Styles::styled()
7    .header(AnsiColor::Green.on_default().effects(Effects::BOLD))
8    .usage(AnsiColor::Green.on_default().effects(Effects::BOLD))
9    .literal(AnsiColor::Cyan.on_default().effects(Effects::BOLD))
10    .placeholder(AnsiColor::Cyan.on_default().effects(Effects::BOLD))
11    .error(AnsiColor::Red.on_default().effects(Effects::BOLD))
12    .valid(AnsiColor::Cyan.on_default().effects(Effects::BOLD))
13    .invalid(AnsiColor::Yellow.on_default().effects(Effects::BOLD));
14
15#[derive(Debug, clap::Args, Clone, Default)]
16#[group(skip)]
17#[allow(clippy::struct_excessive_bools)]
18#[command(styles = USAGE_STYLES)]
19pub struct Args {
20    #[clap(flatten)]
21    pub locator: config::locator::Args,
22
23    /// Filter logs output. To turn on `stellar_cli::log::footprint=debug` or off `=off`. Can also use env var `RUST_LOG`.
24    #[arg(long, short = 'f', global = true, help_heading = HEADING_GLOBAL)]
25    pub filter_logs: Vec<String>,
26
27    /// Do not write logs to stderr including `INFO`
28    #[arg(long, short = 'q', global = true, help_heading = HEADING_GLOBAL)]
29    pub quiet: bool,
30
31    /// Log DEBUG events
32    #[arg(long, short = 'v', global = true, help_heading = HEADING_GLOBAL)]
33    pub verbose: bool,
34
35    /// Log DEBUG and TRACE events
36    #[arg(long, visible_alias = "vv", global = true, help_heading = HEADING_GLOBAL)]
37    pub very_verbose: bool,
38
39    /// Do not cache your simulations and transactions
40    #[arg(long, env = "STELLAR_NO_CACHE", global = true, help_heading = HEADING_GLOBAL)]
41    pub no_cache: bool,
42}
43
44#[derive(thiserror::Error, Debug)]
45pub enum Error {
46    #[error("reading file {filepath}: {error}")]
47    CannotReadLedgerFile {
48        filepath: PathBuf,
49        error: soroban_ledger_snapshot::Error,
50    },
51
52    #[error("committing file {filepath}: {error}")]
53    CannotCommitLedgerFile {
54        filepath: PathBuf,
55        error: soroban_ledger_snapshot::Error,
56    },
57}
58
59impl Args {
60    pub fn log_level(&self) -> Option<tracing::Level> {
61        if self.quiet {
62            None
63        } else if self.very_verbose {
64            Some(tracing::Level::TRACE)
65        } else if self.verbose {
66            Some(tracing::Level::DEBUG)
67        } else {
68            Some(tracing::Level::INFO)
69        }
70    }
71}