aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikolay Govorov <me@govorov.online>2026-01-16 23:47:04 +0000
committerNikolay Govorov <me@govorov.online>2026-01-16 23:49:10 +0000
commit258c2212381cfa16b6216b09847aeab400a73b90 (patch)
treec8abc70f8176c2ce5b5494ba3dd7f47eb4a47419
parentb40af5fd678f30938c3e0e970837b98408dea93c (diff)
downloadtar
tar.gz
tar.bz2
tar.lz
tar.xz
tar.zst
zip
Rename 'upstream' to 'proxy' module, update deps
Diffstat
-rw-r--r--Cargo.lock224+185 −39
-rw-r--r--Cargo.toml66+47 −19
-rw-r--r--src/backends/zig.rs8+4 −4
-rw-r--r--src/main.rs10+7 −3
-rw-r--r--src/proxy.rs (renamed from src/upstream.rs)4+2 −2
5 files changed, 245 insertions, 67 deletions
diff --git a/Cargo.lock b/Cargo.lock
index e3c104a..466689b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -207,17 +207,33 @@ checksum = "fef252edff26ddba56bbcdf2ee3307b8129acb86f5749b68990c168a6fcc9c76"
dependencies = [
"axum",
"axum-core",
+ "axum-macros",
"bytes",
+ "fastrand",
+ "form_urlencoded",
"futures-core",
"futures-util",
+ "headers",
"http",
"http-body",
"http-body-util",
"mime",
+ "multer",
+ "percent-encoding",
"pin-project-lite",
+ "prost",
+ "rustversion",
+ "serde_core",
+ "serde_html_form",
+ "serde_json",
+ "serde_path_to_error",
+ "tokio",
+ "tokio-stream",
+ "tokio-util",
"tower-layer",
"tower-service",
"tracing",
+ "typed-json",
]
[[package]]
@@ -438,9 +454,9 @@ dependencies = [
[[package]]
name = "cc"
-version = "1.2.52"
+version = "1.2.53"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd4932aefd12402b36c60956a4fe0035421f544799057659ff86f923657aada3"
+checksum = "755d2fce177175ffca841e9a06afdb2c4ab0f593d53b4dee48147dfaade85932"
dependencies = [
"find-msvc-tools",
"jobserver",
@@ -478,13 +494,14 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
[[package]]
name = "chrono"
-version = "0.4.42"
+version = "0.4.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
+checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118"
dependencies = [
"iana-time-zone",
"js-sys",
"num-traits",
+ "serde",
"wasm-bindgen",
"windows-link",
]
@@ -525,9 +542,9 @@ dependencies = [
[[package]]
name = "clap_lex"
-version = "0.7.6"
+version = "0.7.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d"
+checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32"
[[package]]
name = "clru"
@@ -903,9 +920,9 @@ dependencies = [
[[package]]
name = "find-msvc-tools"
-version = "0.1.7"
+version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f449e6c6c08c865631d4890cfacf252b3d396c9bcc83adb6623cdb02a8336c41"
+checksum = "8591b0bcc8a98a64310a2fae1bb3e9b8564dd10e381e6e28010fde8e8e8568db"
[[package]]
name = "fixedbitset"
@@ -1946,6 +1963,40 @@ dependencies = [
]
[[package]]
+name = "hdrhistogram"
+version = "7.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d"
+dependencies = [
+ "byteorder",
+ "num-traits",
+]
+
+[[package]]
+name = "headers"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb"
+dependencies = [
+ "base64",
+ "bytes",
+ "headers-core",
+ "http",
+ "httpdate",
+ "mime",
+ "sha1",
+]
+
+[[package]]
+name = "headers-core"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4"
+dependencies = [
+ "http",
+]
+
+[[package]]
name = "heapless"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2119,9 +2170,12 @@ dependencies = [
"percent-encoding",
"pin-project-lite",
"socket2",
+ "system-configuration",
"tokio",
+ "tower-layer",
"tower-service",
"tracing",
+ "windows-registry",
]
[[package]]
@@ -2293,6 +2347,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
[[package]]
+name = "itertools"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
+dependencies = [
+ "either",
+]
+
+[[package]]
name = "itoa"
version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2373,9 +2436,9 @@ dependencies = [
[[package]]
name = "js-sys"
-version = "0.3.83"
+version = "0.3.85"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8"
+checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3"
dependencies = [
"once_cell",
"wasm-bindgen",
@@ -2943,6 +3006,29 @@ dependencies = [
]
[[package]]
+name = "prost"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568"
+dependencies = [
+ "bytes",
+ "prost-derive",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b"
+dependencies = [
+ "anyhow",
+ "itertools",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
name = "quick-xml"
version = "0.37.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3195,9 +3281,9 @@ dependencies = [
[[package]]
name = "rustls-pki-types"
-version = "1.13.2"
+version = "1.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282"
+checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd"
dependencies = [
"zeroize",
]
@@ -3231,9 +3317,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
[[package]]
name = "rustls-webpki"
-version = "0.103.8"
+version = "0.103.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52"
+checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53"
dependencies = [
"ring",
"rustls-pki-types",
@@ -3396,6 +3482,19 @@ dependencies = [
]
[[package]]
+name = "serde_html_form"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2f2d7ff8a2140333718bb329f5c40fc5f0865b84c426183ce14c97d2ab8154f"
+dependencies = [
+ "form_urlencoded",
+ "indexmap",
+ "itoa",
+ "ryu",
+ "serde_core",
+]
+
+[[package]]
name = "serde_json"
version = "1.0.149"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3914,6 +4013,27 @@ dependencies = [
]
[[package]]
+name = "system-configuration"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
+dependencies = [
+ "bitflags",
+ "core-foundation 0.9.4",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
name = "tame-index"
version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4036,30 +4156,30 @@ dependencies = [
[[package]]
name = "time"
-version = "0.3.44"
+version = "0.3.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
+checksum = "f9e442fc33d7fdb45aa9bfeb312c095964abdf596f7567261062b2a7107aaabd"
dependencies = [
"deranged",
"itoa",
"num-conv",
"powerfmt",
- "serde",
+ "serde_core",
"time-core",
"time-macros",
]
[[package]]
name = "time-core"
-version = "0.1.6"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
+checksum = "8b36ee98fd31ec7426d599183e8fe26932a8dc1fb76ddb6214d05493377d34ca"
[[package]]
name = "time-macros"
-version = "0.2.24"
+version = "0.2.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3"
+checksum = "71e552d1249bf61ac2a52db88179fd0673def1e1ad8243a00d9ec9ed71fee3dd"
dependencies = [
"num-conv",
"time-core",
@@ -4219,9 +4339,13 @@ checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4"
dependencies = [
"futures-core",
"futures-util",
+ "hdrhistogram",
+ "indexmap",
"pin-project-lite",
+ "slab",
"sync_wrapper",
"tokio",
+ "tokio-util",
"tower-layer",
"tower-service",
"tracing",
@@ -4358,6 +4482,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c"
[[package]]
+name = "typed-json"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6024a8d0025400b3f6b189366e9aa92012cf9c4fe1cd2620848dd61425c49eed"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
name = "typenum"
version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4496,9 +4630,9 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
name = "wasip2"
-version = "1.0.1+wasi-0.2.4"
+version = "1.0.2+wasi-0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
+checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5"
dependencies = [
"wit-bindgen",
]
@@ -4511,9 +4645,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
[[package]]
name = "wasm-bindgen"
-version = "0.2.106"
+version = "0.2.108"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd"
+checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566"
dependencies = [
"cfg-if",
"once_cell",
@@ -4524,11 +4658,12 @@ dependencies = [
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.56"
+version = "0.4.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c"
+checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f"
dependencies = [
"cfg-if",
+ "futures-util",
"js-sys",
"once_cell",
"wasm-bindgen",
@@ -4537,9 +4672,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.106"
+version = "0.2.108"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3"
+checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -4547,9 +4682,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.106"
+version = "0.2.108"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40"
+checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55"
dependencies = [
"bumpalo",
"proc-macro2",
@@ -4560,18 +4695,18 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.106"
+version = "0.2.108"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4"
+checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12"
dependencies = [
"unicode-ident",
]
[[package]]
name = "web-sys"
-version = "0.3.83"
+version = "0.3.85"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac"
+checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -4669,6 +4804,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
[[package]]
+name = "windows-registry"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720"
+dependencies = [
+ "windows-link",
+ "windows-result",
+ "windows-strings",
+]
+
+[[package]]
name = "windows-result"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4985,9 +5131,9 @@ dependencies = [
[[package]]
name = "wit-bindgen"
-version = "0.46.0"
+version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
+checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
[[package]]
name = "writeable"
@@ -5125,9 +5271,9 @@ checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3"
[[package]]
name = "zmij"
-version = "1.0.13"
+version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac93432f5b761b22864c774aac244fa5c0fd877678a4c37ebf6cf42208f9c9ec"
+checksum = "bd8f3f50b848df28f887acb68e41201b5aea6bc8a8dacc00fb40635ff9a72fea"
[[package]]
name = "zorian"
diff --git a/Cargo.toml b/Cargo.toml
index 6a541e1..f157487 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -9,30 +9,58 @@ homepage = "https://pkg.earth"
repository = "https://github.com/mrdimidium/Zorian"
[dependencies]
-axum = { version = "0.8.8", features = ["http2", "macros", "multipart"] }
-axum-extra = "0.12.5"
-bytes = "1.11.0"
-chrono = "0.4"
-crc32fast = "1.4.2"
+axum = { version = "0.8", features = ["http2", "macros", "multipart"] }
+axum-extra = { version = "0.12", features = [
+ "async-read-body",
+ "attachment",
+ "cached",
+ "erased-json",
+ "error-response",
+ "file-stream",
+ "form",
+ "handler",
+ "json-deserializer",
+ "json-lines",
+ "middleware",
+ "multipart",
+ "optional-path",
+ "protobuf",
+ "query",
+ "routing",
+ "tracing",
+ "typed-header",
+ "typed-routing",
+ "with-rejection",
+] }
+bytes = "1.11"
+chrono = { version = "0.4", features = ["serde"] }
+crc32fast = "1.5"
hex = "0.4"
-http-body-util = "0.1.3"
-hyper = "1.8.1"
-hyper-tls = "0.6.0"
-hyper-util = { version = "0.1.19", features = ["client", "http1", "http2", "tokio"] }
-minijinja = "2.14.0"
+http-body-util = "0.1"
+hyper = "1.8"
+hyper-tls = "0.6"
+hyper-util = { version = "0.1", features = ["full"] }
+minijinja = "2.14"
semver = "1.0"
serde = { version = "1.0", features = ["derive"] }
-sqlx = { version = "0.8.6", features = ["sqlite", "runtime-tokio", "macros", "derive", "chrono", "json"] }
+sqlx = { version = "0.8", features = [
+ "sqlite",
+ "runtime-tokio",
+ "macros",
+ "derive",
+ "chrono",
+ "json",
+] }
thiserror = "2.0"
-tokio = { version = "1.49.0", features = ["full"] }
-toml = "0.9.8"
-tower = "0.5.3"
-tower-http = { version = "0.6.8", features = ["full"] }
+tokio = { version = "1.49", features = ["full"] }
+toml = "0.9"
+tower = { version = "0.5", features = ["full"] }
+tower-http = { version = "0.6", features = ["full"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
-uuid = { version = "1.19.0", features = ["v4","v5"] }
+uuid = { version = "1.19", features = ["v4", "v5"] }
[dev-dependencies]
-cargo-deny = "0.19.0"
-cargo-llvm-cov = "0.6.23"
-tempfile = "3"
+cargo-deny = "0.19"
+cargo-llvm-cov = "0.6"
+tempfile = "3.24"
diff --git a/src/backends/zig.rs b/src/backends/zig.rs
index 44ac3bc..ed22326 100644
--- a/src/backends/zig.rs
+++ b/src/backends/zig.rs
@@ -9,8 +9,8 @@ use thiserror::Error;
use tracing::error;
use crate::config;
+use crate::proxy;
use crate::storage;
-use crate::upstream;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
enum Archive {
@@ -150,14 +150,14 @@ impl<'a> Tarball<'a> {
pub struct ZigController {
config: Arc<config::ConfigService>,
storage: Arc<storage::StorageService>,
- upstream: Arc<upstream::UpstreamService>,
+ upstream: Arc<proxy::ProxyService>,
}
impl ZigController {
pub fn new(
config: Arc<config::ConfigService>,
storage: Arc<storage::StorageService>,
- upstream: Arc<upstream::UpstreamService>,
+ upstream: Arc<proxy::ProxyService>,
) -> Self {
Self {
config,
@@ -195,7 +195,7 @@ impl ZigController {
let entry = controller
.upstream
- .fetch(upstream::DownloadRequest { url })
+ .fetch(proxy::DownloadRequest { url })
.await?;
match controller.storage.put("zig", &filename, &entry.bytes).await {
diff --git a/src/main.rs b/src/main.rs
index c8f593a..1aa8951 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -3,8 +3,8 @@
mod backends;
mod config;
+mod proxy;
mod storage;
-mod upstream;
use std::future::Future;
use std::path::PathBuf;
@@ -93,7 +93,7 @@ async fn main() {
});
let storage = Arc::new(storage::StorageService::new(config.clone()).await.unwrap());
- let upstream = Arc::new(upstream::UpstreamService::new());
+ let upstream = Arc::new(proxy::ProxyService::new());
let web_controller = Arc::new(WebController::default());
let zig_controller = Arc::new(ZigController::new(
@@ -167,7 +167,11 @@ where
}
fn call(&mut self, req: Request<Body>) -> Self::Future {
- Box::pin(log_request(self.inner.clone(), req))
+ let clone = self.inner.clone();
+
+ // take the service that was ready
+ let inner = std::mem::replace(&mut self.inner, clone);
+ Box::pin(async move { log_request(inner, req).await })
}
}
diff --git a/src/upstream.rs b/src/proxy.rs
index da25a7d..444ffaa 100644
--- a/src/upstream.rs
+++ b/src/proxy.rs
@@ -18,11 +18,11 @@ pub struct File {
pub bytes: Bytes,
}
-pub struct UpstreamService {
+pub struct ProxyService {
client: Client<HttpsConnector<HttpConnector>, Empty<Bytes>>,
}
-impl UpstreamService {
+impl ProxyService {
pub fn new() -> Self {
let https = HttpsConnector::new();
let client = Client::builder(TokioExecutor::new()).build(https);