wasmer_config/package/
package_id.rs

1use super::PackageHash;
2
3#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
4pub struct NamedPackageId {
5    pub full_name: String,
6    pub version: semver::Version,
7}
8
9impl NamedPackageId {
10    pub fn try_new(
11        name: impl Into<String>,
12        version: impl AsRef<str>,
13    ) -> Result<Self, semver::Error> {
14        Ok(Self {
15            full_name: name.into(),
16            version: version.as_ref().parse()?,
17        })
18    }
19}
20
21impl std::fmt::Display for NamedPackageId {
22    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
23        write!(f, "{}@{}", self.full_name, self.version)
24    }
25}
26
27#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
28pub enum PackageId {
29    Hash(PackageHash),
30    Named(NamedPackageId),
31}
32
33impl PackageId {
34    pub fn new_named(name: impl Into<String>, version: semver::Version) -> Self {
35        Self::Named(NamedPackageId {
36            full_name: name.into(),
37            version,
38        })
39    }
40
41    pub fn as_named(&self) -> Option<&NamedPackageId> {
42        if let Self::Named(v) = self {
43            Some(v)
44        } else {
45            None
46        }
47    }
48
49    pub fn as_hash(&self) -> Option<&PackageHash> {
50        if let Self::Hash(v) = self {
51            Some(v)
52        } else {
53            None
54        }
55    }
56}
57
58impl From<NamedPackageId> for PackageId {
59    fn from(value: NamedPackageId) -> Self {
60        Self::Named(value)
61    }
62}
63
64impl From<PackageHash> for PackageId {
65    fn from(value: PackageHash) -> Self {
66        Self::Hash(value)
67    }
68}
69
70impl std::fmt::Display for PackageId {
71    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
72        match self {
73            Self::Named(n) => n.fmt(f),
74            Self::Hash(h) => h.fmt(f),
75        }
76    }
77}
78
79impl schemars::JsonSchema for PackageId {
80    fn schema_name() -> String {
81        "PackageIdent".to_string()
82    }
83
84    fn json_schema(gen: &mut schemars::gen::SchemaGenerator) -> schemars::schema::Schema {
85        String::json_schema(gen)
86    }
87}