├── rust-toolchain ├── .github ├── FUNDING.yml └── workflows │ └── ci.yml ├── resources ├── demo-json.png ├── demo-all-routes.png ├── demo-file-server.png └── demo-json-with-params.png ├── .gitignore ├── examples └── simple-wasm-frontend-app │ ├── app.css │ ├── example.wasm │ ├── app.js │ └── index.html ├── .editorconfig ├── Cargo.toml ├── Makefile ├── README.md ├── src └── main.rs ├── LICENSE └── Cargo.lock /rust-toolchain: -------------------------------------------------------------------------------- 1 | 1.73.0 -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [raphamorim] -------------------------------------------------------------------------------- /resources/demo-json.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raphamorim/cargo-server/HEAD/resources/demo-json.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # These are backup files generated by rustfmt 2 | **/*.rs.bk 3 | 4 | /target 5 | 6 | .DS_Store 7 | log -------------------------------------------------------------------------------- /resources/demo-all-routes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raphamorim/cargo-server/HEAD/resources/demo-all-routes.png -------------------------------------------------------------------------------- /resources/demo-file-server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raphamorim/cargo-server/HEAD/resources/demo-file-server.png -------------------------------------------------------------------------------- /examples/simple-wasm-frontend-app/app.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: black; 3 | color: white; 4 | font-family: Helvetica; 5 | } -------------------------------------------------------------------------------- /resources/demo-json-with-params.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raphamorim/cargo-server/HEAD/resources/demo-json-with-params.png -------------------------------------------------------------------------------- /examples/simple-wasm-frontend-app/example.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raphamorim/cargo-server/HEAD/examples/simple-wasm-frontend-app/example.wasm -------------------------------------------------------------------------------- /examples/simple-wasm-frontend-app/app.js: -------------------------------------------------------------------------------- 1 | fetch("example.wasm").then(response => 2 | response.arrayBuffer() 3 | ).then(bytes => 4 | WebAssembly.instantiate(bytes) 5 | ).then(wasm => { 6 | const result = wasm.instance.exports.subtracao(5, 1); // 4 7 | console.log(`5 - 1 is: ${result}`); 8 | }); -------------------------------------------------------------------------------- /examples/simple-wasm-frontend-app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Wasm App Example 6 | 7 | 8 | 9 | 10 |

Wasm App Example

