use anyhow::{Context, Result};
use clap::Subcommand;
use crate::settings::ClashSettings;
#[derive(Subcommand, Debug)]
pub enum TraceCmd {
Export {
#[arg(long)]
session: Option<String>,
},
}
pub fn run(cmd: TraceCmd) -> Result<()> {
match cmd {
TraceCmd::Export { session } => run_export(session),
}
}
fn run_export(session: Option<String>) -> Result<()> {
let session_id = match session {
Some(id) => id,
None => ClashSettings::active_session_id()?,
};
crate::trace::sync_trace(&session_id, None).context("syncing trace before export")?;
let doc = crate::trace::export_trace(&session_id)?;
let json = doc.to_json().context("serializing trace")?;
println!("{json}");
Ok(())
}