diff --git a/Cargo.lock b/Cargo.lock index 8b8bfa0..ecda98b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1486,6 +1486,15 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + [[package]] name = "enum-map" version = "2.6.3" @@ -1874,9 +1883,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" dependencies = [ "futures-channel", "futures-core", @@ -1889,9 +1898,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" dependencies = [ "futures-core", "futures-sink", @@ -1899,15 +1908,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" dependencies = [ "futures-core", "futures-task", @@ -1916,9 +1925,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" [[package]] name = "futures-lite" @@ -1937,9 +1946,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ "proc-macro2", "quote", @@ -1948,21 +1957,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" dependencies = [ "futures-channel", "futures-core", @@ -2222,6 +2231,16 @@ dependencies = [ "winapi", ] +[[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 = "heck" version = "0.3.3" @@ -2337,6 +2356,19 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + [[package]] name = "id-arena" version = "2.2.1" @@ -2471,6 +2503,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + [[package]] name = "is-terminal" version = "0.4.9" @@ -2834,9 +2872,9 @@ dependencies = [ [[package]] name = "mlua" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c3a7a7ff4481ec91b951a733390211a8ace1caba57266ccb5f4d4966704e560" +checksum = "7c81f8ac20188feb5461a73eabb22a34dd09d6d58513535eb587e46bff6ba250" dependencies = [ "bstr 1.6.2", "erased-serde", @@ -2851,9 +2889,9 @@ dependencies = [ [[package]] name = "mlua-sys" -version = "0.3.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ec8b54eddb76093069cce9eeffb4c7b3a1a0fe66962d7bd44c4867928149ca3" +checksum = "fc29228347d6bdc9e613dc95c69df2817f755434ee0f7f3b27b57755fe238b7f" dependencies = [ "cc", "cfg-if", @@ -2900,6 +2938,24 @@ dependencies = [ "getrandom", ] +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + [[package]] name = "ndarray" version = "0.15.6" @@ -3221,6 +3277,50 @@ version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +[[package]] +name = "openssl" +version = "0.10.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b8419dc8cc6d866deb801274bba2e6f8f6108c1bb7fcc10ee5ab864931dbb45" +dependencies = [ + "bitflags 2.4.0", + "cfg-if", + "foreign-types 0.3.2", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.36", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3eaad34cdd97d81de97964fc7f29e2d104f483840d906ef56daa1912338460b" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "orbclient" version = "0.3.46" @@ -3556,6 +3656,17 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "quick_rest" +version = "0.1.0" +dependencies = [ + "bytes", + "futures", + "reqwest", + "thiserror", + "tower", +] + [[package]] name = "quote" version = "1.0.33" @@ -4589,6 +4700,46 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "216080ab382b992234dda86873c18d4c48358f5cfcb70fd693d7f6f2131b628b" +[[package]] +name = "reqwest" +version = "0.11.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" +dependencies = [ + "base64 0.21.4", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "winreg", +] + [[package]] name = "rerun" version = "0.9.0" @@ -4820,6 +4971,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys 0.48.0", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -4842,6 +5002,29 @@ dependencies = [ "untrusted", ] +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "semver" version = "1.0.19" @@ -4912,6 +5095,18 @@ dependencies = [ "syn 2.0.36", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "serde_yaml" version = "0.9.25" @@ -5201,6 +5396,27 @@ dependencies = [ "winapi", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tempfile" version = "3.8.0" @@ -5225,18 +5441,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.48" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.48" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", @@ -5337,6 +5553,16 @@ dependencies = [ "syn 2.0.36", ] +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + [[package]] name = "tokio-tungstenite" version = "0.17.2" @@ -5380,6 +5606,33 @@ dependencies = [ "winnow", ] +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "hdrhistogram", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + [[package]] name = "tower-service" version = "0.3.2" @@ -5614,6 +5867,12 @@ version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d92ccd67fb88503048c01b59152a04effd0782d035a83a6d256ce6085f08f4a3" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "vec1" version = "1.10.1" @@ -6304,6 +6563,16 @@ dependencies = [ "memchr", ] +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + [[package]] name = "x11-dl" version = "2.21.0" diff --git a/Cargo.toml b/Cargo.toml index cf69f7b..07b1cad 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,8 +2,9 @@ resolver = "2" members = [ "lua_modules/filesystem", - "lua_modules/rerun_lua" + "lua_modules/rerun_lua", + "lua_modules/quick_rest" ] [workspace.dependencies] -mlua = { version = "0.9.1", features = ["lua54", "module", "serde", "serialize"] } \ No newline at end of file +mlua = { version = "0.9.2", features = ["lua54", "module", "serde", "serialize"] } \ No newline at end of file diff --git a/build.nu b/build.nu new file mode 100644 index 0000000..457de4b --- /dev/null +++ b/build.nu @@ -0,0 +1 @@ +export def \ No newline at end of file diff --git a/lua_modules/quick_rest/Cargo.toml b/lua_modules/quick_rest/Cargo.toml new file mode 100644 index 0000000..ced883d --- /dev/null +++ b/lua_modules/quick_rest/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "quick_rest" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +reqwest = { version = "0.11.22", features = ["stream", "json"] } +bytes = "1.5.0" +tower = { version = "0.4.13", features = ["full"] } +thiserror = "1.0.50" +futures = "0.3.29" \ No newline at end of file diff --git a/lua_modules/quick_rest/src/http_request.rs b/lua_modules/quick_rest/src/http_request.rs new file mode 100644 index 0000000..639892e --- /dev/null +++ b/lua_modules/quick_rest/src/http_request.rs @@ -0,0 +1,39 @@ +use bytes::Bytes; +use std::path::PathBuf; + +pub struct HttpRequest {} +impl HttpRequest { + pub fn get() -> HttpRequest { + todo!() + } + pub fn put() -> HttpRequest { + todo!() + } + + pub fn post() -> HttpRequest { + todo!() + } + pub fn patch() -> HttpRequest { + todo!() + } + + pub fn head() -> HttpRequest { + todo!() + } + pub fn delete() -> HttpRequest { + todo!() + } + pub fn path(&self, path: String) -> HttpRequest { + todo!() + } + pub fn append_path(&self, path: String) -> HttpRequest { + todo!() + } + pub fn add_query_param(&self, key: String, value: String) -> HttpRequest { + todo!() + } + pub fn add_header(&self, key: String, value: String) -> HttpRequest { + todo!() + } + pub fn into_reqwest(&self) -> reqwest::Request {} +} diff --git a/lua_modules/quick_rest/src/http_request_body.rs b/lua_modules/quick_rest/src/http_request_body.rs new file mode 100644 index 0000000..b21c9fe --- /dev/null +++ b/lua_modules/quick_rest/src/http_request_body.rs @@ -0,0 +1 @@ +pub struct HttpRequestBody {} diff --git a/lua_modules/quick_rest/src/http_response.rs b/lua_modules/quick_rest/src/http_response.rs new file mode 100644 index 0000000..1e9eb7c --- /dev/null +++ b/lua_modules/quick_rest/src/http_response.rs @@ -0,0 +1 @@ +pub struct HttpResponse {} diff --git a/lua_modules/quick_rest/src/http_service.rs b/lua_modules/quick_rest/src/http_service.rs new file mode 100644 index 0000000..759be2b --- /dev/null +++ b/lua_modules/quick_rest/src/http_service.rs @@ -0,0 +1,31 @@ +use crate::http_request::HttpRequest; +use crate::http_response::HttpResponse; +use crate::network_error::NetworkError; +use reqwest::Client; +use std::future::Future; +use std::task::{Context, Poll}; +use tower::Service; + +pub struct HttpService { + client: Client, +} + +impl Default for HttpService { + fn default() -> Self { + HttpService { + client: Client::default(), + } + } +} +impl Service for HttpService { + type Response = HttpResponse; + type Error = NetworkError; + type Future = Box>>; + + fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll> { + todo!() + } + fn call(&mut self, req: HttpRequest) -> Self::Future { + todo!() + } +} diff --git a/lua_modules/quick_rest/src/http_service_builder.rs b/lua_modules/quick_rest/src/http_service_builder.rs new file mode 100644 index 0000000..c7d74e8 --- /dev/null +++ b/lua_modules/quick_rest/src/http_service_builder.rs @@ -0,0 +1,36 @@ +use crate::http_request::HttpRequest; +use crate::http_response::HttpResponse; +use crate::http_service::HttpService; +use crate::http_service_wrapper::HttpServiceWrapper; +use crate::network_error::NetworkError; +use tower::util::BoxService; +use tower::ServiceBuilder; + +#[derive(Clone)] +pub struct HttpServiceBuilder { + concurrency_limit: usize, +} + +impl Default for HttpServiceBuilder { + fn default() -> Self { + HttpServiceBuilder { + concurrency_limit: 1, + } + } +} +impl HttpServiceBuilder { + pub fn concurrency_limit(&self, limit: usize) -> Self { + let mut result = self.clone(); + result.concurrency_limit = limit; + return result; + } + + pub fn build(&self) -> HttpServiceWrapper { + let service = HttpService::default(); + let service = ServiceBuilder::new() + .concurrency_limit(self.concurrency_limit) + .service(service); + let service = BoxService::new(service); + return service.into(); + } +} diff --git a/lua_modules/quick_rest/src/http_service_wrapper.rs b/lua_modules/quick_rest/src/http_service_wrapper.rs new file mode 100644 index 0000000..024eda5 --- /dev/null +++ b/lua_modules/quick_rest/src/http_service_wrapper.rs @@ -0,0 +1,14 @@ +use crate::http_request::HttpRequest; +use crate::http_response::HttpResponse; +use crate::network_error::NetworkError; +use tower::util::BoxService; + +pub struct HttpServiceWrapper { + inner: BoxService, +} + +impl From> for HttpServiceWrapper { + fn from(value: BoxService) -> Self { + HttpServiceWrapper { inner: value } + } +} diff --git a/lua_modules/quick_rest/src/lib.rs b/lua_modules/quick_rest/src/lib.rs new file mode 100644 index 0000000..4d3848f --- /dev/null +++ b/lua_modules/quick_rest/src/lib.rs @@ -0,0 +1,7 @@ +mod http_request; +mod http_request_body; +mod http_response; +mod http_service; +mod http_service_builder; +mod http_service_wrapper; +mod network_error; diff --git a/lua_modules/quick_rest/src/network_error.rs b/lua_modules/quick_rest/src/network_error.rs new file mode 100644 index 0000000..4840dab --- /dev/null +++ b/lua_modules/quick_rest/src/network_error.rs @@ -0,0 +1,4 @@ +use thiserror::Error; + +#[derive(Error)] +pub struct NetworkError {}