pub mod appeal;
pub mod bundle;
pub mod byte_size;
pub mod common;
pub mod config_cmd;
pub mod fetch;
pub mod key_gen;
pub mod node;
pub mod origin;
pub mod pool;
pub mod probe;
pub mod publish;
pub mod run;
pub mod setup;
pub mod whoami;
pub use appeal::{AppealArgs, AppealCommand, AppealSlashArgs};
pub use bundle::{BundleArgs, BundleCommand, BundlePullArgs};
pub use byte_size::parse_byte_size;
pub use common::{
CommonChainArgs, ConfigPathSource, LogFormat, default_client_data_dir, default_config_path,
default_data_dir,
};
pub use config_cmd::{ConfigArgs, ConfigCommand, ConfigInitArgs, ConfigValidateArgs};
pub use fetch::{ClientFetchArgs, FetchArgs};
pub use key_gen::KeyGenArgs;
pub use node::{
BondArgs, ChainArgs, DeregisterArgs, DoctorArgs, DrainArgs, EvictArgs, HealthArgs, LanesArgs,
LookupArgs, NodeArgs, NodeCommand, PoolsArgs, RegisterArgs, ReloadArgs, RotateKeyArgs,
RotateKeyTarget, SlashesArgs, StatusArgs, TopArgs, UnbondArgs, UpdateMultiaddrsArgs,
UpdateRegionArgs,
};
pub use origin::{OriginArgs, OriginCommand, OriginImportArgs};
pub use pool::{
PoolArgs, PoolAssignArgs, PoolChainArgs, PoolCloseArgs, PoolCommand, PoolListArgs,
PoolOpenArgs, PoolReclaimArgs, PoolTopUpArgs,
};
pub use probe::ProbeArgs;
pub use publish::{
AssignArgs, NamespaceArgs, NamespaceCommand, NamespaceCreateArgs, PublishArgs,
PublishChainArgs, PublishCommand, RevokeArgs,
};
pub use run::RunArgs;
pub use setup::SetupArgs;
pub use whoami::WhoamiArgs;
use std::path::PathBuf;
use clap::{Parser, Subcommand};
#[derive(Parser, Debug)]
#[command(
name = "decdn",
version,
about = "deCDN user CLI — probe, fetch, pools, publishing, node admin",
long_about = "User-facing deCDN CLI. Pairs with the `decdn-node` daemon: \
this binary carries every command a human types in a \
terminal (probe, fetch, payment pools, publishing, \
origin import, node admin, key-gen, config). The \
`node` subcommand group talks to a running daemon over \
the loopback admin RPC surface \
(`appendix-local-admin-http.md`) and fails cleanly on a \
host with no daemon running."
)]
pub struct Cli {
#[arg(long, global = true, value_name = "PATH")]
pub config: Option<PathBuf>,
#[arg(long, global = true, value_name = "LEVEL")]
pub log_level: Option<common::LogLevel>,
#[arg(short = 'v', long, global = true, action = clap::ArgAction::Count)]
pub verbose: u8,
#[command(subcommand)]
pub command: Command,
}
#[derive(Subcommand, Debug)]
pub enum Command {
KeyGen(KeyGenArgs),
Whoami(WhoamiArgs),
Config(ConfigArgs),
Probe(ProbeArgs),
Fetch(FetchArgs),
Setup(SetupArgs),
Node(NodeArgs),
Bundle(BundleArgs),
Origin(OriginArgs),
Pool(PoolArgs),
Publish(PublishArgs),
Appeal(AppealArgs),
}
#[cfg(test)]
mod tests;