diff options
Diffstat (limited to 'src/i3bar.rs')
-rw-r--r-- | src/i3bar.rs | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/i3bar.rs b/src/i3bar.rs index 94cd036..bdc92fa 100644 --- a/src/i3bar.rs +++ b/src/i3bar.rs @@ -24,8 +24,8 @@ pub struct Block { pub border_left: Option<usize>, #[serde(skip_serializing_if = "Option::is_none")] pub min_width: Option<MinWidth>, - #[serde(skip_serializing_if = "Option::is_none")] - pub align: Option<Align>, + #[serde(skip_serializing_if = "Align::is_left")] + pub align: Align, #[serde(skip_serializing_if = "Option::is_none")] pub name: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] @@ -41,26 +41,29 @@ pub struct Block { } impl Block { - pub fn write_stdout(&self) -> Result<(), Error> { - use std::io::Write; - + pub fn write_to<W: std::io::Write>(&self, w: &mut W) -> Result<(), Error> { 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) + w.write_all(&buf)?; + w.flush().map_err(Into::into) } } -#[derive(Serialize, Debug, Clone, Copy)] +#[derive(Debug, Copy, Clone, Default, Serialize)] #[serde(rename_all = "lowercase")] pub enum Align { Center, Right, + #[default] Left, } +impl Align { + fn is_left(&self) -> bool { + matches!(self, Self::Left) + } +} + #[derive(Serialize, Debug, Clone)] #[serde(untagged)] pub enum MinWidth { |