summaryrefslogtreecommitdiffstats
path: root/src/i3bar.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/i3bar.rs')
-rw-r--r--src/i3bar.rs23
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 {