2023-06-22 23:06:45 +01:00
|
|
|
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<Command>,
|
2024-01-20 23:42:43 +00:00
|
|
|
|
2024-05-10 22:40:00 +01:00
|
|
|
/// Prints the config JSON schema to `stdout`
|
|
|
|
/// and exits.
|
|
|
|
#[cfg(feature = "schema")]
|
|
|
|
#[arg(long("print-schema"))]
|
|
|
|
pub print_schema: bool,
|
|
|
|
|
2024-05-18 17:00:27 +01:00
|
|
|
/// Print debug information to stderr
|
|
|
|
/// TODO: Make bar follow this too
|
|
|
|
#[arg(long)]
|
|
|
|
pub debug: bool,
|
|
|
|
|
2024-05-18 17:01:17 +01:00
|
|
|
/// Format to output the response as.
|
|
|
|
#[arg(short, long)]
|
|
|
|
pub format: Option<Format>,
|
|
|
|
|
2024-01-20 23:42:43 +00:00
|
|
|
/// `bar_id` argument passed by `swaybar_command`.
|
|
|
|
/// Not used.
|
|
|
|
#[arg(short('b'), hide(true))]
|
|
|
|
sway_bar_id: Option<String>,
|
2023-06-22 23:06:45 +01:00
|
|
|
}
|
|
|
|
|
2024-05-18 17:01:17 +01:00
|
|
|
#[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")
|
|
|
|
),
|
2023-06-22 23:06:45 +01:00
|
|
|
}
|
|
|
|
}
|