Skip to content

Commit 4b44710

Browse files
committed
reduce variants on LoaderError
1 parent 78f8114 commit 4b44710

File tree

5 files changed

+21
-27
lines changed

5 files changed

+21
-27
lines changed

Cargo.lock

-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/graph.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ pub enum JsrLoadError {
201201
PackageVersionNotFound(Box<PackageNv>),
202202
#[class(generic)] // TODO: maybe inherit?
203203
#[error("JSR package version manifest for '{}' failed to load: {:#}", .0, .1)]
204-
PackageVersionManifestLoad(Box<PackageNv>, Arc<LoadError>),
204+
PackageVersionManifestLoad(Box<PackageNv>, Arc<dyn JsErrorClass>),
205205
#[class(inherit)]
206206
#[error("JSR package version manifest for '{}' failed to load: {:#}", .0, .1)]
207207
PackageVersionManifestChecksumIntegrity(

src/jsr.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,9 @@ impl JsrMetadataStore {
163163
err,
164164
)
165165
}
166-
err => JsrLoadError::PackageVersionManifestLoad(
166+
LoadError::Other(err) => JsrLoadError::PackageVersionManifestLoad(
167167
Box::new(package_nv),
168-
Arc::new(err),
168+
err,
169169
),
170170
}
171171
}
@@ -210,7 +210,7 @@ impl JsrMetadataStore {
210210
match data {
211211
Some(LoadResponse::Module { content, .. }) => {
212212
handle_content(&content)
213-
.map_err(|e| create_failed_load_err(e.into()))
213+
.map_err(|e| create_failed_load_err(LoadError::Other(Arc::new(e))))
214214
}
215215
Some(LoadResponse::Redirect { specifier }) => {
216216
Err(JsrLoadError::RedirectInPackage(specifier))

src/source/mod.rs

+5-18
Original file line numberDiff line numberDiff line change
@@ -102,29 +102,14 @@ pub enum LoadResponse {
102102

103103
#[derive(Debug, Error, deno_error::JsError)]
104104
pub enum LoadError {
105-
#[class(type)]
106-
#[error("Unsupported scheme: {0}")]
107-
UnsupportedScheme(String),
108105
#[class(inherit)]
109106
#[error(transparent)]
110107
ChecksumIntegrity(#[from] ChecksumIntegrityError),
111108
#[class(inherit)]
112109
#[error(transparent)]
113-
JsonParse(#[from] serde_json::Error),
114-
#[class(inherit)]
115-
#[error(transparent)]
116-
DataUrl(std::io::Error),
117-
#[class(inherit)]
118-
#[error(transparent)]
119110
Other(Arc<dyn JsErrorClass>),
120111
}
121112

122-
impl<T: JsErrorClass> From<Arc<T>> for LoadError {
123-
fn from(value: Arc<T>) -> Self {
124-
Self::Other(value)
125-
}
126-
}
127-
128113
pub type LoadResult = Result<Option<LoadResponse>, LoadError>;
129114
pub type LoadFuture = LocalBoxFuture<'static, LoadResult>;
130115

@@ -558,8 +543,8 @@ pub trait NpmResolver: fmt::Debug {
558543

559544
pub fn load_data_url(
560545
specifier: &ModuleSpecifier,
561-
) -> Result<Option<LoadResponse>, LoadError> {
562-
let data_url = RawDataUrl::parse(specifier).map_err(LoadError::DataUrl)?;
546+
) -> Result<Option<LoadResponse>, std::io::Error> {
547+
let data_url = RawDataUrl::parse(specifier)?;
563548
let (bytes, headers) = data_url.into_bytes_and_headers();
564549
Ok(Some(LoadResponse::Module {
565550
specifier: specifier.clone(),
@@ -786,7 +771,9 @@ impl Loader for MemoryLoader {
786771
let response = match self.sources.get(specifier) {
787772
Some(Ok(response)) => Ok(Some(response.clone())),
788773
Some(Err(err)) => Err(LoadError::Other(err.clone())),
789-
None if specifier.scheme() == "data" => load_data_url(specifier),
774+
None if specifier.scheme() == "data" => {
775+
load_data_url(specifier).map_err(|e| LoadError::Other(Arc::new(e)))
776+
}
790777
_ => Ok(None),
791778
};
792779
Box::pin(future::ready(response))

tests/ecosystem_test.rs

+12-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use std::collections::HashSet;
66
use std::io::Write as _;
77
use std::path::PathBuf;
8+
use std::sync::Arc;
89

910
use deno_ast::diagnostics::Diagnostic;
1011
use deno_ast::MediaType;
@@ -29,6 +30,7 @@ use indexmap::IndexMap;
2930
use serde::Deserialize;
3031
use std::fmt::Write;
3132
use tempfile::tempdir;
33+
use thiserror::Error;
3234
use url::Url;
3335

3436
#[derive(Debug, Clone, Deserialize)]
@@ -156,6 +158,11 @@ struct VersionMeta {
156158
exports: IndexMap<String, String>,
157159
}
158160

161+
#[derive(Debug, Clone, Deserialize, Error, deno_error::JsError)]
162+
#[class(type)]
163+
#[error("Unsupported scheme: {0}")]
164+
struct UnsupportedScheme(String);
165+
159166
struct Loader<'a> {
160167
scope: &'a str,
161168
name: &'a str,
@@ -188,13 +195,14 @@ impl deno_graph::source::Loader for Loader<'_> {
188195
)),
189196
}
190197
}
191-
"data" => deno_graph::source::load_data_url(specifier),
198+
"data" => deno_graph::source::load_data_url(specifier)
199+
.map_err(|e| deno_graph::source::LoadError::Other(Arc::new(e))),
192200
"jsr" | "npm" | "node" => Ok(Some(LoadResponse::External {
193201
specifier: specifier.clone(),
194202
})),
195-
_ => Err(deno_graph::source::LoadError::UnsupportedScheme(
196-
specifier.scheme().to_string(),
197-
)),
203+
_ => Err(deno_graph::source::LoadError::Other(Arc::new(
204+
UnsupportedScheme(specifier.scheme().to_string()),
205+
))),
198206
};
199207
async move { res }.boxed()
200208
}

0 commit comments

Comments
 (0)