i3status_rs/blocks/packages/
snap.rs

1use tokio::process::Command;
2
3use super::*;
4
5#[derive(Default)]
6pub struct Snap;
7
8impl Snap {
9    pub fn new() -> Self {
10        Default::default()
11    }
12}
13
14#[async_trait]
15impl Backend for Snap {
16    fn name(&self) -> Cow<'static, str> {
17        "snap".into()
18    }
19
20    async fn get_updates_list(&self) -> Result<Vec<String>> {
21        let stdout = Command::new("sh")
22            .env("LC_LANG", "C")
23            .args(["-c", "snap refresh --list"])
24            .output()
25            .await
26            .error("Failed to run `snap refresh`")?
27            .stdout;
28
29        let updates = String::from_utf8(stdout)
30            .error("snap produced non-UTF8 output")?
31            .lines()
32            .filter_map(|line| (line.len() > 1).then_some(line.to_string()))
33            .collect();
34
35        Ok(updates)
36    }
37}