summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock1
-rw-r--r--mullvad-version/Cargo.toml1
-rw-r--r--mullvad-version/src/lib.rs21
3 files changed, 23 insertions, 0 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 76b4c96730..4afca015ea 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2699,6 +2699,7 @@ name = "mullvad-version"
version = "0.0.0"
dependencies = [
"regex-lite",
+ "serde",
]
[[package]]
diff --git a/mullvad-version/Cargo.toml b/mullvad-version/Cargo.toml
index 3bb0f25afa..e7a75f93bc 100644
--- a/mullvad-version/Cargo.toml
+++ b/mullvad-version/Cargo.toml
@@ -18,3 +18,4 @@ workspace = true
[dependencies]
regex-lite = "0.1"
+serde = { workspace = true, optional = true }
diff --git a/mullvad-version/src/lib.rs b/mullvad-version/src/lib.rs
index a0a78e8a6a..180e12d96c 100644
--- a/mullvad-version/src/lib.rs
+++ b/mullvad-version/src/lib.rs
@@ -160,6 +160,27 @@ impl FromStr for Version {
}
}
+#[cfg(feature = "serde")]
+impl<'de> serde::Deserialize<'de> for Version {
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
+ where
+ D: serde::Deserializer<'de>,
+ {
+ let s = String::deserialize(deserializer)?;
+ FromStr::from_str(&s).map_err(serde::de::Error::custom)
+ }
+}
+
+#[cfg(feature = "serde")]
+impl serde::Serialize for Version {
+ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
+ where
+ S: serde::Serializer,
+ {
+ serializer.serialize_str(&self.to_string())
+ }
+}
+
#[cfg(test)]
mod tests {
use super::*;