dwm-status 1.8.1

Displays system information for dwm status bar.
Documentation
pub(crate) struct Match<'a> {
    interface: &'static str,
    member: Option<&'static str>,
    path: &'a str,
}

impl<'a> Match<'a> {
    pub(crate) fn new<M: Into<Option<&'static str>>>(
        interface: &'static str,
        member: M,
        path: &'a str,
    ) -> Self {
        Self {
            interface,
            member: member.into(),
            path,
        }
    }

    pub(crate) fn build(self) -> String {
        let member = self
            .member
            .map_or_else(String::new, |m| format!(",member='{}'", m));

        format!(
            "type='signal',path='{}',interface='{}'{}",
            self.path, self.interface, member
        )
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn match_build() {
        assert_eq!(
            Match::new(
                "org.freedesktop.DBus.Properties",
                "DeviceAdded",
                "/org/freedesktop/UPower",
            )
            .build(),
            "type='signal',path='/org/freedesktop/UPower',interface='org.freedesktop.DBus.\
             Properties',member='DeviceAdded'"
        );
    }

    #[test]
    fn match_build_without_member() {
        assert_eq!(
            Match::new(
                "org.freedesktop.UPower",
                None,
                "/org/freedesktop/UPower/devices/battery_BAT0",
            )
            .build(),
            "type='signal',path='/org/freedesktop/UPower/devices/battery_BAT0',interface='org.\
             freedesktop.UPower'"
        );
    }
}