wasmer_config/package/
package_id.rs1use 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}