Skip to content

Commit 7f789ad

Browse files
authored
lazily create warg registry client (#123)
Fixes #122
1 parent 92342a0 commit 7f789ad

File tree

4 files changed

+29
-10
lines changed

4 files changed

+29
-10
lines changed

crates/wac-resolver/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ use wac_types::BorrowedPackageKey;
1919
#[derive(thiserror::Error, Diagnostic, Debug)]
2020
#[diagnostic(code("failed to resolve document"))]
2121
pub enum Error {
22+
/// Failed to create registry client.
23+
#[error("failed to create registry client: {0:#}")]
24+
RegistryClientFailed(anyhow::Error),
2225
/// An unknown package was encountered.
2326
#[error("unknown package `{name}`")]
2427
UnknownPackage {

src/commands/encode.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ impl EncodeCommand {
7979

8080
let document = Document::parse(&contents).map_err(|e| fmt_err(e, &self.path, &contents))?;
8181

82-
let resolver = PackageResolver::new(
82+
let mut resolver = PackageResolver::new(
8383
self.deps_dir,
8484
self.deps.into_iter().collect(),
8585
#[cfg(feature = "registry")]

src/commands/resolve.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ impl ResolveCommand {
5151

5252
let document = Document::parse(&contents).map_err(|e| fmt_err(e, &self.path, &contents))?;
5353

54-
let resolver = PackageResolver::new(
54+
let mut resolver = PackageResolver::new(
5555
self.deps_dir,
5656
self.deps.into_iter().collect(),
5757
#[cfg(feature = "registry")]

src/lib.rs

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ fn fmt_err(e: impl Into<Report>, path: &Path, source: &str) -> anyhow::Error {
4747
pub struct PackageResolver {
4848
fs: FileSystemPackageResolver,
4949
#[cfg(feature = "registry")]
50-
registry: wac_resolver::RegistryPackageResolver,
50+
registry: Option<wac_resolver::RegistryPackageResolver>,
5151
}
5252

5353
impl PackageResolver {
@@ -60,17 +60,23 @@ impl PackageResolver {
6060
Ok(Self {
6161
fs: FileSystemPackageResolver::new(dir, overrides, false),
6262
#[cfg(feature = "registry")]
63-
registry: wac_resolver::RegistryPackageResolver::new(
64-
registry,
65-
Some(Box::new(progress::ProgressBar::new())),
66-
)
67-
.await?,
63+
registry: if registry.is_some() {
64+
Some(
65+
wac_resolver::RegistryPackageResolver::new(
66+
registry,
67+
Some(Box::new(progress::ProgressBar::new())),
68+
)
69+
.await?,
70+
)
71+
} else {
72+
None
73+
},
6874
})
6975
}
7076

7177
/// Resolve all packages referenced in the given document.
7278
pub async fn resolve<'a>(
73-
&self,
79+
&mut self,
7480
document: &'a Document<'a>,
7581
) -> Result<IndexMap<BorrowedPackageKey<'a>, Vec<u8>>, Error> {
7682
let mut keys = packages(document)?;
@@ -85,7 +91,17 @@ impl PackageResolver {
8591
// The registry resolver will error on missing package
8692
#[cfg(feature = "registry")]
8793
if !keys.is_empty() {
88-
let reg_packages = self.registry.resolve(&keys).await?;
94+
if self.registry.is_none() {
95+
self.registry = Some(
96+
wac_resolver::RegistryPackageResolver::new(
97+
None,
98+
Some(Box::new(progress::ProgressBar::new())),
99+
)
100+
.await
101+
.map_err(Error::RegistryClientFailed)?,
102+
);
103+
}
104+
let reg_packages = self.registry.as_ref().unwrap().resolve(&keys).await?;
89105
keys.retain(|key, _| !reg_packages.contains_key(key));
90106
packages.extend(reg_packages);
91107
}

0 commit comments

Comments
 (0)