From 12019a7550b3c37565f7c66c89f6aa58a5af3e11 Mon Sep 17 00:00:00 2001 From: Cedric Stephan Date: Mon, 27 Jul 2026 11:51:31 +0200 Subject: [PATCH] fix(cli): handle agent JSON serialization errors --- rust/src/cli/agent_cmd.rs | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/rust/src/cli/agent_cmd.rs b/rust/src/cli/agent_cmd.rs index e130e7c8e8..37921df91e 100644 --- a/rust/src/cli/agent_cmd.rs +++ b/rust/src/cli/agent_cmd.rs @@ -55,10 +55,7 @@ pub(crate) fn cmd_agent(args: &[String]) { Some("list") => { let records = agent_registry::list(); if as_json { - println!( - "{}", - serde_json::to_string_pretty(&records).expect("serializable") - ); + print_json_or_exit(&records); return; } if records.is_empty() { @@ -94,12 +91,9 @@ pub(crate) fn cmd_agent(args: &[String]) { match agent_registry::get(&agent_id) { Some(record) => { if as_json { - println!( - "{}", - serde_json::to_string_pretty(&record).expect("serializable") - ); + print_json_or_exit(&record); } else { - println!("{}", serde_json::to_string_pretty(&record).expect("ok")); + print_json_or_exit(&record); if let Some(domain) = flag("--trust-domain") { println!("spiffe id: {}", agent_registry::spiffe_id(&record, &domain)); } @@ -166,10 +160,7 @@ pub(crate) fn cmd_agent(args: &[String]) { }; let result = agent_registry::check(&agent_id); if as_json { - println!( - "{}", - serde_json::to_string_pretty(&result).expect("serializable") - ); + print_json_or_exit(&result); } else { println!( "{}: {} — {}", @@ -207,6 +198,13 @@ fn exit_usage(usage: &str) -> ! { std::process::exit(2); } +fn print_json_or_exit(value: &T) { + match serde_json::to_string_pretty(value) { + Ok(json) => println!("{json}"), + Err(error) => exit_err(&format!("cannot serialize JSON output: {error}")), + } +} + fn exit_err(message: &str) -> ! { eprintln!("agent: {message}"); std::process::exit(1);