ic-query-cli 0.22.5

Command-line wrapper for read-only Internet Computer metadata queries
Documentation
//! Clap specifications for direct NNS Governance reports.

#[cfg(test)]
use crate::cli::clap::render_help;
use crate::{
    cli::common::{COLLECTION_MODE_LIVE, collection_help},
    nns::leaf,
};
use clap::Command as ClapCommand;
use ic_query::nns::governance::DEFAULT_NNS_GOVERNANCE_SOURCE_ENDPOINT;

const GOVERNANCE_HELP_AFTER: &str = "\
Examples:
  icq nns governance economics
  icq nns governance metrics
  icq nns governance reward-event
  icq nns governance maturity-modulation";

const ECONOMICS_HELP_AFTER: &str = "\
Examples:
  icq nns governance economics
  icq nns governance economics --json";

const METRICS_HELP_AFTER: &str = "\
Examples:
  icq nns governance metrics
  icq nns governance metrics --json";

const REWARD_EVENT_HELP_AFTER: &str = "\
Examples:
  icq nns governance reward-event
  icq nns governance reward-event --json";

const MATURITY_MODULATION_HELP_AFTER: &str = "\
Examples:
  icq nns governance maturity-modulation
  icq nns governance maturity-modulation --json";

pub(super) fn governance_command() -> ClapCommand {
    ClapCommand::new("governance")
        .bin_name("icq nns governance")
        .about("Inspect NNS Governance economics, metrics, and rewards")
        .subcommand_required(true)
        .subcommand(governance_economics_command())
        .subcommand(governance_metrics_command())
        .subcommand(governance_reward_event_command())
        .subcommand(governance_maturity_modulation_command())
        .after_help(GOVERNANCE_HELP_AFTER)
}

pub(in crate::nns) fn governance_economics_command() -> ClapCommand {
    report_command(
        "economics",
        "Show NNS Governance network economics parameters",
        ECONOMICS_HELP_AFTER,
    )
}

pub(in crate::nns) fn governance_metrics_command() -> ClapCommand {
    report_command(
        "metrics",
        "Show cached NNS Governance metrics",
        METRICS_HELP_AFTER,
    )
}

pub(in crate::nns) fn governance_reward_event_command() -> ClapCommand {
    report_command(
        "reward-event",
        "Show the latest NNS Governance voting reward event",
        REWARD_EVENT_HELP_AFTER,
    )
}

pub(in crate::nns) fn governance_maturity_modulation_command() -> ClapCommand {
    report_command(
        "maturity-modulation",
        "Show current NNS Governance maturity modulation",
        MATURITY_MODULATION_HELP_AFTER,
    )
}

fn report_command(name: &'static str, about: &'static str, examples: &'static str) -> ClapCommand {
    ClapCommand::new(name)
        .bin_name(format!("icq nns governance {name}"))
        .about(about)
        .arg(leaf::json_arg())
        .arg(
            leaf::source_endpoint_arg(DEFAULT_NNS_GOVERNANCE_SOURCE_ENDPOINT)
                .help("IC API endpoint used for the native NNS Governance query"),
        )
        .after_help(collection_help(COLLECTION_MODE_LIVE, examples))
}

#[cfg(test)]
pub(in crate::nns) fn governance_usage() -> String {
    render_help(governance_command())
}

#[cfg(test)]
pub(in crate::nns) fn governance_economics_usage() -> String {
    render_help(governance_economics_command())
}

#[cfg(test)]
pub(in crate::nns) fn governance_metrics_usage() -> String {
    render_help(governance_metrics_command())
}

#[cfg(test)]
pub(in crate::nns) fn governance_reward_event_usage() -> String {
    render_help(governance_reward_event_command())
}

#[cfg(test)]
pub(in crate::nns) fn governance_maturity_modulation_usage() -> String {
    render_help(governance_maturity_modulation_command())
}