1use crate::Trust;
2
3impl Trust {
4 pub fn from_path_ownership(path: &std::path::Path) -> std::io::Result<Self> {
6 Ok(if crate::identity::is_path_owned_by_current_user(path)? {
7 Trust::Full
8 } else {
9 Trust::Reduced
10 })
11 }
12}
13
14pub trait DefaultForLevel {
16 fn default_for_level(level: Trust) -> Self;
18}
19
20pub struct Mapping<T> {
22 pub full: T,
24 pub reduced: T,
26}
27
28impl<T> Default for Mapping<T>
29where
30 T: DefaultForLevel,
31{
32 fn default() -> Self {
33 Mapping {
34 full: T::default_for_level(Trust::Full),
35 reduced: T::default_for_level(Trust::Reduced),
36 }
37 }
38}
39
40impl<T> Mapping<T> {
41 pub fn by_level(&self, level: Trust) -> &T {
43 match level {
44 Trust::Full => &self.full,
45 Trust::Reduced => &self.reduced,
46 }
47 }
48
49 pub fn into_value_by_level(self, level: Trust) -> T {
51 match level {
52 Trust::Full => self.full,
53 Trust::Reduced => self.reduced,
54 }
55 }
56}