use serde::Serialize;
pub fn print_json<T: Serialize>(value: &T, type_name: &str) {
match serde_json::to_string_pretty(value) {
Ok(json) => println!("{}", json),
Err(e) => {
eprintln!("Error serializing {} to JSON: {}", type_name, e);
std::process::exit(1);
}
}
}
pub fn print_json_wrapped<T: Serialize>(field_name: &str, items: &[T], type_name: &str) {
let output = serde_json::json!({ field_name: items });
print_json(&output, type_name);
}
pub fn print_success_response(workflow_id: i64, message: &str) {
let output = serde_json::json!({
"workflow_id": workflow_id,
"status": "success",
"message": message
});
println!("{}", serde_json::to_string_pretty(&output).unwrap());
}
pub fn print_status_response(
workflow_id: i64,
status: &str,
message: &str,
extra: Option<serde_json::Value>,
) {
let mut output = serde_json::json!({
"workflow_id": workflow_id,
"status": status,
"message": message
});
if let Some(extra_fields) = extra
&& let Some(obj) = extra_fields.as_object()
{
for (key, value) in obj {
output[key] = value.clone();
}
}
println!("{}", serde_json::to_string_pretty(&output).unwrap());
}
pub fn print_error_json(message: &str, details: Option<serde_json::Value>) {
let mut output = serde_json::json!({
"status": "error",
"message": message
});
if let Some(d) = details {
output["details"] = d;
}
eprintln!("{}", serde_json::to_string_pretty(&output).unwrap());
}
pub fn print_error_json_and_exit(message: &str, details: Option<serde_json::Value>) -> ! {
print_error_json(message, details);
std::process::exit(1);
}
pub fn print_if_json<T: Serialize>(format: &str, value: &T, type_name: &str) -> bool {
if format == "json" {
print_json(value, type_name);
true
} else {
false
}
}
pub fn print_wrapped_if_json<T: Serialize>(
format: &str,
field_name: &str,
items: &[T],
type_name: &str,
) -> bool {
if format == "json" {
print_json_wrapped(field_name, items, type_name);
true
} else {
false
}
}