Skip to main content

runmat_package/identity/
version.rs

1use crate::IdentityError;
2use semver::Version;
3use serde::{Deserialize, Serialize};
4use std::fmt::{Display, Formatter};
5use std::str::FromStr;
6
7#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
8#[serde(transparent)]
9pub struct PackageVersion(Version);
10
11impl PackageVersion {
12    pub fn new(version: Version) -> Self {
13        Self(version)
14    }
15
16    pub fn as_semver(&self) -> &Version {
17        &self.0
18    }
19}
20
21impl Display for PackageVersion {
22    fn fmt(&self, formatter: &mut Formatter<'_>) -> std::fmt::Result {
23        Display::fmt(&self.0, formatter)
24    }
25}
26
27impl FromStr for PackageVersion {
28    type Err = IdentityError;
29
30    fn from_str(value: &str) -> Result<Self, Self::Err> {
31        Version::parse(value)
32            .map(Self)
33            .map_err(|error| IdentityError::InvalidVersion {
34                value: value.to_string(),
35                reason: error.to_string(),
36            })
37    }
38}