diff options
Diffstat (limited to 'src/version/manifest.rs')
| -rw-r--r-- | src/version/manifest.rs | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/src/version/manifest.rs b/src/version/manifest.rs index c8c49b8..18653f3 100644 --- a/src/version/manifest.rs +++ b/src/version/manifest.rs @@ -1,5 +1,6 @@ use core::fmt; - +use std::convert::Infallible; +use std::str::FromStr; use chrono::{DateTime, Utc}; use serde::{de::Visitor, Deserialize}; use sha1_smol::Digest; @@ -19,6 +20,32 @@ pub enum VersionType { Other(String) } +impl FromStr for VersionType { + type Err = Infallible; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + match s { + "snapshot" => Ok(Self::Snapshot), + "release" => Ok(Self::Release), + "old_beta" => Ok(Self::OldBeta), + "old_alpha" => Ok(Self::OldAlpha), + _ => Ok(Self::Other(s.to_owned())) + } + } +} + +impl VersionType { + pub fn to_str(&self) -> &str { + match self { + Self::Snapshot => "snapshot", + Self::Release => "release", + Self::OldBeta => "old_beta", + Self::OldAlpha => "old_alpha", + Self::Other(s) => s + } + } +} + struct VersionTypeVisitor; impl<'de> Visitor<'de> for VersionTypeVisitor { @@ -31,13 +58,7 @@ impl<'de> Visitor<'de> for VersionTypeVisitor { fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: serde::de::Error, { - match v { - "snapshot" => Ok(VersionType::Snapshot), - "release" => Ok(VersionType::Release), - "old_beta" => Ok(VersionType::OldBeta), - "old_alpha" => Ok(VersionType::OldAlpha), - _ => Ok(VersionType::Other(v.to_owned())) - } + Ok(VersionType::from_str(v).unwrap(/* infallible */)) } } |
