├── .dockerignore ├── .github ├── dependabot.yml └── workflows │ ├── node.js.yml │ └── rust.yml ├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── entrypoint.sh ├── foodi-backend ├── .env ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md ├── Rocket.toml ├── database.sqlite-shm ├── database.sqlite-wal ├── migrations │ ├── .gitkeep │ ├── 20221017165648_meals.down.sql │ └── 20221017165648_meals.up.sql └── src │ ├── main.rs │ └── models.rs ├── foodi-frontend ├── .babelrc ├── .gitignore ├── .prettierrc.js ├── README.md ├── eslint.config.mjs ├── index.html ├── package-lock.json ├── package.json ├── src │ ├── api.ts │ ├── app.tsx │ ├── main.tsx │ ├── meals │ │ ├── form.tsx │ │ ├── meal.ts │ │ └── view.tsx │ └── tachyons.css └── tsconfig.json ├── k8s.yaml ├── nginx.conf └── terraform ├── .gitignore ├── main.tf └── provider.tf /.dockerignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | /target/ 4 | 5 | # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries 6 | # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html 7 | # Cargo.lock 8 | 9 | # These are backup files generated by rustfmt 10 | **/*.rs.bk 11 | 12 | # Ignore the sqlite DB 13 | database.sqlite 14 | 15 | # Logs 16 | logs 17 | *.log 18 | npm-debug.log* 19 | yarn-debug.log* 20 | yarn-error.log* 21 | 22 | # Runtime data 23 | pids 24 | *.pid 25 | *.seed 26 | *.pid.lock 27 | 28 | # Directory for instrumented libs generated by jscoverage/JSCover 29 | lib-cov 30 | 31 | # Coverage directory used by tools like istanbul 32 | coverage 33 | 34 | # nyc test coverage 35 | .nyc_output 36 | 37 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 38 | .grunt 39 | 40 | # Bower dependency directory (https://bower.io/) 41 | bower_components 42 | 43 | # node-waf configuration 44 | .lock-wscript 45 | 46 | # Compiled binary addons (https://nodejs.org/api/addons.html) 47 | build/Release 48 | 49 | # Dependency directories 50 | node_modules/ 51 | jspm_packages/ 52 | 53 | # TypeScript v1 declaration files 54 | typings/ 55 | 56 | # Optional npm cache directory 57 | .npm 58 | 59 | # Optional eslint cache 60 | .eslintcache 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # next.js build output 79 | .next 80 | 81 | # nuxt.js build output 82 | .nuxt 83 | 84 | # vuepress build output 85 | .vuepress/dist 86 | 87 | # Serverless directories 88 | .serverless/ 89 | 90 | # FuseBox cache 91 | .fusebox/ 92 | 93 | # DynamoDB Local files 94 | .dynamodb/ 95 | 96 | # Parcel 'dist' build directory 97 | dist/ 98 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" 7 | - package-ecosystem: cargo 8 | directory: "/foodi-backend" 9 | groups: 10 | cargo: 11 | patterns: 12 | - '*' 13 | schedule: 14 | interval: "weekly" 15 | open-pull-requests-limit: 10 16 | reviewers: 17 | - brndnmtthws 18 | ignore: 19 | - dependency-name: serde 20 | versions: 21 | - 1.0.123 22 | - 1.0.124 23 | - dependency-name: serde_derive 24 | versions: 25 | - 1.0.123 26 | - 1.0.124 27 | - dependency-name: serde_json 28 | versions: 29 | - 1.0.61 30 | - 1.0.62 31 | - 1.0.63 32 | - dependency-name: rocket_contrib 33 | versions: 34 | - 0.4.6 35 | - dependency-name: rocket 36 | versions: 37 | - 0.4.6 38 | - package-ecosystem: npm 39 | directory: "/foodi-frontend" 40 | schedule: 41 | interval: "weekly" 42 | open-pull-requests-limit: 10 43 | groups: 44 | npm: 45 | patterns: 46 | - '*' 47 | reviewers: 48 | - brndnmtthws 49 | ignore: 50 | - dependency-name: typed-rest-client 51 | versions: 52 | - 1.8.1 53 | - 1.8.3 54 | - dependency-name: typescript 55 | versions: 56 | - 4.1.3 57 | - 4.1.4 58 | - 4.1.5 59 | - 4.2.2 60 | - dependency-name: "@types/node" 61 | versions: 62 | - 14.14.22 63 | - 14.14.23 64 | - 14.14.24 65 | - 14.14.25 66 | - 14.14.26 67 | - 14.14.27 68 | - 14.14.28 69 | - 14.14.29 70 | - 14.14.30 71 | - 14.14.31 72 | - dependency-name: "@types/react" 73 | versions: 74 | - 17.0.1 75 | - dependency-name: tslib 76 | versions: 77 | - 2.1.0 78 | -------------------------------------------------------------------------------- /.github/workflows/node.js.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: Node.js CI 5 | 6 | on: 7 | push: 8 | branches: [main] 9 | pull_request: 10 | branches: [main] 11 | 12 | defaults: 13 | run: 14 | working-directory: foodi-frontend 15 | 16 | jobs: 17 | build: 18 | runs-on: ubuntu-latest 19 | 20 | strategy: 21 | matrix: 22 | node-version: [16.x, 18.x] 23 | 24 | steps: 25 | - uses: actions/checkout@v4 26 | - name: Use Node.js ${{ matrix.node-version }} 27 | uses: actions/setup-node@v4 28 | with: 29 | node-version: ${{ matrix.node-version }} 30 | - run: npm ci 31 | - run: npm run build --if-present 32 | - run: npm test --if-present 33 | -------------------------------------------------------------------------------- /.github/workflows/rust.yml: -------------------------------------------------------------------------------- 1 | name: Rust 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | branches: [main] 8 | 9 | defaults: 10 | run: 11 | working-directory: foodi-backend 12 | 13 | env: 14 | CARGO_TERM_COLOR: always 15 | 16 | jobs: 17 | build: 18 | runs-on: ubuntu-latest 19 | strategy: 20 | matrix: 21 | toolchain: [nightly] 22 | steps: 23 | - uses: actions/checkout@v4 24 | - uses: brndnmtthws/rust-action@v1 25 | with: 26 | toolchain: ${{ matrix.toolchain }} 27 | - name: Build 28 | run: cargo build 29 | - name: Run tests 30 | run: cargo test --verbose 31 | - name: Run clippy 32 | run: cargo clippy --all-targets --all-features -- -D warnings 33 | - name: Check formatting 34 | run: cargo fmt --all -- --check 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM rustlang/rust:nightly-slim AS backend-build 2 | 3 | RUN apt-get update \ 4 | && apt-get install -yqq libsqlite3-dev libmariadbclient-dev-compat libpq-dev 5 | 6 | WORKDIR /app 7 | 8 | COPY foodi-backend /app/foodi-backend 9 | RUN cd foodi-backend \ 10 | && cargo build --release \ 11 | && cargo install diesel_cli 12 | 13 | FROM node:current-alpine AS frontend-build 14 | 15 | WORKDIR /app 16 | 17 | COPY foodi-frontend /app/foodi-frontend 18 | RUN cd foodi-frontend \ 19 | && yarn install \ 20 | && PARCEL_WORKERS=2 yarn build 21 | 22 | FROM openresty/openresty:stretch 23 | 24 | RUN apt-get update \ 25 | && apt-get install -yqq libsqlite3-0 libmariadbclient18 libpq5 \ 26 | && apt-get clean \ 27 | && rm -rf /var/lib/apt/lists/* 28 | 29 | WORKDIR /app 30 | 31 | # Copy from backend stage 32 | COPY --from=backend-build /app/foodi-backend/target/release/foodi-backend /usr/bin 33 | COPY --from=backend-build /usr/local/cargo/bin/diesel /usr/bin 34 | 35 | # Copy from frontend stage 36 | COPY --from=frontend-build /app/foodi-frontend/dist /app/dist 37 | 38 | # Copy entrypoint, nginx config, and DB 39 | COPY entrypoint.sh /usr/bin/entrypoint.sh 40 | COPY nginx.conf /usr/local/openresty/nginx/conf/nginx.conf 41 | COPY foodi-backend/sample-database.sqlite /app/database.sqlite 42 | COPY foodi-backend/Rocket.toml /app/Rocket.toml 43 | 44 | EXPOSE 80 45 | 46 | CMD ["/usr/bin/entrypoint.sh"] 47 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Node.js CI](https://github.com/brndnmtthws/rust-react-typescript-demo/workflows/Node.js%20CI/badge.svg?branch=master)](https://github.com/brndnmtthws/rust-react-typescript-demo/actions?query=workflow%3A%22Node.js+CI%22) [![Rust](https://github.com/brndnmtthws/rust-react-typescript-demo/workflows/Rust/badge.svg?branch=master)](https://github.com/brndnmtthws/rust-react-typescript-demo/actions?query=workflow%3ARust) 2 | 3 | # rust-react-typescript-demo 4 | 5 | This repository contains demo code for my YouTube programming learning series about [Rust](https://www.rust-lang.org/), [React](https://reactjs.org/), [TypeScript](https://www.typescriptlang.org/), [Docker](https://docs.docker.com/install/), [Terraform](https://www.terraform.io/) and [Kubernetes](https://kubernetes.io/). For this project, we're creating **foodi**, a meal logging tool. 6 | 7 | This project is intended to serve as an example, and can be used as boilerplate 8 | for starting your own project. You can also watch the videos to learn more 9 | about how it was built (mostly trial and error, like a lot of things in life 10 | 😀). 11 | 12 | This repo has the following features: 13 | 14 | - [Rust](https://www.rust-lang.org/), [Rocket](https://rocket.rs/), & [SQLx](https://github.com/launchbadge/sqlx) based backend 15 | - [React](https://reactjs.org/), [Mobx](https://mobx.js.org/), and [TypeScript](https://www.typescriptlang.org/) based frontend 16 | - [Parcel](https://parceljs.org/) for frontend packaging 17 | - [Docker](https://docs.docker.com/install/) image with frontend & backend all-in-one 18 | - [Terraform](https://www.terraform.io/) for managing a [GKE](https://cloud.google.com/kubernetes-engine/) cluster on [GCP](https://cloud.google.com/) 19 | - [Kubernetes](https://kubernetes.io/) manifest for running on GKE 20 | 21 | You can find the videos on YouTube below: 22 | 23 | - [📽 Part 1](https://youtu.be/-DNF8qkJ0ws) 24 | - [📽 Part 2](https://youtu.be/aRpUbu2wTiA) 25 | - [📽 Part 3](https://youtu.be/GinLXQVqJM4) 26 | - [📽 Part 4](https://youtu.be/daHmhL1UCIs) 27 | - [📽 Part 5](https://youtu.be/xWf3VyThZJY) 28 | - [📽 Part 6](https://youtu.be/KhuZb5mF7C0) 29 | - [📽 Part 7](https://youtu.be/AOTswOoetjU) 30 | 31 | In the series, we're building **foodi**, a web-based meal logger/tracking tool. 32 | 33 | ## Compiling the Rust Backend Server 34 | 35 | To build the Rust backend, you will need to install the Rust nightly build 36 | with rustup. First, go to [https://rustup.rs/](https://rustup.rs/) and 37 | install rustup. Then, install Rust nightly: 38 | 39 | ```ShellSession 40 | $ rustup default nightly 41 | ... 42 | ``` 43 | 44 | Once you have the nightly build installed, you can build the backend. 45 | 46 | ### Build the Backend 47 | 48 | ```ShellSession 49 | $ cd foodi-backend 50 | $ cargo build 51 | ... 52 | ``` 53 | 54 | ### Run the Database Migration Scripts 55 | 56 | To create the initial database schema, run the migration scripts using 57 | `sqlx`: 58 | 59 | ```ShellSession 60 | $ cargo install sqlx-cli 61 | ... 62 | $ sqlx migrate run 63 | ... 64 | ``` 65 | 66 | ### Building the Backend Server 67 | 68 | Lastly, you can now run the backend server: 69 | 70 | ```ShellSession 71 | $ cargo run 72 | ``` 73 | 74 | ## Running the Frontend Server 75 | 76 | To build and run the frontend assets and server, you will need a recent 77 | version of [Node.js]() and [Yarn](https://yarnpkg.com/en/) installed. Using homebrew on macOS, you can 78 | install it with homebrew: 79 | 80 | ```ShellSession 81 | $ brew install yarn 82 | ... 83 | ``` 84 | 85 | ### Install package dependencies 86 | 87 | Install the frontend package dependencies using Yarn: 88 | 89 | ```ShellSession 90 | $ cd foodi-frontend 91 | $ yarn install 92 | ... 93 | ``` 94 | 95 | ### Run the Frontend Server 96 | 97 | Use `parcel` to run the frontend development server: 98 | 99 | ```ShellSession 100 | $ parcel index.html 101 | ... 102 | ``` 103 | 104 | ## Build and run the Docker image 105 | 106 | Assuming you have Docker installed, run the build command from the top level of the repo: 107 | 108 | ```ShellSession 109 | $ docker build . -t foodi:latest 110 | ... 111 | ``` 112 | 113 | Once the build completes, run the container, and map port 80 from inside the container to outside the container on port 8080 (on your host machine): 114 | 115 | ```ShellSession 116 | $ docker run -p 8080:80 foodi:latest 117 | ... 118 | ``` 119 | 120 | 🎉 Now you can open `http://localhost:8080/` in your browser and test the app. 121 | -------------------------------------------------------------------------------- /entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | run_backend() { 6 | while : ; do 7 | foodi-backend 8 | sleep 1s 9 | done 10 | } 11 | 12 | run_backend & 13 | 14 | set -x 15 | 16 | exec /usr/bin/openresty -g "daemon off;" 17 | -------------------------------------------------------------------------------- /foodi-backend/.env: -------------------------------------------------------------------------------- 1 | DATABASE_URL=sqlite://database.sqlite 2 | -------------------------------------------------------------------------------- /foodi-backend/.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | /target/ 4 | 5 | # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries 6 | # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html 7 | # Cargo.lock 8 | 9 | # These are backup files generated by rustfmt 10 | **/*.rs.bk 11 | 12 | # Ignore the sqlite DB 13 | database.sqlite 14 | -------------------------------------------------------------------------------- /foodi-backend/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.22.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" 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 = "ahash" 22 | version = "0.8.11" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" 25 | dependencies = [ 26 | "cfg-if", 27 | "getrandom", 28 | "once_cell", 29 | "version_check", 30 | "zerocopy", 31 | ] 32 | 33 | [[package]] 34 | name = "aho-corasick" 35 | version = "1.1.3" 36 | source = "registry+https://github.com/rust-lang/crates.io-index" 37 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 38 | dependencies = [ 39 | "memchr", 40 | ] 41 | 42 | [[package]] 43 | name = "allocator-api2" 44 | version = "0.2.18" 45 | source = "registry+https://github.com/rust-lang/crates.io-index" 46 | checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" 47 | 48 | [[package]] 49 | name = "android-tzdata" 50 | version = "0.1.1" 51 | source = "registry+https://github.com/rust-lang/crates.io-index" 52 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 53 | 54 | [[package]] 55 | name = "android_system_properties" 56 | version = "0.1.5" 57 | source = "registry+https://github.com/rust-lang/crates.io-index" 58 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 59 | dependencies = [ 60 | "libc", 61 | ] 62 | 63 | [[package]] 64 | name = "async-stream" 65 | version = "0.3.5" 66 | source = "registry+https://github.com/rust-lang/crates.io-index" 67 | checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" 68 | dependencies = [ 69 | "async-stream-impl", 70 | "futures-core", 71 | "pin-project-lite", 72 | ] 73 | 74 | [[package]] 75 | name = "async-stream-impl" 76 | version = "0.3.5" 77 | source = "registry+https://github.com/rust-lang/crates.io-index" 78 | checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" 79 | dependencies = [ 80 | "proc-macro2", 81 | "quote", 82 | "syn 2.0.66", 83 | ] 84 | 85 | [[package]] 86 | name = "async-trait" 87 | version = "0.1.80" 88 | source = "registry+https://github.com/rust-lang/crates.io-index" 89 | checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" 90 | dependencies = [ 91 | "proc-macro2", 92 | "quote", 93 | "syn 2.0.66", 94 | ] 95 | 96 | [[package]] 97 | name = "atoi" 98 | version = "2.0.0" 99 | source = "registry+https://github.com/rust-lang/crates.io-index" 100 | checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" 101 | dependencies = [ 102 | "num-traits", 103 | ] 104 | 105 | [[package]] 106 | name = "atomic" 107 | version = "0.5.3" 108 | source = "registry+https://github.com/rust-lang/crates.io-index" 109 | checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" 110 | 111 | [[package]] 112 | name = "atomic" 113 | version = "0.6.0" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994" 116 | dependencies = [ 117 | "bytemuck", 118 | ] 119 | 120 | [[package]] 121 | name = "autocfg" 122 | version = "1.3.0" 123 | source = "registry+https://github.com/rust-lang/crates.io-index" 124 | checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" 125 | 126 | [[package]] 127 | name = "backtrace" 128 | version = "0.3.73" 129 | source = "registry+https://github.com/rust-lang/crates.io-index" 130 | checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" 131 | dependencies = [ 132 | "addr2line", 133 | "cc", 134 | "cfg-if", 135 | "libc", 136 | "miniz_oxide", 137 | "object", 138 | "rustc-demangle", 139 | ] 140 | 141 | [[package]] 142 | name = "base64" 143 | version = "0.21.7" 144 | source = "registry+https://github.com/rust-lang/crates.io-index" 145 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 146 | 147 | [[package]] 148 | name = "base64ct" 149 | version = "1.6.0" 150 | source = "registry+https://github.com/rust-lang/crates.io-index" 151 | checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" 152 | 153 | [[package]] 154 | name = "binascii" 155 | version = "0.1.4" 156 | source = "registry+https://github.com/rust-lang/crates.io-index" 157 | checksum = "383d29d513d8764dcdc42ea295d979eb99c3c9f00607b3692cf68a431f7dca72" 158 | 159 | [[package]] 160 | name = "bitflags" 161 | version = "1.3.2" 162 | source = "registry+https://github.com/rust-lang/crates.io-index" 163 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 164 | 165 | [[package]] 166 | name = "bitflags" 167 | version = "2.5.0" 168 | source = "registry+https://github.com/rust-lang/crates.io-index" 169 | checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" 170 | dependencies = [ 171 | "serde", 172 | ] 173 | 174 | [[package]] 175 | name = "block-buffer" 176 | version = "0.10.4" 177 | source = "registry+https://github.com/rust-lang/crates.io-index" 178 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 179 | dependencies = [ 180 | "generic-array", 181 | ] 182 | 183 | [[package]] 184 | name = "bumpalo" 185 | version = "3.16.0" 186 | source = "registry+https://github.com/rust-lang/crates.io-index" 187 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 188 | 189 | [[package]] 190 | name = "bytemuck" 191 | version = "1.16.1" 192 | source = "registry+https://github.com/rust-lang/crates.io-index" 193 | checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" 194 | 195 | [[package]] 196 | name = "byteorder" 197 | version = "1.5.0" 198 | source = "registry+https://github.com/rust-lang/crates.io-index" 199 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 200 | 201 | [[package]] 202 | name = "bytes" 203 | version = "1.6.0" 204 | source = "registry+https://github.com/rust-lang/crates.io-index" 205 | checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" 206 | 207 | [[package]] 208 | name = "cc" 209 | version = "1.0.99" 210 | source = "registry+https://github.com/rust-lang/crates.io-index" 211 | checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" 212 | 213 | [[package]] 214 | name = "cfg-if" 215 | version = "1.0.0" 216 | source = "registry+https://github.com/rust-lang/crates.io-index" 217 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 218 | 219 | [[package]] 220 | name = "chrono" 221 | version = "0.4.38" 222 | source = "registry+https://github.com/rust-lang/crates.io-index" 223 | checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" 224 | dependencies = [ 225 | "android-tzdata", 226 | "iana-time-zone", 227 | "js-sys", 228 | "num-traits", 229 | "serde", 230 | "wasm-bindgen", 231 | "windows-targets 0.52.5", 232 | ] 233 | 234 | [[package]] 235 | name = "const-oid" 236 | version = "0.9.6" 237 | source = "registry+https://github.com/rust-lang/crates.io-index" 238 | checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" 239 | 240 | [[package]] 241 | name = "cookie" 242 | version = "0.18.1" 243 | source = "registry+https://github.com/rust-lang/crates.io-index" 244 | checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" 245 | dependencies = [ 246 | "percent-encoding", 247 | "time", 248 | "version_check", 249 | ] 250 | 251 | [[package]] 252 | name = "core-foundation-sys" 253 | version = "0.8.6" 254 | source = "registry+https://github.com/rust-lang/crates.io-index" 255 | checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" 256 | 257 | [[package]] 258 | name = "cpufeatures" 259 | version = "0.2.12" 260 | source = "registry+https://github.com/rust-lang/crates.io-index" 261 | checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" 262 | dependencies = [ 263 | "libc", 264 | ] 265 | 266 | [[package]] 267 | name = "crc" 268 | version = "3.2.1" 269 | source = "registry+https://github.com/rust-lang/crates.io-index" 270 | checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" 271 | dependencies = [ 272 | "crc-catalog", 273 | ] 274 | 275 | [[package]] 276 | name = "crc-catalog" 277 | version = "2.4.0" 278 | source = "registry+https://github.com/rust-lang/crates.io-index" 279 | checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" 280 | 281 | [[package]] 282 | name = "crossbeam-queue" 283 | version = "0.3.11" 284 | source = "registry+https://github.com/rust-lang/crates.io-index" 285 | checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" 286 | dependencies = [ 287 | "crossbeam-utils", 288 | ] 289 | 290 | [[package]] 291 | name = "crossbeam-utils" 292 | version = "0.8.20" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 295 | 296 | [[package]] 297 | name = "crypto-common" 298 | version = "0.1.6" 299 | source = "registry+https://github.com/rust-lang/crates.io-index" 300 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 301 | dependencies = [ 302 | "generic-array", 303 | "typenum", 304 | ] 305 | 306 | [[package]] 307 | name = "der" 308 | version = "0.7.9" 309 | source = "registry+https://github.com/rust-lang/crates.io-index" 310 | checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" 311 | dependencies = [ 312 | "const-oid", 313 | "pem-rfc7468", 314 | "zeroize", 315 | ] 316 | 317 | [[package]] 318 | name = "deranged" 319 | version = "0.3.11" 320 | source = "registry+https://github.com/rust-lang/crates.io-index" 321 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 322 | dependencies = [ 323 | "powerfmt", 324 | ] 325 | 326 | [[package]] 327 | name = "devise" 328 | version = "0.4.1" 329 | source = "registry+https://github.com/rust-lang/crates.io-index" 330 | checksum = "d6eacefd3f541c66fc61433d65e54e0e46e0a029a819a7dbbc7a7b489e8a85f8" 331 | dependencies = [ 332 | "devise_codegen", 333 | "devise_core", 334 | ] 335 | 336 | [[package]] 337 | name = "devise_codegen" 338 | version = "0.4.1" 339 | source = "registry+https://github.com/rust-lang/crates.io-index" 340 | checksum = "9c8cf4b8dd484ede80fd5c547592c46c3745a617c8af278e2b72bea86b2dfed6" 341 | dependencies = [ 342 | "devise_core", 343 | "quote", 344 | ] 345 | 346 | [[package]] 347 | name = "devise_core" 348 | version = "0.4.1" 349 | source = "registry+https://github.com/rust-lang/crates.io-index" 350 | checksum = "35b50dba0afdca80b187392b24f2499a88c336d5a8493e4b4ccfb608708be56a" 351 | dependencies = [ 352 | "bitflags 2.5.0", 353 | "proc-macro2", 354 | "proc-macro2-diagnostics", 355 | "quote", 356 | "syn 2.0.66", 357 | ] 358 | 359 | [[package]] 360 | name = "digest" 361 | version = "0.10.7" 362 | source = "registry+https://github.com/rust-lang/crates.io-index" 363 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 364 | dependencies = [ 365 | "block-buffer", 366 | "const-oid", 367 | "crypto-common", 368 | "subtle", 369 | ] 370 | 371 | [[package]] 372 | name = "dotenvy" 373 | version = "0.15.7" 374 | source = "registry+https://github.com/rust-lang/crates.io-index" 375 | checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" 376 | 377 | [[package]] 378 | name = "either" 379 | version = "1.12.0" 380 | source = "registry+https://github.com/rust-lang/crates.io-index" 381 | checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" 382 | dependencies = [ 383 | "serde", 384 | ] 385 | 386 | [[package]] 387 | name = "encoding_rs" 388 | version = "0.8.34" 389 | source = "registry+https://github.com/rust-lang/crates.io-index" 390 | checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" 391 | dependencies = [ 392 | "cfg-if", 393 | ] 394 | 395 | [[package]] 396 | name = "equivalent" 397 | version = "1.0.1" 398 | source = "registry+https://github.com/rust-lang/crates.io-index" 399 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 400 | 401 | [[package]] 402 | name = "errno" 403 | version = "0.3.9" 404 | source = "registry+https://github.com/rust-lang/crates.io-index" 405 | checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" 406 | dependencies = [ 407 | "libc", 408 | "windows-sys 0.52.0", 409 | ] 410 | 411 | [[package]] 412 | name = "etcetera" 413 | version = "0.8.0" 414 | source = "registry+https://github.com/rust-lang/crates.io-index" 415 | checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" 416 | dependencies = [ 417 | "cfg-if", 418 | "home", 419 | "windows-sys 0.48.0", 420 | ] 421 | 422 | [[package]] 423 | name = "event-listener" 424 | version = "2.5.3" 425 | source = "registry+https://github.com/rust-lang/crates.io-index" 426 | checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" 427 | 428 | [[package]] 429 | name = "fastrand" 430 | version = "2.1.0" 431 | source = "registry+https://github.com/rust-lang/crates.io-index" 432 | checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" 433 | 434 | [[package]] 435 | name = "figment" 436 | version = "0.10.19" 437 | source = "registry+https://github.com/rust-lang/crates.io-index" 438 | checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3" 439 | dependencies = [ 440 | "atomic 0.6.0", 441 | "pear", 442 | "serde", 443 | "toml", 444 | "uncased", 445 | "version_check", 446 | ] 447 | 448 | [[package]] 449 | name = "flume" 450 | version = "0.11.0" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" 453 | dependencies = [ 454 | "futures-core", 455 | "futures-sink", 456 | "spin 0.9.8", 457 | ] 458 | 459 | [[package]] 460 | name = "fnv" 461 | version = "1.0.7" 462 | source = "registry+https://github.com/rust-lang/crates.io-index" 463 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 464 | 465 | [[package]] 466 | name = "foodi-backend" 467 | version = "0.2.0" 468 | dependencies = [ 469 | "chrono", 470 | "rocket", 471 | "rocket_cors", 472 | "rocket_db_pools", 473 | "sqlx", 474 | ] 475 | 476 | [[package]] 477 | name = "form_urlencoded" 478 | version = "1.2.1" 479 | source = "registry+https://github.com/rust-lang/crates.io-index" 480 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 481 | dependencies = [ 482 | "percent-encoding", 483 | ] 484 | 485 | [[package]] 486 | name = "futures" 487 | version = "0.3.30" 488 | source = "registry+https://github.com/rust-lang/crates.io-index" 489 | checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" 490 | dependencies = [ 491 | "futures-channel", 492 | "futures-core", 493 | "futures-io", 494 | "futures-sink", 495 | "futures-task", 496 | "futures-util", 497 | ] 498 | 499 | [[package]] 500 | name = "futures-channel" 501 | version = "0.3.30" 502 | source = "registry+https://github.com/rust-lang/crates.io-index" 503 | checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" 504 | dependencies = [ 505 | "futures-core", 506 | "futures-sink", 507 | ] 508 | 509 | [[package]] 510 | name = "futures-core" 511 | version = "0.3.30" 512 | source = "registry+https://github.com/rust-lang/crates.io-index" 513 | checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" 514 | 515 | [[package]] 516 | name = "futures-executor" 517 | version = "0.3.30" 518 | source = "registry+https://github.com/rust-lang/crates.io-index" 519 | checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" 520 | dependencies = [ 521 | "futures-core", 522 | "futures-task", 523 | "futures-util", 524 | ] 525 | 526 | [[package]] 527 | name = "futures-intrusive" 528 | version = "0.5.0" 529 | source = "registry+https://github.com/rust-lang/crates.io-index" 530 | checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" 531 | dependencies = [ 532 | "futures-core", 533 | "lock_api", 534 | "parking_lot", 535 | ] 536 | 537 | [[package]] 538 | name = "futures-io" 539 | version = "0.3.30" 540 | source = "registry+https://github.com/rust-lang/crates.io-index" 541 | checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" 542 | 543 | [[package]] 544 | name = "futures-sink" 545 | version = "0.3.30" 546 | source = "registry+https://github.com/rust-lang/crates.io-index" 547 | checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" 548 | 549 | [[package]] 550 | name = "futures-task" 551 | version = "0.3.30" 552 | source = "registry+https://github.com/rust-lang/crates.io-index" 553 | checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" 554 | 555 | [[package]] 556 | name = "futures-util" 557 | version = "0.3.30" 558 | source = "registry+https://github.com/rust-lang/crates.io-index" 559 | checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" 560 | dependencies = [ 561 | "futures-channel", 562 | "futures-core", 563 | "futures-io", 564 | "futures-sink", 565 | "futures-task", 566 | "memchr", 567 | "pin-project-lite", 568 | "pin-utils", 569 | "slab", 570 | ] 571 | 572 | [[package]] 573 | name = "generator" 574 | version = "0.7.5" 575 | source = "registry+https://github.com/rust-lang/crates.io-index" 576 | checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" 577 | dependencies = [ 578 | "cc", 579 | "libc", 580 | "log", 581 | "rustversion", 582 | "windows", 583 | ] 584 | 585 | [[package]] 586 | name = "generic-array" 587 | version = "0.14.7" 588 | source = "registry+https://github.com/rust-lang/crates.io-index" 589 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 590 | dependencies = [ 591 | "typenum", 592 | "version_check", 593 | ] 594 | 595 | [[package]] 596 | name = "getrandom" 597 | version = "0.2.15" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 600 | dependencies = [ 601 | "cfg-if", 602 | "libc", 603 | "wasi", 604 | ] 605 | 606 | [[package]] 607 | name = "gimli" 608 | version = "0.29.0" 609 | source = "registry+https://github.com/rust-lang/crates.io-index" 610 | checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" 611 | 612 | [[package]] 613 | name = "glob" 614 | version = "0.3.1" 615 | source = "registry+https://github.com/rust-lang/crates.io-index" 616 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" 617 | 618 | [[package]] 619 | name = "h2" 620 | version = "0.3.26" 621 | source = "registry+https://github.com/rust-lang/crates.io-index" 622 | checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" 623 | dependencies = [ 624 | "bytes", 625 | "fnv", 626 | "futures-core", 627 | "futures-sink", 628 | "futures-util", 629 | "http 0.2.12", 630 | "indexmap", 631 | "slab", 632 | "tokio", 633 | "tokio-util", 634 | "tracing", 635 | ] 636 | 637 | [[package]] 638 | name = "hashbrown" 639 | version = "0.14.5" 640 | source = "registry+https://github.com/rust-lang/crates.io-index" 641 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 642 | dependencies = [ 643 | "ahash", 644 | "allocator-api2", 645 | ] 646 | 647 | [[package]] 648 | name = "hashlink" 649 | version = "0.8.4" 650 | source = "registry+https://github.com/rust-lang/crates.io-index" 651 | checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" 652 | dependencies = [ 653 | "hashbrown", 654 | ] 655 | 656 | [[package]] 657 | name = "heck" 658 | version = "0.4.1" 659 | source = "registry+https://github.com/rust-lang/crates.io-index" 660 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 661 | dependencies = [ 662 | "unicode-segmentation", 663 | ] 664 | 665 | [[package]] 666 | name = "hermit-abi" 667 | version = "0.3.9" 668 | source = "registry+https://github.com/rust-lang/crates.io-index" 669 | checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 670 | 671 | [[package]] 672 | name = "hex" 673 | version = "0.4.3" 674 | source = "registry+https://github.com/rust-lang/crates.io-index" 675 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 676 | 677 | [[package]] 678 | name = "hkdf" 679 | version = "0.12.4" 680 | source = "registry+https://github.com/rust-lang/crates.io-index" 681 | checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" 682 | dependencies = [ 683 | "hmac", 684 | ] 685 | 686 | [[package]] 687 | name = "hmac" 688 | version = "0.12.1" 689 | source = "registry+https://github.com/rust-lang/crates.io-index" 690 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 691 | dependencies = [ 692 | "digest", 693 | ] 694 | 695 | [[package]] 696 | name = "home" 697 | version = "0.5.9" 698 | source = "registry+https://github.com/rust-lang/crates.io-index" 699 | checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" 700 | dependencies = [ 701 | "windows-sys 0.52.0", 702 | ] 703 | 704 | [[package]] 705 | name = "http" 706 | version = "0.2.12" 707 | source = "registry+https://github.com/rust-lang/crates.io-index" 708 | checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" 709 | dependencies = [ 710 | "bytes", 711 | "fnv", 712 | "itoa", 713 | ] 714 | 715 | [[package]] 716 | name = "http" 717 | version = "1.1.0" 718 | source = "registry+https://github.com/rust-lang/crates.io-index" 719 | checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" 720 | dependencies = [ 721 | "bytes", 722 | "fnv", 723 | "itoa", 724 | ] 725 | 726 | [[package]] 727 | name = "http-body" 728 | version = "0.4.6" 729 | source = "registry+https://github.com/rust-lang/crates.io-index" 730 | checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" 731 | dependencies = [ 732 | "bytes", 733 | "http 0.2.12", 734 | "pin-project-lite", 735 | ] 736 | 737 | [[package]] 738 | name = "httparse" 739 | version = "1.9.4" 740 | source = "registry+https://github.com/rust-lang/crates.io-index" 741 | checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" 742 | 743 | [[package]] 744 | name = "httpdate" 745 | version = "1.0.3" 746 | source = "registry+https://github.com/rust-lang/crates.io-index" 747 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 748 | 749 | [[package]] 750 | name = "hyper" 751 | version = "0.14.29" 752 | source = "registry+https://github.com/rust-lang/crates.io-index" 753 | checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" 754 | dependencies = [ 755 | "bytes", 756 | "futures-channel", 757 | "futures-core", 758 | "futures-util", 759 | "h2", 760 | "http 0.2.12", 761 | "http-body", 762 | "httparse", 763 | "httpdate", 764 | "itoa", 765 | "pin-project-lite", 766 | "socket2", 767 | "tokio", 768 | "tower-service", 769 | "tracing", 770 | "want", 771 | ] 772 | 773 | [[package]] 774 | name = "iana-time-zone" 775 | version = "0.1.60" 776 | source = "registry+https://github.com/rust-lang/crates.io-index" 777 | checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" 778 | dependencies = [ 779 | "android_system_properties", 780 | "core-foundation-sys", 781 | "iana-time-zone-haiku", 782 | "js-sys", 783 | "wasm-bindgen", 784 | "windows-core", 785 | ] 786 | 787 | [[package]] 788 | name = "iana-time-zone-haiku" 789 | version = "0.1.2" 790 | source = "registry+https://github.com/rust-lang/crates.io-index" 791 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 792 | dependencies = [ 793 | "cc", 794 | ] 795 | 796 | [[package]] 797 | name = "idna" 798 | version = "0.5.0" 799 | source = "registry+https://github.com/rust-lang/crates.io-index" 800 | checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 801 | dependencies = [ 802 | "unicode-bidi", 803 | "unicode-normalization", 804 | ] 805 | 806 | [[package]] 807 | name = "indexmap" 808 | version = "2.2.6" 809 | source = "registry+https://github.com/rust-lang/crates.io-index" 810 | checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" 811 | dependencies = [ 812 | "equivalent", 813 | "hashbrown", 814 | "serde", 815 | ] 816 | 817 | [[package]] 818 | name = "inlinable_string" 819 | version = "0.1.15" 820 | source = "registry+https://github.com/rust-lang/crates.io-index" 821 | checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb" 822 | 823 | [[package]] 824 | name = "is-terminal" 825 | version = "0.4.12" 826 | source = "registry+https://github.com/rust-lang/crates.io-index" 827 | checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" 828 | dependencies = [ 829 | "hermit-abi", 830 | "libc", 831 | "windows-sys 0.52.0", 832 | ] 833 | 834 | [[package]] 835 | name = "itoa" 836 | version = "1.0.11" 837 | source = "registry+https://github.com/rust-lang/crates.io-index" 838 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 839 | 840 | [[package]] 841 | name = "js-sys" 842 | version = "0.3.69" 843 | source = "registry+https://github.com/rust-lang/crates.io-index" 844 | checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" 845 | dependencies = [ 846 | "wasm-bindgen", 847 | ] 848 | 849 | [[package]] 850 | name = "lazy_static" 851 | version = "1.4.0" 852 | source = "registry+https://github.com/rust-lang/crates.io-index" 853 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 854 | dependencies = [ 855 | "spin 0.5.2", 856 | ] 857 | 858 | [[package]] 859 | name = "libc" 860 | version = "0.2.155" 861 | source = "registry+https://github.com/rust-lang/crates.io-index" 862 | checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" 863 | 864 | [[package]] 865 | name = "libm" 866 | version = "0.2.8" 867 | source = "registry+https://github.com/rust-lang/crates.io-index" 868 | checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" 869 | 870 | [[package]] 871 | name = "libsqlite3-sys" 872 | version = "0.27.0" 873 | source = "registry+https://github.com/rust-lang/crates.io-index" 874 | checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" 875 | dependencies = [ 876 | "cc", 877 | "pkg-config", 878 | "vcpkg", 879 | ] 880 | 881 | [[package]] 882 | name = "linux-raw-sys" 883 | version = "0.4.14" 884 | source = "registry+https://github.com/rust-lang/crates.io-index" 885 | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 886 | 887 | [[package]] 888 | name = "lock_api" 889 | version = "0.4.12" 890 | source = "registry+https://github.com/rust-lang/crates.io-index" 891 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 892 | dependencies = [ 893 | "autocfg", 894 | "scopeguard", 895 | ] 896 | 897 | [[package]] 898 | name = "log" 899 | version = "0.4.21" 900 | source = "registry+https://github.com/rust-lang/crates.io-index" 901 | checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" 902 | 903 | [[package]] 904 | name = "loom" 905 | version = "0.5.6" 906 | source = "registry+https://github.com/rust-lang/crates.io-index" 907 | checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" 908 | dependencies = [ 909 | "cfg-if", 910 | "generator", 911 | "scoped-tls", 912 | "serde", 913 | "serde_json", 914 | "tracing", 915 | "tracing-subscriber", 916 | ] 917 | 918 | [[package]] 919 | name = "matchers" 920 | version = "0.1.0" 921 | source = "registry+https://github.com/rust-lang/crates.io-index" 922 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 923 | dependencies = [ 924 | "regex-automata 0.1.10", 925 | ] 926 | 927 | [[package]] 928 | name = "md-5" 929 | version = "0.10.6" 930 | source = "registry+https://github.com/rust-lang/crates.io-index" 931 | checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" 932 | dependencies = [ 933 | "cfg-if", 934 | "digest", 935 | ] 936 | 937 | [[package]] 938 | name = "memchr" 939 | version = "2.7.4" 940 | source = "registry+https://github.com/rust-lang/crates.io-index" 941 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 942 | 943 | [[package]] 944 | name = "mime" 945 | version = "0.3.17" 946 | source = "registry+https://github.com/rust-lang/crates.io-index" 947 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 948 | 949 | [[package]] 950 | name = "minimal-lexical" 951 | version = "0.2.1" 952 | source = "registry+https://github.com/rust-lang/crates.io-index" 953 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 954 | 955 | [[package]] 956 | name = "miniz_oxide" 957 | version = "0.7.4" 958 | source = "registry+https://github.com/rust-lang/crates.io-index" 959 | checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" 960 | dependencies = [ 961 | "adler", 962 | ] 963 | 964 | [[package]] 965 | name = "mio" 966 | version = "0.8.11" 967 | source = "registry+https://github.com/rust-lang/crates.io-index" 968 | checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" 969 | dependencies = [ 970 | "libc", 971 | "wasi", 972 | "windows-sys 0.48.0", 973 | ] 974 | 975 | [[package]] 976 | name = "multer" 977 | version = "3.1.0" 978 | source = "registry+https://github.com/rust-lang/crates.io-index" 979 | checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" 980 | dependencies = [ 981 | "bytes", 982 | "encoding_rs", 983 | "futures-util", 984 | "http 1.1.0", 985 | "httparse", 986 | "memchr", 987 | "mime", 988 | "spin 0.9.8", 989 | "tokio", 990 | "tokio-util", 991 | "version_check", 992 | ] 993 | 994 | [[package]] 995 | name = "nom" 996 | version = "7.1.3" 997 | source = "registry+https://github.com/rust-lang/crates.io-index" 998 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 999 | dependencies = [ 1000 | "memchr", 1001 | "minimal-lexical", 1002 | ] 1003 | 1004 | [[package]] 1005 | name = "nu-ansi-term" 1006 | version = "0.46.0" 1007 | source = "registry+https://github.com/rust-lang/crates.io-index" 1008 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" 1009 | dependencies = [ 1010 | "overload", 1011 | "winapi", 1012 | ] 1013 | 1014 | [[package]] 1015 | name = "num-bigint-dig" 1016 | version = "0.8.4" 1017 | source = "registry+https://github.com/rust-lang/crates.io-index" 1018 | checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" 1019 | dependencies = [ 1020 | "byteorder", 1021 | "lazy_static", 1022 | "libm", 1023 | "num-integer", 1024 | "num-iter", 1025 | "num-traits", 1026 | "rand", 1027 | "smallvec", 1028 | "zeroize", 1029 | ] 1030 | 1031 | [[package]] 1032 | name = "num-conv" 1033 | version = "0.1.0" 1034 | source = "registry+https://github.com/rust-lang/crates.io-index" 1035 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 1036 | 1037 | [[package]] 1038 | name = "num-integer" 1039 | version = "0.1.46" 1040 | source = "registry+https://github.com/rust-lang/crates.io-index" 1041 | checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 1042 | dependencies = [ 1043 | "num-traits", 1044 | ] 1045 | 1046 | [[package]] 1047 | name = "num-iter" 1048 | version = "0.1.45" 1049 | source = "registry+https://github.com/rust-lang/crates.io-index" 1050 | checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" 1051 | dependencies = [ 1052 | "autocfg", 1053 | "num-integer", 1054 | "num-traits", 1055 | ] 1056 | 1057 | [[package]] 1058 | name = "num-traits" 1059 | version = "0.2.19" 1060 | source = "registry+https://github.com/rust-lang/crates.io-index" 1061 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1062 | dependencies = [ 1063 | "autocfg", 1064 | "libm", 1065 | ] 1066 | 1067 | [[package]] 1068 | name = "num_cpus" 1069 | version = "1.16.0" 1070 | source = "registry+https://github.com/rust-lang/crates.io-index" 1071 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" 1072 | dependencies = [ 1073 | "hermit-abi", 1074 | "libc", 1075 | ] 1076 | 1077 | [[package]] 1078 | name = "object" 1079 | version = "0.36.0" 1080 | source = "registry+https://github.com/rust-lang/crates.io-index" 1081 | checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" 1082 | dependencies = [ 1083 | "memchr", 1084 | ] 1085 | 1086 | [[package]] 1087 | name = "once_cell" 1088 | version = "1.19.0" 1089 | source = "registry+https://github.com/rust-lang/crates.io-index" 1090 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 1091 | 1092 | [[package]] 1093 | name = "overload" 1094 | version = "0.1.1" 1095 | source = "registry+https://github.com/rust-lang/crates.io-index" 1096 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" 1097 | 1098 | [[package]] 1099 | name = "parking_lot" 1100 | version = "0.12.3" 1101 | source = "registry+https://github.com/rust-lang/crates.io-index" 1102 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 1103 | dependencies = [ 1104 | "lock_api", 1105 | "parking_lot_core", 1106 | ] 1107 | 1108 | [[package]] 1109 | name = "parking_lot_core" 1110 | version = "0.9.10" 1111 | source = "registry+https://github.com/rust-lang/crates.io-index" 1112 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 1113 | dependencies = [ 1114 | "cfg-if", 1115 | "libc", 1116 | "redox_syscall 0.5.2", 1117 | "smallvec", 1118 | "windows-targets 0.52.5", 1119 | ] 1120 | 1121 | [[package]] 1122 | name = "paste" 1123 | version = "1.0.15" 1124 | source = "registry+https://github.com/rust-lang/crates.io-index" 1125 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 1126 | 1127 | [[package]] 1128 | name = "pear" 1129 | version = "0.2.9" 1130 | source = "registry+https://github.com/rust-lang/crates.io-index" 1131 | checksum = "bdeeaa00ce488657faba8ebf44ab9361f9365a97bd39ffb8a60663f57ff4b467" 1132 | dependencies = [ 1133 | "inlinable_string", 1134 | "pear_codegen", 1135 | "yansi", 1136 | ] 1137 | 1138 | [[package]] 1139 | name = "pear_codegen" 1140 | version = "0.2.9" 1141 | source = "registry+https://github.com/rust-lang/crates.io-index" 1142 | checksum = "4bab5b985dc082b345f812b7df84e1bef27e7207b39e448439ba8bd69c93f147" 1143 | dependencies = [ 1144 | "proc-macro2", 1145 | "proc-macro2-diagnostics", 1146 | "quote", 1147 | "syn 2.0.66", 1148 | ] 1149 | 1150 | [[package]] 1151 | name = "pem-rfc7468" 1152 | version = "0.7.0" 1153 | source = "registry+https://github.com/rust-lang/crates.io-index" 1154 | checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" 1155 | dependencies = [ 1156 | "base64ct", 1157 | ] 1158 | 1159 | [[package]] 1160 | name = "percent-encoding" 1161 | version = "2.3.1" 1162 | source = "registry+https://github.com/rust-lang/crates.io-index" 1163 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1164 | 1165 | [[package]] 1166 | name = "pin-project-lite" 1167 | version = "0.2.14" 1168 | source = "registry+https://github.com/rust-lang/crates.io-index" 1169 | checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" 1170 | 1171 | [[package]] 1172 | name = "pin-utils" 1173 | version = "0.1.0" 1174 | source = "registry+https://github.com/rust-lang/crates.io-index" 1175 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1176 | 1177 | [[package]] 1178 | name = "pkcs1" 1179 | version = "0.7.5" 1180 | source = "registry+https://github.com/rust-lang/crates.io-index" 1181 | checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" 1182 | dependencies = [ 1183 | "der", 1184 | "pkcs8", 1185 | "spki", 1186 | ] 1187 | 1188 | [[package]] 1189 | name = "pkcs8" 1190 | version = "0.10.2" 1191 | source = "registry+https://github.com/rust-lang/crates.io-index" 1192 | checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" 1193 | dependencies = [ 1194 | "der", 1195 | "spki", 1196 | ] 1197 | 1198 | [[package]] 1199 | name = "pkg-config" 1200 | version = "0.3.30" 1201 | source = "registry+https://github.com/rust-lang/crates.io-index" 1202 | checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" 1203 | 1204 | [[package]] 1205 | name = "powerfmt" 1206 | version = "0.2.0" 1207 | source = "registry+https://github.com/rust-lang/crates.io-index" 1208 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 1209 | 1210 | [[package]] 1211 | name = "ppv-lite86" 1212 | version = "0.2.17" 1213 | source = "registry+https://github.com/rust-lang/crates.io-index" 1214 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 1215 | 1216 | [[package]] 1217 | name = "proc-macro2" 1218 | version = "1.0.85" 1219 | source = "registry+https://github.com/rust-lang/crates.io-index" 1220 | checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" 1221 | dependencies = [ 1222 | "unicode-ident", 1223 | ] 1224 | 1225 | [[package]] 1226 | name = "proc-macro2-diagnostics" 1227 | version = "0.10.1" 1228 | source = "registry+https://github.com/rust-lang/crates.io-index" 1229 | checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" 1230 | dependencies = [ 1231 | "proc-macro2", 1232 | "quote", 1233 | "syn 2.0.66", 1234 | "version_check", 1235 | "yansi", 1236 | ] 1237 | 1238 | [[package]] 1239 | name = "quote" 1240 | version = "1.0.36" 1241 | source = "registry+https://github.com/rust-lang/crates.io-index" 1242 | checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" 1243 | dependencies = [ 1244 | "proc-macro2", 1245 | ] 1246 | 1247 | [[package]] 1248 | name = "rand" 1249 | version = "0.8.5" 1250 | source = "registry+https://github.com/rust-lang/crates.io-index" 1251 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1252 | dependencies = [ 1253 | "libc", 1254 | "rand_chacha", 1255 | "rand_core", 1256 | ] 1257 | 1258 | [[package]] 1259 | name = "rand_chacha" 1260 | version = "0.3.1" 1261 | source = "registry+https://github.com/rust-lang/crates.io-index" 1262 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1263 | dependencies = [ 1264 | "ppv-lite86", 1265 | "rand_core", 1266 | ] 1267 | 1268 | [[package]] 1269 | name = "rand_core" 1270 | version = "0.6.4" 1271 | source = "registry+https://github.com/rust-lang/crates.io-index" 1272 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1273 | dependencies = [ 1274 | "getrandom", 1275 | ] 1276 | 1277 | [[package]] 1278 | name = "redox_syscall" 1279 | version = "0.4.1" 1280 | source = "registry+https://github.com/rust-lang/crates.io-index" 1281 | checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" 1282 | dependencies = [ 1283 | "bitflags 1.3.2", 1284 | ] 1285 | 1286 | [[package]] 1287 | name = "redox_syscall" 1288 | version = "0.5.2" 1289 | source = "registry+https://github.com/rust-lang/crates.io-index" 1290 | checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" 1291 | dependencies = [ 1292 | "bitflags 2.5.0", 1293 | ] 1294 | 1295 | [[package]] 1296 | name = "ref-cast" 1297 | version = "1.0.23" 1298 | source = "registry+https://github.com/rust-lang/crates.io-index" 1299 | checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" 1300 | dependencies = [ 1301 | "ref-cast-impl", 1302 | ] 1303 | 1304 | [[package]] 1305 | name = "ref-cast-impl" 1306 | version = "1.0.23" 1307 | source = "registry+https://github.com/rust-lang/crates.io-index" 1308 | checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" 1309 | dependencies = [ 1310 | "proc-macro2", 1311 | "quote", 1312 | "syn 2.0.66", 1313 | ] 1314 | 1315 | [[package]] 1316 | name = "regex" 1317 | version = "1.10.5" 1318 | source = "registry+https://github.com/rust-lang/crates.io-index" 1319 | checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" 1320 | dependencies = [ 1321 | "aho-corasick", 1322 | "memchr", 1323 | "regex-automata 0.4.7", 1324 | "regex-syntax 0.8.4", 1325 | ] 1326 | 1327 | [[package]] 1328 | name = "regex-automata" 1329 | version = "0.1.10" 1330 | source = "registry+https://github.com/rust-lang/crates.io-index" 1331 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 1332 | dependencies = [ 1333 | "regex-syntax 0.6.29", 1334 | ] 1335 | 1336 | [[package]] 1337 | name = "regex-automata" 1338 | version = "0.4.7" 1339 | source = "registry+https://github.com/rust-lang/crates.io-index" 1340 | checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" 1341 | dependencies = [ 1342 | "aho-corasick", 1343 | "memchr", 1344 | "regex-syntax 0.8.4", 1345 | ] 1346 | 1347 | [[package]] 1348 | name = "regex-syntax" 1349 | version = "0.6.29" 1350 | source = "registry+https://github.com/rust-lang/crates.io-index" 1351 | checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" 1352 | 1353 | [[package]] 1354 | name = "regex-syntax" 1355 | version = "0.8.4" 1356 | source = "registry+https://github.com/rust-lang/crates.io-index" 1357 | checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" 1358 | 1359 | [[package]] 1360 | name = "ring" 1361 | version = "0.17.8" 1362 | source = "registry+https://github.com/rust-lang/crates.io-index" 1363 | checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" 1364 | dependencies = [ 1365 | "cc", 1366 | "cfg-if", 1367 | "getrandom", 1368 | "libc", 1369 | "spin 0.9.8", 1370 | "untrusted", 1371 | "windows-sys 0.52.0", 1372 | ] 1373 | 1374 | [[package]] 1375 | name = "rocket" 1376 | version = "0.5.1" 1377 | source = "registry+https://github.com/rust-lang/crates.io-index" 1378 | checksum = "a516907296a31df7dc04310e7043b61d71954d703b603cc6867a026d7e72d73f" 1379 | dependencies = [ 1380 | "async-stream", 1381 | "async-trait", 1382 | "atomic 0.5.3", 1383 | "binascii", 1384 | "bytes", 1385 | "either", 1386 | "figment", 1387 | "futures", 1388 | "indexmap", 1389 | "log", 1390 | "memchr", 1391 | "multer", 1392 | "num_cpus", 1393 | "parking_lot", 1394 | "pin-project-lite", 1395 | "rand", 1396 | "ref-cast", 1397 | "rocket_codegen", 1398 | "rocket_http", 1399 | "serde", 1400 | "serde_json", 1401 | "state", 1402 | "tempfile", 1403 | "time", 1404 | "tokio", 1405 | "tokio-stream", 1406 | "tokio-util", 1407 | "ubyte", 1408 | "version_check", 1409 | "yansi", 1410 | ] 1411 | 1412 | [[package]] 1413 | name = "rocket_codegen" 1414 | version = "0.5.1" 1415 | source = "registry+https://github.com/rust-lang/crates.io-index" 1416 | checksum = "575d32d7ec1a9770108c879fc7c47815a80073f96ca07ff9525a94fcede1dd46" 1417 | dependencies = [ 1418 | "devise", 1419 | "glob", 1420 | "indexmap", 1421 | "proc-macro2", 1422 | "quote", 1423 | "rocket_http", 1424 | "syn 2.0.66", 1425 | "unicode-xid", 1426 | "version_check", 1427 | ] 1428 | 1429 | [[package]] 1430 | name = "rocket_cors" 1431 | version = "0.6.0" 1432 | source = "registry+https://github.com/rust-lang/crates.io-index" 1433 | checksum = "cfac3a1df83f8d4fc96aa41dba3b86c786417b7fc0f52ec76295df2ba781aa69" 1434 | dependencies = [ 1435 | "http 0.2.12", 1436 | "log", 1437 | "regex", 1438 | "rocket", 1439 | "serde", 1440 | "serde_derive", 1441 | "unicase", 1442 | "unicase_serde", 1443 | "url", 1444 | ] 1445 | 1446 | [[package]] 1447 | name = "rocket_db_pools" 1448 | version = "0.2.0" 1449 | source = "registry+https://github.com/rust-lang/crates.io-index" 1450 | checksum = "c6578b2740ceee3e78bff63fe9299d964b7e68318446cdcb9af3b9cab46e1e9d" 1451 | dependencies = [ 1452 | "rocket", 1453 | "rocket_db_pools_codegen", 1454 | "sqlx", 1455 | "version_check", 1456 | ] 1457 | 1458 | [[package]] 1459 | name = "rocket_db_pools_codegen" 1460 | version = "0.2.0" 1461 | source = "registry+https://github.com/rust-lang/crates.io-index" 1462 | checksum = "842e859f2e87a23efc0f81e25756c0fb43f18726e62daf99da7ea19fbc56cebd" 1463 | dependencies = [ 1464 | "devise", 1465 | "quote", 1466 | ] 1467 | 1468 | [[package]] 1469 | name = "rocket_http" 1470 | version = "0.5.1" 1471 | source = "registry+https://github.com/rust-lang/crates.io-index" 1472 | checksum = "e274915a20ee3065f611c044bd63c40757396b6dbc057d6046aec27f14f882b9" 1473 | dependencies = [ 1474 | "cookie", 1475 | "either", 1476 | "futures", 1477 | "http 0.2.12", 1478 | "hyper", 1479 | "indexmap", 1480 | "log", 1481 | "memchr", 1482 | "pear", 1483 | "percent-encoding", 1484 | "pin-project-lite", 1485 | "ref-cast", 1486 | "serde", 1487 | "smallvec", 1488 | "stable-pattern", 1489 | "state", 1490 | "time", 1491 | "tokio", 1492 | "uncased", 1493 | ] 1494 | 1495 | [[package]] 1496 | name = "rsa" 1497 | version = "0.9.6" 1498 | source = "registry+https://github.com/rust-lang/crates.io-index" 1499 | checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" 1500 | dependencies = [ 1501 | "const-oid", 1502 | "digest", 1503 | "num-bigint-dig", 1504 | "num-integer", 1505 | "num-traits", 1506 | "pkcs1", 1507 | "pkcs8", 1508 | "rand_core", 1509 | "signature", 1510 | "spki", 1511 | "subtle", 1512 | "zeroize", 1513 | ] 1514 | 1515 | [[package]] 1516 | name = "rustc-demangle" 1517 | version = "0.1.24" 1518 | source = "registry+https://github.com/rust-lang/crates.io-index" 1519 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1520 | 1521 | [[package]] 1522 | name = "rustix" 1523 | version = "0.38.34" 1524 | source = "registry+https://github.com/rust-lang/crates.io-index" 1525 | checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" 1526 | dependencies = [ 1527 | "bitflags 2.5.0", 1528 | "errno", 1529 | "libc", 1530 | "linux-raw-sys", 1531 | "windows-sys 0.52.0", 1532 | ] 1533 | 1534 | [[package]] 1535 | name = "rustls" 1536 | version = "0.21.12" 1537 | source = "registry+https://github.com/rust-lang/crates.io-index" 1538 | checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" 1539 | dependencies = [ 1540 | "ring", 1541 | "rustls-webpki", 1542 | "sct", 1543 | ] 1544 | 1545 | [[package]] 1546 | name = "rustls-pemfile" 1547 | version = "1.0.4" 1548 | source = "registry+https://github.com/rust-lang/crates.io-index" 1549 | checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" 1550 | dependencies = [ 1551 | "base64", 1552 | ] 1553 | 1554 | [[package]] 1555 | name = "rustls-webpki" 1556 | version = "0.101.7" 1557 | source = "registry+https://github.com/rust-lang/crates.io-index" 1558 | checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" 1559 | dependencies = [ 1560 | "ring", 1561 | "untrusted", 1562 | ] 1563 | 1564 | [[package]] 1565 | name = "rustversion" 1566 | version = "1.0.17" 1567 | source = "registry+https://github.com/rust-lang/crates.io-index" 1568 | checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" 1569 | 1570 | [[package]] 1571 | name = "ryu" 1572 | version = "1.0.18" 1573 | source = "registry+https://github.com/rust-lang/crates.io-index" 1574 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 1575 | 1576 | [[package]] 1577 | name = "scoped-tls" 1578 | version = "1.0.1" 1579 | source = "registry+https://github.com/rust-lang/crates.io-index" 1580 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 1581 | 1582 | [[package]] 1583 | name = "scopeguard" 1584 | version = "1.2.0" 1585 | source = "registry+https://github.com/rust-lang/crates.io-index" 1586 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1587 | 1588 | [[package]] 1589 | name = "sct" 1590 | version = "0.7.1" 1591 | source = "registry+https://github.com/rust-lang/crates.io-index" 1592 | checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" 1593 | dependencies = [ 1594 | "ring", 1595 | "untrusted", 1596 | ] 1597 | 1598 | [[package]] 1599 | name = "serde" 1600 | version = "1.0.203" 1601 | source = "registry+https://github.com/rust-lang/crates.io-index" 1602 | checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" 1603 | dependencies = [ 1604 | "serde_derive", 1605 | ] 1606 | 1607 | [[package]] 1608 | name = "serde_derive" 1609 | version = "1.0.203" 1610 | source = "registry+https://github.com/rust-lang/crates.io-index" 1611 | checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" 1612 | dependencies = [ 1613 | "proc-macro2", 1614 | "quote", 1615 | "syn 2.0.66", 1616 | ] 1617 | 1618 | [[package]] 1619 | name = "serde_json" 1620 | version = "1.0.117" 1621 | source = "registry+https://github.com/rust-lang/crates.io-index" 1622 | checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" 1623 | dependencies = [ 1624 | "itoa", 1625 | "ryu", 1626 | "serde", 1627 | ] 1628 | 1629 | [[package]] 1630 | name = "serde_spanned" 1631 | version = "0.6.6" 1632 | source = "registry+https://github.com/rust-lang/crates.io-index" 1633 | checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" 1634 | dependencies = [ 1635 | "serde", 1636 | ] 1637 | 1638 | [[package]] 1639 | name = "sha1" 1640 | version = "0.10.6" 1641 | source = "registry+https://github.com/rust-lang/crates.io-index" 1642 | checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 1643 | dependencies = [ 1644 | "cfg-if", 1645 | "cpufeatures", 1646 | "digest", 1647 | ] 1648 | 1649 | [[package]] 1650 | name = "sha2" 1651 | version = "0.10.8" 1652 | source = "registry+https://github.com/rust-lang/crates.io-index" 1653 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 1654 | dependencies = [ 1655 | "cfg-if", 1656 | "cpufeatures", 1657 | "digest", 1658 | ] 1659 | 1660 | [[package]] 1661 | name = "sharded-slab" 1662 | version = "0.1.7" 1663 | source = "registry+https://github.com/rust-lang/crates.io-index" 1664 | checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 1665 | dependencies = [ 1666 | "lazy_static", 1667 | ] 1668 | 1669 | [[package]] 1670 | name = "signal-hook-registry" 1671 | version = "1.4.2" 1672 | source = "registry+https://github.com/rust-lang/crates.io-index" 1673 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 1674 | dependencies = [ 1675 | "libc", 1676 | ] 1677 | 1678 | [[package]] 1679 | name = "signature" 1680 | version = "2.2.0" 1681 | source = "registry+https://github.com/rust-lang/crates.io-index" 1682 | checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" 1683 | dependencies = [ 1684 | "digest", 1685 | "rand_core", 1686 | ] 1687 | 1688 | [[package]] 1689 | name = "slab" 1690 | version = "0.4.9" 1691 | source = "registry+https://github.com/rust-lang/crates.io-index" 1692 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1693 | dependencies = [ 1694 | "autocfg", 1695 | ] 1696 | 1697 | [[package]] 1698 | name = "smallvec" 1699 | version = "1.13.2" 1700 | source = "registry+https://github.com/rust-lang/crates.io-index" 1701 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 1702 | 1703 | [[package]] 1704 | name = "socket2" 1705 | version = "0.5.7" 1706 | source = "registry+https://github.com/rust-lang/crates.io-index" 1707 | checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" 1708 | dependencies = [ 1709 | "libc", 1710 | "windows-sys 0.52.0", 1711 | ] 1712 | 1713 | [[package]] 1714 | name = "spin" 1715 | version = "0.5.2" 1716 | source = "registry+https://github.com/rust-lang/crates.io-index" 1717 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" 1718 | 1719 | [[package]] 1720 | name = "spin" 1721 | version = "0.9.8" 1722 | source = "registry+https://github.com/rust-lang/crates.io-index" 1723 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 1724 | dependencies = [ 1725 | "lock_api", 1726 | ] 1727 | 1728 | [[package]] 1729 | name = "spki" 1730 | version = "0.7.3" 1731 | source = "registry+https://github.com/rust-lang/crates.io-index" 1732 | checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" 1733 | dependencies = [ 1734 | "base64ct", 1735 | "der", 1736 | ] 1737 | 1738 | [[package]] 1739 | name = "sqlformat" 1740 | version = "0.2.4" 1741 | source = "registry+https://github.com/rust-lang/crates.io-index" 1742 | checksum = "f895e3734318cc55f1fe66258926c9b910c124d47520339efecbb6c59cec7c1f" 1743 | dependencies = [ 1744 | "nom", 1745 | "unicode_categories", 1746 | ] 1747 | 1748 | [[package]] 1749 | name = "sqlx" 1750 | version = "0.7.4" 1751 | source = "registry+https://github.com/rust-lang/crates.io-index" 1752 | checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" 1753 | dependencies = [ 1754 | "sqlx-core", 1755 | "sqlx-macros", 1756 | "sqlx-mysql", 1757 | "sqlx-postgres", 1758 | "sqlx-sqlite", 1759 | ] 1760 | 1761 | [[package]] 1762 | name = "sqlx-core" 1763 | version = "0.7.4" 1764 | source = "registry+https://github.com/rust-lang/crates.io-index" 1765 | checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" 1766 | dependencies = [ 1767 | "ahash", 1768 | "atoi", 1769 | "byteorder", 1770 | "bytes", 1771 | "chrono", 1772 | "crc", 1773 | "crossbeam-queue", 1774 | "either", 1775 | "event-listener", 1776 | "futures-channel", 1777 | "futures-core", 1778 | "futures-intrusive", 1779 | "futures-io", 1780 | "futures-util", 1781 | "hashlink", 1782 | "hex", 1783 | "indexmap", 1784 | "log", 1785 | "memchr", 1786 | "once_cell", 1787 | "paste", 1788 | "percent-encoding", 1789 | "rustls", 1790 | "rustls-pemfile", 1791 | "serde", 1792 | "serde_json", 1793 | "sha2", 1794 | "smallvec", 1795 | "sqlformat", 1796 | "thiserror", 1797 | "tokio", 1798 | "tokio-stream", 1799 | "tracing", 1800 | "url", 1801 | "webpki-roots", 1802 | ] 1803 | 1804 | [[package]] 1805 | name = "sqlx-macros" 1806 | version = "0.7.4" 1807 | source = "registry+https://github.com/rust-lang/crates.io-index" 1808 | checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" 1809 | dependencies = [ 1810 | "proc-macro2", 1811 | "quote", 1812 | "sqlx-core", 1813 | "sqlx-macros-core", 1814 | "syn 1.0.109", 1815 | ] 1816 | 1817 | [[package]] 1818 | name = "sqlx-macros-core" 1819 | version = "0.7.4" 1820 | source = "registry+https://github.com/rust-lang/crates.io-index" 1821 | checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" 1822 | dependencies = [ 1823 | "dotenvy", 1824 | "either", 1825 | "heck", 1826 | "hex", 1827 | "once_cell", 1828 | "proc-macro2", 1829 | "quote", 1830 | "serde", 1831 | "serde_json", 1832 | "sha2", 1833 | "sqlx-core", 1834 | "sqlx-mysql", 1835 | "sqlx-postgres", 1836 | "sqlx-sqlite", 1837 | "syn 1.0.109", 1838 | "tempfile", 1839 | "tokio", 1840 | "url", 1841 | ] 1842 | 1843 | [[package]] 1844 | name = "sqlx-mysql" 1845 | version = "0.7.4" 1846 | source = "registry+https://github.com/rust-lang/crates.io-index" 1847 | checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" 1848 | dependencies = [ 1849 | "atoi", 1850 | "base64", 1851 | "bitflags 2.5.0", 1852 | "byteorder", 1853 | "bytes", 1854 | "chrono", 1855 | "crc", 1856 | "digest", 1857 | "dotenvy", 1858 | "either", 1859 | "futures-channel", 1860 | "futures-core", 1861 | "futures-io", 1862 | "futures-util", 1863 | "generic-array", 1864 | "hex", 1865 | "hkdf", 1866 | "hmac", 1867 | "itoa", 1868 | "log", 1869 | "md-5", 1870 | "memchr", 1871 | "once_cell", 1872 | "percent-encoding", 1873 | "rand", 1874 | "rsa", 1875 | "serde", 1876 | "sha1", 1877 | "sha2", 1878 | "smallvec", 1879 | "sqlx-core", 1880 | "stringprep", 1881 | "thiserror", 1882 | "tracing", 1883 | "whoami", 1884 | ] 1885 | 1886 | [[package]] 1887 | name = "sqlx-postgres" 1888 | version = "0.7.4" 1889 | source = "registry+https://github.com/rust-lang/crates.io-index" 1890 | checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" 1891 | dependencies = [ 1892 | "atoi", 1893 | "base64", 1894 | "bitflags 2.5.0", 1895 | "byteorder", 1896 | "chrono", 1897 | "crc", 1898 | "dotenvy", 1899 | "etcetera", 1900 | "futures-channel", 1901 | "futures-core", 1902 | "futures-io", 1903 | "futures-util", 1904 | "hex", 1905 | "hkdf", 1906 | "hmac", 1907 | "home", 1908 | "itoa", 1909 | "log", 1910 | "md-5", 1911 | "memchr", 1912 | "once_cell", 1913 | "rand", 1914 | "serde", 1915 | "serde_json", 1916 | "sha2", 1917 | "smallvec", 1918 | "sqlx-core", 1919 | "stringprep", 1920 | "thiserror", 1921 | "tracing", 1922 | "whoami", 1923 | ] 1924 | 1925 | [[package]] 1926 | name = "sqlx-sqlite" 1927 | version = "0.7.4" 1928 | source = "registry+https://github.com/rust-lang/crates.io-index" 1929 | checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" 1930 | dependencies = [ 1931 | "atoi", 1932 | "chrono", 1933 | "flume", 1934 | "futures-channel", 1935 | "futures-core", 1936 | "futures-executor", 1937 | "futures-intrusive", 1938 | "futures-util", 1939 | "libsqlite3-sys", 1940 | "log", 1941 | "percent-encoding", 1942 | "serde", 1943 | "sqlx-core", 1944 | "tracing", 1945 | "url", 1946 | "urlencoding", 1947 | ] 1948 | 1949 | [[package]] 1950 | name = "stable-pattern" 1951 | version = "0.1.0" 1952 | source = "registry+https://github.com/rust-lang/crates.io-index" 1953 | checksum = "4564168c00635f88eaed410d5efa8131afa8d8699a612c80c455a0ba05c21045" 1954 | dependencies = [ 1955 | "memchr", 1956 | ] 1957 | 1958 | [[package]] 1959 | name = "state" 1960 | version = "0.6.0" 1961 | source = "registry+https://github.com/rust-lang/crates.io-index" 1962 | checksum = "2b8c4a4445d81357df8b1a650d0d0d6fbbbfe99d064aa5e02f3e4022061476d8" 1963 | dependencies = [ 1964 | "loom", 1965 | ] 1966 | 1967 | [[package]] 1968 | name = "stringprep" 1969 | version = "0.1.5" 1970 | source = "registry+https://github.com/rust-lang/crates.io-index" 1971 | checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" 1972 | dependencies = [ 1973 | "unicode-bidi", 1974 | "unicode-normalization", 1975 | "unicode-properties", 1976 | ] 1977 | 1978 | [[package]] 1979 | name = "subtle" 1980 | version = "2.5.0" 1981 | source = "registry+https://github.com/rust-lang/crates.io-index" 1982 | checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" 1983 | 1984 | [[package]] 1985 | name = "syn" 1986 | version = "1.0.109" 1987 | source = "registry+https://github.com/rust-lang/crates.io-index" 1988 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 1989 | dependencies = [ 1990 | "proc-macro2", 1991 | "quote", 1992 | "unicode-ident", 1993 | ] 1994 | 1995 | [[package]] 1996 | name = "syn" 1997 | version = "2.0.66" 1998 | source = "registry+https://github.com/rust-lang/crates.io-index" 1999 | checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" 2000 | dependencies = [ 2001 | "proc-macro2", 2002 | "quote", 2003 | "unicode-ident", 2004 | ] 2005 | 2006 | [[package]] 2007 | name = "tempfile" 2008 | version = "3.10.1" 2009 | source = "registry+https://github.com/rust-lang/crates.io-index" 2010 | checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" 2011 | dependencies = [ 2012 | "cfg-if", 2013 | "fastrand", 2014 | "rustix", 2015 | "windows-sys 0.52.0", 2016 | ] 2017 | 2018 | [[package]] 2019 | name = "thiserror" 2020 | version = "1.0.61" 2021 | source = "registry+https://github.com/rust-lang/crates.io-index" 2022 | checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" 2023 | dependencies = [ 2024 | "thiserror-impl", 2025 | ] 2026 | 2027 | [[package]] 2028 | name = "thiserror-impl" 2029 | version = "1.0.61" 2030 | source = "registry+https://github.com/rust-lang/crates.io-index" 2031 | checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" 2032 | dependencies = [ 2033 | "proc-macro2", 2034 | "quote", 2035 | "syn 2.0.66", 2036 | ] 2037 | 2038 | [[package]] 2039 | name = "thread_local" 2040 | version = "1.1.8" 2041 | source = "registry+https://github.com/rust-lang/crates.io-index" 2042 | checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" 2043 | dependencies = [ 2044 | "cfg-if", 2045 | "once_cell", 2046 | ] 2047 | 2048 | [[package]] 2049 | name = "time" 2050 | version = "0.3.36" 2051 | source = "registry+https://github.com/rust-lang/crates.io-index" 2052 | checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" 2053 | dependencies = [ 2054 | "deranged", 2055 | "itoa", 2056 | "num-conv", 2057 | "powerfmt", 2058 | "serde", 2059 | "time-core", 2060 | "time-macros", 2061 | ] 2062 | 2063 | [[package]] 2064 | name = "time-core" 2065 | version = "0.1.2" 2066 | source = "registry+https://github.com/rust-lang/crates.io-index" 2067 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 2068 | 2069 | [[package]] 2070 | name = "time-macros" 2071 | version = "0.2.18" 2072 | source = "registry+https://github.com/rust-lang/crates.io-index" 2073 | checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" 2074 | dependencies = [ 2075 | "num-conv", 2076 | "time-core", 2077 | ] 2078 | 2079 | [[package]] 2080 | name = "tinyvec" 2081 | version = "1.6.0" 2082 | source = "registry+https://github.com/rust-lang/crates.io-index" 2083 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 2084 | dependencies = [ 2085 | "tinyvec_macros", 2086 | ] 2087 | 2088 | [[package]] 2089 | name = "tinyvec_macros" 2090 | version = "0.1.1" 2091 | source = "registry+https://github.com/rust-lang/crates.io-index" 2092 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 2093 | 2094 | [[package]] 2095 | name = "tokio" 2096 | version = "1.38.0" 2097 | source = "registry+https://github.com/rust-lang/crates.io-index" 2098 | checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" 2099 | dependencies = [ 2100 | "backtrace", 2101 | "bytes", 2102 | "libc", 2103 | "mio", 2104 | "num_cpus", 2105 | "pin-project-lite", 2106 | "signal-hook-registry", 2107 | "socket2", 2108 | "tokio-macros", 2109 | "windows-sys 0.48.0", 2110 | ] 2111 | 2112 | [[package]] 2113 | name = "tokio-macros" 2114 | version = "2.3.0" 2115 | source = "registry+https://github.com/rust-lang/crates.io-index" 2116 | checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" 2117 | dependencies = [ 2118 | "proc-macro2", 2119 | "quote", 2120 | "syn 2.0.66", 2121 | ] 2122 | 2123 | [[package]] 2124 | name = "tokio-stream" 2125 | version = "0.1.15" 2126 | source = "registry+https://github.com/rust-lang/crates.io-index" 2127 | checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" 2128 | dependencies = [ 2129 | "futures-core", 2130 | "pin-project-lite", 2131 | "tokio", 2132 | ] 2133 | 2134 | [[package]] 2135 | name = "tokio-util" 2136 | version = "0.7.11" 2137 | source = "registry+https://github.com/rust-lang/crates.io-index" 2138 | checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" 2139 | dependencies = [ 2140 | "bytes", 2141 | "futures-core", 2142 | "futures-sink", 2143 | "pin-project-lite", 2144 | "tokio", 2145 | ] 2146 | 2147 | [[package]] 2148 | name = "toml" 2149 | version = "0.8.14" 2150 | source = "registry+https://github.com/rust-lang/crates.io-index" 2151 | checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" 2152 | dependencies = [ 2153 | "serde", 2154 | "serde_spanned", 2155 | "toml_datetime", 2156 | "toml_edit", 2157 | ] 2158 | 2159 | [[package]] 2160 | name = "toml_datetime" 2161 | version = "0.6.6" 2162 | source = "registry+https://github.com/rust-lang/crates.io-index" 2163 | checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" 2164 | dependencies = [ 2165 | "serde", 2166 | ] 2167 | 2168 | [[package]] 2169 | name = "toml_edit" 2170 | version = "0.22.14" 2171 | source = "registry+https://github.com/rust-lang/crates.io-index" 2172 | checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" 2173 | dependencies = [ 2174 | "indexmap", 2175 | "serde", 2176 | "serde_spanned", 2177 | "toml_datetime", 2178 | "winnow", 2179 | ] 2180 | 2181 | [[package]] 2182 | name = "tower-service" 2183 | version = "0.3.2" 2184 | source = "registry+https://github.com/rust-lang/crates.io-index" 2185 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" 2186 | 2187 | [[package]] 2188 | name = "tracing" 2189 | version = "0.1.40" 2190 | source = "registry+https://github.com/rust-lang/crates.io-index" 2191 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 2192 | dependencies = [ 2193 | "log", 2194 | "pin-project-lite", 2195 | "tracing-attributes", 2196 | "tracing-core", 2197 | ] 2198 | 2199 | [[package]] 2200 | name = "tracing-attributes" 2201 | version = "0.1.27" 2202 | source = "registry+https://github.com/rust-lang/crates.io-index" 2203 | checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" 2204 | dependencies = [ 2205 | "proc-macro2", 2206 | "quote", 2207 | "syn 2.0.66", 2208 | ] 2209 | 2210 | [[package]] 2211 | name = "tracing-core" 2212 | version = "0.1.32" 2213 | source = "registry+https://github.com/rust-lang/crates.io-index" 2214 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 2215 | dependencies = [ 2216 | "once_cell", 2217 | "valuable", 2218 | ] 2219 | 2220 | [[package]] 2221 | name = "tracing-log" 2222 | version = "0.2.0" 2223 | source = "registry+https://github.com/rust-lang/crates.io-index" 2224 | checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 2225 | dependencies = [ 2226 | "log", 2227 | "once_cell", 2228 | "tracing-core", 2229 | ] 2230 | 2231 | [[package]] 2232 | name = "tracing-subscriber" 2233 | version = "0.3.18" 2234 | source = "registry+https://github.com/rust-lang/crates.io-index" 2235 | checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" 2236 | dependencies = [ 2237 | "matchers", 2238 | "nu-ansi-term", 2239 | "once_cell", 2240 | "regex", 2241 | "sharded-slab", 2242 | "smallvec", 2243 | "thread_local", 2244 | "tracing", 2245 | "tracing-core", 2246 | "tracing-log", 2247 | ] 2248 | 2249 | [[package]] 2250 | name = "try-lock" 2251 | version = "0.2.5" 2252 | source = "registry+https://github.com/rust-lang/crates.io-index" 2253 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 2254 | 2255 | [[package]] 2256 | name = "typenum" 2257 | version = "1.17.0" 2258 | source = "registry+https://github.com/rust-lang/crates.io-index" 2259 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 2260 | 2261 | [[package]] 2262 | name = "ubyte" 2263 | version = "0.10.4" 2264 | source = "registry+https://github.com/rust-lang/crates.io-index" 2265 | checksum = "f720def6ce1ee2fc44d40ac9ed6d3a59c361c80a75a7aa8e75bb9baed31cf2ea" 2266 | dependencies = [ 2267 | "serde", 2268 | ] 2269 | 2270 | [[package]] 2271 | name = "uncased" 2272 | version = "0.9.10" 2273 | source = "registry+https://github.com/rust-lang/crates.io-index" 2274 | checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" 2275 | dependencies = [ 2276 | "serde", 2277 | "version_check", 2278 | ] 2279 | 2280 | [[package]] 2281 | name = "unicase" 2282 | version = "2.7.0" 2283 | source = "registry+https://github.com/rust-lang/crates.io-index" 2284 | checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" 2285 | dependencies = [ 2286 | "version_check", 2287 | ] 2288 | 2289 | [[package]] 2290 | name = "unicase_serde" 2291 | version = "0.1.0" 2292 | source = "registry+https://github.com/rust-lang/crates.io-index" 2293 | checksum = "6ef53697679d874d69f3160af80bc28de12730a985d57bdf2b47456ccb8b11f1" 2294 | dependencies = [ 2295 | "serde", 2296 | "unicase", 2297 | ] 2298 | 2299 | [[package]] 2300 | name = "unicode-bidi" 2301 | version = "0.3.15" 2302 | source = "registry+https://github.com/rust-lang/crates.io-index" 2303 | checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" 2304 | 2305 | [[package]] 2306 | name = "unicode-ident" 2307 | version = "1.0.12" 2308 | source = "registry+https://github.com/rust-lang/crates.io-index" 2309 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 2310 | 2311 | [[package]] 2312 | name = "unicode-normalization" 2313 | version = "0.1.23" 2314 | source = "registry+https://github.com/rust-lang/crates.io-index" 2315 | checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" 2316 | dependencies = [ 2317 | "tinyvec", 2318 | ] 2319 | 2320 | [[package]] 2321 | name = "unicode-properties" 2322 | version = "0.1.1" 2323 | source = "registry+https://github.com/rust-lang/crates.io-index" 2324 | checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" 2325 | 2326 | [[package]] 2327 | name = "unicode-segmentation" 2328 | version = "1.11.0" 2329 | source = "registry+https://github.com/rust-lang/crates.io-index" 2330 | checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" 2331 | 2332 | [[package]] 2333 | name = "unicode-xid" 2334 | version = "0.2.4" 2335 | source = "registry+https://github.com/rust-lang/crates.io-index" 2336 | checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" 2337 | 2338 | [[package]] 2339 | name = "unicode_categories" 2340 | version = "0.1.1" 2341 | source = "registry+https://github.com/rust-lang/crates.io-index" 2342 | checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" 2343 | 2344 | [[package]] 2345 | name = "untrusted" 2346 | version = "0.9.0" 2347 | source = "registry+https://github.com/rust-lang/crates.io-index" 2348 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 2349 | 2350 | [[package]] 2351 | name = "url" 2352 | version = "2.5.2" 2353 | source = "registry+https://github.com/rust-lang/crates.io-index" 2354 | checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" 2355 | dependencies = [ 2356 | "form_urlencoded", 2357 | "idna", 2358 | "percent-encoding", 2359 | ] 2360 | 2361 | [[package]] 2362 | name = "urlencoding" 2363 | version = "2.1.3" 2364 | source = "registry+https://github.com/rust-lang/crates.io-index" 2365 | checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" 2366 | 2367 | [[package]] 2368 | name = "valuable" 2369 | version = "0.1.0" 2370 | source = "registry+https://github.com/rust-lang/crates.io-index" 2371 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" 2372 | 2373 | [[package]] 2374 | name = "vcpkg" 2375 | version = "0.2.15" 2376 | source = "registry+https://github.com/rust-lang/crates.io-index" 2377 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 2378 | 2379 | [[package]] 2380 | name = "version_check" 2381 | version = "0.9.4" 2382 | source = "registry+https://github.com/rust-lang/crates.io-index" 2383 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 2384 | 2385 | [[package]] 2386 | name = "want" 2387 | version = "0.3.1" 2388 | source = "registry+https://github.com/rust-lang/crates.io-index" 2389 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 2390 | dependencies = [ 2391 | "try-lock", 2392 | ] 2393 | 2394 | [[package]] 2395 | name = "wasi" 2396 | version = "0.11.0+wasi-snapshot-preview1" 2397 | source = "registry+https://github.com/rust-lang/crates.io-index" 2398 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 2399 | 2400 | [[package]] 2401 | name = "wasite" 2402 | version = "0.1.0" 2403 | source = "registry+https://github.com/rust-lang/crates.io-index" 2404 | checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" 2405 | 2406 | [[package]] 2407 | name = "wasm-bindgen" 2408 | version = "0.2.92" 2409 | source = "registry+https://github.com/rust-lang/crates.io-index" 2410 | checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" 2411 | dependencies = [ 2412 | "cfg-if", 2413 | "wasm-bindgen-macro", 2414 | ] 2415 | 2416 | [[package]] 2417 | name = "wasm-bindgen-backend" 2418 | version = "0.2.92" 2419 | source = "registry+https://github.com/rust-lang/crates.io-index" 2420 | checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" 2421 | dependencies = [ 2422 | "bumpalo", 2423 | "log", 2424 | "once_cell", 2425 | "proc-macro2", 2426 | "quote", 2427 | "syn 2.0.66", 2428 | "wasm-bindgen-shared", 2429 | ] 2430 | 2431 | [[package]] 2432 | name = "wasm-bindgen-macro" 2433 | version = "0.2.92" 2434 | source = "registry+https://github.com/rust-lang/crates.io-index" 2435 | checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" 2436 | dependencies = [ 2437 | "quote", 2438 | "wasm-bindgen-macro-support", 2439 | ] 2440 | 2441 | [[package]] 2442 | name = "wasm-bindgen-macro-support" 2443 | version = "0.2.92" 2444 | source = "registry+https://github.com/rust-lang/crates.io-index" 2445 | checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" 2446 | dependencies = [ 2447 | "proc-macro2", 2448 | "quote", 2449 | "syn 2.0.66", 2450 | "wasm-bindgen-backend", 2451 | "wasm-bindgen-shared", 2452 | ] 2453 | 2454 | [[package]] 2455 | name = "wasm-bindgen-shared" 2456 | version = "0.2.92" 2457 | source = "registry+https://github.com/rust-lang/crates.io-index" 2458 | checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" 2459 | 2460 | [[package]] 2461 | name = "webpki-roots" 2462 | version = "0.25.4" 2463 | source = "registry+https://github.com/rust-lang/crates.io-index" 2464 | checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" 2465 | 2466 | [[package]] 2467 | name = "whoami" 2468 | version = "1.5.1" 2469 | source = "registry+https://github.com/rust-lang/crates.io-index" 2470 | checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" 2471 | dependencies = [ 2472 | "redox_syscall 0.4.1", 2473 | "wasite", 2474 | ] 2475 | 2476 | [[package]] 2477 | name = "winapi" 2478 | version = "0.3.9" 2479 | source = "registry+https://github.com/rust-lang/crates.io-index" 2480 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2481 | dependencies = [ 2482 | "winapi-i686-pc-windows-gnu", 2483 | "winapi-x86_64-pc-windows-gnu", 2484 | ] 2485 | 2486 | [[package]] 2487 | name = "winapi-i686-pc-windows-gnu" 2488 | version = "0.4.0" 2489 | source = "registry+https://github.com/rust-lang/crates.io-index" 2490 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2491 | 2492 | [[package]] 2493 | name = "winapi-x86_64-pc-windows-gnu" 2494 | version = "0.4.0" 2495 | source = "registry+https://github.com/rust-lang/crates.io-index" 2496 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2497 | 2498 | [[package]] 2499 | name = "windows" 2500 | version = "0.48.0" 2501 | source = "registry+https://github.com/rust-lang/crates.io-index" 2502 | checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" 2503 | dependencies = [ 2504 | "windows-targets 0.48.5", 2505 | ] 2506 | 2507 | [[package]] 2508 | name = "windows-core" 2509 | version = "0.52.0" 2510 | source = "registry+https://github.com/rust-lang/crates.io-index" 2511 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" 2512 | dependencies = [ 2513 | "windows-targets 0.52.5", 2514 | ] 2515 | 2516 | [[package]] 2517 | name = "windows-sys" 2518 | version = "0.48.0" 2519 | source = "registry+https://github.com/rust-lang/crates.io-index" 2520 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 2521 | dependencies = [ 2522 | "windows-targets 0.48.5", 2523 | ] 2524 | 2525 | [[package]] 2526 | name = "windows-sys" 2527 | version = "0.52.0" 2528 | source = "registry+https://github.com/rust-lang/crates.io-index" 2529 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2530 | dependencies = [ 2531 | "windows-targets 0.52.5", 2532 | ] 2533 | 2534 | [[package]] 2535 | name = "windows-targets" 2536 | version = "0.48.5" 2537 | source = "registry+https://github.com/rust-lang/crates.io-index" 2538 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 2539 | dependencies = [ 2540 | "windows_aarch64_gnullvm 0.48.5", 2541 | "windows_aarch64_msvc 0.48.5", 2542 | "windows_i686_gnu 0.48.5", 2543 | "windows_i686_msvc 0.48.5", 2544 | "windows_x86_64_gnu 0.48.5", 2545 | "windows_x86_64_gnullvm 0.48.5", 2546 | "windows_x86_64_msvc 0.48.5", 2547 | ] 2548 | 2549 | [[package]] 2550 | name = "windows-targets" 2551 | version = "0.52.5" 2552 | source = "registry+https://github.com/rust-lang/crates.io-index" 2553 | checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" 2554 | dependencies = [ 2555 | "windows_aarch64_gnullvm 0.52.5", 2556 | "windows_aarch64_msvc 0.52.5", 2557 | "windows_i686_gnu 0.52.5", 2558 | "windows_i686_gnullvm", 2559 | "windows_i686_msvc 0.52.5", 2560 | "windows_x86_64_gnu 0.52.5", 2561 | "windows_x86_64_gnullvm 0.52.5", 2562 | "windows_x86_64_msvc 0.52.5", 2563 | ] 2564 | 2565 | [[package]] 2566 | name = "windows_aarch64_gnullvm" 2567 | version = "0.48.5" 2568 | source = "registry+https://github.com/rust-lang/crates.io-index" 2569 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 2570 | 2571 | [[package]] 2572 | name = "windows_aarch64_gnullvm" 2573 | version = "0.52.5" 2574 | source = "registry+https://github.com/rust-lang/crates.io-index" 2575 | checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" 2576 | 2577 | [[package]] 2578 | name = "windows_aarch64_msvc" 2579 | version = "0.48.5" 2580 | source = "registry+https://github.com/rust-lang/crates.io-index" 2581 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 2582 | 2583 | [[package]] 2584 | name = "windows_aarch64_msvc" 2585 | version = "0.52.5" 2586 | source = "registry+https://github.com/rust-lang/crates.io-index" 2587 | checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" 2588 | 2589 | [[package]] 2590 | name = "windows_i686_gnu" 2591 | version = "0.48.5" 2592 | source = "registry+https://github.com/rust-lang/crates.io-index" 2593 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 2594 | 2595 | [[package]] 2596 | name = "windows_i686_gnu" 2597 | version = "0.52.5" 2598 | source = "registry+https://github.com/rust-lang/crates.io-index" 2599 | checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" 2600 | 2601 | [[package]] 2602 | name = "windows_i686_gnullvm" 2603 | version = "0.52.5" 2604 | source = "registry+https://github.com/rust-lang/crates.io-index" 2605 | checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" 2606 | 2607 | [[package]] 2608 | name = "windows_i686_msvc" 2609 | version = "0.48.5" 2610 | source = "registry+https://github.com/rust-lang/crates.io-index" 2611 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 2612 | 2613 | [[package]] 2614 | name = "windows_i686_msvc" 2615 | version = "0.52.5" 2616 | source = "registry+https://github.com/rust-lang/crates.io-index" 2617 | checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" 2618 | 2619 | [[package]] 2620 | name = "windows_x86_64_gnu" 2621 | version = "0.48.5" 2622 | source = "registry+https://github.com/rust-lang/crates.io-index" 2623 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 2624 | 2625 | [[package]] 2626 | name = "windows_x86_64_gnu" 2627 | version = "0.52.5" 2628 | source = "registry+https://github.com/rust-lang/crates.io-index" 2629 | checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" 2630 | 2631 | [[package]] 2632 | name = "windows_x86_64_gnullvm" 2633 | version = "0.48.5" 2634 | source = "registry+https://github.com/rust-lang/crates.io-index" 2635 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 2636 | 2637 | [[package]] 2638 | name = "windows_x86_64_gnullvm" 2639 | version = "0.52.5" 2640 | source = "registry+https://github.com/rust-lang/crates.io-index" 2641 | checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" 2642 | 2643 | [[package]] 2644 | name = "windows_x86_64_msvc" 2645 | version = "0.48.5" 2646 | source = "registry+https://github.com/rust-lang/crates.io-index" 2647 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 2648 | 2649 | [[package]] 2650 | name = "windows_x86_64_msvc" 2651 | version = "0.52.5" 2652 | source = "registry+https://github.com/rust-lang/crates.io-index" 2653 | checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" 2654 | 2655 | [[package]] 2656 | name = "winnow" 2657 | version = "0.6.13" 2658 | source = "registry+https://github.com/rust-lang/crates.io-index" 2659 | checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" 2660 | dependencies = [ 2661 | "memchr", 2662 | ] 2663 | 2664 | [[package]] 2665 | name = "yansi" 2666 | version = "1.0.1" 2667 | source = "registry+https://github.com/rust-lang/crates.io-index" 2668 | checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" 2669 | dependencies = [ 2670 | "is-terminal", 2671 | ] 2672 | 2673 | [[package]] 2674 | name = "zerocopy" 2675 | version = "0.7.34" 2676 | source = "registry+https://github.com/rust-lang/crates.io-index" 2677 | checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" 2678 | dependencies = [ 2679 | "zerocopy-derive", 2680 | ] 2681 | 2682 | [[package]] 2683 | name = "zerocopy-derive" 2684 | version = "0.7.34" 2685 | source = "registry+https://github.com/rust-lang/crates.io-index" 2686 | checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" 2687 | dependencies = [ 2688 | "proc-macro2", 2689 | "quote", 2690 | "syn 2.0.66", 2691 | ] 2692 | 2693 | [[package]] 2694 | name = "zeroize" 2695 | version = "1.8.1" 2696 | source = "registry+https://github.com/rust-lang/crates.io-index" 2697 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 2698 | -------------------------------------------------------------------------------- /foodi-backend/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | authors = ["Brenden Matthews "] 3 | edition = "2021" 4 | name = "foodi-backend" 5 | version = "0.2.0" 6 | 7 | [dependencies] 8 | chrono = { version = "0.4", features = ["serde"] } 9 | rocket = { version = "0.5", features = ["json"] } 10 | rocket_cors = "0.6" 11 | sqlx = { version = "0.7", default-features = false, features = [ 12 | "runtime-tokio-rustls", 13 | "migrate", 14 | "macros", 15 | "chrono", 16 | ] } 17 | 18 | [dependencies.rocket_db_pools] 19 | features = ["sqlx_sqlite"] 20 | version = "0.2" 21 | -------------------------------------------------------------------------------- /foodi-backend/README.md: -------------------------------------------------------------------------------- 1 | # foodi-backend 2 | 3 | This is a backend for a meal tracking demo app which uses the following tools 4 | (among others): 5 | 6 | * [Rust lang](https://www.rust-lang.org/) 7 | * [Rocket](https://rocket.rs/) 8 | * [SQLx](https://github.com/launchbadge/sqlx) 9 | 10 | You need to use nightly Rust to build, which can be set for the current dir 11 | with: 12 | 13 | ```console 14 | $ rustup override set nightly 15 | ``` 16 | -------------------------------------------------------------------------------- /foodi-backend/Rocket.toml: -------------------------------------------------------------------------------- 1 | [default] 2 | # change to "debug" for debug logging 3 | log_level = "normal" 4 | 5 | [global.databases] 6 | sqlite = { url = "database.sqlite" } 7 | -------------------------------------------------------------------------------- /foodi-backend/database.sqlite-shm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brndnmtthws/rust-react-typescript-demo/4be74880fdcbce83d5ec69afb3a171cd5159b020/foodi-backend/database.sqlite-shm -------------------------------------------------------------------------------- /foodi-backend/database.sqlite-wal: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brndnmtthws/rust-react-typescript-demo/4be74880fdcbce83d5ec69afb3a171cd5159b020/foodi-backend/database.sqlite-wal -------------------------------------------------------------------------------- /foodi-backend/migrations/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brndnmtthws/rust-react-typescript-demo/4be74880fdcbce83d5ec69afb3a171cd5159b020/foodi-backend/migrations/.gitkeep -------------------------------------------------------------------------------- /foodi-backend/migrations/20221017165648_meals.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE meals 2 | -------------------------------------------------------------------------------- /foodi-backend/migrations/20221017165648_meals.up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE meals ( 2 | id INTEGER NOT NULL PRIMARY KEY, 3 | name VARCHAR NOT NULL, 4 | time DATETIME NOT NULL 5 | ) 6 | -------------------------------------------------------------------------------- /foodi-backend/src/main.rs: -------------------------------------------------------------------------------- 1 | use chrono::Utc; 2 | use rocket::fairing::AdHoc; 3 | use rocket::futures::TryFutureExt; 4 | use rocket::response::status::{Created, NoContent}; 5 | use rocket::response::Debug; 6 | use rocket::serde::json::{json, Json, Value}; 7 | use rocket::{ 8 | catch, catchers, delete, error, fairing, get, launch, post, put, routes, Build, Rocket, 9 | }; 10 | use rocket_cors::CorsOptions; 11 | use rocket_db_pools::sqlx::{self}; 12 | use rocket_db_pools::{Connection, Database}; 13 | 14 | mod models; 15 | 16 | use models::Meal; 17 | 18 | type Result> = std::result::Result; 19 | 20 | #[derive(Database)] 21 | #[database("sqlite")] 22 | struct Db(sqlx::SqlitePool); 23 | 24 | #[get("/")] // GET /v1/meals/ 25 | async fn read(mut db: Connection, id: i64) -> Option> { 26 | sqlx::query_as::<_, Meal>("SELECT * FROM meals WHERE id = ?") 27 | .bind(id) 28 | .fetch_one(db.as_mut()) 29 | .map_ok(Json) 30 | .await 31 | .ok() 32 | } 33 | 34 | #[get("/")] // GET /v1/meals 35 | async fn list(mut db: Connection) -> Result>> { 36 | sqlx::query_as::<_, Meal>("SELECT * FROM meals") 37 | .fetch_all(db.as_mut()) 38 | .map_ok(|recs| Ok(Json(recs))) 39 | .map_err(Debug) 40 | .await? 41 | } 42 | 43 | #[post("/", data = "")] // POST /v1/meals 44 | async fn create(mut db: Connection, meal: Json) -> Result>> { 45 | sqlx::query_as::<_, Meal>( 46 | "INSERT INTO meals (name, time) VALUES (?, ?) RETURNING id, name, time", 47 | ) 48 | .bind(meal.name.clone()) 49 | .bind(meal.time.unwrap_or_else(|| Utc::now().naive_utc())) 50 | .fetch_one(db.as_mut()) 51 | .map_ok(|meal| Created::new(format!("/v1/meals/{}", meal.id.unwrap())).body(Json(meal))) 52 | .map_err(Debug) 53 | .await 54 | } 55 | 56 | #[put("/", data = "")] // PUT /v1/meals/ 57 | async fn update(mut db: Connection, id: i64, meal: Json) -> Result> { 58 | sqlx::query_as::<_, Meal>( 59 | "UPDATE meals SET name = ?, time = ? WHERE id = ? RETURNING id, name, time", 60 | ) 61 | .bind(meal.name.clone()) 62 | .bind(meal.time.unwrap_or_else(|| Utc::now().naive_utc())) 63 | .bind(id) 64 | .fetch_one(db.as_mut()) 65 | .map_ok(Json) 66 | .map_err(Debug) 67 | .await 68 | } 69 | 70 | #[delete("/")] // DELETE /v1/meals 71 | async fn delete(mut db: Connection, id: i64) -> Result { 72 | sqlx::query("DELETE FROM meals WHERE id = ?") 73 | .bind(id) 74 | .fetch_one(db.as_mut()) 75 | .await 76 | .map(|_| NoContent) 77 | .map_err(Debug) 78 | } 79 | 80 | #[catch(404)] 81 | fn not_found() -> Value { 82 | json!({ 83 | "error": { 84 | "code": 404, 85 | "description": "Resource was not found.", 86 | "reason": "Not Found" 87 | } 88 | }) 89 | } 90 | 91 | #[catch(422)] 92 | fn unprocessable_entity() -> Value { 93 | json!({ 94 | "error": { 95 | "code": 422, 96 | "description": "Unprocessable Entity. The request was well-formed but was unable to be followed due to semantic errors.", 97 | "reason": "Unprocessable Entity" 98 | } 99 | }) 100 | } 101 | 102 | async fn run_migrations(rocket: Rocket) -> fairing::Result { 103 | match Db::fetch(&rocket) { 104 | Some(db) => match sqlx::migrate!().run(&**db).await { 105 | Ok(_) => Ok(rocket), 106 | Err(e) => { 107 | error!("Failed to initialize SQLx database: {}", e); 108 | Err(rocket) 109 | } 110 | }, 111 | None => Err(rocket), 112 | } 113 | } 114 | 115 | #[launch] 116 | fn rocket() -> _ { 117 | rocket::build() 118 | .attach(CorsOptions::default().to_cors().unwrap()) 119 | .attach(Db::init()) 120 | .attach(AdHoc::try_on_ignite("SQLx Migrations", run_migrations)) 121 | .register("/", catchers![not_found, unprocessable_entity]) 122 | .mount("/v1/meals", routes![create, read, update, delete, list]) 123 | } 124 | -------------------------------------------------------------------------------- /foodi-backend/src/models.rs: -------------------------------------------------------------------------------- 1 | use chrono::NaiveDateTime; 2 | use rocket::serde::{Deserialize, Serialize}; 3 | use rocket_db_pools::sqlx::{self, sqlite, FromRow, Row}; 4 | 5 | #[derive(Debug, Clone, Deserialize, Serialize)] 6 | #[serde(crate = "rocket::serde")] 7 | pub struct Meal { 8 | #[serde(skip_deserializing, skip_serializing_if = "Option::is_none")] 9 | pub id: Option, 10 | pub name: String, 11 | #[serde(skip_deserializing, skip_serializing_if = "Option::is_none")] 12 | pub time: Option, 13 | } 14 | 15 | impl FromRow<'_, sqlite::SqliteRow> for Meal { 16 | fn from_row(row: &sqlite::SqliteRow) -> sqlx::Result { 17 | Ok(Self { 18 | id: Some(row.try_get("id")?), 19 | name: row.try_get("name")?, 20 | time: row.try_get("time")?, 21 | }) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /foodi-frontend/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ 3 | ["@babel/plugin-proposal-decorators", { "legacy": true }], 4 | ["@babel/plugin-proposal-class-properties", { "loose": false }] 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /foodi-frontend/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # TypeScript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | .env.test 60 | 61 | # parcel-bundler cache (https://parceljs.org/) 62 | .parcel-cache/ 63 | 64 | # next.js build output 65 | .next 66 | 67 | # nuxt.js build output 68 | .nuxt 69 | 70 | # vuepress build output 71 | .vuepress/dist 72 | 73 | # Serverless directories 74 | .serverless/ 75 | 76 | # FuseBox cache 77 | .fusebox/ 78 | 79 | # DynamoDB Local files 80 | .dynamodb/ 81 | 82 | # Parcel 'dist' build directory 83 | dist/ 84 | -------------------------------------------------------------------------------- /foodi-frontend/.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | printWidth: 80, 3 | semi: false, 4 | singleQuote: true, 5 | tabWidth: 2, 6 | useTabs: false, 7 | } 8 | -------------------------------------------------------------------------------- /foodi-frontend/README.md: -------------------------------------------------------------------------------- 1 | # foodi-frontend 2 | 3 | This is a frontend for a meal tracking demo app which uses the following tools (among others): 4 | 5 | * [React](https://reactjs.org/) 6 | * [TypeScript](https://www.typescriptlang.org/) 7 | * [Parcel](https://github.com/parcel-bundler/parcel) 8 | -------------------------------------------------------------------------------- /foodi-frontend/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | 3 | import eslint from '@eslint/js' 4 | import tseslint from 'typescript-eslint' 5 | import react from 'eslint-plugin-react' 6 | 7 | export default tseslint.config( 8 | eslint.configs.recommended, 9 | ...tseslint.configs.recommended, 10 | { 11 | plugins: { 12 | react, 13 | }, 14 | }, 15 | ) 16 | -------------------------------------------------------------------------------- /foodi-frontend/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /foodi-frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "foodi-frontend", 3 | "version": "1.0.0", 4 | "license": "Unlicense", 5 | "browserslist": "> 0.5%, last 2 versions, not dead", 6 | "devDependencies": { 7 | "@babel/core": "^7.25.2", 8 | "@babel/plugin-proposal-class-properties": "^7.18.6", 9 | "@babel/plugin-proposal-decorators": "^7.24.7", 10 | "@babel/preset-env": "^7.25.4", 11 | "@babel/preset-react": "^7.24.7", 12 | "@eslint/js": "^9.10.0", 13 | "@types/node": "^22.5.5", 14 | "@types/react": "^18.3.5", 15 | "@types/react-dom": "^18.3.0", 16 | "eslint": "^9.10.0", 17 | "eslint-config-prettier": "^9.1.0", 18 | "eslint-plugin-prettier": "^5.2.1", 19 | "eslint-plugin-react": "^7.36.1", 20 | "parcel": "^2.12.0", 21 | "prettier": "^3.3.3", 22 | "process": "^0.11.10", 23 | "react-refresh": "^0.14.2", 24 | "typescript": "^5.6.2", 25 | "typescript-eslint": "^8.5.0" 26 | }, 27 | "dependencies": { 28 | "@types/react-refresh": "^0.14.6", 29 | "react": "^18.3.1", 30 | "react-dom": "^18.3.1" 31 | }, 32 | "scripts": { 33 | "dev": "parcel index.html", 34 | "build": "parcel build index.html" 35 | }, 36 | "optionalDependencies": { 37 | "@parcel/watcher-linux-x64-glibc": "^2.4.2-alpha.0" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /foodi-frontend/src/api.ts: -------------------------------------------------------------------------------- 1 | export const API = 'http://127.0.0.1:8000' 2 | -------------------------------------------------------------------------------- /foodi-frontend/src/app.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import MealView from './meals/view' 3 | 4 | class App extends React.Component { 5 | render(): React.ReactNode { 6 | return 7 | } 8 | } 9 | 10 | export default App 11 | -------------------------------------------------------------------------------- /foodi-frontend/src/main.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import * as ReactDOM from 'react-dom/client' 3 | import './tachyons.css' 4 | 5 | function renderApp(): void { 6 | const App = require('./app').default 7 | const root = ReactDOM.createRoot(document.getElementById('root')) 8 | root.render() 9 | } 10 | 11 | renderApp() 12 | -------------------------------------------------------------------------------- /foodi-frontend/src/meals/form.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react' 2 | import { API } from '../api' 3 | import { type Meal } from './meal' 4 | 5 | interface FormProps { 6 | onSubmit: (meal: Meal) => void 7 | } 8 | 9 | export default function Form({ onSubmit }: FormProps): JSX.Element { 10 | const [name, setName] = useState(undefined) 11 | const [time, setTime] = useState(new Date()) 12 | const [error, setError] = useState(undefined) 13 | 14 | const submit = (): void => { 15 | fetch(API + '/v1/meals', { 16 | method: 'POST', 17 | headers: { 18 | 'Content-Type': 'application/json', 19 | }, 20 | body: JSON.stringify({ name, time }), 21 | }) 22 | .then((resp) => { 23 | resp 24 | .json() 25 | .then((meal) => { 26 | onSubmit(meal) 27 | }) 28 | .catch((e) => { 29 | console.error(e) 30 | }) 31 | }) 32 | .catch((e) => { 33 | setError(e.toString()) 34 | console.error(e) 35 | }) 36 | } 37 | 38 | return ( 39 |
40 |
41 |
42 | 45 | { 51 | setName(event.target.value) 52 | }} 53 | value={name} 54 | /> 55 | 56 | What did you eat? 57 | 58 |
59 |
60 | 63 | { 70 | setTime(new Date(Date.parse(event.target.value))) 71 | }} 72 | /> 73 | 74 | When did you eat? 75 | 76 |
77 | 88 | {error !== undefined &&
{error}
} 89 |
90 |
91 | ) 92 | } 93 | -------------------------------------------------------------------------------- /foodi-frontend/src/meals/meal.ts: -------------------------------------------------------------------------------- 1 | export interface Meal { 2 | id: number 3 | name: string 4 | time: string 5 | } 6 | -------------------------------------------------------------------------------- /foodi-frontend/src/meals/view.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from 'react' 2 | import { API } from '../api' 3 | import Form from './form' 4 | import { type Meal } from './meal' 5 | 6 | interface TableRowProps { 7 | children?: React.ReactNode 8 | } 9 | 10 | const TableRow: React.FC = ({ children }) => { 11 | return {children} 12 | } 13 | interface TableHeaderProps { 14 | children?: React.ReactNode 15 | } 16 | 17 | const TableHeader: React.FC = ({ children }) => { 18 | return {children} 19 | } 20 | 21 | interface TableDataProps { 22 | children?: React.ReactNode 23 | } 24 | 25 | const TableData: React.FC = ({ children }) => { 26 | return {children} 27 | } 28 | 29 | export default function MealView(): JSX.Element { 30 | const [meals, setMeals] = useState([]) 31 | const [showForm, setShowForm] = useState(false) 32 | const [error, setError] = useState(undefined) 33 | console.log(meals) 34 | 35 | useEffect(() => { 36 | fetch(API + '/v1/meals') 37 | .then((resp) => { 38 | if (resp.ok) { 39 | resp 40 | .json() 41 | .then((json) => { 42 | setMeals(json) 43 | }) 44 | .catch((e) => { 45 | console.error(e) 46 | }) 47 | } 48 | }) 49 | .catch((e) => { 50 | setError(e.toString()) 51 | console.error(e) 52 | }) 53 | }, []) 54 | 55 | return ( 56 |
57 |
58 | {error !== undefined &&
{error}
} 59 | 60 | 61 | 62 | ID 63 | Name 64 | Time 65 | 66 | {meals?.map((meal: Meal) => ( 67 | 68 | {meal.id} 69 | {meal.name} 70 | {meal.time} 71 | 72 | ))} 73 | 74 |
75 | 86 |
87 | {showForm && ( 88 |
{ 90 | setShowForm(false) 91 | setMeals([...meals, meal]) 92 | }} 93 | /> 94 | )} 95 |
96 | ) 97 | } 98 | -------------------------------------------------------------------------------- /foodi-frontend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Basic Options */ 4 | "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ 5 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 6 | // "lib": [], /* Specify library files to be included in the compilation. */ 7 | // "allowJs": true, /* Allow javascript files to be compiled. */ 8 | // "checkJs": true, /* Report errors in .js files. */ 9 | "jsx": "react", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 10 | // "declaration": true, /* Generates corresponding '.d.ts' file. */ 11 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 12 | // "sourceMap": true, /* Generates corresponding '.map' file. */ 13 | // "outFile": "./", /* Concatenate and emit output to single file. */ 14 | // "outDir": "./", /* Redirect output structure to the directory. */ 15 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 16 | // "composite": true, /* Enable project compilation */ 17 | // "removeComments": true, /* Do not emit comments to output. */ 18 | // "noEmit": true, /* Do not emit outputs. */ 19 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 20 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 21 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 22 | 23 | /* Strict Type-Checking Options */ 24 | "strict": true, /* Enable all strict type-checking options. */ 25 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 26 | // "strictNullChecks": true, /* Enable strict null checks. */ 27 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */ 28 | // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ 29 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 30 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 31 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ 32 | 33 | /* Additional Checks */ 34 | // "noUnusedLocals": true, /* Report errors on unused locals. */ 35 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 36 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 37 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 38 | 39 | /* Module Resolution Options */ 40 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 41 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 42 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 43 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 44 | // "typeRoots": [], /* List of folders to include type definitions from. */ 45 | // "types": [], /* Type declaration files to be included in compilation. */ 46 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 47 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 48 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 49 | 50 | /* Source Map Options */ 51 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 52 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 53 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 54 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 55 | 56 | /* Experimental Options */ 57 | "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 58 | "emitDecoratorMetadata": true /* Enables experimental support for emitting type metadata for decorators. */ 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /k8s.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | name: foodi 6 | labels: 7 | app: foodi 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: foodi 13 | template: 14 | metadata: 15 | labels: 16 | app: foodi 17 | spec: 18 | containers: 19 | - name: foodi 20 | image: brndnmtthws/rust-react-typescript-demo:latest 21 | ports: 22 | - containerPort: 80 23 | livenessProbe: 24 | httpGet: 25 | path: / 26 | port: 80 27 | initialDelaySeconds: 3 28 | periodSeconds: 3 29 | 30 | --- 31 | kind: Service 32 | apiVersion: v1 33 | metadata: 34 | name: foodi 35 | spec: 36 | selector: 37 | app: foodi 38 | type: NodePort 39 | ports: 40 | - protocol: TCP 41 | port: 80 42 | targetPort: 80 43 | --- 44 | apiVersion: extensions/v1beta1 45 | kind: Ingress 46 | metadata: 47 | name: foodi 48 | spec: 49 | backend: 50 | serviceName: foodi 51 | servicePort: 80 52 | -------------------------------------------------------------------------------- /nginx.conf: -------------------------------------------------------------------------------- 1 | worker_processes 1; 2 | 3 | events { 4 | worker_connections 1024; 5 | } 6 | 7 | http { 8 | include mime.types; 9 | default_type application/octet-stream; 10 | sendfile on; 11 | keepalive_timeout 65; 12 | 13 | server { 14 | listen 80; 15 | server_name localhost; 16 | 17 | location / { 18 | root /app/dist; 19 | index index.html index.htm; 20 | } 21 | 22 | #error_page 404 /404.html; 23 | 24 | # redirect server error pages to the static page /50x.html 25 | # 26 | error_page 500 502 503 504 /50x.html; 27 | location = /50x.html { 28 | root /usr/local/openresty/nginx/html; 29 | } 30 | 31 | location /v1 { 32 | proxy_pass http://127.0.0.1:8000; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /terraform/.gitignore: -------------------------------------------------------------------------------- 1 | # Local .terraform directories 2 | **/.terraform/* 3 | 4 | # .tfstate files 5 | *.tfstate 6 | *.tfstate.* 7 | 8 | # Crash log files 9 | crash.log 10 | 11 | # Ignore any .tfvars files that are generated automatically for each Terraform run. Most 12 | # .tfvars files are managed as part of configuration and so should be included in 13 | # version control. 14 | # 15 | # example.tfvars 16 | 17 | # Ignore override files as they are usually used to override resources locally and so 18 | # are not checked in 19 | override.tf 20 | override.tf.json 21 | *_override.tf 22 | *_override.tf.json 23 | 24 | # Include override files you do wish to add to version control using negated pattern 25 | # 26 | # !example_override.tf 27 | -------------------------------------------------------------------------------- /terraform/main.tf: -------------------------------------------------------------------------------- 1 | resource "google_container_cluster" "rust_react_demo" { 2 | name = "rust-react-demo" 3 | zone = "us-central1-a" 4 | 5 | lifecycle { 6 | ignore_changes = ["node_pool"] 7 | } 8 | 9 | node_pool { 10 | name = "default-pool" 11 | } 12 | } 13 | 14 | resource "google_container_node_pool" "node_pool" { 15 | name = "node-pool" 16 | zone = "us-central1-a" 17 | cluster = "${google_container_cluster.rust_react_demo.name}" 18 | node_count = 1 19 | 20 | node_config { 21 | preemptible = true 22 | machine_type = "n1-standard-1" 23 | 24 | oauth_scopes = [ 25 | "compute-rw", 26 | "storage-ro", 27 | "logging-write", 28 | "monitoring", 29 | ] 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /terraform/provider.tf: -------------------------------------------------------------------------------- 1 | provider "google" { 2 | # Define your project below: 3 | # project = "" 4 | region = "us-central1" 5 | } 6 | --------------------------------------------------------------------------------