winget_types/installer/
elevation_requirement.rs

1use core::fmt;
2
3#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
4#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
6pub enum ElevationRequirement {
7    /// Must be run from a shell that is running in an administrative context (e.g - Admin user
8    /// using powershell/terminal/cmd with "Run as Administrator")
9    ElevationRequired,
10    /// Must be run from a shell that is not running in an administrative context.
11    ElevationProhibited,
12    /// If called from a non-administrative context, will request elevation. If called from an
13    /// administrative context, may or may not request elevation.
14    ElevatesSelf,
15}
16
17impl fmt::Display for ElevationRequirement {
18    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
19        match self {
20            Self::ElevationRequired => f.write_str("Elevation required"),
21            Self::ElevationProhibited => f.write_str("Elevation prohibited"),
22            Self::ElevatesSelf => f.write_str("Elevate self"),
23        }
24    }
25}
26
27#[cfg(test)]
28mod tests {
29    #[cfg(feature = "serde")]
30    use indoc::indoc;
31    #[cfg(feature = "serde")]
32    use rstest::rstest;
33
34    #[cfg(feature = "serde")]
35    use super::ElevationRequirement;
36
37    #[cfg(feature = "serde")]
38    #[rstest]
39    #[case(
40        ElevationRequirement::ElevationRequired,
41        indoc! {"
42            ElevationRequirement: elevationRequired
43        "}
44    )]
45    #[case(
46        ElevationRequirement::ElevationProhibited,
47        indoc! {"
48            ElevationRequirement: elevationProhibited
49        "}
50    )]
51    #[case(
52        ElevationRequirement::ElevatesSelf,
53        indoc! {"
54            ElevationRequirement: elevatesSelf
55        "}
56    )]
57    fn serialize_elevation_requirement(
58        #[case] elevation_requirement: ElevationRequirement,
59        #[case] expected: &str,
60    ) {
61        #[derive(serde::Serialize)]
62        #[serde(rename_all = "PascalCase")]
63        struct Manifest {
64            elevation_requirement: ElevationRequirement,
65        }
66
67        assert_eq!(
68            serde_yaml::to_string(&Manifest {
69                elevation_requirement,
70            })
71            .unwrap(),
72            expected,
73        );
74    }
75}