summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLinus Färnstrand <linus@mullvad.net>2019-08-11 19:06:40 +0200
committerLinus Färnstrand <linus@mullvad.net>2019-08-12 16:27:58 +0200
commit9982a6a9f8b28c547bae335edfcfbed7116d3cc4 (patch)
tree4fc676f7a0c3b43cab3998a0eb5f66a2744e6fae
parentf326b4993308894e3b8e255f74cbeb4a6e9ad916 (diff)
downloadmullvadvpn-9982a6a9f8b28c547bae335edfcfbed7116d3cc4.tar.xz
mullvadvpn-9982a6a9f8b28c547bae335edfcfbed7116d3cc4.zip
Don't use unsafe/transmute just to convert enums to integers
-rw-r--r--mullvad-types/src/settings/migrations/mod.rs37
1 files changed, 7 insertions, 30 deletions
diff --git a/mullvad-types/src/settings/migrations/mod.rs b/mullvad-types/src/settings/migrations/mod.rs
index 2c0fd53143..078a6498f9 100644
--- a/mullvad-types/src/settings/migrations/mod.rs
+++ b/mullvad-types/src/settings/migrations/mod.rs
@@ -10,41 +10,18 @@ pub enum SettingsVersion {
V2 = 2,
}
-impl SettingsVersion {
- pub fn as_u32(&self) -> u32 {
- unsafe { std::mem::transmute(*self) }
- }
-
- pub fn max_version() -> Self {
- SettingsVersion::V2
- }
-
- pub fn min_version() -> Self {
- SettingsVersion::V2
- }
-}
-
impl<'de> Deserialize<'de> for SettingsVersion {
fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
where
D: Deserializer<'de>,
{
- let version = <u32>::deserialize(deserializer)?;
- if version < SettingsVersion::min_version().as_u32() {
- return Err(serde::de::Error::custom(format!(
- "Version number {} too small",
- version
- )));
+ match <u32>::deserialize(deserializer)? {
+ v if v == SettingsVersion::V2 as u32 => Ok(SettingsVersion::V2),
+ v => Err(serde::de::Error::custom(format!(
+ "{} is not a valid SettingsVersion",
+ v
+ ))),
}
-
- if version > SettingsVersion::max_version().as_u32() {
- return Err(serde::de::Error::custom(format!(
- "Version number {} too large",
- version
- )));
- }
-
- unsafe { Ok(std::mem::transmute(version)) }
}
}
@@ -53,7 +30,7 @@ impl Serialize for SettingsVersion {
where
S: Serializer,
{
- serializer.serialize_u32(self.as_u32())
+ serializer.serialize_u32(*self as u32)
}
}