use clap::Parser;
fn parse_nonzero_usize(s: &str) -> Result<usize, String> {
let n: usize = s.parse().map_err(|e| format!("{e}"))?;
if n == 0 {
return Err("value must be at least 1".to_string());
}
Ok(n)
}
fn parse_nonzero_u32(s: &str) -> Result<u32, String> {
let n: u32 = s.parse().map_err(|e| format!("{e}"))?;
if n == 0 {
return Err("value must be at least 1".to_string());
}
Ok(n)
}
#[derive(Parser)]
#[command(version, about)]
pub struct Cli {
#[arg(
long,
default_value = "http://127.0.0.1:8332",
env = "CORY_CONNECTION",
help_heading = "RPC"
)]
pub connection: String,
#[arg(long, env = "CORY_RPC_USER", help_heading = "RPC")]
pub rpc_user: Option<String>,
#[arg(long, env = "CORY_RPC_PASS", help_heading = "RPC")]
pub rpc_pass: Option<String>,
#[arg(long, env = "CORY_RPC_COOKIE_FILE", help_heading = "RPC")]
pub rpc_cookie_file: Option<std::path::PathBuf>,
#[arg(
long,
env = "CORY_RPC_REQUESTS_PER_SECOND",
value_parser = parse_nonzero_u32,
help_heading = "RPC"
)]
pub rpc_requests_per_second: Option<u32>,
#[arg(
long,
env = "CORY_RPC_BATCH_CHUNK_SIZE",
default_value = "10",
value_parser = parse_nonzero_usize,
help_heading = "RPC"
)]
pub rpc_batch_chunk_size: usize,
#[arg(
long,
default_value = "4",
value_parser = parse_nonzero_usize,
help_heading = "RPC"
)]
pub rpc_concurrency: usize,
#[arg(long, default_value = "127.0.0.1", help_heading = "Server")]
pub bind: String,
#[arg(long, default_value = "3080", help_heading = "Server")]
pub port: u16,
#[arg(long, help_heading = "Labels")]
pub labels_rw: Vec<std::path::PathBuf>,
#[arg(long, help_heading = "Labels")]
pub labels_ro: Vec<std::path::PathBuf>,
#[arg(long, default_value = "50", help_heading = "Graph Limits")]
pub max_depth: usize,
#[arg(long, default_value = "500", help_heading = "Graph Limits")]
pub max_nodes: usize,
#[arg(long, default_value = "2000", help_heading = "Graph Limits")]
pub max_edges: usize,
#[arg(long, default_value = "10000", help_heading = "Cache")]
pub cache_tx_cap: usize,
#[arg(long, default_value = "50000", help_heading = "Cache")]
pub cache_prevout_cap: usize,
}