bitwarden_api_api/models/
device_type.rs1use serde::{Deserialize, Deserializer, Serialize, Serializer, de::Visitor};
12
13use crate::models;
14#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
16pub enum DeviceType {
17 Android,
18 iOS,
19 ChromeExtension,
20 FirefoxExtension,
21 OperaExtension,
22 EdgeExtension,
23 WindowsDesktop,
24 MacOsDesktop,
25 LinuxDesktop,
26 ChromeBrowser,
27 FirefoxBrowser,
28 OperaBrowser,
29 EdgeBrowser,
30 IEBrowser,
31 UnknownBrowser,
32 AndroidAmazon,
33 UWP,
34 SafariBrowser,
35 VivaldiBrowser,
36 VivaldiExtension,
37 SafariExtension,
38 SDK,
39 Server,
40 WindowsCLI,
41 MacOsCLI,
42 LinuxCLI,
43 DuckDuckGoBrowser,
44 DuckDuckGoExtension,
45
46 __Unknown(i64),
48}
49
50impl DeviceType {
51 pub fn as_i64(&self) -> i64 {
52 match self {
53 Self::Android => 0,
54 Self::iOS => 1,
55 Self::ChromeExtension => 2,
56 Self::FirefoxExtension => 3,
57 Self::OperaExtension => 4,
58 Self::EdgeExtension => 5,
59 Self::WindowsDesktop => 6,
60 Self::MacOsDesktop => 7,
61 Self::LinuxDesktop => 8,
62 Self::ChromeBrowser => 9,
63 Self::FirefoxBrowser => 10,
64 Self::OperaBrowser => 11,
65 Self::EdgeBrowser => 12,
66 Self::IEBrowser => 13,
67 Self::UnknownBrowser => 14,
68 Self::AndroidAmazon => 15,
69 Self::UWP => 16,
70 Self::SafariBrowser => 17,
71 Self::VivaldiBrowser => 18,
72 Self::VivaldiExtension => 19,
73 Self::SafariExtension => 20,
74 Self::SDK => 21,
75 Self::Server => 22,
76 Self::WindowsCLI => 23,
77 Self::MacOsCLI => 24,
78 Self::LinuxCLI => 25,
79 Self::DuckDuckGoBrowser => 26,
80 Self::DuckDuckGoExtension => 27,
81 Self::__Unknown(v) => *v,
82 }
83 }
84
85 pub fn from_i64(value: i64) -> Self {
86 match value {
87 0 => Self::Android,
88 1 => Self::iOS,
89 2 => Self::ChromeExtension,
90 3 => Self::FirefoxExtension,
91 4 => Self::OperaExtension,
92 5 => Self::EdgeExtension,
93 6 => Self::WindowsDesktop,
94 7 => Self::MacOsDesktop,
95 8 => Self::LinuxDesktop,
96 9 => Self::ChromeBrowser,
97 10 => Self::FirefoxBrowser,
98 11 => Self::OperaBrowser,
99 12 => Self::EdgeBrowser,
100 13 => Self::IEBrowser,
101 14 => Self::UnknownBrowser,
102 15 => Self::AndroidAmazon,
103 16 => Self::UWP,
104 17 => Self::SafariBrowser,
105 18 => Self::VivaldiBrowser,
106 19 => Self::VivaldiExtension,
107 20 => Self::SafariExtension,
108 21 => Self::SDK,
109 22 => Self::Server,
110 23 => Self::WindowsCLI,
111 24 => Self::MacOsCLI,
112 25 => Self::LinuxCLI,
113 26 => Self::DuckDuckGoBrowser,
114 27 => Self::DuckDuckGoExtension,
115 v => Self::__Unknown(v),
116 }
117 }
118}
119
120impl serde::Serialize for DeviceType {
121 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
122 serializer.serialize_i64(self.as_i64())
123 }
124}
125
126impl<'de> serde::Deserialize<'de> for DeviceType {
127 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
128 struct DeviceTypeVisitor;
129
130 impl Visitor<'_> for DeviceTypeVisitor {
131 type Value = DeviceType;
132
133 fn expecting(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
134 f.write_str("an integer")
135 }
136
137 fn visit_i64<E: serde::de::Error>(self, v: i64) -> Result<Self::Value, E> {
138 Ok(DeviceType::from_i64(v))
139 }
140
141 fn visit_u64<E: serde::de::Error>(self, v: u64) -> Result<Self::Value, E> {
142 Ok(DeviceType::from_i64(v as i64))
143 }
144 }
145
146 deserializer.deserialize_i64(DeviceTypeVisitor)
147 }
148}
149
150impl std::fmt::Display for DeviceType {
151 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
152 write!(f, "{}", self.as_i64())
153 }
154}
155impl Default for DeviceType {
156 fn default() -> DeviceType {
157 Self::Android
158 }
159}