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