browser_automation_cli/
envelope.rs1use serde_json::{json, Value};
19
20use crate::error::CliError;
21
22pub fn print_success_json(data: Value) -> Result<(), CliError> {
24 let env = json!({
25 "schema_version": 1,
26 "ok": true,
27 "data": data,
28 });
29 println!(
30 "{}",
31 serde_json::to_string(&env).map_err(|e| {
32 CliError::new(
33 crate::error::ErrorKind::Software,
34 format!("json encode: {e}"),
35 )
36 })?
37 );
38 Ok(())
39}
40
41pub fn print_error_json(err: &CliError) -> Result<(), CliError> {
43 print_error_json_with_data(err, err.data().cloned())
44}
45
46pub fn print_error_json_with_data(err: &CliError, data: Option<Value>) -> Result<(), CliError> {
48 let mut env = json!({
49 "schema_version": 1,
50 "ok": false,
51 "error": {
52 "kind": err.kind().as_str(),
53 "message": err.message(),
54 "exit_code": err.exit_code(),
55 }
56 });
57 if let Some(s) = err.suggestion() {
58 env["error"]["suggestion"] = json!(s);
59 }
60 if let Some(d) = data {
61 env["data"] = d;
62 }
63 println!(
64 "{}",
65 serde_json::to_string(&env).map_err(|e| {
66 CliError::new(
67 crate::error::ErrorKind::Software,
68 format!("json encode: {e}"),
69 )
70 })?
71 );
72 Ok(())
73}