Skip to content

Commit f53393d

Browse files
committed
Remove wasm-pkg-common as dependency
Signed-off-by: Ryan Levick <[email protected]>
1 parent 4a99166 commit f53393d

File tree

7 files changed

+149
-24
lines changed

7 files changed

+149
-24
lines changed

Cargo.lock

Lines changed: 22 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pretty_assertions = "1.3"
3636
regex = { workspace = true }
3737
reqwest = { workspace = true }
3838
rpassword = "7"
39-
schemars = { version = "0.8.21", features = ["indexmap2", "semver"] }
39+
schemars = { workspace = true }
4040
semver = { workspace = true }
4141
serde = { version = "1", features = ["derive"] }
4242
serde_json = { workspace = true }
@@ -151,6 +151,7 @@ rusqlite = "0.34"
151151
# If both `aws_lc_rs` and `ring` are enabled, a panic at runtime will occur.
152152
rustls = { version = "0.23", default-features = false, features = ["ring", "std", "logging", "tls12"] }
153153
rustls-pki-types = "1.12"
154+
schemars = { version = "0.8.22", features = ["indexmap2", "semver"] }
154155
semver = "1"
155156
serde = { version = "1", features = ["derive", "rc"] }
156157
serde_json = "1.0"
@@ -170,7 +171,6 @@ walkdir = "2"
170171
wasm-encoder = "0.230"
171172
wasm-metadata = "0.230"
172173
wasm-pkg-client = "0.10"
173-
wasm-pkg-common = "0.10"
174174
wasmparser = "0.230"
175175
wasmtime = "33.0.0"
176176
wasmtime-wasi = "33.0.0"

crates/manifest/Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,14 @@ edition = { workspace = true }
77
[dependencies]
88
anyhow = { workspace = true }
99
indexmap = { workspace = true, features = ["serde"] }
10-
schemars = { version = "0.8.21", features = ["indexmap2", "semver"] }
10+
schemars = { workspace = true }
1111
semver = { workspace = true, features = ["serde"] }
1212
serde = { workspace = true }
1313
spin-serde = { path = "../serde" }
1414
terminal = { path = "../terminal" }
1515
thiserror = { workspace = true }
1616
toml = { workspace = true, features = ["preserve_order"] }
1717
url = { workspace = true }
18-
wasm-pkg-common = { workspace = true }
1918

2019
[dev-dependencies]
2120
anyhow = { workspace = true }

crates/manifest/src/schema/common.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ use std::fmt::Display;
22

33
use schemars::JsonSchema;
44
use serde::{Deserialize, Serialize};
5-
6-
use wasm_pkg_common::{package::PackageRef, registry::Registry};
5+
use spin_serde::{PackageRef, Registry};
76

87
/// Variable definition
98
#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)]

crates/serde/Cargo.toml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ edition = { workspace = true }
77
[dependencies]
88
anyhow = { workspace = true }
99
base64 = { workspace = true }
10-
schemars = { version = "0.8.21", features = ["indexmap2", "semver"] }
10+
http = { workspace = true }
11+
schemars = { workspace = true }
1112
semver = { workspace = true, features = ["serde"] }
1213
serde = { workspace = true }
13-
wasm-pkg-common = { workspace = true }
14+
15+
# Without this dependency, this crate will not compile on its own.
16+
# We should figure out why.
17+
futures-util = "0.3.30"

crates/serde/src/dependencies.rs

Lines changed: 116 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use crate::KebabId;
44
use anyhow::anyhow;
55
use serde::{Deserialize, Serialize};
66
use std::str::FromStr;
7-
use wasm_pkg_common::package::PackageRef;
87

98
/// Name of an import package dependency.
109
///
@@ -77,6 +76,120 @@ impl FromStr for DependencyPackageName {
7776
}
7877
}
7978

