├── 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 | 
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 | 
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 | 
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 | 
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 |
--------------------------------------------------------------------------------