comtrya_lib/contexts/
user.rs

1use crate::contexts::{Context, ContextProvider};
2use anyhow::Result;
3use dirs_next::{config_dir, data_dir, data_local_dir, document_dir, home_dir};
4
5pub struct UserContextProvider {}
6
7impl ContextProvider for UserContextProvider {
8    fn get_prefix(&self) -> String {
9        String::from("user")
10    }
11
12    fn get_contexts(&self) -> Result<Vec<super::Context>> {
13        Ok(vec![
14            Context::KeyValueContext(String::from("id"), self.get_uid().to_string().into()),
15            Context::KeyValueContext(String::from("name"), whoami::realname().into()),
16            Context::KeyValueContext(String::from("username"), whoami::username().into()),
17            Context::KeyValueContext(
18                String::from("home_dir"),
19                home_dir()
20                    .map(Into::into)
21                    .unwrap_or_else(|| "unknown".into()),
22            ),
23            Context::KeyValueContext(
24                String::from("config_dir"),
25                config_dir()
26                    .map(Into::into)
27                    .unwrap_or_else(|| "unknown".into()),
28            ),
29            Context::KeyValueContext(
30                String::from("data_dir"),
31                data_dir()
32                    .map(Into::into)
33                    .unwrap_or_else(|| "unknown".into()),
34            ),
35            Context::KeyValueContext(
36                String::from("data_local_dir"),
37                data_local_dir()
38                    .map(Into::into)
39                    .unwrap_or_else(|| "unknown".into()),
40            ),
41            Context::KeyValueContext(
42                String::from("document_dir"),
43                document_dir()
44                    .map(Into::into)
45                    .unwrap_or_else(|| "unknown".into()),
46            ),
47        ])
48    }
49}
50
51impl UserContextProvider {
52    #[cfg(unix)]
53    fn get_uid(&self) -> u32 {
54        uzers::get_current_uid()
55    }
56
57    #[cfg(not(unix))]
58    fn get_uid(&self) -> u32 {
59        0
60    }
61}