use clap::Args;
use serde::Serialize;
use crate::output::OutputFormat;
use super::daemon_registry::{live_entries, DaemonRegistryEntry};
#[derive(Debug, Clone, Args, Default)]
pub struct DaemonListArgs {}
#[derive(Debug, Serialize)]
struct DaemonListOutput<'a> {
daemons: &'a [DaemonRegistryEntry],
}
impl DaemonListArgs {
pub fn run(&self, format: OutputFormat, quiet: bool) -> anyhow::Result<()> {
let entries = live_entries();
if quiet {
return Ok(());
}
match format {
OutputFormat::Json | OutputFormat::Compact => {
let out = DaemonListOutput { daemons: &entries };
println!("{}", serde_json::to_string_pretty(&out)?);
}
OutputFormat::Text | OutputFormat::Sarif | OutputFormat::Dot => {
if entries.is_empty() {
println!("No daemons running");
} else {
println!("PROJECT\tPID\tSOCKET\tSTARTED_AT");
for e in &entries {
println!(
"{}\t{}\t{}\t{}",
e.project.display(),
e.pid,
e.socket.display(),
e.started_at
);
}
}
}
}
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn list_args_default_constructs() {
let _args = DaemonListArgs::default();
}
}