Skip to content

Commit 6f48ffd

Browse files
authored
refactor: remove anyhow usages (#51)
1 parent b3281fe commit 6f48ffd

File tree

6 files changed

+73
-85
lines changed

6 files changed

+73
-85
lines changed

Cargo.lock

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

rs_lib/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ crate_type = ["cdylib", "lib"]
1313
wasm = ["console_error_panic_hook", "js-sys", "serde-wasm-bindgen", "wasm-bindgen"]
1414

1515
[dependencies]
16-
anyhow = "1.0.72"
1716
deno_media_type = "0.1.1"
1817
indexmap = { version = "2.0.0", features = ["serde"] }
1918
log = "0.4.19"

rs_lib/src/cache.rs

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
22

3-
use anyhow::Error as AnyError;
43
use serde::Deserialize;
54
use serde::Serialize;
5+
use std::io::ErrorKind;
66
use std::path::PathBuf;
77
use std::time::SystemTime;
88
use thiserror::Error;
@@ -52,24 +52,17 @@ impl<'a> Checksum<'a> {
5252
}
5353
}
5454

55-
#[derive(Debug, Error)]
56-
#[error("Can't convert url (\"{}\") to filename.", .url)]
57-
pub struct UrlToFilenameConversionError {
58-
pub(super) url: String,
59-
}
60-
6155
/// Turn provided `url` into a hashed filename.
6256
/// URLs can contain a lot of characters that cannot be used
6357
/// in filenames (like "?", "#", ":"), so in order to cache
6458
/// them properly they are deterministically hashed into ASCII
6559
/// strings.
66-
pub fn url_to_filename(
67-
url: &Url,
68-
) -> Result<PathBuf, UrlToFilenameConversionError> {
60+
pub fn url_to_filename(url: &Url) -> std::io::Result<PathBuf> {
6961
let Some(mut cache_filename) = base_url_to_filename(url) else {
70-
return Err(UrlToFilenameConversionError {
71-
url: url.to_string(),
72-
});
62+
return Err(std::io::Error::new(
63+
ErrorKind::InvalidInput,
64+
format!("Can't convert url (\"{}\") to filename.", url),
65+
));
7366
};
7467

7568
let mut rest_str = url.path().to_string();
@@ -104,11 +97,7 @@ pub enum CacheReadFileError {
10497
#[error(transparent)]
10598
Io(#[from] std::io::Error),
10699
#[error(transparent)]
107-
UrlToFileName(#[from] UrlToFilenameConversionError),
108-
#[error(transparent)]
109100
ChecksumIntegrity(Box<ChecksumIntegrityError>),
110-
#[error(transparent)]
111-
ReadHeaders(anyhow::Error),
112101
}
113102

114103
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
@@ -139,19 +128,19 @@ pub trait HttpCache: Send + Sync + std::fmt::Debug {
139128
fn cache_item_key<'a>(
140129
&self,
141130
url: &'a Url,
142-
) -> Result<HttpCacheItemKey<'a>, UrlToFilenameConversionError>;
131+
) -> std::io::Result<HttpCacheItemKey<'a>>;
143132

144133
fn contains(&self, url: &Url) -> bool;
145134
fn set(
146135
&self,
147136
url: &Url,
148137
headers: HeadersMap,
149138
content: &[u8],
150-
) -> Result<(), AnyError>;
139+
) -> std::io::Result<()>;
151140
fn read_modified_time(
152141
&self,
153142
key: &HttpCacheItemKey,
154-
) -> Result<Option<SystemTime>, AnyError>;
143+
) -> std::io::Result<Option<SystemTime>>;
155144
fn read_file_bytes(
156145
&self,
157146
key: &HttpCacheItemKey,
@@ -162,12 +151,12 @@ pub trait HttpCache: Send + Sync + std::fmt::Debug {
162151
fn read_headers(
163152
&self,
164153
key: &HttpCacheItemKey,
165-
) -> Result<Option<HeadersMap>, AnyError>;
154+
) -> std::io::Result<Option<HeadersMap>>;
166155
/// Reads the time the item was downloaded to the cache.
167156
fn read_download_time(
168157
&self,
169158
key: &HttpCacheItemKey,
170-
) -> Result<Option<SystemTime>, AnyError>;
159+
) -> std::io::Result<Option<SystemTime>>;
171160
}
172161

173162
#[cfg(test)]

rs_lib/src/global.rs

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
22

3+
use std::io::ErrorKind;
34
use std::path::Path;
45
use std::path::PathBuf;
56
use std::time::SystemTime;
67

