summaryrefslogtreecommitdiff
path: root/cli/cache/http_cache/common.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/cache/http_cache/common.rs')
-rw-r--r--cli/cache/http_cache/common.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/cli/cache/http_cache/common.rs b/cli/cache/http_cache/common.rs
new file mode 100644
index 000000000..690412293
--- /dev/null
+++ b/cli/cache/http_cache/common.rs
@@ -0,0 +1,42 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+
+use std::path::Path;
+
+use deno_core::url::Url;
+
+pub fn base_url_to_filename_parts(
+ url: &Url,
+ port_separator: &str,
+) -> Option<Vec<String>> {
+ let mut out = Vec::with_capacity(2);
+
+ let scheme = url.scheme();
+ out.push(scheme.to_string());
+
+ match scheme {
+ "http" | "https" => {
+ let host = url.host_str().unwrap();
+ let host_port = match url.port() {
+ // underscores are not allowed in domains, so adding one here is fine
+ Some(port) => format!("{host}{port_separator}{port}"),
+ None => host.to_string(),
+ };
+ out.push(host_port);
+ }
+ "data" | "blob" => (),
+ scheme => {
+ log::debug!("Don't know how to create cache name for scheme: {}", scheme);
+ return None;
+ }
+ };
+
+ Some(out)
+}
+
+pub fn read_file_bytes(path: &Path) -> std::io::Result<Option<Vec<u8>>> {
+ match std::fs::read(path) {
+ Ok(s) => Ok(Some(s)),
+ Err(err) if err.kind() == std::io::ErrorKind::NotFound => Ok(None),
+ Err(err) => Err(err),
+ }
+}