diff options
| author | Linus Färnstrand <linus@mullvad.net> | 2019-08-11 19:06:40 +0200 |
|---|---|---|
| committer | Linus Färnstrand <linus@mullvad.net> | 2019-08-12 16:27:58 +0200 |
| commit | 9982a6a9f8b28c547bae335edfcfbed7116d3cc4 (patch) | |
| tree | 4fc676f7a0c3b43cab3998a0eb5f66a2744e6fae | |
| parent | f326b4993308894e3b8e255f74cbeb4a6e9ad916 (diff) | |
| download | mullvadvpn-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.rs | 37 |
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) } } |