7-
use anyhow::Error as AnyError;
88
use serde::de::DeserializeOwned;
99
use serde::Deserialize;
1010
use url::Url;
@@ -17,7 +17,6 @@ use crate::cache::CacheReadFileError;
1717
use crate::cache::Checksum;
1818
use crate::cache::GlobalToLocalCopy;
1919
use crate::cache::SerializedCachedUrlMetadata;
20-
use crate::cache::UrlToFilenameConversionError;
2120
use crate::common::checksum;
2221
use crate::common::HeadersMap;
2322
use crate::ChecksumIntegrityError;
@@ -42,14 +41,11 @@ impl<Env: DenoCacheEnv> GlobalHttpCache<Env> {
4241
pub fn get_global_cache_filepath(
4342
&self,
4443
url: &Url,
45-
) -> Result<PathBuf, AnyError> {
44+
) -> std::io::Result<PathBuf> {
4645
Ok(self.path.join(url_to_filename(url)?))
4746
}
4847

49-
fn get_cache_filepath(
50-
&self,
51-
url: &Url,
52-
) -> Result<PathBuf, UrlToFilenameConversionError> {
48+
fn get_cache_filepath(&self, url: &Url) -> std::io::Result<PathBuf> {
5349
Ok(self.path.join(url_to_filename(url)?))
5450
}
5551

@@ -64,11 +60,15 @@ impl<Env: DenoCacheEnv> GlobalHttpCache<Env> {
6460
fn read_serialized_cache_metadata<T: DeserializeOwned>(
6561
&self,
6662
key: &HttpCacheItemKey,
67-
) -> Result<Option<T>, AnyError> {
63+
) -> std::io::Result<Option<T>> {
6864
let path = self.key_file_path(key).with_extension("metadata.json");
6965
let bytes = self.env.read_file_bytes(&path)?;
7066
Ok(match bytes {
71-
Some(bytes) => Some(serde_json::from_slice::<T>(&bytes)?),
67+
Some(bytes) => {
68+
Some(serde_json::from_slice::<T>(&bytes).map_err(|e| {
69+
std::io::Error::new(ErrorKind::InvalidData, e.to_string())
70+
})?)
71+
}
7272
None => None,
7373
})
7474
}
@@ -78,7 +78,7 @@ impl<Env: DenoCacheEnv> HttpCache for GlobalHttpCache<Env> {
7878
fn cache_item_key<'a>(
7979
&self,
8080
url: &'a Url,
81-
) -> Result<HttpCacheItemKey<'a>, UrlToFilenameConversionError> {
81+
) -> std::io::Result<HttpCacheItemKey<'a>> {
8282
Ok(HttpCacheItemKey {
8383
#[cfg(debug_assertions)]
8484
is_local_key: false,
@@ -97,19 +97,19 @@ impl<Env: DenoCacheEnv> HttpCache for GlobalHttpCache<Env> {
9797
fn read_modified_time(
9898
&self,
9999
key: &HttpCacheItemKey,
100-
) -> Result<Option<SystemTime>, AnyError> {
100+
) -> std::io::Result<Option<SystemTime>> {
101101
#[cfg(debug_assertions)]
102102
debug_assert!(!key.is_local_key);
103103

104-
Ok(self.env.modified(self.key_file_path(key))?)
104+
self.env.modified(self.key_file_path(key))
105105
}
106106

107107
fn set(
108108
&self,
109109
url: &Url,
110110
headers: HeadersMap,
111111
content: &[u8],
112-
) -> Result<(), AnyError> {
112+
) -> std::io::Result<()> {
113113
let cache_filepath = self.get_cache_filepath(url)?;
114114
// Cache content
115115
self.env.atomic_write_file(&cache_filepath, content)?;
@@ -159,7 +159,7 @@ impl<Env: DenoCacheEnv> HttpCache for GlobalHttpCache<Env> {
159159
fn read_headers(
160160
&self,
161161
key: &HttpCacheItemKey,
162-
) -> Result<Option<HeadersMap>, AnyError> {
162+
) -> std::io::Result<Option<HeadersMap>> {
163163
// targeted deserialize
164164
#[derive(Deserialize)]
165165
struct SerializedHeaders {
@@ -178,7 +178,7 @@ impl<Env: DenoCacheEnv> HttpCache for GlobalHttpCache<Env> {
178178
fn read_download_time(
179179
&self,
180180
key: &HttpCacheItemKey,
181-
) -> Result<Option<SystemTime>, AnyError> {
181+
) -> std::io::Result<Option<SystemTime>> {
182182
// targeted deserialize
183183
#[derive(Deserialize)]
184184
struct SerializedTime {
@@ -199,9 +199,10 @@ fn write_metadata<Env: DenoCacheEnv>(
199199
env: &Env,
200200
path: &Path,
201201
meta_data: &SerializedCachedUrlMetadata,
202-
) -> Result<(), AnyError> {
202+
) -> std::io::Result<()> {
203203
let path = path.with_extension("metadata.json");
204-
let json = serde_json::to_string_pretty(meta_data)?;
204+
let json = serde_json::to_string_pretty(meta_data)
205+
.map_err(|e| std::io::Error::new(ErrorKind::InvalidData, e.to_string()))?;
205206
env.atomic_write_file(&path, json.as_bytes())?;
206207
Ok(())
207208
}

rs_lib/src/lib.rs

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ pub use cache::GlobalToLocalCopy;
1313
pub use cache::HttpCache;
1414
pub use cache::HttpCacheItemKey;
1515
pub use cache::SerializedCachedUrlMetadata;
16-
pub use cache::UrlToFilenameConversionError;
1716
pub use common::DenoCacheEnv;
1817
pub use global::GlobalHttpCache;
1918
pub use local::LocalHttpCache;
@@ -34,6 +33,7 @@ pub mod wasm {
3433

3534
use crate::cache::GlobalToLocalCopy;
3635
use crate::common::HeadersMap;
36+
use crate::CacheReadFileError;
3737
use crate::Checksum;
3838
use crate::DenoCacheEnv;
3939
use crate::HttpCache;
@@ -99,7 +99,7 @@ pub mod wasm {
9999
#[wasm_bindgen]
100100
pub fn url_to_filename(url: &str) -> Result<String, JsValue> {
101101
console_error_panic_hook::set_once();
102-
let url = Url::parse(url).map_err(|e| as_js_error(e.into()))?;
102+
let url = parse_url(url).map_err(as_js_error)?;
103103
crate::cache::url_to_filename(&url)
104104
.map(|s| s.to_string_lossy().to_string())
105105
.map_err(|e| as_js_error(e.into()))
@@ -201,8 +201,8 @@ pub mod wasm {
201201
fn inner<Cache: HttpCache>(
202202
cache: &Cache,
203203
url: &str,
204-
) -> anyhow::Result<Option<HeadersMap>> {
205-
let url = Url::parse(url)?;
204+
) -> std::io::Result<Option<HeadersMap>> {
205+
let url = parse_url(url)?;
206206
let key = cache.cache_item_key(&url)?;
207207
cache.read_headers(&key)
208208
}
@@ -226,16 +226,18 @@ pub mod wasm {
226226
url: &str,
227227
maybe_checksum: Option<Checksum>,
228228
allow_global_to_local: GlobalToLocalCopy,
229-
) -> anyhow::Result<Option<Vec<u8>>> {
230-
let url = Url::parse(url)?;
229+
) -> std::io::Result<Option<Vec<u8>>> {
230+
let url = parse_url(url)?;
231231
let key = cache.cache_item_key(&url)?;
232-
match cache.read_file_bytes(
233-
&key,
234-
maybe_checksum,
235-
allow_global_to_local,
236-
)? {
237-
Some(bytes) => Ok(Some(bytes)),
238-
None => Ok(None),
232+
match cache.read_file_bytes(&key, maybe_checksum, allow_global_to_local) {
233+
Ok(Some(bytes)) => Ok(Some(bytes)),
234+
Ok(None) => Ok(None),
235+
Err(err) => match err {
236+
CacheReadFileError::Io(err) => Err(err),
237+
CacheReadFileError::ChecksumIntegrity(err) => {
238+
Err(std::io::Error::new(ErrorKind::InvalidData, err.to_string()))
239+
}
240+
},
239241
}
240242
}
241243

@@ -272,18 +274,24 @@ pub mod wasm {
272274
url: &str,
273275
headers: JsValue,
274276
content: &[u8],
275-
) -> anyhow::Result<()> {
276-
let url = Url::parse(url)?;
277+
) -> std::io::Result<()> {
278+
let url = parse_url(url)?;
277279
let headers: HashMap<String, String> =
278-
serde_wasm_bindgen::from_value(headers)
279-
.map_err(|err| anyhow::anyhow!("{}", err))?;
280+
serde_wasm_bindgen::from_value(headers).map_err(|err| {
281+
std::io::Error::new(ErrorKind::InvalidData, err.to_string())
282+
})?;
280283
cache.set(&url, headers, content)
281284
}
282285

283286
inner(cache, url, headers, content).map_err(as_js_error)
284287
}
285288

286-
fn as_js_error(e: anyhow::Error) -> JsValue {
289+
fn parse_url(url: &str) -> std::io::Result<Url> {
290+
Url::parse(url)
291+
.map_err(|e| std::io::Error::new(ErrorKind::InvalidInput, e.to_string()))
292+
}
293+
294+
fn as_js_error(e: std::io::Error) -> JsValue {
287295
JsValue::from(js_sys::Error::new(&e.to_string()))
288296
}
289297

0 commit comments

Comments
 (0)