use clap::Subcommand;
use crate::rpc::client::node;
#[derive(Subcommand, Debug, Clone)]
#[allow(clippy::large_enum_variant)]
pub enum NodeCommands {
Stats,
Status,
Shutdown {
#[clap(long, default_value_t = false)]
force: bool,
},
}
impl NodeCommands {
pub async fn run(self, node: &node::Client) -> anyhow::Result<()> {
match self {
Self::Stats => {
let stats = node.stats().await?;
for (name, details) in stats.iter() {
println!(
"{:23} : {:>6} ({})",
name, details.value, details.description
);
}
Ok(())
}
Self::Shutdown { force } => {
node.shutdown(force).await?;
Ok(())
}
Self::Status => {
let response = node.status().await?;
println!("Listening addresses: {:#?}", response.listen_addrs);
println!("Node ID: {}", response.addr.node_id);
println!("Version: {}", response.version);
if let Some(addr) = response.rpc_addr {
println!("RPC Addr: {}", addr);
}
Ok(())
}
}
}
}