diff --git a/Cargo.lock b/Cargo.lock index 4ea3fdd..eac29a4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + [[package]] name = "aho-corasick" version = "1.1.5" @@ -205,8 +211,15 @@ name = "arr-subs" version = "0.1.0" dependencies = [ "arr-core", + "arr-parse", + "reqwest", + "serde", + "serde_json", "thiserror", "tokio", + "tracing", + "wiremock", + "zip", ] [[package]] @@ -433,6 +446,15 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853" +[[package]] +name = "crc32fast" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8498c871161e1742aaa9d52551b2d6ebdd4c3d45a3be423e3728f33b955be550" +dependencies = [ + "cfg-if", +] + [[package]] name = "crossbeam-queue" version = "0.3.13" @@ -589,6 +611,16 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" +[[package]] +name = "flate2" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +dependencies = [ + "miniz_oxide", + "zlib-rs", +] + [[package]] name = "flume" version = "0.12.0" @@ -1238,6 +1270,16 @@ dependencies = [ "unicase", ] +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + [[package]] name = "mio" version = "1.2.2" @@ -1756,6 +1798,12 @@ dependencies = [ "libc", ] +[[package]] +name = "simd-adler32" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" + [[package]] name = "slab" version = "0.4.12" @@ -2315,6 +2363,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "typed-path" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" + [[package]] name = "typenum" version = "1.20.1" @@ -2824,6 +2878,25 @@ dependencies = [ "syn 3.0.3", ] +[[package]] +name = "zip" +version = "8.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d04a6b5381502aa6087c94c669499eb1602eb9c5e8198e534de571f7154809b" +dependencies = [ + "crc32fast", + "flate2", + "indexmap", + "memchr", + "typed-path", +] + +[[package]] +name = "zlib-rs" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b31d188d9d685a4f9c7b46d6e36631b07058d2cfe190267adce54dc230bf12" + [[package]] name = "zmij" version = "1.0.23" diff --git a/Cargo.toml b/Cargo.toml index 5dff684..12a051c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,6 +55,7 @@ tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } url = "2" uuid = { version = "1", features = ["v4", "serde"] } +zip = { version = "8", default-features = false, features = ["deflate-flate2-zlib-rs"] } # Test-only tempfile = "3" diff --git a/crates/arr-subs/Cargo.toml b/crates/arr-subs/Cargo.toml index bcabaff..a9efccb 100644 --- a/crates/arr-subs/Cargo.toml +++ b/crates/arr-subs/Cargo.toml @@ -19,10 +19,17 @@ translate-command = [] [dependencies] arr-core.workspace = true +arr-parse.workspace = true +reqwest.workspace = true +serde.workspace = true +serde_json.workspace = true thiserror.workspace = true +tracing.workspace = true +zip.workspace = true [dev-dependencies] tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } +wiremock.workspace = true [lints] workspace = true diff --git a/crates/arr-subs/src/error.rs b/crates/arr-subs/src/error.rs index 6df7d43..55b5f8d 100644 --- a/crates/arr-subs/src/error.rs +++ b/crates/arr-subs/src/error.rs @@ -74,6 +74,17 @@ pub enum Error { #[source] source: std::io::Error, }, + + /// The provider could not be constructed: a bad base URL, or its HTTP + /// client failed to build. Always a caller bug — a hardcoded URL or a + /// test override — never a fact about the live service. + #[error("{provider} could not be configured: {detail}")] + Config { + /// The provider being constructed. + provider: ProviderId, + /// What went wrong, short enough to log. + detail: String, + }, } impl Error {