use crate::ported::bindings::wm::DEFAULT_UPDATE_INTERVAL;
use crate::ported::commands::lint::{ArgAction, ArgParser, Argument};
pub fn get_argparser() -> ArgParser {
ArgParser {
description: "Powerline lemonbar bindings.".to_string(), arguments: vec![
Argument {
flags: vec!["--i3".into()],
action: ArgAction::StoreTrue,
metavar: None,
help: "Subscribe for i3 events.".to_string(),
},
],
}
}
pub fn render<F>(mode: &str, render_fn: F) -> Vec<u8>
where
F: FnOnce(&str) -> String,
{
let rendered = render_fn(mode);
let mut buf = rendered.into_bytes();
buf.push(b'\n');
buf
}
pub fn update<F>(modes_slot: &mut String, new_mode: &str, render_fn: F) -> Vec<u8>
where
F: FnOnce(&str) -> String,
{
*modes_slot = new_mode.to_string();
render(modes_slot, render_fn)
}
pub fn main() {
let _parser = get_argparser();
eprintln!(
"powerline-bar: The 'bar' bindings are deprecated, please switch to 'lemonbar'"
);
let _interval = DEFAULT_UPDATE_INTERVAL;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn argparser_has_only_i3_flag() {
let p = get_argparser();
assert_eq!(p.description, "Powerline lemonbar bindings.");
assert_eq!(p.arguments.len(), 1);
assert_eq!(p.arguments[0].flags, vec!["--i3".to_string()]);
assert_eq!(p.arguments[0].action, ArgAction::StoreTrue);
}
#[test]
fn render_appends_newline_to_render_fn_output() {
let out = render("vis", |m| format!("statusline[{m}]"));
assert_eq!(out, b"statusline[vis]\n");
}
#[test]
fn update_sets_mode_then_renders() {
let mut mode = "default".to_string();
let out = update(&mut mode, "resize", |m| format!("M={m}"));
assert_eq!(mode, "resize");
assert_eq!(out, b"M=resize\n");
}
}