79+
/// A package reference, consisting of kebab-case namespace and name.
80+
///
81+
/// Ex: `wasm-pkg:client`
82+
#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq, Hash)]
83+
#[serde(into = "String", try_from = "String")]
84+
pub struct PackageRef {
85+
/// The package namespace
86+
pub namespace: String,
87+
/// The package name
88+
pub name: String,
89+
}
90+
91+
impl PackageRef {
92+
/// Returns the package namespace.
93+
pub fn namespace(&self) -> &str {
94+
&self.namespace
95+
}
96+
97+
/// Returns the package name.
98+
pub fn name(&self) -> &str {
99+
&self.name
100+
}
101+
}
102+
103+
impl std::fmt::Display for PackageRef {
104+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
105+
write!(f, "{}:{}", self.namespace, self.name)
106+
}
107+
}
108+
109+
impl From<PackageRef> for String {
110+
fn from(value: PackageRef) -> Self {
111+
value.to_string()
112+
}
113+
}
114+
115+
impl TryFrom<String> for PackageRef {
116+
type Error = anyhow::Error;
117+
118+
fn try_from(mut value: String) -> Result<Self, Self::Error> {
119+
let Some(colon) = value.find(':') else {
120+
anyhow::bail!("missing expected ':'");
121+
};
122+
let name = value.split_off(colon + 1);
123+
value.truncate(colon);
124+
Ok(Self {
125+
// TODO(rylev): parse both fields as labels
126+
namespace: value,
127+
name: name,
128+
})
129+
}
130+
}
131+
132+
impl FromStr for PackageRef {
133+
type Err = anyhow::Error;
134+
135+
fn from_str(s: &str) -> Result<Self, Self::Err> {
136+
s.to_string().try_into()
137+
}
138+
}
139+
140+
/// A registry identifier.
141+
///
142+
/// This must be a valid HTTP Host.
143+
#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
144+
#[serde(into = "String", try_from = "String")]
145+
pub struct Registry(http::uri::Authority);
146+
147+
impl Registry {
148+
/// Returns the registry host, without port number.
149+
pub fn host(&self) -> &str {
150+
self.0.host()
151+
}
152+
153+
/// Returns the registry port number, if given.
154+
pub fn port(&self) -> Option<u16> {
155+
self.0.port_u16()
156+
}
157+
}
158+
159+
impl AsRef<str> for Registry {
160+
fn as_ref(&self) -> &str {
161+
self.0.as_str()
162+
}
163+
}
164+
165+
impl std::fmt::Display for Registry {
166+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
167+
write!(f, "{}", self.0)
168+
}
169+
}
170+
171+
impl From<Registry> for String {
172+
fn from(value: Registry) -> Self {
173+
value.to_string()
174+
}
175+
}
176+
177+
impl std::str::FromStr for Registry {
178+
type Err = anyhow::Error;
179+
180+
fn from_str(s: &str) -> Result<Self, Self::Err> {
181+
Ok(Self(s.parse()?))
182+
}
183+
}
184+
185+
impl TryFrom<String> for Registry {
186+
type Error = anyhow::Error;
187+
188+
fn try_from(value: String) -> Result<Self, Self::Error> {
189+
Ok(Self(value.try_into()?))
190+
}
191+
}
192+
80193
/// Name of an import dependency.
81194
///
82195
/// For example: `foo:bar/[email protected]`, `foo:bar/baz`, `foo:[email protected]`, `foo:bar`, `foo-bar`.
@@ -103,8 +216,8 @@ impl Ord for DependencyName {
103216
(DependencyName::Plain(a), DependencyName::Plain(b)) => a.cmp(b),
104217
(DependencyName::Package(a), DependencyName::Package(b)) => {
105218
let big_ole_tup = (
106-
a.package.namespace().as_ref(),
107-
a.package.name().as_ref(),
219+
a.package.namespace(),
220+
a.package.name(),
108221
a.interface.as_ref(),
109222
a.version.as_ref(),
110223
);

crates/serde/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ mod version;
99

1010
pub use version::{FixedStringVersion, FixedVersion, FixedVersionBackwardCompatible};
1111

12-
pub use dependencies::{DependencyName, DependencyPackageName};
12+
pub use dependencies::{DependencyName, DependencyPackageName, PackageRef, Registry};
1313

1414
/// A "kebab-case" identifier.
1515
pub type KebabId = id::Id<'-', false>;

0 commit comments

Comments
 (0)