efivar_fix/efi/
variable_vendor.rs1use std::fmt;
2
3use super::EFI_GUID;
4
5#[derive(Copy, Clone, Eq)]
6pub enum VariableVendor {
8 Efi,
10 Custom(uuid::Uuid),
12}
13
14impl VariableVendor {
15 pub fn is_efi(&self) -> bool {
17 matches!(self, VariableVendor::Efi)
18 }
19}
20
21impl PartialEq for VariableVendor {
22 fn eq(&self, other: &Self) -> bool {
23 match self {
24 VariableVendor::Efi => match other {
25 VariableVendor::Efi => true,
26 VariableVendor::Custom(uuid) => *uuid == *EFI_GUID,
27 },
28 VariableVendor::Custom(uuid) => match other {
29 VariableVendor::Efi => *uuid == *EFI_GUID,
30 VariableVendor::Custom(other_uuid) => *other_uuid == *uuid,
31 },
32 }
33 }
34}
35
36impl From<uuid::Uuid> for VariableVendor {
37 fn from(other: uuid::Uuid) -> Self {
38 if other == *EFI_GUID {
39 VariableVendor::Efi
40 } else {
41 VariableVendor::Custom(other)
42 }
43 }
44}
45
46impl AsRef<uuid::Uuid> for VariableVendor {
47 fn as_ref(&self) -> &uuid::Uuid {
48 match self {
49 VariableVendor::Efi => &EFI_GUID,
50 VariableVendor::Custom(uuid) => uuid,
51 }
52 }
53}
54
55impl fmt::Debug for VariableVendor {
56 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
57 fmt::Debug::fmt(self.as_ref(), f)
58 }
59}
60
61impl fmt::Display for VariableVendor {
62 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
63 fmt::Display::fmt(self.as_ref(), f)
64 }
65}
66
67#[cfg(test)]
68mod tests {
69 use std::str::FromStr;
70
71 use uuid::Uuid;
72
73 use crate::efi::{variable_vendor::VariableVendor, EFI_GUID};
74
75 #[test]
76 fn variable_vendor_eq() {
77 assert_eq!(VariableVendor::Efi, VariableVendor::Efi);
78
79 assert_eq!(VariableVendor::Efi, VariableVendor::Custom(*EFI_GUID));
81 assert_eq!(VariableVendor::Custom(*EFI_GUID), VariableVendor::Efi);
82
83 assert_eq!(
84 VariableVendor::Custom(Uuid::from_str("9acae909-5f29-43c8-b925-30040693bdff").unwrap()),
85 VariableVendor::Custom(Uuid::from_str("9acae909-5f29-43c8-b925-30040693bdff").unwrap())
86 );
87
88 assert_ne!(
89 VariableVendor::Custom(Uuid::from_str("9acae909-5f29-43c8-b925-30040693bdff").unwrap()),
90 VariableVendor::Custom(Uuid::from_str("d3464728-c118-4d88-a450-7ac21a85a099").unwrap())
91 );
92
93 assert_ne!(
94 VariableVendor::Efi,
95 VariableVendor::Custom(Uuid::from_str("d3464728-c118-4d88-a450-7ac21a85a099").unwrap())
96 );
97 }
98}