├── .gitignore ├── .dockerignore ├── Dockerfile ├── Cargo.toml ├── .github └── workflows │ ├── ci.yml │ └── docker.yml ├── LICENSE ├── README.md ├── src └── main.rs └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | Dockerfile 2 | /.git 3 | /target 4 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM public.ecr.aws/docker/library/rust:1.74-alpine as builder 2 | 3 | RUN apk add --no-cache musl-dev 4 | 5 | WORKDIR /usr/local/src/aws-lambda-rie-gateway 6 | 7 | COPY Cargo.toml Cargo.lock ./ 8 | RUN mkdir -p src/bin && echo 'fn main() {}' > src/bin/dummy.rs && cargo build --release --locked && rm -r src/bin 9 | 10 | COPY src ./src/ 11 | RUN cargo build --release --locked --frozen 12 | 13 | FROM public.ecr.aws/docker/library/alpine:latest 14 | 15 | ENV BIND 0.0.0.0:8080 16 | 17 | EXPOSE 8080 18 | 19 | COPY --from=builder /usr/local/src/aws-lambda-rie-gateway/target/release/aws-lambda-rie-gateway /usr/local/bin/aws-lambda-rie-gateway 20 | ENTRYPOINT ["aws-lambda-rie-gateway"] 21 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "aws-lambda-rie-gateway" 3 | version = "0.1.0" 4 | authors = ["Kohei Suzuki "] 5 | edition = "2018" 6 | 7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 8 | 9 | [dependencies] 10 | anyhow = "1" 11 | aws_lambda_events = { version = "0.12", default-features = false, features = ["apigw"] } 12 | base64 = "0.21" 13 | bytes = "1" 14 | chrono = "0.4" 15 | clap = { version = "4", features = ["derive", "env"] } 16 | futures = "0.3" 17 | hyper = { version = "0.14", features = ["http1", "server", "stream", "runtime"] } 18 | listenfd = "1" 19 | reqwest = { version = "0.11", default-features = false, features = ["json"] } 20 | serde = { version = "1", features = ["derive"] } 21 | serde_json = "1" 22 | tokio = { version = "1", features = ["rt-multi-thread", "macros", "signal"] } 23 | tracing = "0.1" 24 | tracing-subscriber = { version = "0.3", features = ["env-filter"] } 25 | url = "2.2" 26 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | pull_request: 6 | 7 | jobs: 8 | check: 9 | name: Run check 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v2 13 | - uses: actions-rs/toolchain@v1 14 | with: 15 | profile: minimal 16 | toolchain: stable 17 | - uses: Swatinem/rust-cache@v1 18 | - name: Run cargo check 19 | uses: actions-rs/cargo@v1 20 | with: 21 | command: check 22 | lint: 23 | name: Run lint 24 | runs-on: ubuntu-latest 25 | steps: 26 | - uses: actions/checkout@v2 27 | - uses: actions-rs/toolchain@v1 28 | with: 29 | profile: minimal 30 | toolchain: stable 31 | components: rustfmt, clippy 32 | - uses: Swatinem/rust-cache@v1 33 | - name: Run cargo fmt 34 | uses: actions-rs/cargo@v1 35 | with: 36 | command: fmt 37 | args: --all -- --check 38 | - name: Run cargo clippy 39 | uses: actions-rs/cargo@v1 40 | with: 41 | command: clippy 42 | args: -- -D warnings 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Kohei Suzuki 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # aws-lambda-rie-gateway 2 | Convert HTTP request to API Gateway payload for [aws-lambda-rie](https://github.com/aws/aws-lambda-runtime-interface-emulator) 3 | 4 | # Usage 5 | 1. Start Docker container for Lambda with aws-lambda-rie: `docker run -p 9000:8080 0123456789012dkr.ecr.ap-northeast-1.amazonaws.com/your-awesome-app:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef` 6 | - See documents and README of aws-lambda-rie for details 7 | - https://docs.aws.amazon.com/lambda/latest/dg/images-test.html 8 | - https://github.com/aws/aws-lambda-runtime-interface-emulator 9 | 2. Start aws-lambda-rie-gateway: `cargo run` 10 | 3. Then you can access Lambda for API Gateway with normal HTTP request: `curl http://localhost:8080/hello` 11 | 12 | # Usage Docker Image 13 | ## From container registry 14 | 1. Run `docker run --rm --env TARGET_URL=http://rie_app:8080 --publish 8080:8080 public.ecr.aws/eagletmt/aws-lambda-rie-gateway` 15 | 16 | ## From source 17 | 1. Clone this repository 18 | 2. Then `docker build --tag aws-lambda-rie-gateway` 19 | 3. Execute with `docker run --rm --env TARGET_URL=http://rie_app:8080 --publish 8080:8080 aws-lambda-rie-gateway` 20 | -------------------------------------------------------------------------------- /.github/workflows/docker.yml: -------------------------------------------------------------------------------- 1 | name: Docker 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | tags: 8 | - v* 9 | 10 | env: 11 | IMAGE_REPO: public.ecr.aws/eagletmt/aws-lambda-rie-gateway 12 | 13 | jobs: 14 | push: 15 | runs-on: ubuntu-latest 16 | if: github.event_name == 'push' || github.event_name == 'create' 17 | permissions: 18 | id-token: write 19 | contents: read 20 | steps: 21 | - uses: actions/checkout@v3 22 | 23 | - uses: aws-actions/configure-aws-credentials@v1 24 | with: 25 | aws-region: us-east-1 26 | role-to-assume: arn:aws:iam::274147449864:role/GHAAwsLambdaRieGateway 27 | role-skip-session-tagging: 'true' 28 | 29 | - name: Log into registry 30 | run: aws ecr-public get-login-password --region us-east-1 | docker login -u AWS --password-stdin public.ecr.aws 31 | 32 | - name: Pull images for caching 33 | run: | 34 | docker pull $IMAGE_REPO:stage-builder || true 35 | docker pull $IMAGE_REPO:latest || true 36 | 37 | - name: Build image 38 | run: | 39 | docker build . --tag $IMAGE_REPO:stage-builder --target builder --cache-from $IMAGE_REPO:stage-builder 40 | docker build . --tag $IMAGE_REPO:latest --cache-from $IMAGE_REPO:stage-builder --cache-from $IMAGE_REPO:latest 41 | 42 | - name: Push image 43 | run: | 44 | # Strip git ref prefix from version 45 | VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') 46 | 47 | # Strip "v" prefix from tag name 48 | [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') 49 | 50 | # Use Docker `latest` tag convention 51 | [ "$VERSION" == "main" ] && VERSION=latest 52 | 53 | echo VERSION=$VERSION 54 | 55 | docker push $IMAGE_REPO:stage-builder 56 | docker tag $IMAGE_REPO:latest $IMAGE_REPO:$VERSION 57 | docker push $IMAGE_REPO:$VERSION 58 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use aws_lambda_events::apigw::{ 2 | ApiGatewayV2httpRequest, ApiGatewayV2httpRequestContext, 3 | ApiGatewayV2httpRequestContextHttpDescription, ApiGatewayV2httpResponse, 4 | }; 5 | use base64::Engine as _; 6 | use chrono::Utc; 7 | use clap::Parser as _; 8 | use futures::stream::TryStreamExt as _; 9 | 10 | #[derive(Debug, clap::Parser)] 11 | struct Opt { 12 | /// Bind address 13 | #[clap(short, long, env, default_value = "127.0.0.1:8080")] 14 | bind: String, 15 | /// Target root URL of RIE 16 | #[clap(short, long, env, default_value = "http://localhost:9000")] 17 | target_url: String, 18 | } 19 | 20 | #[tokio::main] 21 | async fn main() -> Result<(), Box> { 22 | tracing_subscriber::fmt() 23 | .with_env_filter( 24 | tracing_subscriber::EnvFilter::builder() 25 | .with_default_directive(tracing_subscriber::filter::LevelFilter::INFO.into()) 26 | .from_env_lossy(), 27 | ) 28 | .init(); 29 | let Opt { bind, target_url } = Opt::parse(); 30 | 31 | let make_service = hyper::service::make_service_fn(move |_| { 32 | let target_url = target_url.clone(); 33 | async { 34 | Ok::<_, std::convert::Infallible>(hyper::service::service_fn(move |r| { 35 | handle(target_url.clone(), r) 36 | })) 37 | } 38 | }); 39 | let server = if let Some(listener) = listenfd::ListenFd::from_env().take_tcp_listener(0)? { 40 | tracing::info!("Listen {}", listener.local_addr()?); 41 | hyper::server::Server::from_tcp(listener)? 42 | } else { 43 | let addr = bind.parse()?; 44 | tracing::info!("Listen {}", addr); 45 | hyper::server::Server::bind(&addr) 46 | } 47 | .serve(make_service) 48 | .with_graceful_shutdown(async { 49 | let _ = tokio::signal::ctrl_c().await; 50 | tracing::info!("Shutting down..."); 51 | }); 52 | server.await?; 53 | Ok(()) 54 | } 55 | 56 | async fn handle( 57 | target_url: String, 58 | request: hyper::Request, 59 | ) -> Result, anyhow::Error> { 60 | let query_string_parameters = if request.uri().query().is_some() { 61 | let u = url::Url::parse(&format!("{}", request.uri()))?; 62 | let mut params = std::collections::HashMap::new(); 63 | for (k, v) in u.query_pairs() { 64 | params.insert(k.into_owned(), v.into_owned()); 65 | } 66 | params 67 | } else { 68 | std::collections::HashMap::new() 69 | }; 70 | let method = request.method().clone(); 71 | let uri = request.uri().clone(); 72 | let protocol = request.version(); 73 | let headers = request.headers().clone(); 74 | 75 | let body = request 76 | .into_body() 77 | .map_ok(|b| bytes::BytesMut::from(&b[..])) 78 | .try_concat() 79 | .await?; 80 | 81 | let datetime = Utc::now(); 82 | 83 | let payload = ApiGatewayV2httpRequest { 84 | version: Some("2.0".to_owned()), 85 | kind: None, 86 | authorization_token: None, 87 | http_method: method.clone(), 88 | identity_source: None, 89 | method_arn: None, 90 | resource: None, 91 | route_key: None, 92 | raw_path: Some(uri.path().to_owned()), 93 | raw_query_string: uri.query().map(|s| s.to_owned()), 94 | cookies: None, 95 | headers: headers.clone(), 96 | query_string_parameters: query_string_parameters.into(), 97 | path_parameters: std::collections::HashMap::new(), 98 | request_context: ApiGatewayV2httpRequestContext { 99 | route_key: Some("$default".to_owned()), 100 | account_id: Some(String::new()), 101 | stage: Some("$default".to_owned()), 102 | request_id: Some(String::new()), 103 | authorizer: None, 104 | apiid: Some(String::new()), 105 | domain_name: Some(String::new()), 106 | domain_prefix: Some(String::new()), 107 | http: ApiGatewayV2httpRequestContextHttpDescription { 108 | method, 109 | path: Some(uri.path().to_owned()), 110 | protocol: Some(format!("{:?}", protocol)), 111 | source_ip: None, 112 | user_agent: None, 113 | }, 114 | authentication: None, 115 | time: Some(datetime.format("%d/%b/%Y:%T %z").to_string()), 116 | time_epoch: datetime.timestamp_millis(), 117 | }, 118 | stage_variables: std::collections::HashMap::new(), 119 | body: if body.is_empty() { 120 | None 121 | } else { 122 | Some(base64::engine::general_purpose::STANDARD.encode(&body)) 123 | }, 124 | is_base64_encoded: true, 125 | }; 126 | 127 | tracing::info!( 128 | "Send upstream request: {}", 129 | serde_json::to_string(&payload)? 130 | ); 131 | 132 | let resp = reqwest::Client::new() 133 | .post(&format!( 134 | "{}/2015-03-31/functions/function/invocations", 135 | target_url 136 | )) 137 | .json(&payload) 138 | .send() 139 | .await?; 140 | 141 | let lambda_response: ApiGatewayV2httpResponse = resp.json().await.map_err(|e| { 142 | tracing::error!("{e}"); 143 | e 144 | })?; 145 | tracing::info!("Received upstream response: {:?}", lambda_response); 146 | 147 | let status = hyper::StatusCode::from_u16(lambda_response.status_code as u16)?; 148 | let mut builder = hyper::Response::builder().status(status); 149 | let headers = builder.headers_mut().unwrap(); 150 | *headers = lambda_response.headers; 151 | 152 | let body: Vec = if let Some(body) = lambda_response.body { 153 | body.as_ref().into() 154 | } else { 155 | Vec::new() 156 | }; 157 | 158 | if lambda_response.is_base64_encoded { 159 | match base64::engine::general_purpose::STANDARD.decode(&body) { 160 | Ok(decoded_bytes) => { 161 | // Use the decoded bytes as needed 162 | Ok(builder.body(hyper::Body::from(decoded_bytes))?) 163 | } 164 | Err(e) => { 165 | tracing::warn!( 166 | "Lambda response signaled it was base64, but could not decode it: {}", 167 | e 168 | ); 169 | Ok(builder.body(hyper::Body::from(body))?) 170 | } 171 | } 172 | } else { 173 | Ok(builder.body(hyper::Body::from(body))?) 174 | } 175 | } 176 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.21.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler" 16 | version = "1.0.2" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 19 | 20 | [[package]] 21 | name = "aho-corasick" 22 | version = "1.1.2" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" 25 | dependencies = [ 26 | "memchr", 27 | ] 28 | 29 | [[package]] 30 | name = "android-tzdata" 31 | version = "0.1.1" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 34 | 35 | [[package]] 36 | name = "android_system_properties" 37 | version = "0.1.5" 38 | source = "registry+https://github.com/rust-lang/crates.io-index" 39 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 40 | dependencies = [ 41 | "libc", 42 | ] 43 | 44 | [[package]] 45 | name = "anstream" 46 | version = "0.6.5" 47 | source = "registry+https://github.com/rust-lang/crates.io-index" 48 | checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6" 49 | dependencies = [ 50 | "anstyle", 51 | "anstyle-parse", 52 | "anstyle-query", 53 | "anstyle-wincon", 54 | "colorchoice", 55 | "utf8parse", 56 | ] 57 | 58 | [[package]] 59 | name = "anstyle" 60 | version = "1.0.4" 61 | source = "registry+https://github.com/rust-lang/crates.io-index" 62 | checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" 63 | 64 | [[package]] 65 | name = "anstyle-parse" 66 | version = "0.2.3" 67 | source = "registry+https://github.com/rust-lang/crates.io-index" 68 | checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" 69 | dependencies = [ 70 | "utf8parse", 71 | ] 72 | 73 | [[package]] 74 | name = "anstyle-query" 75 | version = "1.0.2" 76 | source = "registry+https://github.com/rust-lang/crates.io-index" 77 | checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" 78 | dependencies = [ 79 | "windows-sys 0.52.0", 80 | ] 81 | 82 | [[package]] 83 | name = "anstyle-wincon" 84 | version = "3.0.2" 85 | source = "registry+https://github.com/rust-lang/crates.io-index" 86 | checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" 87 | dependencies = [ 88 | "anstyle", 89 | "windows-sys 0.52.0", 90 | ] 91 | 92 | [[package]] 93 | name = "anyhow" 94 | version = "1.0.76" 95 | source = "registry+https://github.com/rust-lang/crates.io-index" 96 | checksum = "59d2a3357dde987206219e78ecfbbb6e8dad06cbb65292758d3270e6254f7355" 97 | 98 | [[package]] 99 | name = "autocfg" 100 | version = "1.1.0" 101 | source = "registry+https://github.com/rust-lang/crates.io-index" 102 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 103 | 104 | [[package]] 105 | name = "aws-lambda-rie-gateway" 106 | version = "0.1.0" 107 | dependencies = [ 108 | "anyhow", 109 | "aws_lambda_events", 110 | "base64", 111 | "bytes", 112 | "chrono", 113 | "clap", 114 | "futures", 115 | "hyper", 116 | "listenfd", 117 | "reqwest", 118 | "serde", 119 | "serde_json", 120 | "tokio", 121 | "tracing", 122 | "tracing-subscriber", 123 | "url", 124 | ] 125 | 126 | [[package]] 127 | name = "aws_lambda_events" 128 | version = "0.12.1" 129 | source = "registry+https://github.com/rust-lang/crates.io-index" 130 | checksum = "03611508dd1e514e311caec235b581c99a4cb66fa1771bd502819eed69894f12" 131 | dependencies = [ 132 | "base64", 133 | "bytes", 134 | "http", 135 | "http-body", 136 | "http-serde", 137 | "query_map", 138 | "serde", 139 | "serde_json", 140 | ] 141 | 142 | [[package]] 143 | name = "backtrace" 144 | version = "0.3.69" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" 147 | dependencies = [ 148 | "addr2line", 149 | "cc", 150 | "cfg-if", 151 | "libc", 152 | "miniz_oxide", 153 | "object", 154 | "rustc-demangle", 155 | ] 156 | 157 | [[package]] 158 | name = "base64" 159 | version = "0.21.5" 160 | source = "registry+https://github.com/rust-lang/crates.io-index" 161 | checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" 162 | 163 | [[package]] 164 | name = "bitflags" 165 | version = "1.3.2" 166 | source = "registry+https://github.com/rust-lang/crates.io-index" 167 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 168 | 169 | [[package]] 170 | name = "bumpalo" 171 | version = "3.14.0" 172 | source = "registry+https://github.com/rust-lang/crates.io-index" 173 | checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" 174 | 175 | [[package]] 176 | name = "bytes" 177 | version = "1.5.0" 178 | source = "registry+https://github.com/rust-lang/crates.io-index" 179 | checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" 180 | dependencies = [ 181 | "serde", 182 | ] 183 | 184 | [[package]] 185 | name = "cc" 186 | version = "1.0.83" 187 | source = "registry+https://github.com/rust-lang/crates.io-index" 188 | checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" 189 | dependencies = [ 190 | "libc", 191 | ] 192 | 193 | [[package]] 194 | name = "cfg-if" 195 | version = "1.0.0" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 198 | 199 | [[package]] 200 | name = "chrono" 201 | version = "0.4.31" 202 | source = "registry+https://github.com/rust-lang/crates.io-index" 203 | checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" 204 | dependencies = [ 205 | "android-tzdata", 206 | "iana-time-zone", 207 | "js-sys", 208 | "num-traits", 209 | "wasm-bindgen", 210 | "windows-targets 0.48.5", 211 | ] 212 | 213 | [[package]] 214 | name = "clap" 215 | version = "4.4.11" 216 | source = "registry+https://github.com/rust-lang/crates.io-index" 217 | checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2" 218 | dependencies = [ 219 | "clap_builder", 220 | "clap_derive", 221 | ] 222 | 223 | [[package]] 224 | name = "clap_builder" 225 | version = "4.4.11" 226 | source = "registry+https://github.com/rust-lang/crates.io-index" 227 | checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb" 228 | dependencies = [ 229 | "anstream", 230 | "anstyle", 231 | "clap_lex", 232 | "strsim", 233 | ] 234 | 235 | [[package]] 236 | name = "clap_derive" 237 | version = "4.4.7" 238 | source = "registry+https://github.com/rust-lang/crates.io-index" 239 | checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" 240 | dependencies = [ 241 | "heck", 242 | "proc-macro2", 243 | "quote", 244 | "syn", 245 | ] 246 | 247 | [[package]] 248 | name = "clap_lex" 249 | version = "0.6.0" 250 | source = "registry+https://github.com/rust-lang/crates.io-index" 251 | checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" 252 | 253 | [[package]] 254 | name = "colorchoice" 255 | version = "1.0.0" 256 | source = "registry+https://github.com/rust-lang/crates.io-index" 257 | checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" 258 | 259 | [[package]] 260 | name = "core-foundation" 261 | version = "0.9.4" 262 | source = "registry+https://github.com/rust-lang/crates.io-index" 263 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 264 | dependencies = [ 265 | "core-foundation-sys", 266 | "libc", 267 | ] 268 | 269 | [[package]] 270 | name = "core-foundation-sys" 271 | version = "0.8.6" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" 274 | 275 | [[package]] 276 | name = "encoding_rs" 277 | version = "0.8.33" 278 | source = "registry+https://github.com/rust-lang/crates.io-index" 279 | checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" 280 | dependencies = [ 281 | "cfg-if", 282 | ] 283 | 284 | [[package]] 285 | name = "equivalent" 286 | version = "1.0.1" 287 | source = "registry+https://github.com/rust-lang/crates.io-index" 288 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 289 | 290 | [[package]] 291 | name = "fnv" 292 | version = "1.0.7" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 295 | 296 | [[package]] 297 | name = "form_urlencoded" 298 | version = "1.2.1" 299 | source = "registry+https://github.com/rust-lang/crates.io-index" 300 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 301 | dependencies = [ 302 | "percent-encoding", 303 | ] 304 | 305 | [[package]] 306 | name = "futures" 307 | version = "0.3.29" 308 | source = "registry+https://github.com/rust-lang/crates.io-index" 309 | checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" 310 | dependencies = [ 311 | "futures-channel", 312 | "futures-core", 313 | "futures-executor", 314 | "futures-io", 315 | "futures-sink", 316 | "futures-task", 317 | "futures-util", 318 | ] 319 | 320 | [[package]] 321 | name = "futures-channel" 322 | version = "0.3.29" 323 | source = "registry+https://github.com/rust-lang/crates.io-index" 324 | checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" 325 | dependencies = [ 326 | "futures-core", 327 | "futures-sink", 328 | ] 329 | 330 | [[package]] 331 | name = "futures-core" 332 | version = "0.3.29" 333 | source = "registry+https://github.com/rust-lang/crates.io-index" 334 | checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" 335 | 336 | [[package]] 337 | name = "futures-executor" 338 | version = "0.3.29" 339 | source = "registry+https://github.com/rust-lang/crates.io-index" 340 | checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" 341 | dependencies = [ 342 | "futures-core", 343 | "futures-task", 344 | "futures-util", 345 | ] 346 | 347 | [[package]] 348 | name = "futures-io" 349 | version = "0.3.29" 350 | source = "registry+https://github.com/rust-lang/crates.io-index" 351 | checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" 352 | 353 | [[package]] 354 | name = "futures-macro" 355 | version = "0.3.29" 356 | source = "registry+https://github.com/rust-lang/crates.io-index" 357 | checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" 358 | dependencies = [ 359 | "proc-macro2", 360 | "quote", 361 | "syn", 362 | ] 363 | 364 | [[package]] 365 | name = "futures-sink" 366 | version = "0.3.29" 367 | source = "registry+https://github.com/rust-lang/crates.io-index" 368 | checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" 369 | 370 | [[package]] 371 | name = "futures-task" 372 | version = "0.3.29" 373 | source = "registry+https://github.com/rust-lang/crates.io-index" 374 | checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" 375 | 376 | [[package]] 377 | name = "futures-util" 378 | version = "0.3.29" 379 | source = "registry+https://github.com/rust-lang/crates.io-index" 380 | checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" 381 | dependencies = [ 382 | "futures-channel", 383 | "futures-core", 384 | "futures-io", 385 | "futures-macro", 386 | "futures-sink", 387 | "futures-task", 388 | "memchr", 389 | "pin-project-lite", 390 | "pin-utils", 391 | "slab", 392 | ] 393 | 394 | [[package]] 395 | name = "gimli" 396 | version = "0.28.1" 397 | source = "registry+https://github.com/rust-lang/crates.io-index" 398 | checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" 399 | 400 | [[package]] 401 | name = "h2" 402 | version = "0.3.22" 403 | source = "registry+https://github.com/rust-lang/crates.io-index" 404 | checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" 405 | dependencies = [ 406 | "bytes", 407 | "fnv", 408 | "futures-core", 409 | "futures-sink", 410 | "futures-util", 411 | "http", 412 | "indexmap", 413 | "slab", 414 | "tokio", 415 | "tokio-util", 416 | "tracing", 417 | ] 418 | 419 | [[package]] 420 | name = "hashbrown" 421 | version = "0.14.3" 422 | source = "registry+https://github.com/rust-lang/crates.io-index" 423 | checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" 424 | 425 | [[package]] 426 | name = "heck" 427 | version = "0.4.1" 428 | source = "registry+https://github.com/rust-lang/crates.io-index" 429 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 430 | 431 | [[package]] 432 | name = "hermit-abi" 433 | version = "0.3.3" 434 | source = "registry+https://github.com/rust-lang/crates.io-index" 435 | checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" 436 | 437 | [[package]] 438 | name = "http" 439 | version = "0.2.11" 440 | source = "registry+https://github.com/rust-lang/crates.io-index" 441 | checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" 442 | dependencies = [ 443 | "bytes", 444 | "fnv", 445 | "itoa", 446 | ] 447 | 448 | [[package]] 449 | name = "http-body" 450 | version = "0.4.6" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" 453 | dependencies = [ 454 | "bytes", 455 | "http", 456 | "pin-project-lite", 457 | ] 458 | 459 | [[package]] 460 | name = "http-serde" 461 | version = "1.1.3" 462 | source = "registry+https://github.com/rust-lang/crates.io-index" 463 | checksum = "6f560b665ad9f1572cfcaf034f7fb84338a7ce945216d64a90fd81f046a3caee" 464 | dependencies = [ 465 | "http", 466 | "serde", 467 | ] 468 | 469 | [[package]] 470 | name = "httparse" 471 | version = "1.8.0" 472 | source = "registry+https://github.com/rust-lang/crates.io-index" 473 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 474 | 475 | [[package]] 476 | name = "httpdate" 477 | version = "1.0.3" 478 | source = "registry+https://github.com/rust-lang/crates.io-index" 479 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 480 | 481 | [[package]] 482 | name = "hyper" 483 | version = "0.14.28" 484 | source = "registry+https://github.com/rust-lang/crates.io-index" 485 | checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" 486 | dependencies = [ 487 | "bytes", 488 | "futures-channel", 489 | "futures-core", 490 | "futures-util", 491 | "h2", 492 | "http", 493 | "http-body", 494 | "httparse", 495 | "httpdate", 496 | "itoa", 497 | "pin-project-lite", 498 | "socket2", 499 | "tokio", 500 | "tower-service", 501 | "tracing", 502 | "want", 503 | ] 504 | 505 | [[package]] 506 | name = "iana-time-zone" 507 | version = "0.1.58" 508 | source = "registry+https://github.com/rust-lang/crates.io-index" 509 | checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" 510 | dependencies = [ 511 | "android_system_properties", 512 | "core-foundation-sys", 513 | "iana-time-zone-haiku", 514 | "js-sys", 515 | "wasm-bindgen", 516 | "windows-core", 517 | ] 518 | 519 | [[package]] 520 | name = "iana-time-zone-haiku" 521 | version = "0.1.2" 522 | source = "registry+https://github.com/rust-lang/crates.io-index" 523 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 524 | dependencies = [ 525 | "cc", 526 | ] 527 | 528 | [[package]] 529 | name = "idna" 530 | version = "0.5.0" 531 | source = "registry+https://github.com/rust-lang/crates.io-index" 532 | checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 533 | dependencies = [ 534 | "unicode-bidi", 535 | "unicode-normalization", 536 | ] 537 | 538 | [[package]] 539 | name = "indexmap" 540 | version = "2.1.0" 541 | source = "registry+https://github.com/rust-lang/crates.io-index" 542 | checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" 543 | dependencies = [ 544 | "equivalent", 545 | "hashbrown", 546 | ] 547 | 548 | [[package]] 549 | name = "ipnet" 550 | version = "2.9.0" 551 | source = "registry+https://github.com/rust-lang/crates.io-index" 552 | checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" 553 | 554 | [[package]] 555 | name = "itoa" 556 | version = "1.0.10" 557 | source = "registry+https://github.com/rust-lang/crates.io-index" 558 | checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" 559 | 560 | [[package]] 561 | name = "js-sys" 562 | version = "0.3.66" 563 | source = "registry+https://github.com/rust-lang/crates.io-index" 564 | checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" 565 | dependencies = [ 566 | "wasm-bindgen", 567 | ] 568 | 569 | [[package]] 570 | name = "lazy_static" 571 | version = "1.4.0" 572 | source = "registry+https://github.com/rust-lang/crates.io-index" 573 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 574 | 575 | [[package]] 576 | name = "libc" 577 | version = "0.2.151" 578 | source = "registry+https://github.com/rust-lang/crates.io-index" 579 | checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" 580 | 581 | [[package]] 582 | name = "listenfd" 583 | version = "1.0.1" 584 | source = "registry+https://github.com/rust-lang/crates.io-index" 585 | checksum = "e0500463acd96259d219abb05dc57e5a076ef04b2db9a2112846929b5f174c96" 586 | dependencies = [ 587 | "libc", 588 | "uuid", 589 | "winapi", 590 | ] 591 | 592 | [[package]] 593 | name = "log" 594 | version = "0.4.20" 595 | source = "registry+https://github.com/rust-lang/crates.io-index" 596 | checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" 597 | 598 | [[package]] 599 | name = "matchers" 600 | version = "0.1.0" 601 | source = "registry+https://github.com/rust-lang/crates.io-index" 602 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 603 | dependencies = [ 604 | "regex-automata 0.1.10", 605 | ] 606 | 607 | [[package]] 608 | name = "memchr" 609 | version = "2.6.4" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" 612 | 613 | [[package]] 614 | name = "mime" 615 | version = "0.3.17" 616 | source = "registry+https://github.com/rust-lang/crates.io-index" 617 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 618 | 619 | [[package]] 620 | name = "miniz_oxide" 621 | version = "0.7.1" 622 | source = "registry+https://github.com/rust-lang/crates.io-index" 623 | checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" 624 | dependencies = [ 625 | "adler", 626 | ] 627 | 628 | [[package]] 629 | name = "mio" 630 | version = "0.8.10" 631 | source = "registry+https://github.com/rust-lang/crates.io-index" 632 | checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" 633 | dependencies = [ 634 | "libc", 635 | "wasi", 636 | "windows-sys 0.48.0", 637 | ] 638 | 639 | [[package]] 640 | name = "nu-ansi-term" 641 | version = "0.46.0" 642 | source = "registry+https://github.com/rust-lang/crates.io-index" 643 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" 644 | dependencies = [ 645 | "overload", 646 | "winapi", 647 | ] 648 | 649 | [[package]] 650 | name = "num-traits" 651 | version = "0.2.17" 652 | source = "registry+https://github.com/rust-lang/crates.io-index" 653 | checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" 654 | dependencies = [ 655 | "autocfg", 656 | ] 657 | 658 | [[package]] 659 | name = "num_cpus" 660 | version = "1.16.0" 661 | source = "registry+https://github.com/rust-lang/crates.io-index" 662 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" 663 | dependencies = [ 664 | "hermit-abi", 665 | "libc", 666 | ] 667 | 668 | [[package]] 669 | name = "object" 670 | version = "0.32.1" 671 | source = "registry+https://github.com/rust-lang/crates.io-index" 672 | checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" 673 | dependencies = [ 674 | "memchr", 675 | ] 676 | 677 | [[package]] 678 | name = "once_cell" 679 | version = "1.19.0" 680 | source = "registry+https://github.com/rust-lang/crates.io-index" 681 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 682 | 683 | [[package]] 684 | name = "overload" 685 | version = "0.1.1" 686 | source = "registry+https://github.com/rust-lang/crates.io-index" 687 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" 688 | 689 | [[package]] 690 | name = "percent-encoding" 691 | version = "2.3.1" 692 | source = "registry+https://github.com/rust-lang/crates.io-index" 693 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 694 | 695 | [[package]] 696 | name = "pin-project-lite" 697 | version = "0.2.13" 698 | source = "registry+https://github.com/rust-lang/crates.io-index" 699 | checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" 700 | 701 | [[package]] 702 | name = "pin-utils" 703 | version = "0.1.0" 704 | source = "registry+https://github.com/rust-lang/crates.io-index" 705 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 706 | 707 | [[package]] 708 | name = "proc-macro2" 709 | version = "1.0.71" 710 | source = "registry+https://github.com/rust-lang/crates.io-index" 711 | checksum = "75cb1540fadbd5b8fbccc4dddad2734eba435053f725621c070711a14bb5f4b8" 712 | dependencies = [ 713 | "unicode-ident", 714 | ] 715 | 716 | [[package]] 717 | name = "query_map" 718 | version = "0.7.0" 719 | source = "registry+https://github.com/rust-lang/crates.io-index" 720 | checksum = "5eab6b8b1074ef3359a863758dae650c7c0c6027927a085b7af911c8e0bf3a15" 721 | dependencies = [ 722 | "form_urlencoded", 723 | "serde", 724 | "serde_derive", 725 | ] 726 | 727 | [[package]] 728 | name = "quote" 729 | version = "1.0.33" 730 | source = "registry+https://github.com/rust-lang/crates.io-index" 731 | checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" 732 | dependencies = [ 733 | "proc-macro2", 734 | ] 735 | 736 | [[package]] 737 | name = "regex" 738 | version = "1.10.2" 739 | source = "registry+https://github.com/rust-lang/crates.io-index" 740 | checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" 741 | dependencies = [ 742 | "aho-corasick", 743 | "memchr", 744 | "regex-automata 0.4.3", 745 | "regex-syntax 0.8.2", 746 | ] 747 | 748 | [[package]] 749 | name = "regex-automata" 750 | version = "0.1.10" 751 | source = "registry+https://github.com/rust-lang/crates.io-index" 752 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 753 | dependencies = [ 754 | "regex-syntax 0.6.29", 755 | ] 756 | 757 | [[package]] 758 | name = "regex-automata" 759 | version = "0.4.3" 760 | source = "registry+https://github.com/rust-lang/crates.io-index" 761 | checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" 762 | dependencies = [ 763 | "aho-corasick", 764 | "memchr", 765 | "regex-syntax 0.8.2", 766 | ] 767 | 768 | [[package]] 769 | name = "regex-syntax" 770 | version = "0.6.29" 771 | source = "registry+https://github.com/rust-lang/crates.io-index" 772 | checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" 773 | 774 | [[package]] 775 | name = "regex-syntax" 776 | version = "0.8.2" 777 | source = "registry+https://github.com/rust-lang/crates.io-index" 778 | checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" 779 | 780 | [[package]] 781 | name = "reqwest" 782 | version = "0.11.23" 783 | source = "registry+https://github.com/rust-lang/crates.io-index" 784 | checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" 785 | dependencies = [ 786 | "base64", 787 | "bytes", 788 | "encoding_rs", 789 | "futures-core", 790 | "futures-util", 791 | "h2", 792 | "http", 793 | "http-body", 794 | "hyper", 795 | "ipnet", 796 | "js-sys", 797 | "log", 798 | "mime", 799 | "once_cell", 800 | "percent-encoding", 801 | "pin-project-lite", 802 | "serde", 803 | "serde_json", 804 | "serde_urlencoded", 805 | "system-configuration", 806 | "tokio", 807 | "tower-service", 808 | "url", 809 | "wasm-bindgen", 810 | "wasm-bindgen-futures", 811 | "web-sys", 812 | "winreg", 813 | ] 814 | 815 | [[package]] 816 | name = "rustc-demangle" 817 | version = "0.1.23" 818 | source = "registry+https://github.com/rust-lang/crates.io-index" 819 | checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" 820 | 821 | [[package]] 822 | name = "ryu" 823 | version = "1.0.16" 824 | source = "registry+https://github.com/rust-lang/crates.io-index" 825 | checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" 826 | 827 | [[package]] 828 | name = "serde" 829 | version = "1.0.193" 830 | source = "registry+https://github.com/rust-lang/crates.io-index" 831 | checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" 832 | dependencies = [ 833 | "serde_derive", 834 | ] 835 | 836 | [[package]] 837 | name = "serde_derive" 838 | version = "1.0.193" 839 | source = "registry+https://github.com/rust-lang/crates.io-index" 840 | checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" 841 | dependencies = [ 842 | "proc-macro2", 843 | "quote", 844 | "syn", 845 | ] 846 | 847 | [[package]] 848 | name = "serde_json" 849 | version = "1.0.108" 850 | source = "registry+https://github.com/rust-lang/crates.io-index" 851 | checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" 852 | dependencies = [ 853 | "itoa", 854 | "ryu", 855 | "serde", 856 | ] 857 | 858 | [[package]] 859 | name = "serde_urlencoded" 860 | version = "0.7.1" 861 | source = "registry+https://github.com/rust-lang/crates.io-index" 862 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 863 | dependencies = [ 864 | "form_urlencoded", 865 | "itoa", 866 | "ryu", 867 | "serde", 868 | ] 869 | 870 | [[package]] 871 | name = "sharded-slab" 872 | version = "0.1.7" 873 | source = "registry+https://github.com/rust-lang/crates.io-index" 874 | checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 875 | dependencies = [ 876 | "lazy_static", 877 | ] 878 | 879 | [[package]] 880 | name = "signal-hook-registry" 881 | version = "1.4.1" 882 | source = "registry+https://github.com/rust-lang/crates.io-index" 883 | checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" 884 | dependencies = [ 885 | "libc", 886 | ] 887 | 888 | [[package]] 889 | name = "slab" 890 | version = "0.4.9" 891 | source = "registry+https://github.com/rust-lang/crates.io-index" 892 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 893 | dependencies = [ 894 | "autocfg", 895 | ] 896 | 897 | [[package]] 898 | name = "smallvec" 899 | version = "1.11.2" 900 | source = "registry+https://github.com/rust-lang/crates.io-index" 901 | checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" 902 | 903 | [[package]] 904 | name = "socket2" 905 | version = "0.5.5" 906 | source = "registry+https://github.com/rust-lang/crates.io-index" 907 | checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" 908 | dependencies = [ 909 | "libc", 910 | "windows-sys 0.48.0", 911 | ] 912 | 913 | [[package]] 914 | name = "strsim" 915 | version = "0.10.0" 916 | source = "registry+https://github.com/rust-lang/crates.io-index" 917 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 918 | 919 | [[package]] 920 | name = "syn" 921 | version = "2.0.42" 922 | source = "registry+https://github.com/rust-lang/crates.io-index" 923 | checksum = "5b7d0a2c048d661a1a59fcd7355baa232f7ed34e0ee4df2eef3c1c1c0d3852d8" 924 | dependencies = [ 925 | "proc-macro2", 926 | "quote", 927 | "unicode-ident", 928 | ] 929 | 930 | [[package]] 931 | name = "system-configuration" 932 | version = "0.5.1" 933 | source = "registry+https://github.com/rust-lang/crates.io-index" 934 | checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" 935 | dependencies = [ 936 | "bitflags", 937 | "core-foundation", 938 | "system-configuration-sys", 939 | ] 940 | 941 | [[package]] 942 | name = "system-configuration-sys" 943 | version = "0.5.0" 944 | source = "registry+https://github.com/rust-lang/crates.io-index" 945 | checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" 946 | dependencies = [ 947 | "core-foundation-sys", 948 | "libc", 949 | ] 950 | 951 | [[package]] 952 | name = "thread_local" 953 | version = "1.1.7" 954 | source = "registry+https://github.com/rust-lang/crates.io-index" 955 | checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" 956 | dependencies = [ 957 | "cfg-if", 958 | "once_cell", 959 | ] 960 | 961 | [[package]] 962 | name = "tinyvec" 963 | version = "1.6.0" 964 | source = "registry+https://github.com/rust-lang/crates.io-index" 965 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 966 | dependencies = [ 967 | "tinyvec_macros", 968 | ] 969 | 970 | [[package]] 971 | name = "tinyvec_macros" 972 | version = "0.1.1" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 975 | 976 | [[package]] 977 | name = "tokio" 978 | version = "1.35.1" 979 | source = "registry+https://github.com/rust-lang/crates.io-index" 980 | checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" 981 | dependencies = [ 982 | "backtrace", 983 | "bytes", 984 | "libc", 985 | "mio", 986 | "num_cpus", 987 | "pin-project-lite", 988 | "signal-hook-registry", 989 | "socket2", 990 | "tokio-macros", 991 | "windows-sys 0.48.0", 992 | ] 993 | 994 | [[package]] 995 | name = "tokio-macros" 996 | version = "2.2.0" 997 | source = "registry+https://github.com/rust-lang/crates.io-index" 998 | checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" 999 | dependencies = [ 1000 | "proc-macro2", 1001 | "quote", 1002 | "syn", 1003 | ] 1004 | 1005 | [[package]] 1006 | name = "tokio-util" 1007 | version = "0.7.10" 1008 | source = "registry+https://github.com/rust-lang/crates.io-index" 1009 | checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" 1010 | dependencies = [ 1011 | "bytes", 1012 | "futures-core", 1013 | "futures-sink", 1014 | "pin-project-lite", 1015 | "tokio", 1016 | "tracing", 1017 | ] 1018 | 1019 | [[package]] 1020 | name = "tower-service" 1021 | version = "0.3.2" 1022 | source = "registry+https://github.com/rust-lang/crates.io-index" 1023 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" 1024 | 1025 | [[package]] 1026 | name = "tracing" 1027 | version = "0.1.40" 1028 | source = "registry+https://github.com/rust-lang/crates.io-index" 1029 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 1030 | dependencies = [ 1031 | "pin-project-lite", 1032 | "tracing-attributes", 1033 | "tracing-core", 1034 | ] 1035 | 1036 | [[package]] 1037 | name = "tracing-attributes" 1038 | version = "0.1.27" 1039 | source = "registry+https://github.com/rust-lang/crates.io-index" 1040 | checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" 1041 | dependencies = [ 1042 | "proc-macro2", 1043 | "quote", 1044 | "syn", 1045 | ] 1046 | 1047 | [[package]] 1048 | name = "tracing-core" 1049 | version = "0.1.32" 1050 | source = "registry+https://github.com/rust-lang/crates.io-index" 1051 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 1052 | dependencies = [ 1053 | "once_cell", 1054 | "valuable", 1055 | ] 1056 | 1057 | [[package]] 1058 | name = "tracing-log" 1059 | version = "0.2.0" 1060 | source = "registry+https://github.com/rust-lang/crates.io-index" 1061 | checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 1062 | dependencies = [ 1063 | "log", 1064 | "once_cell", 1065 | "tracing-core", 1066 | ] 1067 | 1068 | [[package]] 1069 | name = "tracing-subscriber" 1070 | version = "0.3.18" 1071 | source = "registry+https://github.com/rust-lang/crates.io-index" 1072 | checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" 1073 | dependencies = [ 1074 | "matchers", 1075 | "nu-ansi-term", 1076 | "once_cell", 1077 | "regex", 1078 | "sharded-slab", 1079 | "smallvec", 1080 | "thread_local", 1081 | "tracing", 1082 | "tracing-core", 1083 | "tracing-log", 1084 | ] 1085 | 1086 | [[package]] 1087 | name = "try-lock" 1088 | version = "0.2.5" 1089 | source = "registry+https://github.com/rust-lang/crates.io-index" 1090 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 1091 | 1092 | [[package]] 1093 | name = "unicode-bidi" 1094 | version = "0.3.14" 1095 | source = "registry+https://github.com/rust-lang/crates.io-index" 1096 | checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" 1097 | 1098 | [[package]] 1099 | name = "unicode-ident" 1100 | version = "1.0.12" 1101 | source = "registry+https://github.com/rust-lang/crates.io-index" 1102 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 1103 | 1104 | [[package]] 1105 | name = "unicode-normalization" 1106 | version = "0.1.22" 1107 | source = "registry+https://github.com/rust-lang/crates.io-index" 1108 | checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" 1109 | dependencies = [ 1110 | "tinyvec", 1111 | ] 1112 | 1113 | [[package]] 1114 | name = "url" 1115 | version = "2.5.0" 1116 | source = "registry+https://github.com/rust-lang/crates.io-index" 1117 | checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" 1118 | dependencies = [ 1119 | "form_urlencoded", 1120 | "idna", 1121 | "percent-encoding", 1122 | ] 1123 | 1124 | [[package]] 1125 | name = "utf8parse" 1126 | version = "0.2.1" 1127 | source = "registry+https://github.com/rust-lang/crates.io-index" 1128 | checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" 1129 | 1130 | [[package]] 1131 | name = "uuid" 1132 | version = "1.6.1" 1133 | source = "registry+https://github.com/rust-lang/crates.io-index" 1134 | checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" 1135 | 1136 | [[package]] 1137 | name = "valuable" 1138 | version = "0.1.0" 1139 | source = "registry+https://github.com/rust-lang/crates.io-index" 1140 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" 1141 | 1142 | [[package]] 1143 | name = "want" 1144 | version = "0.3.1" 1145 | source = "registry+https://github.com/rust-lang/crates.io-index" 1146 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 1147 | dependencies = [ 1148 | "try-lock", 1149 | ] 1150 | 1151 | [[package]] 1152 | name = "wasi" 1153 | version = "0.11.0+wasi-snapshot-preview1" 1154 | source = "registry+https://github.com/rust-lang/crates.io-index" 1155 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1156 | 1157 | [[package]] 1158 | name = "wasm-bindgen" 1159 | version = "0.2.89" 1160 | source = "registry+https://github.com/rust-lang/crates.io-index" 1161 | checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" 1162 | dependencies = [ 1163 | "cfg-if", 1164 | "wasm-bindgen-macro", 1165 | ] 1166 | 1167 | [[package]] 1168 | name = "wasm-bindgen-backend" 1169 | version = "0.2.89" 1170 | source = "registry+https://github.com/rust-lang/crates.io-index" 1171 | checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" 1172 | dependencies = [ 1173 | "bumpalo", 1174 | "log", 1175 | "once_cell", 1176 | "proc-macro2", 1177 | "quote", 1178 | "syn", 1179 | "wasm-bindgen-shared", 1180 | ] 1181 | 1182 | [[package]] 1183 | name = "wasm-bindgen-futures" 1184 | version = "0.4.39" 1185 | source = "registry+https://github.com/rust-lang/crates.io-index" 1186 | checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" 1187 | dependencies = [ 1188 | "cfg-if", 1189 | "js-sys", 1190 | "wasm-bindgen", 1191 | "web-sys", 1192 | ] 1193 | 1194 | [[package]] 1195 | name = "wasm-bindgen-macro" 1196 | version = "0.2.89" 1197 | source = "registry+https://github.com/rust-lang/crates.io-index" 1198 | checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" 1199 | dependencies = [ 1200 | "quote", 1201 | "wasm-bindgen-macro-support", 1202 | ] 1203 | 1204 | [[package]] 1205 | name = "wasm-bindgen-macro-support" 1206 | version = "0.2.89" 1207 | source = "registry+https://github.com/rust-lang/crates.io-index" 1208 | checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" 1209 | dependencies = [ 1210 | "proc-macro2", 1211 | "quote", 1212 | "syn", 1213 | "wasm-bindgen-backend", 1214 | "wasm-bindgen-shared", 1215 | ] 1216 | 1217 | [[package]] 1218 | name = "wasm-bindgen-shared" 1219 | version = "0.2.89" 1220 | source = "registry+https://github.com/rust-lang/crates.io-index" 1221 | checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" 1222 | 1223 | [[package]] 1224 | name = "web-sys" 1225 | version = "0.3.66" 1226 | source = "registry+https://github.com/rust-lang/crates.io-index" 1227 | checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" 1228 | dependencies = [ 1229 | "js-sys", 1230 | "wasm-bindgen", 1231 | ] 1232 | 1233 | [[package]] 1234 | name = "winapi" 1235 | version = "0.3.9" 1236 | source = "registry+https://github.com/rust-lang/crates.io-index" 1237 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1238 | dependencies = [ 1239 | "winapi-i686-pc-windows-gnu", 1240 | "winapi-x86_64-pc-windows-gnu", 1241 | ] 1242 | 1243 | [[package]] 1244 | name = "winapi-i686-pc-windows-gnu" 1245 | version = "0.4.0" 1246 | source = "registry+https://github.com/rust-lang/crates.io-index" 1247 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1248 | 1249 | [[package]] 1250 | name = "winapi-x86_64-pc-windows-gnu" 1251 | version = "0.4.0" 1252 | source = "registry+https://github.com/rust-lang/crates.io-index" 1253 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1254 | 1255 | [[package]] 1256 | name = "windows-core" 1257 | version = "0.51.1" 1258 | source = "registry+https://github.com/rust-lang/crates.io-index" 1259 | checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" 1260 | dependencies = [ 1261 | "windows-targets 0.48.5", 1262 | ] 1263 | 1264 | [[package]] 1265 | name = "windows-sys" 1266 | version = "0.48.0" 1267 | source = "registry+https://github.com/rust-lang/crates.io-index" 1268 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 1269 | dependencies = [ 1270 | "windows-targets 0.48.5", 1271 | ] 1272 | 1273 | [[package]] 1274 | name = "windows-sys" 1275 | version = "0.52.0" 1276 | source = "registry+https://github.com/rust-lang/crates.io-index" 1277 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 1278 | dependencies = [ 1279 | "windows-targets 0.52.0", 1280 | ] 1281 | 1282 | [[package]] 1283 | name = "windows-targets" 1284 | version = "0.48.5" 1285 | source = "registry+https://github.com/rust-lang/crates.io-index" 1286 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 1287 | dependencies = [ 1288 | "windows_aarch64_gnullvm 0.48.5", 1289 | "windows_aarch64_msvc 0.48.5", 1290 | "windows_i686_gnu 0.48.5", 1291 | "windows_i686_msvc 0.48.5", 1292 | "windows_x86_64_gnu 0.48.5", 1293 | "windows_x86_64_gnullvm 0.48.5", 1294 | "windows_x86_64_msvc 0.48.5", 1295 | ] 1296 | 1297 | [[package]] 1298 | name = "windows-targets" 1299 | version = "0.52.0" 1300 | source = "registry+https://github.com/rust-lang/crates.io-index" 1301 | checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" 1302 | dependencies = [ 1303 | "windows_aarch64_gnullvm 0.52.0", 1304 | "windows_aarch64_msvc 0.52.0", 1305 | "windows_i686_gnu 0.52.0", 1306 | "windows_i686_msvc 0.52.0", 1307 | "windows_x86_64_gnu 0.52.0", 1308 | "windows_x86_64_gnullvm 0.52.0", 1309 | "windows_x86_64_msvc 0.52.0", 1310 | ] 1311 | 1312 | [[package]] 1313 | name = "windows_aarch64_gnullvm" 1314 | version = "0.48.5" 1315 | source = "registry+https://github.com/rust-lang/crates.io-index" 1316 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 1317 | 1318 | [[package]] 1319 | name = "windows_aarch64_gnullvm" 1320 | version = "0.52.0" 1321 | source = "registry+https://github.com/rust-lang/crates.io-index" 1322 | checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" 1323 | 1324 | [[package]] 1325 | name = "windows_aarch64_msvc" 1326 | version = "0.48.5" 1327 | source = "registry+https://github.com/rust-lang/crates.io-index" 1328 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 1329 | 1330 | [[package]] 1331 | name = "windows_aarch64_msvc" 1332 | version = "0.52.0" 1333 | source = "registry+https://github.com/rust-lang/crates.io-index" 1334 | checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" 1335 | 1336 | [[package]] 1337 | name = "windows_i686_gnu" 1338 | version = "0.48.5" 1339 | source = "registry+https://github.com/rust-lang/crates.io-index" 1340 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 1341 | 1342 | [[package]] 1343 | name = "windows_i686_gnu" 1344 | version = "0.52.0" 1345 | source = "registry+https://github.com/rust-lang/crates.io-index" 1346 | checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" 1347 | 1348 | [[package]] 1349 | name = "windows_i686_msvc" 1350 | version = "0.48.5" 1351 | source = "registry+https://github.com/rust-lang/crates.io-index" 1352 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 1353 | 1354 | [[package]] 1355 | name = "windows_i686_msvc" 1356 | version = "0.52.0" 1357 | source = "registry+https://github.com/rust-lang/crates.io-index" 1358 | checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" 1359 | 1360 | [[package]] 1361 | name = "windows_x86_64_gnu" 1362 | version = "0.48.5" 1363 | source = "registry+https://github.com/rust-lang/crates.io-index" 1364 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 1365 | 1366 | [[package]] 1367 | name = "windows_x86_64_gnu" 1368 | version = "0.52.0" 1369 | source = "registry+https://github.com/rust-lang/crates.io-index" 1370 | checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" 1371 | 1372 | [[package]] 1373 | name = "windows_x86_64_gnullvm" 1374 | version = "0.48.5" 1375 | source = "registry+https://github.com/rust-lang/crates.io-index" 1376 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 1377 | 1378 | [[package]] 1379 | name = "windows_x86_64_gnullvm" 1380 | version = "0.52.0" 1381 | source = "registry+https://github.com/rust-lang/crates.io-index" 1382 | checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" 1383 | 1384 | [[package]] 1385 | name = "windows_x86_64_msvc" 1386 | version = "0.48.5" 1387 | source = "registry+https://github.com/rust-lang/crates.io-index" 1388 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 1389 | 1390 | [[package]] 1391 | name = "windows_x86_64_msvc" 1392 | version = "0.52.0" 1393 | source = "registry+https://github.com/rust-lang/crates.io-index" 1394 | checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" 1395 | 1396 | [[package]] 1397 | name = "winreg" 1398 | version = "0.50.0" 1399 | source = "registry+https://github.com/rust-lang/crates.io-index" 1400 | checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 1401 | dependencies = [ 1402 | "cfg-if", 1403 | "windows-sys 0.48.0", 1404 | ] 1405 | --------------------------------------------------------------------------------