dwm-status 1.10.0

Displays system information for dwm status bar.
Documentation
use crate::feature::Renderable;

#[derive(Debug)]
pub(super) struct Data {
    cache: String,
    template: String,
}

impl Data {
    pub(super) const fn new(template: String) -> Self {
        Self {
            cache: String::new(),
            template,
        }
    }

    pub(super) fn update(&mut self, one: f32, five: f32, fifteen: f32) {
        self.cache = self
            .template
            .replace("{CL1}", &format!("{:.2}", one))
            .replace("{CL5}", &format!("{:.2}", five))
            .replace("{CL15}", &format!("{:.2}", fifteen));
    }
}

impl Renderable for Data {
    fn render(&self) -> &str {
        &self.cache
    }
}

#[cfg(test)]
mod tests {
    use hamcrest2::assert_that;
    use hamcrest2::prelude::*;

    use super::*;

    #[test]
    fn render_with_default() {
        let object = Data::new("{CL1} {CL5} {CL15}".to_owned());

        assert_that!(object.render(), is(equal_to("")));
    }

    #[test]
    fn render_with_update() {
        let mut object = Data::new("{CL1} {CL5} {CL15}".to_owned());

        object.update(20.1234, 0.005, 5.3);

        assert_that!(object.render(), is(equal_to("20.12 0.00 5.30")));
    }

    #[test]
    fn render_with_update_and_missing_placeholder() {
        let mut object = Data::new("{CL1} - {CL15}".to_owned());

        object.update(20.1234, 0.005, 5.3);

        assert_that!(object.render(), is(equal_to("20.12 - 5.30")));
    }
}