use clap::{Parser, Subcommand};
use std::path::PathBuf;
#[derive(Parser)]
#[command(name = "omnimesh-cli")]
#[command(about = "OMNI-MESH command-line tool for debugging and monitoring", long_about = None)]
struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
Inspect {
#[arg(value_name = "MESSAGE")]
message: String,
#[arg(short, long)]
full: bool,
},
Send {
#[arg(short, long)]
from: String,
#[arg(short, long)]
to: String,
#[arg(short, long)]
payload: String,
#[arg(short = 'P', long, default_value = "normal")]
priority: String,
#[arg(short = 'T', long, default_value = "raw")]
payload_type: String,
},
List {
#[arg(short, long, default_value = "./dtn_store")]
store: PathBuf,
#[arg(short, long)]
from: Option<String>,
#[arg(short, long)]
to: Option<String>,
#[arg(short, long, default_value = "10")]
limit: usize,
},
Stats {
#[arg(short, long, default_value = "http://127.0.0.1:9090/metrics")]
endpoint: String,
#[arg(short, long)]
watch: Option<u64>,
},
Metrics {
#[arg(short, long, default_value = "http://127.0.0.1:9090/metrics")]
endpoint: String,
#[arg(short, long)]
filter: Option<String>,
},
Trace {
#[arg(value_name = "MESSAGE_ID")]
message_id: String,
#[arg(short, long)]
follow: bool,
},
Verify {
#[arg(value_name = "FILE")]
file: PathBuf,
#[arg(short, long)]
verbose: bool,
},
Store {
#[arg(short, long, default_value = "./dtn_store")]
path: PathBuf,
#[arg(short, long)]
stats: bool,
#[arg(short, long)]
dedup: bool,
},
}
fn main() {
let cli = Cli::parse();
match cli.command {
Commands::Inspect { message, full } => {
println!("Inspecting message: {}", message);
println!("Full payload: {}", full);
println!("\n[Not yet implemented - Week 2 Day 2-3]");
}
Commands::Send {
from,
to,
payload,
priority,
payload_type,
} => {
println!("Sending message:");
println!(" From: {}", from);
println!(" To: {}", to);
println!(" Payload: {}", payload);
println!(" Priority: {}", priority);
println!(" Type: {}", payload_type);
println!("\n[Not yet implemented - Week 2 Day 2-3]");
}
Commands::List {
store,
from,
to,
limit,
} => {
println!("Listing messages from: {:?}", store);
if let Some(f) = from {
println!(" Filter from: {}", f);
}
if let Some(t) = to {
println!(" Filter to: {}", t);
}
println!(" Limit: {}", limit);
println!("\n[Not yet implemented - Week 2 Day 2-3]");
}
Commands::Stats { endpoint, watch } => {
println!("Fetching stats from: {}", endpoint);
if let Some(interval) = watch {
println!(" Watch mode: refresh every {} seconds", interval);
}
println!("\n[Not yet implemented - Week 2 Day 2-3]");
}
Commands::Metrics { endpoint, filter } => {
println!("Fetching metrics from: {}", endpoint);
if let Some(f) = filter {
println!(" Filter: {}", f);
}
println!("\n[Not yet implemented - Week 2 Day 2-3]");
}
Commands::Trace { message_id, follow } => {
println!("Tracing message: {}", message_id);
println!("Follow mode: {}", follow);
println!("\n[Not yet implemented - Week 2 Day 2-3]");
}
Commands::Verify { file, verbose } => {
println!("Verifying message from: {:?}", file);
println!("Verbose: {}", verbose);
println!("\n[Not yet implemented - Week 2 Day 2-3]");
}
Commands::Store { path, stats, dedup } => {
println!("Inspecting DTN store: {:?}", path);
println!("Show stats: {}", stats);
println!("Show dedup: {}", dedup);
println!("\n[Not yet implemented - Week 2 Day 2-3]");
}
}
}