runmat_package/identity/
version.rs1use 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}