use crate::ipc::commands::Command; use crate::ipc::responses::Response; use clap::Parser; use serde::{Deserialize, Serialize}; #[derive(Parser, Debug, Serialize, Deserialize)] #[command(version)] pub struct Args { #[command(subcommand)] pub command: Option, /// Prints the config JSON schema to `stdout` /// and exits. #[cfg(feature = "schema")] #[arg(long("print-schema"))] pub print_schema: bool, /// Print debug information to stderr /// TODO: Make bar follow this too #[arg(long)] pub debug: bool, /// Format to output the response as. #[arg(short, long)] pub format: Option, /// `bar_id` argument passed by `swaybar_command`. /// Not used. #[arg(short('b'), hide(true))] sway_bar_id: Option, } #[derive(Debug, Serialize, Deserialize, Default, ValueEnum, Clone, Copy)] pub enum Format { #[default] Plain, Json, } pub fn handle_response(response: Response, format: Format) { match format { Format::Plain => match response { Response::Ok => println!("ok"), Response::OkValue { value } => println!("{value}"), Response::Err { message } => eprintln!("error\n{}", message.unwrap_or_default()), }, Format::Json => println!( "{}", serde_json::to_string(&response).expect("to be valid json") ), } }