comtrya_lib/contexts/
user.rs1use 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}