11 | 12 | 13 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors and IDEs 3 | # editorconfig.org 4 | 5 | root = true 6 | 7 | [*] 8 | end_of_line = lf 9 | charset = utf-8 10 | trim_trailing_whitespace = true 11 | insert_final_newline = true 12 | indent_style = space 13 | indent_size = 4 14 | 15 | [*.md] 16 | # double whitespace at end of line 17 | # denotes a line break in Markdown 18 | trim_trailing_whitespace = false 19 | 20 | [*.yml] 21 | indent_size = 2 22 | 23 | [{Makefile,**.mk}] 24 | # Use tabs for indentation (Makefiles require tabs) 25 | indent_style = tab -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "cargo-server" 3 | version = "0.3.6" 4 | description = "Helps you serve a static site, single page application or just a static file" 5 | license = "MPL-2.0" 6 | authors = ["Raphael Amorim "] 7 | edition = "2021" 8 | keywords = ["cargo", "server", "static", "single-page", "https"] 9 | categories = ["command-line-utilities", "development-tools"] 10 | documentation = "https://github.com/raphamorim/cargo-server#readme" 11 | repository = "https://github.com/raphamorim/cargo-server" 12 | exclude = ["/.github"] 13 | 14 | [[bin]] 15 | name = "cargo-server" 16 | 17 | [dependencies] 18 | axum = "0.6.20" 19 | serde_json = "1.0.108" 20 | tokio = { version = "1.34.0", features = ["full"] } 21 | tower-http = { version = "0.3.5", features = ["fs", "cors"] } 22 | clap = { version = "4.0.1", features = ["derive"] } 23 | open = "5.0.0" 24 | http = "0.2.10" 25 | 26 | [profile.release] 27 | lto = true 28 | panic = "abort" 29 | codegen-units = 1 30 | 31 | [package.metadata.binstall] 32 | bin-dir = "{ name }-v{ version }-{ target }/{ bin }{ format }" 33 | 34 | [package.metadata.deb] 35 | maintainer = "Raphael Amorim " 36 | license-file = ["LICENSE", "0"] 37 | section = "devel" 38 | # conf-files = [] # look me up when config file lands 39 | assets = [ 40 | ["target/release/cargo-server", "usr/bin/", "755"], 41 | ] 42 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: [push, pull_request] 4 | 5 | concurrency: 6 | group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} 7 | cancel-in-progress: true 8 | 9 | jobs: 10 | lint: 11 | name: Lint 12 | runs-on: ubuntu-20.04 13 | steps: 14 | - uses: actions/checkout@v3 15 | - uses: actions-rs/toolchain@v1 16 | with: 17 | toolchain: "1.73.0" 18 | override: true 19 | 20 | # make sure all code has been formatted with rustfmt 21 | - run: rustup component add rustfmt 22 | - name: check rustfmt 23 | run: cargo fmt -- --check --color always 24 | 25 | # run clippy to verify we have no warnings 26 | - run: rustup component add clippy 27 | - run: cargo fetch 28 | - name: cargo clippy 29 | run: cargo clippy --all-targets -- -D warnings 30 | 31 | test: 32 | name: Test 33 | strategy: 34 | matrix: 35 | os: [ubuntu-20.04, macOS-latest, windows-latest] 36 | runs-on: ${{ matrix.os }} 37 | steps: 38 | - uses: actions/checkout@v2 39 | - uses: actions-rs/toolchain@v1 40 | with: 41 | toolchain: stable 42 | override: true 43 | - run: cargo fetch 44 | - name: cargo test build 45 | run: cargo build --tests --release 46 | - name: cargo test 47 | run: cargo test --release 48 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | test-file-server: 2 | cargo install --path ./ 3 | cd ./examples/simple-wasm-frontend-app && \ 4 | echo ">>> Check help" && \ 5 | cargo server --help && \ 6 | echo ">>> Check version" && \ 7 | cargo server --version && \ 8 | echo ">>> Open with port and" && \ 9 | cargo server --port 8123 --open 10 | 11 | test-route: 12 | cargo install --path ./ 13 | cargo server \ 14 | --route '/users' \ 15 | --json '{"users":[{"data":{"userId":"1","givenName":"Raphael","country":"br"}},{"data":{"userId":"2","givenName":"Emil","country":"se"}}]}' \ 16 | --port 8123 17 | 18 | test-all-routes: 19 | cargo install --path ./ 20 | cargo server --all-routes --json '{"id": "1"}' --port 8123 21 | 22 | test-route-with-params: 23 | cargo install --path ./ 24 | cargo server \ 25 | --route '/users/:userId' \ 26 | --json '{"data":{"userId":"{!0}","givenName":"Raphael","country":"se"}}' \ 27 | --port 8123 28 | 29 | lint: 30 | cargo fmt -- --check --color always 31 | cargo clippy --all-targets -- -D warnings 32 | 33 | # rustc --print target-list 34 | release: 35 | # cargo build --target=aarch64-apple-darwin --release 36 | # cargo build --target=x86_64-unknown-linux-musl --release 37 | cargo build --target=armv7-unknown-linux-musleabihf --release 38 | 39 | # ou-v0.1.5-aarch64-apple-darwin.tar.xz 40 | install-targets: 41 | rustup target add aarch64-apple-darwin 42 | rustup target add x86_64-unknown-linux-musl 43 | # rustup target add pc-windows-msvc 44 | rustup target add armv7-unknown-linux-musleabihf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cargo-server 2 | 3 | > tl;dr: Does the same as "python -m http.server" or "npx serve" but for Rust ecosystem and with few more functionalities. 4 | 5 | `cargo-server` helps you serve a static site, single page application or just a static file (no matter if on your device or on the local network). It also provides a neat interface for listing the directory's contents. 6 | 7 | You can use cargo to install: 8 | 9 | ```bash 10 | cargo install cargo-server 11 | ``` 12 | 13 | With cargo-binstall: 14 | 15 | ```bash 16 | cargo binstall cargo-server 17 | ``` 18 | 19 | Once `cargo-server` is installed, you can run this command inside your project's directory. It will create by default in `8000` port: 20 | 21 | ```bash 22 | cargo server 23 | ``` 24 | 25 | ## --port 26 | 27 | To specify the port, you can use `--port`: 28 | 29 | ```bash 30 | cargo server --port 3000 31 | ``` 32 | 33 | ## --open 34 | 35 | To open in your browser after run the command just add `--open`: 36 | 37 | ```bash 38 | cargo server --open 39 | ``` 40 | 41 | ## --path 42 | 43 | You can also set a custom path using `--path`: 44 | 45 | ```bash 46 | cargo server --path ./examples/simple-wasm-frontend-app 47 | ``` 48 | 49 | Result: 50 | 51 | ![Demo](resources/demo-file-server.png) 52 | 53 | ## --quiet 54 | 55 | Is also possible to run without any stdout using `--quiet`: 56 | 57 | ```bash 58 | cargo server --quiet --open --path ./examples/simple-wasm-frontend-app 59 | ``` 60 | 61 | ## --route 62 | 63 | You can create custom routes that returns JSON 64 | 65 | #### `--json` with params 66 | 67 | ```bash 68 | cargo server \ 69 | --route '/users/:userId' \ 70 | --json '{"data":{"userId":"{!0}","givenName":"Raphael","country":"br"}}' \ 71 | --port 8123 72 | ``` 73 | 74 | Result: 75 | 76 | ![Demo JSON with params](resources/demo-json-with-params.png) 77 | 78 | #### `--json` without params 79 | 80 | ```bash 81 | cargo server \ 82 | --route '/users' \ 83 | --json '{"users":[{"data":{"userId":"3","givenName":"Raphael","country":"br"}}]}' \ 84 | --port 8123 85 | ``` 86 | 87 | Result: 88 | 89 | ![Demo JSON](resources/demo-json.png) 90 | 91 | #### `--all-routes` 92 | 93 | It will add support for GET, POST, DELETE and PATCH methods as well. 94 | 95 | ```bash 96 | cargo server \ 97 | --all-routes \ 98 | --json '{"id": "1"}' \ 99 | --port 8123 100 | ``` 101 | 102 | Result: 103 | 104 | ![Demo JSON all routes](resources/demo-all-routes.png) 105 | 106 | ## --ngnix 107 | 108 | In progress... 109 | 110 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | extern crate clap; 2 | 3 | #[allow(unused_imports)] 4 | use axum::routing::{delete, get, patch, post}; 5 | use axum::Json; 6 | use axum::{extract::Path, http::StatusCode, response::IntoResponse, routing::get_service, Router}; 7 | use axum::{ 8 | extract::State, 9 | http::Request, 10 | middleware::{self, Next}, 11 | response::Response, 12 | }; 13 | use clap::Parser; 14 | use http::HeaderValue; 15 | use std::env; 16 | use std::fs; 17 | use std::sync::Arc; 18 | use std::{io, net::SocketAddr}; 19 | use tower_http::cors::{AllowOrigin, CorsLayer}; 20 | use tower_http::services::ServeDir; 21 | 22 | const VERSION: &str = "0.3.6"; 23 | const PREFIX: &str = "\x1b[93m[server]\x1b[0m"; 24 | const OPTSET_OUTPUT: &str = "OUTPUT"; 25 | const OPTSET_DEBUGGING: &str = "DEBUGGING"; 26 | const OPTSET_BEHAVIOUR: &str = "BEHAVIOUR"; 27 | 28 | async fn handle_error(_err: io::Error) -> impl IntoResponse { 29 | (StatusCode::INTERNAL_SERVER_ERROR, "Something went wrong...") 30 | } 31 | 32 | #[derive(Parser, Debug)] 33 | #[clap(author, name = "server", bin_name = "cargo", version, about)] 34 | struct Cli { 35 | #[clap(subcommand)] 36 | command: Action, 37 | } 38 | 39 | #[derive(Debug, clap::Subcommand)] 40 | enum Action { 41 | Server(Server), 42 | } 43 | 44 | #[derive(Debug, Parser)] 45 | struct Server { 46 | /// Path 47 | #[clap( 48 | long, 49 | required = false, 50 | value_parser, 51 | default_value = "", 52 | help_heading = OPTSET_BEHAVIOUR, 53 | )] 54 | pub path: String, 55 | 56 | /// Route 57 | #[clap( 58 | long = "route", 59 | value_parser, 60 | default_value = "", 61 | help_heading = OPTSET_BEHAVIOUR, 62 | )] 63 | pub route: String, 64 | 65 | /// Route 66 | #[clap( 67 | long = "all-routes", 68 | value_parser, 69 | default_value_t = false, 70 | help_heading = OPTSET_BEHAVIOUR, 71 | )] 72 | pub all_routes: bool, 73 | 74 | /// Json 75 | #[clap( 76 | long = "json", 77 | value_parser, 78 | default_value = "", 79 | help_heading = OPTSET_BEHAVIOUR, 80 | )] 81 | pub json: String, 82 | 83 | /// Version 84 | #[clap( 85 | short = 'v', 86 | long = "version", 87 | value_parser, 88 | default_value_t = false, 89 | help_heading = OPTSET_DEBUGGING, 90 | )] 91 | pub version: bool, 92 | 93 | /// Port 94 | #[clap( 95 | short = 'p', 96 | long = "port", 97 | help_heading = OPTSET_BEHAVIOUR, 98 | value_parser, 99 | default_value_t = 8000) 100 | ] 101 | pub port: u16, 102 | 103 | /// Open 104 | #[clap(short = 'o', long = "open", value_parser, default_value_t = false)] 105 | pub open: bool, 106 | 107 | /// Quiet 108 | #[clap( 109 | short = 'q', 110 | long = "quiet", 111 | value_parser, 112 | default_value_t = false, 113 | help_heading = OPTSET_OUTPUT, 114 | )] 115 | pub quiet: bool, 116 | } 117 | 118 | async fn propagate_custom_headers(req: Request, next: Next) -> Result { 119 | let mut response = next.run(req).await; 120 | 121 | // Support SharedArrayBuffer 122 | // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements 123 | response.headers_mut().insert( 124 | "Cross-Origin-Opener-Policy", 125 | HeaderValue::from_static("same-origin"), 126 | ); 127 | 128 | response.headers_mut().insert( 129 | "Cross-Origin-Embedder-Policy", 130 | HeaderValue::from_static("require-corp"), 131 | ); 132 | 133 | Ok(response) 134 | } 135 | 136 | async fn json_handler_with_param( 137 | // TODO: Improve into param iter 138 | Path(param): Path, 139 | // TODO: Move to hashmap 140 | State(state): State>, 141 | ) -> impl IntoResponse { 142 | // Example 143 | // String::from("{\"data\":{\"userId\":\"$1\",\"givenName\":\"Raphael\",\"country\":\"br\"}}"); 144 | let input = state.json_data.replace("{!0}", ¶m); 145 | let json_value: serde_json::Value = serde_json::from_str(&input).unwrap_or_default(); 146 | (StatusCode::OK, Json(json_value)) 147 | } 148 | 149 | async fn json_handler(State(state): State>) -> impl IntoResponse { 150 | let json_value: serde_json::Value = serde_json::from_str(&state.json_data).unwrap_or_default(); 151 | (StatusCode::OK, Json(json_value)) 152 | } 153 | 154 | struct AppState { 155 | json_data: String, 156 | } 157 | 158 | #[tokio::main] 159 | async fn main() { 160 | let mut server_path: String = env::current_dir() 161 | .unwrap() 162 | .into_os_string() 163 | .into_string() 164 | .unwrap(); 165 | 166 | let args = Cli::parse(); 167 | 168 | let Action::Server(command) = args.command; 169 | 170 | let port = &command.port; 171 | let path = &command.path; 172 | let quiet = &command.quiet; 173 | let open = &command.open; 174 | let version = &command.version; 175 | let route = &command.route; 176 | let json = &command.json; 177 | let all_routes = &command.all_routes; 178 | 179 | if *version { 180 | println!("{VERSION}"); 181 | return; 182 | } 183 | 184 | let cors = CorsLayer::new() 185 | .allow_credentials(true) 186 | .allow_headers(vec![ 187 | http::header::CONTENT_TYPE, 188 | http::header::ORIGIN, 189 | http::header::ACCEPT, 190 | http::header::ACCESS_CONTROL_REQUEST_HEADERS, 191 | http::header::ACCESS_CONTROL_REQUEST_METHOD, 192 | http::header::ACCESS_CONTROL_ALLOW_HEADERS, 193 | http::header::AUTHORIZATION, 194 | ]) 195 | .allow_origin(AllowOrigin::predicate(|_, _| true)); 196 | 197 | if !path.is_empty() { 198 | server_path = path.to_string(); 199 | } 200 | 201 | let addr = SocketAddr::from(([127, 0, 0, 1], *port)); 202 | 203 | let files = fs::read_dir(&server_path).unwrap(); 204 | let mut files_str = String::new(); 205 | for file in files { 206 | files_str = files_str 207 | + " " 208 | + &file 209 | .as_ref() 210 | .unwrap() 211 | .path() 212 | .into_os_string() 213 | .into_string() 214 | .ok() 215 | .unwrap(); 216 | } 217 | 218 | if open == &true { 219 | let url: String = format!("http://{addr}"); 220 | match open::that(&url) { 221 | Ok(()) => { 222 | if !*quiet { 223 | println!("{PREFIX} opened '{url}' successfully on browser.") 224 | } 225 | } 226 | Err(err) => { 227 | if !*quiet { 228 | eprintln!("{PREFIX} an error occurred when opening {url} on browser: {err}") 229 | } 230 | } 231 | } 232 | } 233 | 234 | if json.is_empty() { 235 | if !*quiet { 236 | println!("{PREFIX} path: {server_path}"); 237 | 238 | if !files_str.contains("index.html") { 239 | println!("{PREFIX} hint: consider to add an 'index.html' file"); 240 | } 241 | 242 | println!("{PREFIX} listening on: \x1b[35m{addr}\x1b[0m"); 243 | } 244 | 245 | let app = Router::new() 246 | .fallback(get_service(ServeDir::new(&server_path)).handle_error(handle_error)) 247 | .layer(middleware::from_fn(propagate_custom_headers)) 248 | .layer(cors); 249 | 250 | axum::Server::bind(&addr) 251 | .serve(app.into_make_service()) 252 | .with_graceful_shutdown(shutdown_signal()) 253 | .await 254 | .unwrap(); 255 | } else if !route.is_empty() { 256 | if !*quiet { 257 | println!("{PREFIX} \x1b[35m{route}\x1b[0m -> \x1b[34m{json:?}\x1b[0m"); 258 | println!("{PREFIX} listening on: \x1b[35m{addr}\x1b[0m"); 259 | } 260 | 261 | let shared_state = Arc::new(AppState { 262 | json_data: json.to_string(), 263 | }); 264 | let app = if json.contains("{!0}") { 265 | Router::new() 266 | .route(route, get(json_handler_with_param)) 267 | .layer(cors) 268 | .with_state(shared_state) 269 | } else { 270 | Router::new() 271 | .route(route, get(json_handler)) 272 | .layer(cors) 273 | .with_state(shared_state) 274 | }; 275 | 276 | axum::Server::bind(&addr) 277 | .serve(app.into_make_service()) 278 | .with_graceful_shutdown(shutdown_signal()) 279 | .await 280 | .unwrap(); 281 | } else if *all_routes { 282 | if !*quiet { 283 | println!("{PREFIX} listening all routes on: \x1b[35m{addr}\x1b[0m"); 284 | } 285 | 286 | let shared_state = Arc::new(AppState { 287 | json_data: json.to_string(), 288 | }); 289 | 290 | let app = Router::new() 291 | .route( 292 | "/*all", 293 | get(json_handler) 294 | .post(json_handler) 295 | .patch(json_handler) 296 | .delete(json_handler), 297 | ) 298 | .layer(cors) 299 | .with_state(shared_state); 300 | 301 | axum::Server::bind(&addr) 302 | .serve(app.into_make_service()) 303 | .with_graceful_shutdown(shutdown_signal()) 304 | .await 305 | .unwrap(); 306 | }; 307 | } 308 | 309 | async fn shutdown_signal() { 310 | let ctrl_c = async { 311 | tokio::signal::ctrl_c() 312 | .await 313 | .expect("Expect shutdown CTRL+C handler"); 314 | }; 315 | 316 | #[cfg(unix)] /* conditional compilation depending on target family = unix */ let terminate = async { 317 | tokio::signal::unix::signal(tokio::signal::unix::SignalKind::terminate()) 318 | .expect("Expected shutdown signal handler") 319 | .recv() 320 | .await; 321 | }; 322 | 323 | #[cfg(not(unix))] 324 | let terminate = std::future::pending::<()>(); 325 | 326 | tokio::select! { 327 | _ = ctrl_c => {}, 328 | _ = terminate => {}, 329 | } 330 | } 331 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Mozilla Public License Version 2.0 2 | ================================== 3 | 4 | 1. Definitions 5 | -------------- 6 | 7 | 1.1. "Contributor" 8 | means each individual or legal entity that creates, contributes to 9 | the creation of, or owns Covered Software. 10 | 11 | 1.2. "Contributor Version" 12 | means the combination of the Contributions of others (if any) used 13 | by a Contributor and that particular Contributor's Contribution. 14 | 15 | 1.3. "Contribution" 16 | means Covered Software of a particular Contributor. 17 | 18 | 1.4. "Covered Software" 19 | means Source Code Form to which the initial Contributor has attached 20 | the notice in Exhibit A, the Executable Form of such Source Code 21 | Form, and Modifications of such Source Code Form, in each case 22 | including portions thereof. 23 | 24 | 1.5. "Incompatible With Secondary Licenses" 25 | means 26 | 27 | (a) that the initial Contributor has attached the notice described 28 | in Exhibit B to the Covered Software; or 29 | 30 | (b) that the Covered Software was made available under the terms of 31 | version 1.1 or earlier of the License, but not also under the 32 | terms of a Secondary License. 33 | 34 | 1.6. "Executable Form" 35 | means any form of the work other than Source Code Form. 36 | 37 | 1.7. "Larger Work" 38 | means a work that combines Covered Software with other material, in 39 | a separate file or files, that is not Covered Software. 40 | 41 | 1.8. "License" 42 | means this document. 43 | 44 | 1.9. "Licensable" 45 | means having the right to grant, to the maximum extent possible, 46 | whether at the time of the initial grant or subsequently, any and 47 | all of the rights conveyed by this License. 48 | 49 | 1.10. "Modifications" 50 | means any of the following: 51 | 52 | (a) any file in Source Code Form that results from an addition to, 53 | deletion from, or modification of the contents of Covered 54 | Software; or 55 | 56 | (b) any new file in Source Code Form that contains any Covered 57 | Software. 58 | 59 | 1.11. "Patent Claims" of a Contributor 60 | means any patent claim(s), including without limitation, method, 61 | process, and apparatus claims, in any patent Licensable by such 62 | Contributor that would be infringed, but for the grant of the 63 | License, by the making, using, selling, offering for sale, having 64 | made, import, or transfer of either its Contributions or its 65 | Contributor Version. 66 | 67 | 1.12. "Secondary License" 68 | means either the GNU General Public License, Version 2.0, the GNU 69 | Lesser General Public License, Version 2.1, the GNU Affero General 70 | Public License, Version 3.0, or any later versions of those 71 | licenses. 72 | 73 | 1.13. "Source Code Form" 74 | means the form of the work preferred for making modifications. 75 | 76 | 1.14. "You" (or "Your") 77 | means an individual or a legal entity exercising rights under this 78 | License. For legal entities, "You" includes any entity that 79 | controls, is controlled by, or is under common control with You. For 80 | purposes of this definition, "control" means (a) the power, direct 81 | or indirect, to cause the direction or management of such entity, 82 | whether by contract or otherwise, or (b) ownership of more than 83 | fifty percent (50%) of the outstanding shares or beneficial 84 | ownership of such entity. 85 | 86 | 2. License Grants and Conditions 87 | -------------------------------- 88 | 89 | 2.1. Grants 90 | 91 | Each Contributor hereby grants You a world-wide, royalty-free, 92 | non-exclusive license: 93 | 94 | (a) under intellectual property rights (other than patent or trademark) 95 | Licensable by such Contributor to use, reproduce, make available, 96 | modify, display, perform, distribute, and otherwise exploit its 97 | Contributions, either on an unmodified basis, with Modifications, or 98 | as part of a Larger Work; and 99 | 100 | (b) under Patent Claims of such Contributor to make, use, sell, offer 101 | for sale, have made, import, and otherwise transfer either its 102 | Contributions or its Contributor Version. 103 | 104 | 2.2. Effective Date 105 | 106 | The licenses granted in Section 2.1 with respect to any Contribution 107 | become effective for each Contribution on the date the Contributor first 108 | distributes such Contribution. 109 | 110 | 2.3. Limitations on Grant Scope 111 | 112 | The licenses granted in this Section 2 are the only rights granted under 113 | this License. No additional rights or licenses will be implied from the 114 | distribution or licensing of Covered Software under this License. 115 | Notwithstanding Section 2.1(b) above, no patent license is granted by a 116 | Contributor: 117 | 118 | (a) for any code that a Contributor has removed from Covered Software; 119 | or 120 | 121 | (b) for infringements caused by: (i) Your and any other third party's 122 | modifications of Covered Software, or (ii) the combination of its 123 | Contributions with other software (except as part of its Contributor 124 | Version); or 125 | 126 | (c) under Patent Claims infringed by Covered Software in the absence of 127 | its Contributions. 128 | 129 | This License does not grant any rights in the trademarks, service marks, 130 | or logos of any Contributor (except as may be necessary to comply with 131 | the notice requirements in Section 3.4). 132 | 133 | 2.4. Subsequent Licenses 134 | 135 | No Contributor makes additional grants as a result of Your choice to 136 | distribute the Covered Software under a subsequent version of this 137 | License (see Section 10.2) or under the terms of a Secondary License (if 138 | permitted under the terms of Section 3.3). 139 | 140 | 2.5. Representation 141 | 142 | Each Contributor represents that the Contributor believes its 143 | Contributions are its original creation(s) or it has sufficient rights 144 | to grant the rights to its Contributions conveyed by this License. 145 | 146 | 2.6. Fair Use 147 | 148 | This License is not intended to limit any rights You have under 149 | applicable copyright doctrines of fair use, fair dealing, or other 150 | equivalents. 151 | 152 | 2.7. Conditions 153 | 154 | Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted 155 | in Section 2.1. 156 | 157 | 3. Responsibilities 158 | ------------------- 159 | 160 | 3.1. Distribution of Source Form 161 | 162 | All distribution of Covered Software in Source Code Form, including any 163 | Modifications that You create or to which You contribute, must be under 164 | the terms of this License. You must inform recipients that the Source 165 | Code Form of the Covered Software is governed by the terms of this 166 | License, and how they can obtain a copy of this License. You may not 167 | attempt to alter or restrict the recipients' rights in the Source Code 168 | Form. 169 | 170 | 3.2. Distribution of Executable Form 171 | 172 | If You distribute Covered Software in Executable Form then: 173 | 174 | (a) such Covered Software must also be made available in Source Code 175 | Form, as described in Section 3.1, and You must inform recipients of 176 | the Executable Form how they can obtain a copy of such Source Code 177 | Form by reasonable means in a timely manner, at a charge no more 178 | than the cost of distribution to the recipient; and 179 | 180 | (b) You may distribute such Executable Form under the terms of this 181 | License, or sublicense it under different terms, provided that the 182 | license for the Executable Form does not attempt to limit or alter 183 | the recipients' rights in the Source Code Form under this License. 184 | 185 | 3.3. Distribution of a Larger Work 186 | 187 | You may create and distribute a Larger Work under terms of Your choice, 188 | provided that You also comply with the requirements of this License for 189 | the Covered Software. If the Larger Work is a combination of Covered 190 | Software with a work governed by one or more Secondary Licenses, and the 191 | Covered Software is not Incompatible With Secondary Licenses, this 192 | License permits You to additionally distribute such Covered Software 193 | under the terms of such Secondary License(s), so that the recipient of 194 | the Larger Work may, at their option, further distribute the Covered 195 | Software under the terms of either this License or such Secondary 196 | License(s). 197 | 198 | 3.4. Notices 199 | 200 | You may not remove or alter the substance of any license notices 201 | (including copyright notices, patent notices, disclaimers of warranty, 202 | or limitations of liability) contained within the Source Code Form of 203 | the Covered Software, except that You may alter any license notices to 204 | the extent required to remedy known factual inaccuracies. 205 | 206 | 3.5. Application of Additional Terms 207 | 208 | You may choose to offer, and to charge a fee for, warranty, support, 209 | indemnity or liability obligations to one or more recipients of Covered 210 | Software. However, You may do so only on Your own behalf, and not on 211 | behalf of any Contributor. You must make it absolutely clear that any 212 | such warranty, support, indemnity, or liability obligation is offered by 213 | You alone, and You hereby agree to indemnify every Contributor for any 214 | liability incurred by such Contributor as a result of warranty, support, 215 | indemnity or liability terms You offer. You may include additional 216 | disclaimers of warranty and limitations of liability specific to any 217 | jurisdiction. 218 | 219 | 4. Inability to Comply Due to Statute or Regulation 220 | --------------------------------------------------- 221 | 222 | If it is impossible for You to comply with any of the terms of this 223 | License with respect to some or all of the Covered Software due to 224 | statute, judicial order, or regulation then You must: (a) comply with 225 | the terms of this License to the maximum extent possible; and (b) 226 | describe the limitations and the code they affect. Such description must 227 | be placed in a text file included with all distributions of the Covered 228 | Software under this License. Except to the extent prohibited by statute 229 | or regulation, such description must be sufficiently detailed for a 230 | recipient of ordinary skill to be able to understand it. 231 | 232 | 5. Termination 233 | -------------- 234 | 235 | 5.1. The rights granted under this License will terminate automatically 236 | if You fail to comply with any of its terms. However, if You become 237 | compliant, then the rights granted under this License from a particular 238 | Contributor are reinstated (a) provisionally, unless and until such 239 | Contributor explicitly and finally terminates Your grants, and (b) on an 240 | ongoing basis, if such Contributor fails to notify You of the 241 | non-compliance by some reasonable means prior to 60 days after You have 242 | come back into compliance. Moreover, Your grants from a particular 243 | Contributor are reinstated on an ongoing basis if such Contributor 244 | notifies You of the non-compliance by some reasonable means, this is the 245 | first time You have received notice of non-compliance with this License 246 | from such Contributor, and You become compliant prior to 30 days after 247 | Your receipt of the notice. 248 | 249 | 5.2. If You initiate litigation against any entity by asserting a patent 250 | infringement claim (excluding declaratory judgment actions, 251 | counter-claims, and cross-claims) alleging that a Contributor Version 252 | directly or indirectly infringes any patent, then the rights granted to 253 | You by any and all Contributors for the Covered Software under Section 254 | 2.1 of this License shall terminate. 255 | 256 | 5.3. In the event of termination under Sections 5.1 or 5.2 above, all 257 | end user license agreements (excluding distributors and resellers) which 258 | have been validly granted by You or Your distributors under this License 259 | prior to termination shall survive termination. 260 | 261 | ************************************************************************ 262 | * * 263 | * 6. Disclaimer of Warranty * 264 | * ------------------------- * 265 | * * 266 | * Covered Software is provided under this License on an "as is" * 267 | * basis, without warranty of any kind, either expressed, implied, or * 268 | * statutory, including, without limitation, warranties that the * 269 | * Covered Software is free of defects, merchantable, fit for a * 270 | * particular purpose or non-infringing. The entire risk as to the * 271 | * quality and performance of the Covered Software is with You. * 272 | * Should any Covered Software prove defective in any respect, You * 273 | * (not any Contributor) assume the cost of any necessary servicing, * 274 | * repair, or correction. This disclaimer of warranty constitutes an * 275 | * essential part of this License. No use of any Covered Software is * 276 | * authorized under this License except under this disclaimer. * 277 | * * 278 | ************************************************************************ 279 | 280 | ************************************************************************ 281 | * * 282 | * 7. Limitation of Liability * 283 | * -------------------------- * 284 | * * 285 | * Under no circumstances and under no legal theory, whether tort * 286 | * (including negligence), contract, or otherwise, shall any * 287 | * Contributor, or anyone who distributes Covered Software as * 288 | * permitted above, be liable to You for any direct, indirect, * 289 | * special, incidental, or consequential damages of any character * 290 | * including, without limitation, damages for lost profits, loss of * 291 | * goodwill, work stoppage, computer failure or malfunction, or any * 292 | * and all other commercial damages or losses, even if such party * 293 | * shall have been informed of the possibility of such damages. This * 294 | * limitation of liability shall not apply to liability for death or * 295 | * personal injury resulting from such party's negligence to the * 296 | * extent applicable law prohibits such limitation. Some * 297 | * jurisdictions do not allow the exclusion or limitation of * 298 | * incidental or consequential damages, so this exclusion and * 299 | * limitation may not apply to You. * 300 | * * 301 | ************************************************************************ 302 | 303 | 8. Litigation 304 | ------------- 305 | 306 | Any litigation relating to this License may be brought only in the 307 | courts of a jurisdiction where the defendant maintains its principal 308 | place of business and such litigation shall be governed by laws of that 309 | jurisdiction, without reference to its conflict-of-law provisions. 310 | Nothing in this Section shall prevent a party's ability to bring 311 | cross-claims or counter-claims. 312 | 313 | 9. Miscellaneous 314 | ---------------- 315 | 316 | This License represents the complete agreement concerning the subject 317 | matter hereof. If any provision of this License is held to be 318 | unenforceable, such provision shall be reformed only to the extent 319 | necessary to make it enforceable. Any law or regulation which provides 320 | that the language of a contract shall be construed against the drafter 321 | shall not be used to construe this License against a Contributor. 322 | 323 | 10. Versions of the License 324 | --------------------------- 325 | 326 | 10.1. New Versions 327 | 328 | Mozilla Foundation is the license steward. Except as provided in Section 329 | 10.3, no one other than the license steward has the right to modify or 330 | publish new versions of this License. Each version will be given a 331 | distinguishing version number. 332 | 333 | 10.2. Effect of New Versions 334 | 335 | You may distribute the Covered Software under the terms of the version 336 | of the License under which You originally received the Covered Software, 337 | or under the terms of any subsequent version published by the license 338 | steward. 339 | 340 | 10.3. Modified Versions 341 | 342 | If you create software not governed by this License, and you want to 343 | create a new license for such software, you may create and use a 344 | modified version of this License if you rename the license and remove 345 | any references to the name of the license steward (except to note that 346 | such modified license differs from this License). 347 | 348 | 10.4. Distributing Source Code Form that is Incompatible With Secondary 349 | Licenses 350 | 351 | If You choose to distribute Source Code Form that is Incompatible With 352 | Secondary Licenses under the terms of this version of the License, the 353 | notice described in Exhibit B of this License must be attached. 354 | 355 | Exhibit A - Source Code Form License Notice 356 | ------------------------------------------- 357 | 358 | This Source Code Form is subject to the terms of the Mozilla Public 359 | License, v. 2.0. If a copy of the MPL was not distributed with this 360 | file, You can obtain one at http://mozilla.org/MPL/2.0/. 361 | 362 | If it is not possible or desirable to put the notice in a particular 363 | file, then You may include the notice in a location (such as a LICENSE 364 | file in a relevant directory) where a recipient would be likely to look 365 | for such a notice. 366 | 367 | You may add additional accurate notices of copyright ownership. 368 | 369 | Exhibit B - "Incompatible With Secondary Licenses" Notice 370 | --------------------------------------------------------- 371 | 372 | This Source Code Form is "Incompatible With Secondary Licenses", as 373 | defined by the Mozilla Public License, v. 2.0. 374 | -------------------------------------------------------------------------------- /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 = "async-trait" 22 | version = "0.1.74" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" 25 | dependencies = [ 26 | "proc-macro2", 27 | "quote", 28 | "syn 2.0.39", 29 | ] 30 | 31 | [[package]] 32 | name = "atty" 33 | version = "0.2.14" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 36 | dependencies = [ 37 | "hermit-abi", 38 | "libc", 39 | "winapi", 40 | ] 41 | 42 | [[package]] 43 | name = "autocfg" 44 | version = "1.1.0" 45 | source = "registry+https://github.com/rust-lang/crates.io-index" 46 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 47 | 48 | [[package]] 49 | name = "axum" 50 | version = "0.6.20" 51 | source = "registry+https://github.com/rust-lang/crates.io-index" 52 | checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" 53 | dependencies = [ 54 | "async-trait", 55 | "axum-core", 56 | "bitflags", 57 | "bytes", 58 | "futures-util", 59 | "http", 60 | "http-body", 61 | "hyper", 62 | "itoa", 63 | "matchit", 64 | "memchr", 65 | "mime", 66 | "percent-encoding", 67 | "pin-project-lite", 68 | "rustversion", 69 | "serde", 70 | "serde_json", 71 | "serde_path_to_error", 72 | "serde_urlencoded", 73 | "sync_wrapper", 74 | "tokio", 75 | "tower", 76 | "tower-layer", 77 | "tower-service", 78 | ] 79 | 80 | [[package]] 81 | name = "axum-core" 82 | version = "0.3.4" 83 | source = "registry+https://github.com/rust-lang/crates.io-index" 84 | checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" 85 | dependencies = [ 86 | "async-trait", 87 | "bytes", 88 | "futures-util", 89 | "http", 90 | "http-body", 91 | "mime", 92 | "rustversion", 93 | "tower-layer", 94 | "tower-service", 95 | ] 96 | 97 | [[package]] 98 | name = "backtrace" 99 | version = "0.3.69" 100 | source = "registry+https://github.com/rust-lang/crates.io-index" 101 | checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" 102 | dependencies = [ 103 | "addr2line", 104 | "cc", 105 | "cfg-if", 106 | "libc", 107 | "miniz_oxide", 108 | "object", 109 | "rustc-demangle", 110 | ] 111 | 112 | [[package]] 113 | name = "bitflags" 114 | version = "1.3.2" 115 | source = "registry+https://github.com/rust-lang/crates.io-index" 116 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 117 | 118 | [[package]] 119 | name = "bytes" 120 | version = "1.2.1" 121 | source = "registry+https://github.com/rust-lang/crates.io-index" 122 | checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" 123 | 124 | [[package]] 125 | name = "cargo-server" 126 | version = "0.3.6" 127 | dependencies = [ 128 | "axum", 129 | "clap", 130 | "http", 131 | "open", 132 | "serde_json", 133 | "tokio", 134 | "tower-http", 135 | ] 136 | 137 | [[package]] 138 | name = "cc" 139 | version = "1.0.83" 140 | source = "registry+https://github.com/rust-lang/crates.io-index" 141 | checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" 142 | dependencies = [ 143 | "libc", 144 | ] 145 | 146 | [[package]] 147 | name = "cfg-if" 148 | version = "1.0.0" 149 | source = "registry+https://github.com/rust-lang/crates.io-index" 150 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 151 | 152 | [[package]] 153 | name = "clap" 154 | version = "4.0.18" 155 | source = "registry+https://github.com/rust-lang/crates.io-index" 156 | checksum = "335867764ed2de42325fafe6d18b8af74ba97ee0c590fa016f157535b42ab04b" 157 | dependencies = [ 158 | "atty", 159 | "bitflags", 160 | "clap_derive", 161 | "clap_lex", 162 | "once_cell", 163 | "strsim", 164 | "termcolor", 165 | ] 166 | 167 | [[package]] 168 | name = "clap_derive" 169 | version = "4.0.18" 170 | source = "registry+https://github.com/rust-lang/crates.io-index" 171 | checksum = "16a1b0f6422af32d5da0c58e2703320f379216ee70198241c84173a8c5ac28f3" 172 | dependencies = [ 173 | "heck", 174 | "proc-macro-error", 175 | "proc-macro2", 176 | "quote", 177 | "syn 1.0.99", 178 | ] 179 | 180 | [[package]] 181 | name = "clap_lex" 182 | version = "0.3.0" 183 | source = "registry+https://github.com/rust-lang/crates.io-index" 184 | checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8" 185 | dependencies = [ 186 | "os_str_bytes", 187 | ] 188 | 189 | [[package]] 190 | name = "fnv" 191 | version = "1.0.7" 192 | source = "registry+https://github.com/rust-lang/crates.io-index" 193 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 194 | 195 | [[package]] 196 | name = "form_urlencoded" 197 | version = "1.0.1" 198 | source = "registry+https://github.com/rust-lang/crates.io-index" 199 | checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" 200 | dependencies = [ 201 | "matches", 202 | "percent-encoding", 203 | ] 204 | 205 | [[package]] 206 | name = "futures-channel" 207 | version = "0.3.23" 208 | source = "registry+https://github.com/rust-lang/crates.io-index" 209 | checksum = "2bfc52cbddcfd745bf1740338492bb0bd83d76c67b445f91c5fb29fae29ecaa1" 210 | dependencies = [ 211 | "futures-core", 212 | ] 213 | 214 | [[package]] 215 | name = "futures-core" 216 | version = "0.3.23" 217 | source = "registry+https://github.com/rust-lang/crates.io-index" 218 | checksum = "d2acedae88d38235936c3922476b10fced7b2b68136f5e3c03c2d5be348a1115" 219 | 220 | [[package]] 221 | name = "futures-sink" 222 | version = "0.3.23" 223 | source = "registry+https://github.com/rust-lang/crates.io-index" 224 | checksum = "ca0bae1fe9752cf7fd9b0064c674ae63f97b37bc714d745cbde0afb7ec4e6765" 225 | 226 | [[package]] 227 | name = "futures-task" 228 | version = "0.3.23" 229 | source = "registry+https://github.com/rust-lang/crates.io-index" 230 | checksum = "842fc63b931f4056a24d59de13fb1272134ce261816e063e634ad0c15cdc5306" 231 | 232 | [[package]] 233 | name = "futures-util" 234 | version = "0.3.23" 235 | source = "registry+https://github.com/rust-lang/crates.io-index" 236 | checksum = "f0828a5471e340229c11c77ca80017937ce3c58cb788a17e5f1c2d5c485a9577" 237 | dependencies = [ 238 | "futures-core", 239 | "futures-task", 240 | "pin-project-lite", 241 | "pin-utils", 242 | ] 243 | 244 | [[package]] 245 | name = "gimli" 246 | version = "0.28.0" 247 | source = "registry+https://github.com/rust-lang/crates.io-index" 248 | checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" 249 | 250 | [[package]] 251 | name = "heck" 252 | version = "0.4.0" 253 | source = "registry+https://github.com/rust-lang/crates.io-index" 254 | checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" 255 | 256 | [[package]] 257 | name = "hermit-abi" 258 | version = "0.1.19" 259 | source = "registry+https://github.com/rust-lang/crates.io-index" 260 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 261 | dependencies = [ 262 | "libc", 263 | ] 264 | 265 | [[package]] 266 | name = "http" 267 | version = "0.2.10" 268 | source = "registry+https://github.com/rust-lang/crates.io-index" 269 | checksum = "f95b9abcae896730d42b78e09c155ed4ddf82c07b4de772c64aee5b2d8b7c150" 270 | dependencies = [ 271 | "bytes", 272 | "fnv", 273 | "itoa", 274 | ] 275 | 276 | [[package]] 277 | name = "http-body" 278 | version = "0.4.5" 279 | source = "registry+https://github.com/rust-lang/crates.io-index" 280 | checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" 281 | dependencies = [ 282 | "bytes", 283 | "http", 284 | "pin-project-lite", 285 | ] 286 | 287 | [[package]] 288 | name = "http-range-header" 289 | version = "0.3.0" 290 | source = "registry+https://github.com/rust-lang/crates.io-index" 291 | checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" 292 | 293 | [[package]] 294 | name = "httparse" 295 | version = "1.8.0" 296 | source = "registry+https://github.com/rust-lang/crates.io-index" 297 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 298 | 299 | [[package]] 300 | name = "httpdate" 301 | version = "1.0.2" 302 | source = "registry+https://github.com/rust-lang/crates.io-index" 303 | checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" 304 | 305 | [[package]] 306 | name = "hyper" 307 | version = "0.14.25" 308 | source = "registry+https://github.com/rust-lang/crates.io-index" 309 | checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" 310 | dependencies = [ 311 | "bytes", 312 | "futures-channel", 313 | "futures-core", 314 | "futures-util", 315 | "http", 316 | "http-body", 317 | "httparse", 318 | "httpdate", 319 | "itoa", 320 | "pin-project-lite", 321 | "socket2 0.4.9", 322 | "tokio", 323 | "tower-service", 324 | "tracing", 325 | "want", 326 | ] 327 | 328 | [[package]] 329 | name = "is-docker" 330 | version = "0.2.0" 331 | source = "registry+https://github.com/rust-lang/crates.io-index" 332 | checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" 333 | dependencies = [ 334 | "once_cell", 335 | ] 336 | 337 | [[package]] 338 | name = "is-wsl" 339 | version = "0.4.0" 340 | source = "registry+https://github.com/rust-lang/crates.io-index" 341 | checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" 342 | dependencies = [ 343 | "is-docker", 344 | "once_cell", 345 | ] 346 | 347 | [[package]] 348 | name = "itoa" 349 | version = "1.0.6" 350 | source = "registry+https://github.com/rust-lang/crates.io-index" 351 | checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" 352 | 353 | [[package]] 354 | name = "libc" 355 | version = "0.2.150" 356 | source = "registry+https://github.com/rust-lang/crates.io-index" 357 | checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" 358 | 359 | [[package]] 360 | name = "lock_api" 361 | version = "0.4.8" 362 | source = "registry+https://github.com/rust-lang/crates.io-index" 363 | checksum = "9f80bf5aacaf25cbfc8210d1cfb718f2bf3b11c4c54e5afe36c236853a8ec390" 364 | dependencies = [ 365 | "autocfg", 366 | "scopeguard", 367 | ] 368 | 369 | [[package]] 370 | name = "log" 371 | version = "0.4.17" 372 | source = "registry+https://github.com/rust-lang/crates.io-index" 373 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 374 | dependencies = [ 375 | "cfg-if", 376 | ] 377 | 378 | [[package]] 379 | name = "matches" 380 | version = "0.1.9" 381 | source = "registry+https://github.com/rust-lang/crates.io-index" 382 | checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" 383 | 384 | [[package]] 385 | name = "matchit" 386 | version = "0.7.0" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" 389 | 390 | [[package]] 391 | name = "memchr" 392 | version = "2.5.0" 393 | source = "registry+https://github.com/rust-lang/crates.io-index" 394 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 395 | 396 | [[package]] 397 | name = "mime" 398 | version = "0.3.16" 399 | source = "registry+https://github.com/rust-lang/crates.io-index" 400 | checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" 401 | 402 | [[package]] 403 | name = "mime_guess" 404 | version = "2.0.4" 405 | source = "registry+https://github.com/rust-lang/crates.io-index" 406 | checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" 407 | dependencies = [ 408 | "mime", 409 | "unicase", 410 | ] 411 | 412 | [[package]] 413 | name = "miniz_oxide" 414 | version = "0.7.1" 415 | source = "registry+https://github.com/rust-lang/crates.io-index" 416 | checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" 417 | dependencies = [ 418 | "adler", 419 | ] 420 | 421 | [[package]] 422 | name = "mio" 423 | version = "0.8.9" 424 | source = "registry+https://github.com/rust-lang/crates.io-index" 425 | checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" 426 | dependencies = [ 427 | "libc", 428 | "wasi", 429 | "windows-sys 0.48.0", 430 | ] 431 | 432 | [[package]] 433 | name = "num_cpus" 434 | version = "1.13.1" 435 | source = "registry+https://github.com/rust-lang/crates.io-index" 436 | checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" 437 | dependencies = [ 438 | "hermit-abi", 439 | "libc", 440 | ] 441 | 442 | [[package]] 443 | name = "object" 444 | version = "0.32.1" 445 | source = "registry+https://github.com/rust-lang/crates.io-index" 446 | checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" 447 | dependencies = [ 448 | "memchr", 449 | ] 450 | 451 | [[package]] 452 | name = "once_cell" 453 | version = "1.18.0" 454 | source = "registry+https://github.com/rust-lang/crates.io-index" 455 | checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" 456 | 457 | [[package]] 458 | name = "open" 459 | version = "5.0.0" 460 | source = "registry+https://github.com/rust-lang/crates.io-index" 461 | checksum = "cfabf1927dce4d6fdf563d63328a0a506101ced3ec780ca2135747336c98cef8" 462 | dependencies = [ 463 | "is-wsl", 464 | "libc", 465 | "pathdiff", 466 | ] 467 | 468 | [[package]] 469 | name = "os_str_bytes" 470 | version = "6.3.0" 471 | source = "registry+https://github.com/rust-lang/crates.io-index" 472 | checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff" 473 | 474 | [[package]] 475 | name = "parking_lot" 476 | version = "0.12.1" 477 | source = "registry+https://github.com/rust-lang/crates.io-index" 478 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 479 | dependencies = [ 480 | "lock_api", 481 | "parking_lot_core", 482 | ] 483 | 484 | [[package]] 485 | name = "parking_lot_core" 486 | version = "0.9.3" 487 | source = "registry+https://github.com/rust-lang/crates.io-index" 488 | checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" 489 | dependencies = [ 490 | "cfg-if", 491 | "libc", 492 | "redox_syscall", 493 | "smallvec", 494 | "windows-sys 0.36.1", 495 | ] 496 | 497 | [[package]] 498 | name = "pathdiff" 499 | version = "0.2.1" 500 | source = "registry+https://github.com/rust-lang/crates.io-index" 501 | checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" 502 | 503 | [[package]] 504 | name = "percent-encoding" 505 | version = "2.1.0" 506 | source = "registry+https://github.com/rust-lang/crates.io-index" 507 | checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 508 | 509 | [[package]] 510 | name = "pin-project" 511 | version = "1.0.12" 512 | source = "registry+https://github.com/rust-lang/crates.io-index" 513 | checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" 514 | dependencies = [ 515 | "pin-project-internal", 516 | ] 517 | 518 | [[package]] 519 | name = "pin-project-internal" 520 | version = "1.0.12" 521 | source = "registry+https://github.com/rust-lang/crates.io-index" 522 | checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" 523 | dependencies = [ 524 | "proc-macro2", 525 | "quote", 526 | "syn 1.0.99", 527 | ] 528 | 529 | [[package]] 530 | name = "pin-project-lite" 531 | version = "0.2.13" 532 | source = "registry+https://github.com/rust-lang/crates.io-index" 533 | checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" 534 | 535 | [[package]] 536 | name = "pin-utils" 537 | version = "0.1.0" 538 | source = "registry+https://github.com/rust-lang/crates.io-index" 539 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 540 | 541 | [[package]] 542 | name = "proc-macro-error" 543 | version = "1.0.4" 544 | source = "registry+https://github.com/rust-lang/crates.io-index" 545 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 546 | dependencies = [ 547 | "proc-macro-error-attr", 548 | "proc-macro2", 549 | "quote", 550 | "syn 1.0.99", 551 | "version_check", 552 | ] 553 | 554 | [[package]] 555 | name = "proc-macro-error-attr" 556 | version = "1.0.4" 557 | source = "registry+https://github.com/rust-lang/crates.io-index" 558 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 559 | dependencies = [ 560 | "proc-macro2", 561 | "quote", 562 | "version_check", 563 | ] 564 | 565 | [[package]] 566 | name = "proc-macro2" 567 | version = "1.0.69" 568 | source = "registry+https://github.com/rust-lang/crates.io-index" 569 | checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" 570 | dependencies = [ 571 | "unicode-ident", 572 | ] 573 | 574 | [[package]] 575 | name = "quote" 576 | version = "1.0.33" 577 | source = "registry+https://github.com/rust-lang/crates.io-index" 578 | checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" 579 | dependencies = [ 580 | "proc-macro2", 581 | ] 582 | 583 | [[package]] 584 | name = "redox_syscall" 585 | version = "0.2.16" 586 | source = "registry+https://github.com/rust-lang/crates.io-index" 587 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 588 | dependencies = [ 589 | "bitflags", 590 | ] 591 | 592 | [[package]] 593 | name = "rustc-demangle" 594 | version = "0.1.23" 595 | source = "registry+https://github.com/rust-lang/crates.io-index" 596 | checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" 597 | 598 | [[package]] 599 | name = "rustversion" 600 | version = "1.0.12" 601 | source = "registry+https://github.com/rust-lang/crates.io-index" 602 | checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" 603 | 604 | [[package]] 605 | name = "ryu" 606 | version = "1.0.11" 607 | source = "registry+https://github.com/rust-lang/crates.io-index" 608 | checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" 609 | 610 | [[package]] 611 | name = "scopeguard" 612 | version = "1.1.0" 613 | source = "registry+https://github.com/rust-lang/crates.io-index" 614 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 615 | 616 | [[package]] 617 | name = "serde" 618 | version = "1.0.192" 619 | source = "registry+https://github.com/rust-lang/crates.io-index" 620 | checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" 621 | dependencies = [ 622 | "serde_derive", 623 | ] 624 | 625 | [[package]] 626 | name = "serde_derive" 627 | version = "1.0.192" 628 | source = "registry+https://github.com/rust-lang/crates.io-index" 629 | checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" 630 | dependencies = [ 631 | "proc-macro2", 632 | "quote", 633 | "syn 2.0.39", 634 | ] 635 | 636 | [[package]] 637 | name = "serde_json" 638 | version = "1.0.108" 639 | source = "registry+https://github.com/rust-lang/crates.io-index" 640 | checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" 641 | dependencies = [ 642 | "itoa", 643 | "ryu", 644 | "serde", 645 | ] 646 | 647 | [[package]] 648 | name = "serde_path_to_error" 649 | version = "0.1.10" 650 | source = "registry+https://github.com/rust-lang/crates.io-index" 651 | checksum = "db0969fff533976baadd92e08b1d102c5a3d8a8049eadfd69d4d1e3c5b2ed189" 652 | dependencies = [ 653 | "serde", 654 | ] 655 | 656 | [[package]] 657 | name = "serde_urlencoded" 658 | version = "0.7.1" 659 | source = "registry+https://github.com/rust-lang/crates.io-index" 660 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 661 | dependencies = [ 662 | "form_urlencoded", 663 | "itoa", 664 | "ryu", 665 | "serde", 666 | ] 667 | 668 | [[package]] 669 | name = "signal-hook-registry" 670 | version = "1.4.0" 671 | source = "registry+https://github.com/rust-lang/crates.io-index" 672 | checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" 673 | dependencies = [ 674 | "libc", 675 | ] 676 | 677 | [[package]] 678 | name = "smallvec" 679 | version = "1.9.0" 680 | source = "registry+https://github.com/rust-lang/crates.io-index" 681 | checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" 682 | 683 | [[package]] 684 | name = "socket2" 685 | version = "0.4.9" 686 | source = "registry+https://github.com/rust-lang/crates.io-index" 687 | checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" 688 | dependencies = [ 689 | "libc", 690 | "winapi", 691 | ] 692 | 693 | [[package]] 694 | name = "socket2" 695 | version = "0.5.5" 696 | source = "registry+https://github.com/rust-lang/crates.io-index" 697 | checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" 698 | dependencies = [ 699 | "libc", 700 | "windows-sys 0.48.0", 701 | ] 702 | 703 | [[package]] 704 | name = "strsim" 705 | version = "0.10.0" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 708 | 709 | [[package]] 710 | name = "syn" 711 | version = "1.0.99" 712 | source = "registry+https://github.com/rust-lang/crates.io-index" 713 | checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" 714 | dependencies = [ 715 | "proc-macro2", 716 | "quote", 717 | "unicode-ident", 718 | ] 719 | 720 | [[package]] 721 | name = "syn" 722 | version = "2.0.39" 723 | source = "registry+https://github.com/rust-lang/crates.io-index" 724 | checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" 725 | dependencies = [ 726 | "proc-macro2", 727 | "quote", 728 | "unicode-ident", 729 | ] 730 | 731 | [[package]] 732 | name = "sync_wrapper" 733 | version = "0.1.1" 734 | source = "registry+https://github.com/rust-lang/crates.io-index" 735 | checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8" 736 | 737 | [[package]] 738 | name = "termcolor" 739 | version = "1.1.3" 740 | source = "registry+https://github.com/rust-lang/crates.io-index" 741 | checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" 742 | dependencies = [ 743 | "winapi-util", 744 | ] 745 | 746 | [[package]] 747 | name = "tokio" 748 | version = "1.34.0" 749 | source = "registry+https://github.com/rust-lang/crates.io-index" 750 | checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" 751 | dependencies = [ 752 | "backtrace", 753 | "bytes", 754 | "libc", 755 | "mio", 756 | "num_cpus", 757 | "parking_lot", 758 | "pin-project-lite", 759 | "signal-hook-registry", 760 | "socket2 0.5.5", 761 | "tokio-macros", 762 | "windows-sys 0.48.0", 763 | ] 764 | 765 | [[package]] 766 | name = "tokio-macros" 767 | version = "2.2.0" 768 | source = "registry+https://github.com/rust-lang/crates.io-index" 769 | checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" 770 | dependencies = [ 771 | "proc-macro2", 772 | "quote", 773 | "syn 2.0.39", 774 | ] 775 | 776 | [[package]] 777 | name = "tokio-util" 778 | version = "0.7.3" 779 | source = "registry+https://github.com/rust-lang/crates.io-index" 780 | checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" 781 | dependencies = [ 782 | "bytes", 783 | "futures-core", 784 | "futures-sink", 785 | "pin-project-lite", 786 | "tokio", 787 | ] 788 | 789 | [[package]] 790 | name = "tower" 791 | version = "0.4.13" 792 | source = "registry+https://github.com/rust-lang/crates.io-index" 793 | checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" 794 | dependencies = [ 795 | "futures-core", 796 | "futures-util", 797 | "pin-project", 798 | "pin-project-lite", 799 | "tokio", 800 | "tower-layer", 801 | "tower-service", 802 | "tracing", 803 | ] 804 | 805 | [[package]] 806 | name = "tower-http" 807 | version = "0.3.5" 808 | source = "registry+https://github.com/rust-lang/crates.io-index" 809 | checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" 810 | dependencies = [ 811 | "bitflags", 812 | "bytes", 813 | "futures-core", 814 | "futures-util", 815 | "http", 816 | "http-body", 817 | "http-range-header", 818 | "httpdate", 819 | "mime", 820 | "mime_guess", 821 | "percent-encoding", 822 | "pin-project-lite", 823 | "tokio", 824 | "tokio-util", 825 | "tower-layer", 826 | "tower-service", 827 | ] 828 | 829 | [[package]] 830 | name = "tower-layer" 831 | version = "0.3.2" 832 | source = "registry+https://github.com/rust-lang/crates.io-index" 833 | checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" 834 | 835 | [[package]] 836 | name = "tower-service" 837 | version = "0.3.2" 838 | source = "registry+https://github.com/rust-lang/crates.io-index" 839 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" 840 | 841 | [[package]] 842 | name = "tracing" 843 | version = "0.1.36" 844 | source = "registry+https://github.com/rust-lang/crates.io-index" 845 | checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" 846 | dependencies = [ 847 | "cfg-if", 848 | "log", 849 | "pin-project-lite", 850 | "tracing-core", 851 | ] 852 | 853 | [[package]] 854 | name = "tracing-core" 855 | version = "0.1.29" 856 | source = "registry+https://github.com/rust-lang/crates.io-index" 857 | checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7" 858 | dependencies = [ 859 | "once_cell", 860 | ] 861 | 862 | [[package]] 863 | name = "try-lock" 864 | version = "0.2.3" 865 | source = "registry+https://github.com/rust-lang/crates.io-index" 866 | checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" 867 | 868 | [[package]] 869 | name = "unicase" 870 | version = "2.6.0" 871 | source = "registry+https://github.com/rust-lang/crates.io-index" 872 | checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" 873 | dependencies = [ 874 | "version_check", 875 | ] 876 | 877 | [[package]] 878 | name = "unicode-ident" 879 | version = "1.0.3" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" 882 | 883 | [[package]] 884 | name = "version_check" 885 | version = "0.9.4" 886 | source = "registry+https://github.com/rust-lang/crates.io-index" 887 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 888 | 889 | [[package]] 890 | name = "want" 891 | version = "0.3.0" 892 | source = "registry+https://github.com/rust-lang/crates.io-index" 893 | checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" 894 | dependencies = [ 895 | "log", 896 | "try-lock", 897 | ] 898 | 899 | [[package]] 900 | name = "wasi" 901 | version = "0.11.0+wasi-snapshot-preview1" 902 | source = "registry+https://github.com/rust-lang/crates.io-index" 903 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 904 | 905 | [[package]] 906 | name = "winapi" 907 | version = "0.3.9" 908 | source = "registry+https://github.com/rust-lang/crates.io-index" 909 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 910 | dependencies = [ 911 | "winapi-i686-pc-windows-gnu", 912 | "winapi-x86_64-pc-windows-gnu", 913 | ] 914 | 915 | [[package]] 916 | name = "winapi-i686-pc-windows-gnu" 917 | version = "0.4.0" 918 | source = "registry+https://github.com/rust-lang/crates.io-index" 919 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 920 | 921 | [[package]] 922 | name = "winapi-util" 923 | version = "0.1.5" 924 | source = "registry+https://github.com/rust-lang/crates.io-index" 925 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 926 | dependencies = [ 927 | "winapi", 928 | ] 929 | 930 | [[package]] 931 | name = "winapi-x86_64-pc-windows-gnu" 932 | version = "0.4.0" 933 | source = "registry+https://github.com/rust-lang/crates.io-index" 934 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 935 | 936 | [[package]] 937 | name = "windows-sys" 938 | version = "0.36.1" 939 | source = "registry+https://github.com/rust-lang/crates.io-index" 940 | checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" 941 | dependencies = [ 942 | "windows_aarch64_msvc 0.36.1", 943 | "windows_i686_gnu 0.36.1", 944 | "windows_i686_msvc 0.36.1", 945 | "windows_x86_64_gnu 0.36.1", 946 | "windows_x86_64_msvc 0.36.1", 947 | ] 948 | 949 | [[package]] 950 | name = "windows-sys" 951 | version = "0.48.0" 952 | source = "registry+https://github.com/rust-lang/crates.io-index" 953 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 954 | dependencies = [ 955 | "windows-targets", 956 | ] 957 | 958 | [[package]] 959 | name = "windows-targets" 960 | version = "0.48.5" 961 | source = "registry+https://github.com/rust-lang/crates.io-index" 962 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 963 | dependencies = [ 964 | "windows_aarch64_gnullvm", 965 | "windows_aarch64_msvc 0.48.5", 966 | "windows_i686_gnu 0.48.5", 967 | "windows_i686_msvc 0.48.5", 968 | "windows_x86_64_gnu 0.48.5", 969 | "windows_x86_64_gnullvm", 970 | "windows_x86_64_msvc 0.48.5", 971 | ] 972 | 973 | [[package]] 974 | name = "windows_aarch64_gnullvm" 975 | version = "0.48.5" 976 | source = "registry+https://github.com/rust-lang/crates.io-index" 977 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 978 | 979 | [[package]] 980 | name = "windows_aarch64_msvc" 981 | version = "0.36.1" 982 | source = "registry+https://github.com/rust-lang/crates.io-index" 983 | checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" 984 | 985 | [[package]] 986 | name = "windows_aarch64_msvc" 987 | version = "0.48.5" 988 | source = "registry+https://github.com/rust-lang/crates.io-index" 989 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 990 | 991 | [[package]] 992 | name = "windows_i686_gnu" 993 | version = "0.36.1" 994 | source = "registry+https://github.com/rust-lang/crates.io-index" 995 | checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" 996 | 997 | [[package]] 998 | name = "windows_i686_gnu" 999 | version = "0.48.5" 1000 | source = "registry+https://github.com/rust-lang/crates.io-index" 1001 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 1002 | 1003 | [[package]] 1004 | name = "windows_i686_msvc" 1005 | version = "0.36.1" 1006 | source = "registry+https://github.com/rust-lang/crates.io-index" 1007 | checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" 1008 | 1009 | [[package]] 1010 | name = "windows_i686_msvc" 1011 | version = "0.48.5" 1012 | source = "registry+https://github.com/rust-lang/crates.io-index" 1013 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 1014 | 1015 | [[package]] 1016 | name = "windows_x86_64_gnu" 1017 | version = "0.36.1" 1018 | source = "registry+https://github.com/rust-lang/crates.io-index" 1019 | checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" 1020 | 1021 | [[package]] 1022 | name = "windows_x86_64_gnu" 1023 | version = "0.48.5" 1024 | source = "registry+https://github.com/rust-lang/crates.io-index" 1025 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 1026 | 1027 | [[package]] 1028 | name = "windows_x86_64_gnullvm" 1029 | version = "0.48.5" 1030 | source = "registry+https://github.com/rust-lang/crates.io-index" 1031 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 1032 | 1033 | [[package]] 1034 | name = "windows_x86_64_msvc" 1035 | version = "0.36.1" 1036 | source = "registry+https://github.com/rust-lang/crates.io-index" 1037 | checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" 1038 | 1039 | [[package]] 1040 | name = "windows_x86_64_msvc" 1041 | version = "0.48.5" 1042 | source = "registry+https://github.com/rust-lang/crates.io-index" 1043 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 1044 | --------------------------------------------------------------------------------