use serde::{Deserialize, Serialize}; use crate::Error; /// Represent block as described in #[derive(Debug, Clone, Default, Serialize)] pub struct Block { pub full_text: String, #[serde(skip_serializing_if = "Option::is_none")] pub short_text: Option, #[serde(skip_serializing_if = "Option::is_none")] pub color: Option, #[serde(skip_serializing_if = "Option::is_none")] pub background: Option, #[serde(skip_serializing_if = "Option::is_none")] pub border: Option, #[serde(skip_serializing_if = "Option::is_none")] pub border_top: Option, #[serde(skip_serializing_if = "Option::is_none")] pub border_right: Option, #[serde(skip_serializing_if = "Option::is_none")] pub border_bottom: Option, #[serde(skip_serializing_if = "Option::is_none")] pub border_left: Option, #[serde(skip_serializing_if = "Option::is_none")] pub min_width: Option, #[serde(skip_serializing_if = "Option::is_none")] pub align: Option, #[serde(skip_serializing_if = "Option::is_none")] pub name: Option, #[serde(skip_serializing_if = "Option::is_none")] pub instance: Option, #[serde(skip_serializing_if = "Option::is_none")] pub urgent: Option, #[serde(skip_serializing_if = "Option::is_none")] pub separator: Option, #[serde(skip_serializing_if = "Option::is_none")] pub separator_block_width: Option, #[serde(skip_serializing_if = "Option::is_none")] pub markup: Option, } impl Block { pub fn write_stdout(&self) -> Result<(), Error> { use std::io::Write; let mut buf = serde_json::to_vec(self)?; buf.push(b'\n'); let mut writer = std::io::stdout().lock(); writer.write_all(&buf)?; writer.flush().map_err(Into::into) } } #[derive(Serialize, Debug, Clone, Copy)] #[serde(rename_all = "lowercase")] pub enum Align { Center, Right, Left, } #[derive(Serialize, Debug, Clone)] #[serde(untagged)] pub enum MinWidth { Pixels(usize), Text(String), } #[derive(Debug, Default, Clone, Serialize, Deserialize)] #[serde(default)] pub struct Click { pub name: Option, pub instance: Option, pub full_text: String, pub short_text: Option, pub color: Option, pub background: Option, pub button: u8, pub event: usize, pub modifiers: Option>, pub x: usize, pub y: usize, pub relative_x: usize, pub relative_y: usize, pub output_x: Option, pub output_y: Option, pub width: usize, pub height: usize, pub scale: usize, }