From 4d5a1fe563a7a98f780c6a65e22d385ec865e5e8 Mon Sep 17 00:00:00 2001 From: Billy Chan Date: Mon, 20 May 2024 20:19:25 +0800 Subject: [PATCH] Getting Started with Loco & SeaORM --- .github/workflows/rust.yml | 1 + examples/loco_starter/.cargo/config.toml | 3 + examples/loco_starter/.devcontainer/.env | 6 + .../loco_starter/.devcontainer/Dockerfile | 8 + .../.devcontainer/devcontainer.json | 9 + .../.devcontainer/docker-compose.yml | 50 + .../loco_starter/.github/workflows/ci.yaml | 107 + examples/loco_starter/.gitignore | 17 + examples/loco_starter/.rustfmt.toml | 7 + examples/loco_starter/Cargo.lock | 5240 +++++++++++++++++ examples/loco_starter/Cargo.toml | 45 + examples/loco_starter/README.md | 52 + examples/loco_starter/config/development.yaml | 129 + examples/loco_starter/config/test.yaml | 126 + examples/loco_starter/examples/playground.rs | 22 + examples/loco_starter/migration/Cargo.toml | 22 + examples/loco_starter/migration/README.md | 41 + examples/loco_starter/migration/src/lib.rs | 20 + .../migration/src/m20220101_000001_users.rs | 47 + .../migration/src/m20231103_114510_notes.rs | 33 + .../migration/src/m20240520_173001_files.rs | 41 + examples/loco_starter/migration/src/main.rs | 6 + examples/loco_starter/src/app.rs | 73 + examples/loco_starter/src/bin/main.rs | 8 + examples/loco_starter/src/controllers/auth.rs | 156 + .../loco_starter/src/controllers/files.rs | 125 + examples/loco_starter/src/controllers/mod.rs | 4 + .../loco_starter/src/controllers/notes.rs | 75 + examples/loco_starter/src/controllers/user.rs | 14 + examples/loco_starter/src/fixtures/notes.yaml | 11 + examples/loco_starter/src/fixtures/users.yaml | 17 + examples/loco_starter/src/lib.rs | 7 + examples/loco_starter/src/mailers/auth.rs | 65 + .../src/mailers/auth/forgot/html.t | 11 + .../src/mailers/auth/forgot/subject.t | 1 + .../src/mailers/auth/forgot/text.t | 3 + .../src/mailers/auth/welcome/html.t | 13 + .../src/mailers/auth/welcome/subject.t | 1 + .../src/mailers/auth/welcome/text.t | 4 + examples/loco_starter/src/mailers/mod.rs | 1 + .../src/models/_entities/files.rs | 31 + .../loco_starter/src/models/_entities/mod.rs | 7 + .../src/models/_entities/notes.rs | 18 + .../src/models/_entities/prelude.rs | 3 + .../src/models/_entities/users.rs | 29 + examples/loco_starter/src/models/files.rs | 7 + examples/loco_starter/src/models/mod.rs | 4 + examples/loco_starter/src/models/notes.rs | 7 + examples/loco_starter/src/models/users.rs | 267 + examples/loco_starter/src/tasks/mod.rs | 1 + examples/loco_starter/src/tasks/seed.rs | 44 + examples/loco_starter/src/views/auth.rs | 23 + examples/loco_starter/src/views/mod.rs | 2 + examples/loco_starter/src/views/user.rs | 21 + .../loco_starter/src/workers/downloader.rs | 43 + examples/loco_starter/src/workers/mod.rs | 1 + examples/loco_starter/tests/mod.rs | 3 + examples/loco_starter/tests/models/mod.rs | 1 + .../can_create_with_password@users.snap | 21 + .../snapshots/can_find_by_email-2@users.snap | 7 + .../snapshots/can_find_by_email@users-2.snap | 7 + .../snapshots/can_find_by_email@users.snap | 21 + .../snapshots/can_find_by_pid-2@users.snap | 7 + .../snapshots/can_find_by_pid@users-2.snap | 7 + .../snapshots/can_find_by_pid@users.snap | 21 + .../snapshots/can_validate_model@users.snap | 9 + ...te_with_password_with_duplicate@users.snap | 7 + examples/loco_starter/tests/models/users.rs | 223 + examples/loco_starter/tests/requests/auth.rs | 192 + examples/loco_starter/tests/requests/mod.rs | 4 + examples/loco_starter/tests/requests/notes.rs | 123 + .../tests/requests/prepare_data.rs | 57 + .../snapshots/can_add_note@notes_request.snap | 8 + .../can_delete_note@notes_request.snap | 8 + .../can_get_current_user@user_request.snap | 8 + ...urrent_user_with_api_key@user_request.snap | 8 + .../snapshots/can_get_note@notes_request.snap | 8 + .../can_get_notes@notes_request.snap | 8 + ...can_login_without_verify@auth_request.snap | 8 + .../can_register@auth_request-2.snap | 10 + .../snapshots/can_register@auth_request.snap | 25 + .../can_reset_password@auth_request-2.snap | 11 + .../can_reset_password@auth_request.snap | 8 + ...in_with_invalid_password@auth_request.snap | 8 + ...ogin_with_valid_password@auth_request.snap | 8 + examples/loco_starter/tests/requests/user.rs | 40 + examples/loco_starter/tests/tasks/mod.rs | 1 + examples/loco_starter/tests/tasks/seed.rs | 42 + .../SeaORM banner (1).png | Bin 0 -> 198058 bytes .../SeaORM banner.png | Bin 0 -> 198058 bytes 90 files changed, 8048 insertions(+) create mode 100644 examples/loco_starter/.cargo/config.toml create mode 100644 examples/loco_starter/.devcontainer/.env create mode 100644 examples/loco_starter/.devcontainer/Dockerfile create mode 100644 examples/loco_starter/.devcontainer/devcontainer.json create mode 100644 examples/loco_starter/.devcontainer/docker-compose.yml create mode 100644 examples/loco_starter/.github/workflows/ci.yaml create mode 100644 examples/loco_starter/.gitignore create mode 100644 examples/loco_starter/.rustfmt.toml create mode 100644 examples/loco_starter/Cargo.lock create mode 100644 examples/loco_starter/Cargo.toml create mode 100644 examples/loco_starter/README.md create mode 100644 examples/loco_starter/config/development.yaml create mode 100644 examples/loco_starter/config/test.yaml create mode 100644 examples/loco_starter/examples/playground.rs create mode 100644 examples/loco_starter/migration/Cargo.toml create mode 100644 examples/loco_starter/migration/README.md create mode 100644 examples/loco_starter/migration/src/lib.rs create mode 100644 examples/loco_starter/migration/src/m20220101_000001_users.rs create mode 100644 examples/loco_starter/migration/src/m20231103_114510_notes.rs create mode 100644 examples/loco_starter/migration/src/m20240520_173001_files.rs create mode 100644 examples/loco_starter/migration/src/main.rs create mode 100644 examples/loco_starter/src/app.rs create mode 100644 examples/loco_starter/src/bin/main.rs create mode 100644 examples/loco_starter/src/controllers/auth.rs create mode 100644 examples/loco_starter/src/controllers/files.rs create mode 100644 examples/loco_starter/src/controllers/mod.rs create mode 100644 examples/loco_starter/src/controllers/notes.rs create mode 100644 examples/loco_starter/src/controllers/user.rs create mode 100644 examples/loco_starter/src/fixtures/notes.yaml create mode 100644 examples/loco_starter/src/fixtures/users.yaml create mode 100644 examples/loco_starter/src/lib.rs create mode 100644 examples/loco_starter/src/mailers/auth.rs create mode 100644 examples/loco_starter/src/mailers/auth/forgot/html.t create mode 100644 examples/loco_starter/src/mailers/auth/forgot/subject.t create mode 100644 examples/loco_starter/src/mailers/auth/forgot/text.t create mode 100644 examples/loco_starter/src/mailers/auth/welcome/html.t create mode 100644 examples/loco_starter/src/mailers/auth/welcome/subject.t create mode 100644 examples/loco_starter/src/mailers/auth/welcome/text.t create mode 100644 examples/loco_starter/src/mailers/mod.rs create mode 100644 examples/loco_starter/src/models/_entities/files.rs create mode 100644 examples/loco_starter/src/models/_entities/mod.rs create mode 100644 examples/loco_starter/src/models/_entities/notes.rs create mode 100644 examples/loco_starter/src/models/_entities/prelude.rs create mode 100644 examples/loco_starter/src/models/_entities/users.rs create mode 100644 examples/loco_starter/src/models/files.rs create mode 100644 examples/loco_starter/src/models/mod.rs create mode 100644 examples/loco_starter/src/models/notes.rs create mode 100644 examples/loco_starter/src/models/users.rs create mode 100644 examples/loco_starter/src/tasks/mod.rs create mode 100644 examples/loco_starter/src/tasks/seed.rs create mode 100644 examples/loco_starter/src/views/auth.rs create mode 100644 examples/loco_starter/src/views/mod.rs create mode 100644 examples/loco_starter/src/views/user.rs create mode 100644 examples/loco_starter/src/workers/downloader.rs create mode 100644 examples/loco_starter/src/workers/mod.rs create mode 100644 examples/loco_starter/tests/mod.rs create mode 100644 examples/loco_starter/tests/models/mod.rs create mode 100644 examples/loco_starter/tests/models/snapshots/can_create_with_password@users.snap create mode 100644 examples/loco_starter/tests/models/snapshots/can_find_by_email-2@users.snap create mode 100644 examples/loco_starter/tests/models/snapshots/can_find_by_email@users-2.snap create mode 100644 examples/loco_starter/tests/models/snapshots/can_find_by_email@users.snap create mode 100644 examples/loco_starter/tests/models/snapshots/can_find_by_pid-2@users.snap create mode 100644 examples/loco_starter/tests/models/snapshots/can_find_by_pid@users-2.snap create mode 100644 examples/loco_starter/tests/models/snapshots/can_find_by_pid@users.snap create mode 100644 examples/loco_starter/tests/models/snapshots/can_validate_model@users.snap create mode 100644 examples/loco_starter/tests/models/snapshots/handle_create_with_password_with_duplicate@users.snap create mode 100644 examples/loco_starter/tests/models/users.rs create mode 100644 examples/loco_starter/tests/requests/auth.rs create mode 100644 examples/loco_starter/tests/requests/mod.rs create mode 100644 examples/loco_starter/tests/requests/notes.rs create mode 100644 examples/loco_starter/tests/requests/prepare_data.rs create mode 100644 examples/loco_starter/tests/requests/snapshots/can_add_note@notes_request.snap create mode 100644 examples/loco_starter/tests/requests/snapshots/can_delete_note@notes_request.snap create mode 100644 examples/loco_starter/tests/requests/snapshots/can_get_current_user@user_request.snap create mode 100644 examples/loco_starter/tests/requests/snapshots/can_get_current_user_with_api_key@user_request.snap create mode 100644 examples/loco_starter/tests/requests/snapshots/can_get_note@notes_request.snap create mode 100644 examples/loco_starter/tests/requests/snapshots/can_get_notes@notes_request.snap create mode 100644 examples/loco_starter/tests/requests/snapshots/can_login_without_verify@auth_request.snap create mode 100644 examples/loco_starter/tests/requests/snapshots/can_register@auth_request-2.snap create mode 100644 examples/loco_starter/tests/requests/snapshots/can_register@auth_request.snap create mode 100644 examples/loco_starter/tests/requests/snapshots/can_reset_password@auth_request-2.snap create mode 100644 examples/loco_starter/tests/requests/snapshots/can_reset_password@auth_request.snap create mode 100644 examples/loco_starter/tests/requests/snapshots/login_with_invalid_password@auth_request.snap create mode 100644 examples/loco_starter/tests/requests/snapshots/login_with_valid_password@auth_request.snap create mode 100644 examples/loco_starter/tests/requests/user.rs create mode 100644 examples/loco_starter/tests/tasks/mod.rs create mode 100644 examples/loco_starter/tests/tasks/seed.rs create mode 100644 examples/loco_starter/uploads/20240520_183255_c9a37b9b-b039-4858-9fba-f4936979379c/SeaORM banner (1).png create mode 100644 examples/loco_starter/uploads/20240520_183255_eb07c11d-aa13-4834-bc11-7bf84dc3c986/SeaORM banner.png diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 1d4623264..e095f4f2f 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -239,6 +239,7 @@ jobs: examples/graphql_example, examples/jsonrpsee_example, examples/loco_example, + examples/loco_starter, examples/poem_example, examples/proxy_gluesql_example, examples/rocket_example, diff --git a/examples/loco_starter/.cargo/config.toml b/examples/loco_starter/.cargo/config.toml new file mode 100644 index 000000000..21b762815 --- /dev/null +++ b/examples/loco_starter/.cargo/config.toml @@ -0,0 +1,3 @@ +[alias] +loco = "run --" +playground = "run --example playground" diff --git a/examples/loco_starter/.devcontainer/.env b/examples/loco_starter/.devcontainer/.env new file mode 100644 index 000000000..1a3ca5b3c --- /dev/null +++ b/examples/loco_starter/.devcontainer/.env @@ -0,0 +1,6 @@ +POSTGRES_DB=loco_app +POSTGRES_USER=loco +POSTGRES_PASSWORD=loco +DATABASE_URL=postgres://loco:loco@db:5432/loco_app +REDIS_URL=redis://redis:6379 +MAILER_HOST=mailer \ No newline at end of file diff --git a/examples/loco_starter/.devcontainer/Dockerfile b/examples/loco_starter/.devcontainer/Dockerfile new file mode 100644 index 000000000..49616a5f8 --- /dev/null +++ b/examples/loco_starter/.devcontainer/Dockerfile @@ -0,0 +1,8 @@ +FROM mcr.microsoft.com/devcontainers/rust:1 + +RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ + && apt-get -y install --no-install-recommends postgresql-client \ + && cargo install sea-orm-cli cargo-insta \ + && chown -R vscode /usr/local/cargo + +COPY .env /.env diff --git a/examples/loco_starter/.devcontainer/devcontainer.json b/examples/loco_starter/.devcontainer/devcontainer.json new file mode 100644 index 000000000..ddc39eea3 --- /dev/null +++ b/examples/loco_starter/.devcontainer/devcontainer.json @@ -0,0 +1,9 @@ +{ + "name": "Loco", + "dockerComposeFile": "docker-compose.yml", + "service": "app", + "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", + "forwardPorts": [ + 3000 + ] +} \ No newline at end of file diff --git a/examples/loco_starter/.devcontainer/docker-compose.yml b/examples/loco_starter/.devcontainer/docker-compose.yml new file mode 100644 index 000000000..6688eb282 --- /dev/null +++ b/examples/loco_starter/.devcontainer/docker-compose.yml @@ -0,0 +1,50 @@ +version: "3" + +services: + app: + build: + context: . + dockerfile: Dockerfile + command: sleep infinity + networks: + - db + - redis + - mailer + volumes: + - ../..:/workspaces:cached + env_file: + - .env + db: + image: postgres:15.3-alpine + restart: unless-stopped + ports: + - 5432:5432 + networks: + - db + volumes: + - postgres-data:/var/lib/postgresql/data + env_file: + - .env + redis: + image: redis:latest + restart: unless-stopped + ports: + - 6379:6379 + networks: + - redis + mailer: + image: mailtutan/mailtutan:latest + restart: unless-stopped + ports: + - 1080:1080 + - 1025:1025 + networks: + - mailer + +volumes: + postgres-data: + +networks: + db: + redis: + mailer: diff --git a/examples/loco_starter/.github/workflows/ci.yaml b/examples/loco_starter/.github/workflows/ci.yaml new file mode 100644 index 000000000..cb4763c9e --- /dev/null +++ b/examples/loco_starter/.github/workflows/ci.yaml @@ -0,0 +1,107 @@ +name: CI +on: + push: + branches: + - master + - main + pull_request: + +env: + RUST_TOOLCHAIN: stable + TOOLCHAIN_PROFILE: minimal + +jobs: + rustfmt: + name: Check Style + runs-on: ubuntu-latest + + permissions: + contents: read + + steps: + - name: Checkout the code + uses: actions/checkout@v4 + - uses: actions-rs/toolchain@v1 + with: + profile: ${{ env.TOOLCHAIN_PROFILE }} + toolchain: ${{ env.RUST_TOOLCHAIN }} + override: true + components: rustfmt + - name: Run cargo fmt + uses: actions-rs/cargo@v1 + with: + command: fmt + args: --all -- --check + + clippy: + name: Run Clippy + runs-on: ubuntu-latest + + permissions: + contents: read + + steps: + - name: Checkout the code + uses: actions/checkout@v4 + - uses: actions-rs/toolchain@v1 + with: + profile: ${{ env.TOOLCHAIN_PROFILE }} + toolchain: ${{ env.RUST_TOOLCHAIN }} + override: true + - name: Setup Rust cache + uses: Swatinem/rust-cache@v2 + - name: Run cargo clippy + uses: actions-rs/cargo@v1 + with: + command: clippy + args: --all-features -- -D warnings -W clippy::pedantic -W clippy::nursery -W rust-2018-idioms + + test: + name: Run Tests + runs-on: ubuntu-latest + + permissions: + contents: read + + services: + redis: + image: redis + options: >- + --health-cmd "redis-cli ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - "6379:6379" + postgres: + image: postgres + env: + POSTGRES_DB: postgres_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - "5432:5432" + # Set health checks to wait until postgres has started + options: --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + - name: Checkout the code + uses: actions/checkout@v4 + - uses: actions-rs/toolchain@v1 + with: + profile: ${{ env.TOOLCHAIN_PROFILE }} + toolchain: ${{ env.RUST_TOOLCHAIN }} + override: true + - name: Setup Rust cache + uses: Swatinem/rust-cache@v2 + - name: Run cargo test + uses: actions-rs/cargo@v1 + with: + command: test + args: --all-features --all + env: + REDIS_URL: redis://localhost:${{job.services.redis.ports[6379]}} + DATABASE_URL: postgres://postgres:postgres@localhost:5432/postgres_test diff --git a/examples/loco_starter/.gitignore b/examples/loco_starter/.gitignore new file mode 100644 index 000000000..d320a904a --- /dev/null +++ b/examples/loco_starter/.gitignore @@ -0,0 +1,17 @@ +**/config/local.yaml +**/config/*.local.yaml +**/config/production.yaml + +# Generated by Cargo +# will have compiled files and executables +debug/ +target/ + +# include cargo lock +!Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information +*.pdb diff --git a/examples/loco_starter/.rustfmt.toml b/examples/loco_starter/.rustfmt.toml new file mode 100644 index 000000000..d509e3ae8 --- /dev/null +++ b/examples/loco_starter/.rustfmt.toml @@ -0,0 +1,7 @@ +max_width = 100 +comment_width = 80 +wrap_comments = true +imports_granularity = "Crate" +use_small_heuristics = "Default" +group_imports = "StdExternalCrate" +format_strings = true diff --git a/examples/loco_starter/Cargo.lock b/examples/loco_starter/Cargo.lock new file mode 100644 index 000000000..a8ae55492 --- /dev/null +++ b/examples/loco_starter/Cargo.lock @@ -0,0 +1,5240 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" + +[[package]] +name = "anstyle-parse" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "anyhow" +version = "1.0.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" + +[[package]] +name = "argon2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" +dependencies = [ + "base64ct", + "blake2", + "cpufeatures", + "password-hash", +] + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "async-attributes" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d4d23bcc79e27423727b36823d86233aad06dfea531837b038394d11e9928" +dependencies = [ + "concurrent-queue", + "event-listener 5.3.0", + "event-listener-strategy 0.5.1", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-compression" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07dbbf24db18d609b1462965249abdf49129ccad073ec257da372adc83259c60" +dependencies = [ + "brotli", + "flate2", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", + "zstd", + "zstd-safe", +] + +[[package]] +name = "async-executor" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand 2.0.2", + "futures-lite 2.3.0", + "slab", +] + +[[package]] +name = "async-global-executor" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +dependencies = [ + "async-channel 2.2.1", + "async-executor", + "async-io 2.3.2", + "async-lock 3.3.0", + "blocking", + "futures-lite 2.3.0", + "once_cell", + "tokio", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2 0.4.10", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +dependencies = [ + "async-lock 3.3.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.3.0", + "parking", + "polling 3.6.0", + "rustix 0.38.32", + "slab", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +dependencies = [ + "event-listener 4.0.3", + "event-listener-strategy 0.4.0", + "pin-project-lite", +] + +[[package]] +name = "async-std" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" +dependencies = [ + "async-attributes", + "async-channel 1.9.0", + "async-global-executor", + "async-io 1.13.0", + "async-lock 2.8.0", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite 1.13.0", + "gloo-timers", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "async-task" +version = "4.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" + +[[package]] +name = "async-trait" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "auto-future" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c1e7e457ea78e524f48639f551fd79703ac3f2237f5ecccdf4708f8a75ad373" + +[[package]] +name = "autocfg" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" + +[[package]] +name = "axum" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf" +dependencies = [ + "async-trait", + "axum-core", + "axum-macros", + "bytes", + "futures-util", + "http 1.1.0", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "multer", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "tokio", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.1.0", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 0.1.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-extra" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0be6ea09c9b96cb5076af0de2e383bd2bc0c18f827cf1967bdd353e0b910d733" +dependencies = [ + "axum", + "axum-core", + "bytes", + "cookie", + "futures-util", + "http 1.1.0", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "serde", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00c055ee2d014ae5981ce1016374e8213682aa14d9bf40e48ab48b5f3ef20eaa" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "axum-test" +version = "14.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db705caa0b050aa7247c4748293b09e4cddaf7a3c4a87faf145859c11ce501e3" +dependencies = [ + "anyhow", + "async-trait", + "auto-future", + "axum", + "bytes", + "cookie", + "http 1.1.0", + "http-body-util", + "hyper", + "hyper-util", + "mime", + "pretty_assertions", + "reserve-port", + "rust-multipart-rfc7578_2", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "tokio", + "tower", + "url", +] + +[[package]] +name = "backtrace" +version = "0.3.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "backtrace_printer" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d28de81c708c843640982b66573df0f0168d87e42854b563971f326745aab7" +dependencies = [ + "btparse-stable", + "colored", + "regex", + "thiserror", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9475866fec1451be56a3c2400fd081ff546538961565ccb5b7142cbd22bc7a51" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bb8" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df7c2093d15d6a1d33b1f972e1c5ea3177748742b97a5f392aa83a65262c6780" +dependencies = [ + "async-trait", + "futures-channel", + "futures-util", + "parking_lot", + "tokio", +] + +[[package]] +name = "bigdecimal" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" +dependencies = [ + "async-channel 2.2.1", + "async-lock 3.3.0", + "async-task", + "fastrand 2.0.2", + "futures-io", + "futures-lite 2.3.0", + "piper", + "tracing", +] + +[[package]] +name = "borsh" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0901fc8eb0aca4c83be0106d6f2db17d86a08dfc2c25f0e84464bf381158add6" +dependencies = [ + "borsh-derive", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51670c3aa053938b0ee3bd67c3817e471e626151131b934038e83c5bf8de48f5" +dependencies = [ + "once_cell", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.59", + "syn_derive", +] + +[[package]] +name = "brotli" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "125740193d7fee5cc63ab9e16c2fdc4e07c74ba755cc53b327d6ea029e9fc569" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65622a320492e09b5e0ac436b14c54ff68199bac392d0e89a6832c4518eea525" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bstr" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "btparse-stable" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d75b8252ed252f881d1dc4482ae3c3854df6ee8183c1906bac50ff358f4f89f" + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byte-unit" +version = "4.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da78b32057b8fdfc352504708feeba7216dcd65a2c9ab02978cbd288d1279b6c" +dependencies = [ + "serde", + "utf8-width", +] + +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cc" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f6e324229dc011159fcc089755d1e2e216a90d43a7dea6853ca740b84f35e7" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets 0.52.5", +] + +[[package]] +name = "chrono-tz" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59ae0466b83e838b81a54256c39d5d7c20b9d7daa10510a242d9b75abd5936e" +dependencies = [ + "chrono", + "chrono-tz-build", + "phf", +] + +[[package]] +name = "chrono-tz-build" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "433e39f13c9a060046954e0592a8d0a4bcb1040125cbf91cb8ee58964cfb350f" +dependencies = [ + "parse-zoneinfo", + "phf", + "phf_codegen", +] + +[[package]] +name = "chumsky" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eebd66744a15ded14960ab4ccdbfb51ad3b81f51f3f04a80adac98c985396c9" +dependencies = [ + "hashbrown 0.14.3", + "stacker", +] + +[[package]] +name = "clap" +version = "4.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "clap_lex" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "colored" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +dependencies = [ + "lazy_static", + "windows-sys 0.48.0", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "concurrent-queue" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "cron_clock" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a8699d8ed16e3db689f8ae04d8dc3c6666a4ba7e724e5a157884b7cc385d16b" +dependencies = [ + "chrono", + "nom", + "once_cell", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crossterm" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +dependencies = [ + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "cruet" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "113a9e83d8f614be76de8df1f25bf9d0ea6e85ea573710a3d3f3abe1438ae49c" +dependencies = [ + "once_cell", + "regex", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.3", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "deunicode" +version = "1.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322ef0094744e63628e6f0eb2295517f79276a5b342a4c2ff3042566ca181d4e" + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "duct" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ab5718d1224b63252cd0c6f74f6480f9ffeb117438a2e0f5cf6d9a4798929c" +dependencies = [ + "libc", + "once_cell", + "os_pipe", + "shared_child", +] + +[[package]] +name = "educe" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4bd92664bf78c4d3dba9b7cdafce6fa15b13ed3ed16175218196942e99168a8" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "either" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +dependencies = [ + "serde", +] + +[[package]] +name = "email-encoding" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60d1d33cdaede7e24091f039632eb5d3c7469fe5b066a985281a34fc70fa317f" +dependencies = [ + "base64 0.22.0", + "memchr", +] + +[[package]] +name = "email_address" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2153bd83ebc09db15bcbdc3e2194d901804952e3dc96967e1cd3b0c5c32d112" + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enum-ordinalize" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.3", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "332f51cb23d20b0de8458b86580878211da09bcd4503cb579c225b3d124cabb3" +dependencies = [ + "event-listener 5.3.0", + "pin-project-lite", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" + +[[package]] +name = "finl_unicode" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "futures-core", + "futures-sink", + "spin 0.9.8", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-lite" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +dependencies = [ + "fastrand 2.0.2", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata 0.4.6", + "regex-syntax 0.8.3", +] + +[[package]] +name = "globwalk" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc" +dependencies = [ + "bitflags 1.3.2", + "ignore", + "walkdir", +] + +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash 0.8.11", + "allocator-api2", +] + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.3", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +dependencies = [ + "bytes", + "futures-core", + "http 1.1.0", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ce4ef31cda248bbdb6e6820603b82dfcd9e833db65a43e997a0ccec777d11fe" + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humansize" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" +dependencies = [ + "libm", +] + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f24ce812868d86d19daa79bf3bf9175bc44ea323391147a5e3abde2a283871b" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body", + "hyper", + "pin-project-lite", + "socket2 0.5.6", + "tokio", + "tower", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "if_chain" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" + +[[package]] +name = "ignore" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +dependencies = [ + "crossbeam-deque", + "globset", + "log", + "memchr", + "regex-automata 0.4.6", + "same-file", + "walkdir", + "winapi-util", +] + +[[package]] +name = "include_dir" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e" +dependencies = [ + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", +] + +[[package]] +name = "inherent" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0122b7114117e64a63ac49f752a5ca4624d534c7b1c7de796ac196381cd2d947" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "insta" +version = "1.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eab73f58e59ca6526037208f0e98851159ec1633cf17b6cd2e1f2c3fd5d53cc" +dependencies = [ + "console", + "lazy_static", + "linked-hash-map", + "pest", + "pest_derive", + "regex", + "serde", + "similar", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "is-terminal" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jobserver" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685a7d121ee3f65ae4fddd72b25a04bb36b6af81bc0828f7d5434c0fe60fa3a2" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "jsonwebtoken" +version = "9.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" +dependencies = [ + "base64 0.21.7", + "js-sys", + "pem", + "ring", + "serde", + "serde_json", + "simple_asn1", +] + +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +dependencies = [ + "spin 0.5.2", +] + +[[package]] +name = "lettre" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47460276655930189e0919e4fbf46e46476b14f934f18a63dd726a5fb7b60e2e" +dependencies = [ + "async-trait", + "base64 0.22.0", + "chumsky", + "email-encoding", + "email_address", + "fastrand 2.0.2", + "futures-io", + "futures-util", + "hostname", + "httpdate", + "idna 0.5.0", + "mime", + "nom", + "percent-encoding", + "quoted_printable", + "rustls 0.23.4", + "rustls-pemfile 2.1.2", + "socket2 0.5.6", + "tokio", + "tokio-rustls", + "url", + "webpki-roots 0.26.1", +] + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.5.0", + "libc", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "loco-rs" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9cb93effcc77153e538b4ba3bba72b0c6ffe6b862c47e986fc2aa2684586844" +dependencies = [ + "argon2", + "async-trait", + "axum", + "axum-extra", + "axum-test", + "backtrace_printer", + "bb8", + "byte-unit", + "bytes", + "cargo_metadata", + "cfg-if", + "chrono", + "clap", + "colored", + "duct", + "eyre", + "fs-err", + "futures-util", + "hyper", + "include_dir", + "jsonwebtoken", + "lazy_static", + "lettre", + "mime", + "object_store", + "rand", + "regex", + "requestty", + "rrgen", + "rusty-sidekiq", + "sea-orm", + "sea-orm-migration", + "serde", + "serde_json", + "serde_variant", + "serde_yaml", + "tera", + "thiserror", + "tokio", + "tower", + "tower-http", + "tracing", + "tracing-subscriber", + "uuid", + "validator", +] + +[[package]] +name = "loco_starter" +version = "0.1.0" +dependencies = [ + "async-trait", + "axum", + "chrono", + "eyre", + "include_dir", + "insta", + "loco-rs", + "migration", + "rstest", + "sea-orm", + "serde", + "serde_json", + "serial_test", + "tokio", + "tokio-util", + "tracing", + "tracing-subscriber", + "uuid", + "validator", +] + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +dependencies = [ + "value-bag", +] + +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + +[[package]] +name = "memchr" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" + +[[package]] +name = "migration" +version = "0.1.0" +dependencies = [ + "async-std", + "loco-rs", + "sea-orm-migration", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "multer" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http 1.1.0", + "httparse", + "memchr", + "mime", + "spin 0.9.8", + "version_check", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "object_store" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8718f8b65fdf67a45108d1548347d4af7d71fb81ce727bbf9e3b2535e079db3" +dependencies = [ + "async-trait", + "bytes", + "chrono", + "futures", + "humantime", + "itertools", + "parking_lot", + "percent-encoding", + "snafu", + "tokio", + "tracing", + "url", + "walkdir", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "ordered-float" +version = "3.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc" +dependencies = [ + "num-traits", +] + +[[package]] +name = "os_pipe" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57119c3b893986491ec9aa85056780d3a0f3cf4da7cc09dd3650dbd6c6738fb9" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "ouroboros" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2ba07320d39dfea882faa70554b4bd342a5f273ed59ba7c1c6b4c840492c954" +dependencies = [ + "aliasable", + "ouroboros_macro", + "static_assertions", +] + +[[package]] +name = "ouroboros_macro" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec4c6225c69b4ca778c0aea097321a64c421cf4577b331c61b229267edabb6f8" +dependencies = [ + "heck 0.4.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "parse-zoneinfo" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41" +dependencies = [ + "regex", +] + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pem" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +dependencies = [ + "base64 0.22.0", + "serde", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "311fb059dee1a7b802f036316d790138c613a4e8b180c822e3925a662e9f0c95" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f73541b156d32197eecda1a4014d7f868fd2bcb3c550d5386087cfba442bf69c" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c35eeed0a3fab112f75165fdc026b3913f4183133f19b49be773ac9ea966e8bd" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "pest_meta" +version = "2.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2adbf29bb9776f28caece835398781ab24435585fe0d4dc1374a61db5accedca" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand 2.0.2", + "futures-io", +] + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0c976a60b2d7e99d6f229e414670a9b85d13ac305cc6d1e9c134de58c5aaaf6" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix 0.38.32", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "pretty_assertions" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66" +dependencies = [ + "diff", + "yansi", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56dea16b0a29e94408b9aa5e2940a4eedbd128a1ba20e8f7ae60fd3d465af0e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "psm" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +dependencies = [ + "cc", +] + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "quoted_printable" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79ec282e887b434b68c18fe5c121d38e72a5cf35119b59e54ec5b992ea9c8eb0" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "redis" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa8455fa3621f6b41c514946de66ea0531f57ca017b2e6c7cc368035ea5b46df" +dependencies = [ + "async-trait", + "bytes", + "combine", + "futures-util", + "itoa", + "percent-encoding", + "pin-project-lite", + "ryu", + "sha1_smol", + "tokio", + "tokio-util", + "url", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.6", + "regex-syntax 0.8.3", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.3", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" + +[[package]] +name = "relative-path" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e898588f33fdd5b9420719948f9f2a32c922a246964576f71ba7f24f80610fbc" + +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "requestty" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa883a1f3e288e65187f653e6ba2e84fdf810fe02f4c8074f9c723d1aa26e2ae" +dependencies = [ + "requestty-ui", + "shell-words", + "smallvec", + "tempfile", + "winsplit", +] + +[[package]] +name = "requestty-ui" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7549bab39cf982b629b68e7ec191a5574e85086e95c0ebe514c02d3b42ffe225" +dependencies = [ + "bitflags 1.3.2", + "crossterm", + "once_cell", + "textwrap", + "unicode-segmentation", +] + +[[package]] +name = "reserve-port" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9838134a2bfaa8e1f40738fcc972ac799de6e0e06b5157acb95fc2b05a0ea283" +dependencies = [ + "lazy_static", + "thiserror", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin 0.9.8", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rkyv" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rrgen" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e40013551787f9f535e7dbc8dafc164591d941aeae48881a385d8b0393dd45f6" +dependencies = [ + "cruet", + "fs-err", + "glob", + "heck 0.4.1", + "regex", + "serde", + "serde_json", + "serde_regex", + "serde_yaml", + "tera", + "thiserror", +] + +[[package]] +name = "rsa" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +dependencies = [ + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core", + "signature", + "spki", + "subtle", + "zeroize", +] + +[[package]] +name = "rstest" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97eeab2f3c0a199bc4be135c36c924b6590b88c377d416494288c14f2db30199" +dependencies = [ + "futures", + "futures-timer", + "rstest_macros", + "rustc_version", +] + +[[package]] +name = "rstest_macros" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d428f8247852f894ee1be110b375111b586d4fa431f6c46e64ba5a0dcccbe605" +dependencies = [ + "cfg-if", + "glob", + "proc-macro2", + "quote", + "regex", + "relative-path", + "rustc_version", + "syn 2.0.59", + "unicode-ident", +] + +[[package]] +name = "rust-multipart-rfc7578_2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b748410c0afdef2ebbe3685a6a862e2ee937127cdaae623336a459451c8d57" +dependencies = [ + "bytes", + "futures-core", + "futures-util", + "http 0.2.12", + "mime", + "mime_guess", + "rand", + "thiserror", +] + +[[package]] +name = "rust_decimal" +version = "1.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1790d1c4c0ca81211399e0e0af16333276f375209e71a37b67698a373db5b47a" +dependencies = [ + "arrayvec", + "borsh", + "bytes", + "num-traits", + "rand", + "rkyv", + "serde", + "serde_json", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" +dependencies = [ + "bitflags 2.5.0", + "errno", + "libc", + "linux-raw-sys 0.4.13", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +dependencies = [ + "ring", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.23.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c4d6d8ad9f2492485e13453acbb291dd08f64441b6609c491f1c2cd2c6b4fe1" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki 0.102.2", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +dependencies = [ + "base64 0.22.0", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd36cc4259e3e4514335c4a138c6b43171a8d61d8f5c9348f9fc7529416f247" + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" + +[[package]] +name = "rusty-sidekiq" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a00db3916faeea070039864f98d4fd759d96fc07722571a4918d996fea5621" +dependencies = [ + "async-trait", + "bb8", + "chrono", + "cron_clock", + "gethostname", + "heck 0.4.1", + "hex", + "num_cpus", + "rand", + "redis", + "serde", + "serde_json", + "sha2", + "slog-term", + "thiserror", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "ryu" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sea-bae" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bd3534a9978d0aa7edd2808dc1f8f31c4d0ecd31ddf71d997b3c98e9f3c9114" +dependencies = [ + "heck 0.4.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "sea-orm" +version = "1.0.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5a485429878b8f6eb9ec1c99e91bf4e9055d445be71218faed5847c2e40dba" +dependencies = [ + "async-stream", + "async-trait", + "bigdecimal", + "chrono", + "futures", + "log", + "ouroboros", + "rust_decimal", + "sea-orm-macros", + "sea-query", + "sea-query-binder", + "serde", + "serde_json", + "sqlx", + "strum", + "thiserror", + "time", + "tracing", + "url", + "uuid", +] + +[[package]] +name = "sea-orm-cli" +version = "1.0.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fc1c75b5075c7bc2aa41518731e93408f3a158dfb8714e747430734934a901" +dependencies = [ + "chrono", + "clap", + "dotenvy", + "glob", + "regex", + "sea-schema", + "tracing", + "tracing-subscriber", + "url", +] + +[[package]] +name = "sea-orm-macros" +version = "1.0.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f303a2b29c6d92a669652fa7776e6590df7118e05d4f6bf31d48127b06cb21a" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "sea-bae", + "syn 2.0.59", + "unicode-ident", +] + +[[package]] +name = "sea-orm-migration" +version = "1.0.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e8b13ba1f4308423946530237d5b46f8bef85aec2463686c4eb1e45d87ce9ef" +dependencies = [ + "async-trait", + "clap", + "dotenvy", + "futures", + "sea-orm", + "sea-orm-cli", + "sea-schema", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "sea-query" +version = "0.31.0-rc.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "111e290c5bb78b2e17d669b069ff56d4e454f52a666a28ac002b7cdaadbb8dcc" +dependencies = [ + "bigdecimal", + "chrono", + "educe", + "inherent", + "ordered-float", + "rust_decimal", + "sea-query-derive", + "serde_json", + "time", + "uuid", +] + +[[package]] +name = "sea-query-binder" +version = "0.6.0-rc.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c368d1a4050b6b45b47498c544d31a9c35b96aea926599f2a9db82088cc674aa" +dependencies = [ + "bigdecimal", + "chrono", + "rust_decimal", + "sea-query", + "serde_json", + "sqlx", + "time", + "uuid", +] + +[[package]] +name = "sea-query-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a82fcb49253abcb45cdcb2adf92956060ec0928635eb21b4f7a6d8f25ab0bc" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.59", + "thiserror", +] + +[[package]] +name = "sea-schema" +version = "0.15.0-rc.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ed3975863149bdc9dcc19007d55c16255e9805ab85c1e9792d4bb5d2a694d6" +dependencies = [ + "futures", + "sea-query", + "sea-schema-derive", +] + +[[package]] +name = "sea-schema-derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f686050f76bffc4f635cda8aea6df5548666b830b52387e8bc7de11056d11e" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "semver" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "serde_json" +version = "1.0.116" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa", + "serde", +] + +[[package]] +name = "serde_regex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8136f1a4ea815d7eac4101cfd0b16dc0cb5e1fe1b8609dfd728058656b7badf" +dependencies = [ + "regex", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_variant" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a0068df419f9d9b6488fdded3f1c818522cdea328e02ce9d9f147380265a432" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "serial_test" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e56dd856803e253c8f298af3f4d7eb0ae5e23a737252cd90bb4f3b435033b2d" +dependencies = [ + "dashmap", + "futures", + "lazy_static", + "log", + "parking_lot", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha1_smol" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared_child" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "simdutf8" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" + +[[package]] +name = "similar" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa42c91313f1d05da9b26f267f931cf178d4aba455b4c4622dd7355eb80c6640" + +[[package]] +name = "simple_asn1" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror", + "time", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slog" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8347046d4ebd943127157b94d63abb990fcf729dc4e9978927fdf4ac3c998d06" + +[[package]] +name = "slog-term" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6e022d0b998abfe5c3782c1f03551a596269450ccd677ea51c56f8b214610e8" +dependencies = [ + "is-terminal", + "slog", + "term", + "thread_local", + "time", +] + +[[package]] +name = "slug" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bd94acec9c8da640005f8e135a39fc0372e74535e6b368b7a04b875f784c8c4" +dependencies = [ + "deunicode", + "wasm-bindgen", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "smawk" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "doc-comment", + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sqlformat" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce81b7bd7c4493975347ef60d8c7e8b742d4694f4c49f93e0a12ea263938176c" +dependencies = [ + "itertools", + "nom", + "unicode_categories", +] + +[[package]] +name = "sqlx" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" +dependencies = [ + "ahash 0.8.11", + "atoi", + "bigdecimal", + "byteorder", + "bytes", + "chrono", + "crc", + "crossbeam-queue", + "either", + "event-listener 2.5.3", + "futures-channel", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashlink", + "hex", + "indexmap", + "log", + "memchr", + "once_cell", + "paste", + "percent-encoding", + "rust_decimal", + "rustls 0.21.10", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "sha2", + "smallvec", + "sqlformat", + "thiserror", + "time", + "tokio", + "tokio-stream", + "tracing", + "url", + "uuid", + "webpki-roots 0.25.4", +] + +[[package]] +name = "sqlx-macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 1.0.109", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" +dependencies = [ + "dotenvy", + "either", + "heck 0.4.1", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 1.0.109", + "tempfile", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" +dependencies = [ + "atoi", + "base64 0.21.7", + "bigdecimal", + "bitflags 2.5.0", + "byteorder", + "bytes", + "chrono", + "crc", + "digest", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf", + "hmac", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand", + "rsa", + "rust_decimal", + "serde", + "sha1", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "time", + "tracing", + "uuid", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" +dependencies = [ + "atoi", + "base64 0.21.7", + "bigdecimal", + "bitflags 2.5.0", + "byteorder", + "chrono", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hkdf", + "hmac", + "home", + "itoa", + "log", + "md-5", + "memchr", + "num-bigint", + "once_cell", + "rand", + "rust_decimal", + "serde", + "serde_json", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "time", + "tracing", + "uuid", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" +dependencies = [ + "atoi", + "chrono", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "sqlx-core", + "time", + "tracing", + "url", + "urlencoding", + "uuid", +] + +[[package]] +name = "stacker" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "winapi", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "stringprep" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" +dependencies = [ + "finl_unicode", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a6531ffc7b071655e4ce2e04bd464c4830bb585a61cabb96cf808f05172615a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand 2.0.2", + "rustix 0.38.32", + "windows-sys 0.52.0", +] + +[[package]] +name = "tera" +version = "1.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "970dff17c11e884a4a09bc76e3a17ef71e01bb13447a11e85226e254fe6d10b8" +dependencies = [ + "chrono", + "chrono-tz", + "globwalk", + "humansize", + "lazy_static", + "percent-encoding", + "pest", + "pest_derive", + "rand", + "regex", + "serde", + "serde_json", + "slug", + "unic-segment", +] + +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", +] + +[[package]] +name = "textwrap" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7b3e525a49ec206798b40326a44121291b530c963cfb01018f63e135bac543d" +dependencies = [ + "smawk", + "unicode-linebreak", + "unicode-width", +] + +[[package]] +name = "thiserror" +version = "1.0.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.5.6", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.4", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +dependencies = [ + "async-compression", + "bitflags 2.5.0", + "bytes", + "futures-core", + "futures-util", + "http 1.1.0", + "http-body", + "http-body-util", + "http-range-header", + "httpdate", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" +dependencies = [ + "unic-ucd-segment", +] + +[[package]] +name = "unic-ucd-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-linebreak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "unicode_categories" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna 0.5.0", + "percent-encoding", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "utf8-width" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "uuid" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +dependencies = [ + "getrandom", + "serde", +] + +[[package]] +name = "validator" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b92f40481c04ff1f4f61f304d61793c7b56ff76ac1469f1beb199b1445b253bd" +dependencies = [ + "idna 0.4.0", + "lazy_static", + "regex", + "serde", + "serde_derive", + "serde_json", + "url", + "validator_derive", +] + +[[package]] +name = "validator_derive" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc44ca3088bb3ba384d9aecf40c6a23a676ce23e09bdaca2073d99c207f864af" +dependencies = [ + "if_chain", + "lazy_static", + "proc-macro-error", + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", + "validator_types", +] + +[[package]] +name = "validator_types" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "111abfe30072511849c5910134e8baf8dc05de4c0e5903d681cbd5c9c4d611e3" +dependencies = [ + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "value-bag" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74797339c3b98616c009c7c3eb53a0ce41e85c8ec66bd3db96ed132d20cfdee8" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "waker-fn" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.59", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.59", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "webpki-roots" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "whoami" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +dependencies = [ + "redox_syscall", + "wasite", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winsplit" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab703352da6a72f35c39a533526393725640575bb211f61987a2748323ad956" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.59", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" + +[[package]] +name = "zstd" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d789b1514203a1120ad2429eae43a7bd32b90976a7bb8a05f7ec02fa88cc23a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd99b45c6bc03a018c8b8a86025678c87e55526064e38f9df301989dce7ec0a" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.10+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c253a4914af5bafc8fa8c86ee400827e83cf6ec01195ec1f1ed8441bf00d65aa" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/examples/loco_starter/Cargo.toml b/examples/loco_starter/Cargo.toml new file mode 100644 index 000000000..a07222488 --- /dev/null +++ b/examples/loco_starter/Cargo.toml @@ -0,0 +1,45 @@ +[workspace] + +[package] +name = "loco_starter" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] + +loco-rs = { version = "0.4.0" } +migration = { path = "migration" } + +serde = { version = "1", features = ["derive"] } +serde_json = "1" +eyre = "0.6" +tokio = { version = "1.33.0", default-features = false } +tokio-util = "0.7.11" +async-trait = "0.1.74" +tracing = "0.1.40" +chrono = "0.4" +validator = { version = "0.16" } +sea-orm = { version = "1.0.0-rc.1", features = [ + "sqlx-sqlite", + "sqlx-postgres", + "runtime-tokio-rustls", + "macros", +] } + +axum = { version = "0.7.1", features = ["multipart"] } +include_dir = "0.7" +uuid = { version = "1.6.0", features = ["v4"] } +tracing-subscriber = { version = "0.3.17", features = ["env-filter", "json"] } + +[[bin]] +name = "loco_starter-cli" +path = "src/bin/main.rs" +required-features = [] + +[dev-dependencies] +serial_test = "2.0.0" +rstest = "0.18.2" +loco-rs = { version = "0.4.0", features = ["testing"] } +insta = { version = "1.34.0", features = ["redactions", "yaml", "filters"] } diff --git a/examples/loco_starter/README.md b/examples/loco_starter/README.md new file mode 100644 index 000000000..49a588754 --- /dev/null +++ b/examples/loco_starter/README.md @@ -0,0 +1,52 @@ +# Welcome to Loco :train: + +Loco is a web and API framework running on Rust. + +This is the **Rest API starter** which includes a `User` model and authentication based on JWT. + +## Quick Start + +You need: + +- A local postgres instance +- A local Redis instance + +Check out your development [configuration](config/development.yaml). + +> To configure a database , please run a local postgres database with loco:loco and a db named loco_starter_development.: +> docker run -d -p 5432:5432 -e POSTGRES_USER=loco -e POSTGRES_DB=loco_starter_development -e POSTGRES_PASSWORD="loco" postgres:15.3-alpine + +Now start your app: + +``` +$ cargo loco start +Finished dev [unoptimized + debuginfo] target(s) in 21.63s + Running `target/debug/myapp start` + + : + : + : + +controller/app_routes.rs:203: [Middleware] Adding log trace id + + â–„ â–€ + â–€ â–„ + â–„ â–€ â–„ â–„ â–„â–€ + â–„ ▀▄▄ + â–„ â–€ â–€ ▀▄▀█▄ + ▀█▄ +â–„â–„â–„â–„â–„â–„â–„ â–„â–„â–„â–„â–„â–„â–„â–„â–„ â–„â–„â–„â–„â–„â–„â–„â–„â–„â–„â–„ â–„â–„â–„â–„â–„â–„â–„â–„â–„ ▀▀█ + ██████ █████ ███ █████ ███ █████ ███ ▀█ + ██████ █████ ███ █████ ▀▀▀ █████ ███ ▄█▄ + ██████ █████ ███ █████ █████ ███ ████▄ + ██████ █████ ███ █████ â–„â–„â–„ █████ ███ █████ + ██████ █████ ███ ████ ███ █████ ███ ████▀ + ▀▀▀██▄ ▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀ ██▀ + ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ + +started on port 3000 +``` + +## Getting help + +Check out [a quick tour](https://loco.rs/docs/getting-started/tour/) or [the complete guide](https://loco.rs/docs/getting-started/guide/). diff --git a/examples/loco_starter/config/development.yaml b/examples/loco_starter/config/development.yaml new file mode 100644 index 000000000..4d1837a78 --- /dev/null +++ b/examples/loco_starter/config/development.yaml @@ -0,0 +1,129 @@ +# Loco configuration file documentation + +# Application logging configuration +logger: + # Enable or disable logging. + enable: true + # Enable pretty backtrace (sets RUST_BACKTRACE=1) + pretty_backtrace: true + # Log level, options: trace, debug, info, warn or error. + level: debug + # Define the logging format. options: compact, pretty or Json + format: compact + # By default the logger has filtering only logs that came from your code or logs that came from `loco` framework. to see all third party libraries + # Uncomment the line below to override to see all third party libraries you can enable this config and override the logger filters. + # override_filter: trace + +# Web server configuration +server: + # Port on which the server will listen. the server binding is 0.0.0.0:{PORT} + port: 3000 + # The UI hostname or IP address that mailers will point to. + host: http://localhost + # Out of the box middleware configuration. to disable middleware you can changed the `enable` field to `false` of comment the middleware block + middlewares: + # Enable Etag cache header middleware + etag: + enable: true + # Allows to limit the payload size request. payload that bigger than this file will blocked the request. + limit_payload: + # Enable/Disable the middleware. + enable: true + # the limit size. can be b,kb,kib,mb,mib,gb,gib + body_limit: 5mb + # Generating a unique request ID and enhancing logging with additional information such as the start and completion of request processing, latency, status code, and other request details. + logger: + # Enable/Disable the middleware. + enable: true + # when your code is panicked, the request still returns 500 status code. + catch_panic: + # Enable/Disable the middleware. + enable: true + # Timeout for incoming requests middleware. requests that take more time from the configuration will cute and 408 status code will returned. + timeout_request: + # Enable/Disable the middleware. + enable: false + # Duration time in milliseconds. + timeout: 5000 + cors: + enable: true + # Set the value of the [`Access-Control-Allow-Origin`][mdn] header + # allow_origins: + # - https://loco.rs + # Set the value of the [`Access-Control-Allow-Headers`][mdn] header + # allow_headers: + # - Content-Type + # Set the value of the [`Access-Control-Allow-Methods`][mdn] header + # allow_methods: + # - POST + # Set the value of the [`Access-Control-Max-Age`][mdn] header in seconds + # max_age: 3600 + +# Worker Configuration +workers: + # specifies the worker mode. Options: + # - BackgroundQueue - Workers operate asynchronously in the background, processing queued. + # - ForegroundBlocking - Workers operate in the foreground and block until tasks are completed. + # - BackgroundAsync - Workers operate asynchronously in the background, processing tasks with async capabilities. + mode: BackgroundQueue + +# Mailer Configuration. +mailer: + # SMTP mailer configuration. + smtp: + # Enable/Disable smtp mailer. + enable: true + # SMTP server host. e.x localhost, smtp.gmail.com + host: {{ get_env(name="MAILER_HOST", default="localhost") }} + # SMTP server port + port: 1025 + # Use secure connection (SSL/TLS). + secure: false + # auth: + # user: + # password: + +# Initializers Configuration +# initializers: +# oauth2: +# authorization_code: # Authorization code grant type +# - client_identifier: google # Identifier for the OAuth2 provider. Replace 'google' with your provider's name if different, must be unique within the oauth2 config. +# ... other fields + +# Database Configuration +database: + # Database connection URI + uri: {{ get_env(name="DATABASE_URL", default="postgres://loco:loco@localhost:5432/loco_starter_development") }} + # When enabled, the sql query will be logged. + enable_logging: false + # Set the timeout duration when acquiring a connection. + connect_timeout: 500 + # Set the idle duration before closing a connection. + idle_timeout: 500 + # Minimum number of connections for a pool. + min_connections: 1 + # Maximum number of connections for a pool. + max_connections: 1 + # Run migration up when application loaded + auto_migrate: true + # Truncate database when application loaded. This is a dangerous operation, make sure that you using this flag only on dev environments or test mode + dangerously_truncate: false + # Recreating schema when application loaded. This is a dangerous operation, make sure that you using this flag only on dev environments or test mode + dangerously_recreate: false + +# Redis Configuration +redis: + # Redis connection URI + uri: {{ get_env(name="REDIS_URL", default="redis://127.0.0.1") }} + # Dangerously flush all data in Redis on startup. dangerous operation, make sure that you using this flag only on dev environments or test mode + dangerously_flush: false + +# Authentication Configuration +auth: + # JWT authentication + jwt: + # Secret key for token generation and verification + secret: pByQUgg4GmXKAqQQvAGo + # Token expiration time in seconds + expiration: 604800 # 7 days + diff --git a/examples/loco_starter/config/test.yaml b/examples/loco_starter/config/test.yaml new file mode 100644 index 000000000..03f464e3c --- /dev/null +++ b/examples/loco_starter/config/test.yaml @@ -0,0 +1,126 @@ +# Loco configuration file documentation + +# Application logging configuration +logger: + # Enable or disable logging. + enable: false + # Log level, options: trace, debug, info, warn or error. + level: debug + # Define the logging format. options: compact, pretty or Json + format: compact + # By default the logger has filtering only logs that came from your code or logs that came from `loco` framework. to see all third party libraries + # Uncomment the line below to override to see all third party libraries you can enable this config and override the logger filters. + # override_filter: trace + +# Web server configuration +server: + # Port on which the server will listen. the server binding is 0.0.0.0:{PORT} + port: 3000 + # The UI hostname or IP address that mailers will point to. + host: http://localhost + # Out of the box middleware configuration. to disable middleware you can changed the `enable` field to `false` of comment the middleware block + middlewares: + # Allows to limit the payload size request. payload that bigger than this file will blocked the request. + limit_payload: + # Enable/Disable the middleware. + enable: true + # the limit size. can be b,kb,kib,mb,mib,gb,gib + body_limit: 5mb + # Generating a unique request ID and enhancing logging with additional information such as the start and completion of request processing, latency, status code, and other request details. + logger: + # Enable/Disable the middleware. + enable: true + # when your code is panicked, the request still returns 500 status code. + catch_panic: + # Enable/Disable the middleware. + enable: true + # Timeout for incoming requests middleware. requests that take more time from the configuration will cute and 408 status code will returned. + timeout_request: + # Enable/Disable the middleware. + enable: false + # Duration time in milliseconds. + timeout: 5000 + cors: + enable: true + # Set the value of the [`Access-Control-Allow-Origin`][mdn] header + # allow_origins: + # - https://loco.rs + # Set the value of the [`Access-Control-Allow-Headers`][mdn] header + # allow_headers: + # - Content-Type + # Set the value of the [`Access-Control-Allow-Methods`][mdn] header + # allow_methods: + # - POST + # Set the value of the [`Access-Control-Max-Age`][mdn] header in seconds + # max_age: 3600 + +# Worker Configuration +workers: + # specifies the worker mode. Options: + # - BackgroundQueue - Workers operate asynchronously in the background, processing queued. + # - ForegroundBlocking - Workers operate in the foreground and block until tasks are completed. + # - BackgroundAsync - Workers operate asynchronously in the background, processing tasks with async capabilities. + mode: ForegroundBlocking + +# Mailer Configuration. +mailer: + # SMTP mailer configuration. + smtp: + # Enable/Disable smtp mailer. + enable: true + # SMTP server host. e.x localhost, smtp.gmail.com + host: localhost + # SMTP server port + port: 1025 + # Use secure connection (SSL/TLS). + secure: false + # auth: + # user: + # password: + stub: true + +# Initializers Configuration +# initializers: +# oauth2: +# authorization_code: # Authorization code grant type +# - client_identifier: google # Identifier for the OAuth2 provider. Replace 'google' with your provider's name if different, must be unique within the oauth2 config. +# ... other fields + + +# Database Configuration +database: + # Database connection URI + uri: {{get_env(name="DATABASE_URL", default="postgres://loco:loco@localhost:5432/loco_starter_test")}} + # When enabled, the sql query will be logged. + enable_logging: false + # Set the timeout duration when acquiring a connection. + connect_timeout: 500 + # Set the idle duration before closing a connection. + idle_timeout: 500 + # Minimum number of connections for a pool. + min_connections: 1 + # Maximum number of connections for a pool. + max_connections: 1 + # Run migration up when application loaded + auto_migrate: true + # Truncate database when application loaded. This is a dangerous operation, make sure that you using this flag only on dev environments or test mode + dangerously_truncate: true + # Recreating schema when application loaded. This is a dangerous operation, make sure that you using this flag only on dev environments or test mode + dangerously_recreate: false + +# Redis Configuration +redis: + # Redis connection URI + uri: {{get_env(name="REDIS_URL", default="redis://127.0.0.1")}} + # Dangerously flush all data in Redis on startup. dangerous operation, make sure that you using this flag only on dev environments or test mode + dangerously_flush: false + +# Authentication Configuration +auth: + # JWT authentication + jwt: + # Secret key for token generation and verification + secret: 5RktQavXmW19seTpqRum + # Token expiration time in seconds + expiration: 604800 # 7 days + diff --git a/examples/loco_starter/examples/playground.rs b/examples/loco_starter/examples/playground.rs new file mode 100644 index 000000000..f98b206c3 --- /dev/null +++ b/examples/loco_starter/examples/playground.rs @@ -0,0 +1,22 @@ +use eyre::Context; +#[allow(unused_imports)] +use loco_rs::{cli::playground, prelude::*}; +use loco_starter::app::App; + +#[tokio::main] +async fn main() -> eyre::Result<()> { + let _ctx = playground::().await.context("playground")?; + + // let active_model: articles::ActiveModel = ActiveModel { + // title: Set(Some("how to build apps in 3 steps".to_string())), + // content: Set(Some("use Loco: https://loco.rs".to_string())), + // ..Default::default() + // }; + // active_model.insert(&ctx.db).await.unwrap(); + + // let res = articles::Entity::find().all(&ctx.db).await.unwrap(); + // println!("{:?}", res); + println!("welcome to playground. edit me at `examples/playground.rs`"); + + Ok(()) +} diff --git a/examples/loco_starter/migration/Cargo.toml b/examples/loco_starter/migration/Cargo.toml new file mode 100644 index 000000000..5262af542 --- /dev/null +++ b/examples/loco_starter/migration/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "migration" +version = "0.1.0" +edition = "2021" +publish = false + +[lib] +name = "migration" +path = "src/lib.rs" + +[dependencies] +async-std = { version = "1", features = ["attributes", "tokio1"] } +loco-rs = { version = "0.4.0" } + +[dependencies.sea-orm-migration] +version = "1.0.0-rc.1" +features = [ + # Enable at least one `ASYNC_RUNTIME` and `DATABASE_DRIVER` feature if you want to run migration via CLI. + # View the list of supported features at https://www.sea-ql.org/SeaORM/docs/install-and-config/database-and-async-runtime. + # e.g. + "runtime-tokio-rustls", # `ASYNC_RUNTIME` feature +] diff --git a/examples/loco_starter/migration/README.md b/examples/loco_starter/migration/README.md new file mode 100644 index 000000000..b3ea53eb4 --- /dev/null +++ b/examples/loco_starter/migration/README.md @@ -0,0 +1,41 @@ +# Running Migrator CLI + +- Generate a new migration file + ```sh + cargo run -- migrate generate MIGRATION_NAME + ``` +- Apply all pending migrations + ```sh + cargo run + ``` + ```sh + cargo run -- up + ``` +- Apply first 10 pending migrations + ```sh + cargo run -- up -n 10 + ``` +- Rollback last applied migrations + ```sh + cargo run -- down + ``` +- Rollback last 10 applied migrations + ```sh + cargo run -- down -n 10 + ``` +- Drop all tables from the database, then reapply all migrations + ```sh + cargo run -- fresh + ``` +- Rollback all applied migrations, then reapply all migrations + ```sh + cargo run -- refresh + ``` +- Rollback all applied migrations + ```sh + cargo run -- reset + ``` +- Check the status of all migrations + ```sh + cargo run -- status + ``` diff --git a/examples/loco_starter/migration/src/lib.rs b/examples/loco_starter/migration/src/lib.rs new file mode 100644 index 000000000..f4f27b76b --- /dev/null +++ b/examples/loco_starter/migration/src/lib.rs @@ -0,0 +1,20 @@ +#![allow(elided_lifetimes_in_paths)] +#![allow(clippy::wildcard_imports)] +pub use sea_orm_migration::prelude::*; + +mod m20220101_000001_users; +mod m20231103_114510_notes; +mod m20240520_173001_files; + +pub struct Migrator; + +#[async_trait::async_trait] +impl MigratorTrait for Migrator { + fn migrations() -> Vec> { + vec![ + Box::new(m20220101_000001_users::Migration), + Box::new(m20231103_114510_notes::Migration), + Box::new(m20240520_173001_files::Migration), + ] + } +} diff --git a/examples/loco_starter/migration/src/m20220101_000001_users.rs b/examples/loco_starter/migration/src/m20220101_000001_users.rs new file mode 100644 index 000000000..4dca0b9d9 --- /dev/null +++ b/examples/loco_starter/migration/src/m20220101_000001_users.rs @@ -0,0 +1,47 @@ +use sea_orm_migration::{prelude::*, schema::*}; + +#[derive(DeriveMigrationName)] +pub struct Migration; + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + let table = table_auto(Users::Table) + .col(pk_auto(Users::Id)) + .col(uuid(Users::Pid)) + .col(string_uniq(Users::Email)) + .col(string(Users::Password)) + .col(string(Users::ApiKey).unique_key()) + .col(string(Users::Name)) + .col(string_null(Users::ResetToken)) + .col(timestamp_null(Users::ResetSentAt)) + .col(string_null(Users::EmailVerificationToken)) + .col(timestamp_null(Users::EmailVerificationSentAt)) + .col(timestamp_null(Users::EmailVerifiedAt)) + .to_owned(); + manager.create_table(table).await?; + Ok(()) + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(Users::Table).to_owned()) + .await + } +} + +#[derive(Iden)] +pub enum Users { + Table, + Id, + Pid, + Email, + Name, + Password, + ApiKey, + ResetToken, + ResetSentAt, + EmailVerificationToken, + EmailVerificationSentAt, + EmailVerifiedAt, +} diff --git a/examples/loco_starter/migration/src/m20231103_114510_notes.rs b/examples/loco_starter/migration/src/m20231103_114510_notes.rs new file mode 100644 index 000000000..688c39078 --- /dev/null +++ b/examples/loco_starter/migration/src/m20231103_114510_notes.rs @@ -0,0 +1,33 @@ +use sea_orm_migration::{prelude::*, schema::*}; + +#[derive(DeriveMigrationName)] +pub struct Migration; + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_table( + table_auto(Notes::Table) + .col(pk_auto(Notes::Id)) + .col(string_null(Notes::Title)) + .col(string_null(Notes::Content)) + .to_owned(), + ) + .await + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(Notes::Table).to_owned()) + .await + } +} + +#[derive(DeriveIden)] +pub enum Notes { + Table, + Id, + Title, + Content, +} diff --git a/examples/loco_starter/migration/src/m20240520_173001_files.rs b/examples/loco_starter/migration/src/m20240520_173001_files.rs new file mode 100644 index 000000000..d7ad39493 --- /dev/null +++ b/examples/loco_starter/migration/src/m20240520_173001_files.rs @@ -0,0 +1,41 @@ +use sea_orm_migration::{prelude::*, schema::*}; + +use super::m20231103_114510_notes::Notes; + +#[derive(DeriveMigrationName)] +pub struct Migration; + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_table( + table_auto(Files::Table) + .col(pk_auto(Files::Id)) + .col(integer(Files::NotesId)) + .col(string(Files::FilePath)) + .foreign_key( + ForeignKey::create() + .name("FK_files_notes_id") + .from(Files::Table, Files::NotesId) + .to(Notes::Table, Notes::Id), + ) + .to_owned(), + ) + .await + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(Files::Table).to_owned()) + .await + } +} + +#[derive(DeriveIden)] +pub enum Files { + Table, + Id, + NotesId, + FilePath, +} diff --git a/examples/loco_starter/migration/src/main.rs b/examples/loco_starter/migration/src/main.rs new file mode 100644 index 000000000..c6b6e48db --- /dev/null +++ b/examples/loco_starter/migration/src/main.rs @@ -0,0 +1,6 @@ +use sea_orm_migration::prelude::*; + +#[async_std::main] +async fn main() { + cli::run_cli(migration::Migrator).await; +} diff --git a/examples/loco_starter/src/app.rs b/examples/loco_starter/src/app.rs new file mode 100644 index 000000000..fcb67598e --- /dev/null +++ b/examples/loco_starter/src/app.rs @@ -0,0 +1,73 @@ +use std::path::Path; + +use async_trait::async_trait; +use loco_rs::{ + app::{AppContext, Hooks}, + boot::{create_app, BootResult, StartMode}, + controller::AppRoutes, + db::{self, truncate_table}, + environment::Environment, + task::Tasks, + worker::{AppWorker, Processor}, + Result, +}; +use migration::Migrator; +use sea_orm::DatabaseConnection; + +use crate::{ + controllers, + models::_entities::{notes, users}, + tasks, + workers::downloader::DownloadWorker, +}; + +pub struct App; +#[async_trait] +impl Hooks for App { + fn app_name() -> &'static str { + env!("CARGO_CRATE_NAME") + } + + fn app_version() -> String { + format!( + "{} ({})", + env!("CARGO_PKG_VERSION"), + option_env!("BUILD_SHA") + .or(option_env!("GITHUB_SHA")) + .unwrap_or("dev") + ) + } + + async fn boot(mode: StartMode, environment: &Environment) -> Result { + create_app::(mode, environment).await + } + + fn routes(_ctx: &AppContext) -> AppRoutes { + AppRoutes::with_default_routes() + .prefix("/api") + .add_route(controllers::notes::routes()) + .add_route(controllers::auth::routes()) + .add_route(controllers::user::routes()) + .add_route(controllers::files::routes()) + } + + fn connect_workers<'a>(p: &'a mut Processor, ctx: &'a AppContext) { + p.register(DownloadWorker::build(ctx)); + } + + fn register_tasks(tasks: &mut Tasks) { + tasks.register(tasks::seed::SeedData); + } + + async fn truncate(db: &DatabaseConnection) -> Result<()> { + truncate_table(db, users::Entity).await?; + truncate_table(db, notes::Entity).await?; + Ok(()) + } + + async fn seed(db: &DatabaseConnection, base: &Path) -> Result<()> { + db::seed::(db, &base.join("users.yaml").display().to_string()).await?; + db::seed::(db, &base.join("notes.yaml").display().to_string()).await?; + Ok(()) + } +} diff --git a/examples/loco_starter/src/bin/main.rs b/examples/loco_starter/src/bin/main.rs new file mode 100644 index 000000000..57fe67cd5 --- /dev/null +++ b/examples/loco_starter/src/bin/main.rs @@ -0,0 +1,8 @@ +use loco_rs::cli; +use loco_starter::app::App; +use migration::Migrator; + +#[tokio::main] +async fn main() -> eyre::Result<()> { + cli::main::().await +} diff --git a/examples/loco_starter/src/controllers/auth.rs b/examples/loco_starter/src/controllers/auth.rs new file mode 100644 index 000000000..fd15dcdce --- /dev/null +++ b/examples/loco_starter/src/controllers/auth.rs @@ -0,0 +1,156 @@ +use axum::debug_handler; +use loco_rs::prelude::*; +use serde::{Deserialize, Serialize}; + +use crate::{ + mailers::auth::AuthMailer, + models::{ + _entities::users, + users::{LoginParams, RegisterParams}, + }, + views::auth::LoginResponse, +}; +#[derive(Debug, Deserialize, Serialize)] +pub struct VerifyParams { + pub token: String, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct ForgotParams { + pub email: String, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct ResetParams { + pub token: String, + pub password: String, +} + +/// Register function creates a new user with the given parameters and sends a +/// welcome email to the user +#[debug_handler] +async fn register( + State(ctx): State, + Json(params): Json, +) -> Result { + let res = users::Model::create_with_password(&ctx.db, ¶ms).await; + + let user = match res { + Ok(user) => user, + Err(err) => { + tracing::info!( + message = err.to_string(), + user_email = ¶ms.email, + "could not register user", + ); + return format::json(()); + } + }; + + // Skip email verification, all new registrations are considered verified + let _user = user.into_active_model().verified(&ctx.db).await?; + + // Skip sending verification email as we don't have a mail server + /* + let user = user + .into_active_model() + .set_email_verification_sent(&ctx.db) + .await?; + + AuthMailer::send_welcome(&ctx, &user).await?; + */ + + format::json(()) +} + +/// Verify register user. if the user not verified his email, he can't login to +/// the system. +#[debug_handler] +async fn verify( + State(ctx): State, + Json(params): Json, +) -> Result { + let user = users::Model::find_by_verification_token(&ctx.db, ¶ms.token).await?; + + if user.email_verified_at.is_some() { + tracing::info!(pid = user.pid.to_string(), "user already verified"); + } else { + let active_model = user.into_active_model(); + let user = active_model.verified(&ctx.db).await?; + tracing::info!(pid = user.pid.to_string(), "user verified"); + } + + format::json(()) +} + +/// In case the user forgot his password this endpoints generate a forgot token +/// and send email to the user. In case the email not found in our DB, we are +/// returning a valid request for for security reasons (not exposing users DB +/// list). +#[debug_handler] +async fn forgot( + State(ctx): State, + Json(params): Json, +) -> Result { + let Ok(user) = users::Model::find_by_email(&ctx.db, ¶ms.email).await else { + // we don't want to expose our users email. if the email is invalid we still + // returning success to the caller + return format::json(()); + }; + + let user = user + .into_active_model() + .set_forgot_password_sent(&ctx.db) + .await?; + + AuthMailer::forgot_password(&ctx, &user).await?; + + format::json(()) +} + +/// reset user password by the given parameters +#[debug_handler] +async fn reset(State(ctx): State, Json(params): Json) -> Result { + let Ok(user) = users::Model::find_by_reset_token(&ctx.db, ¶ms.token).await else { + // we don't want to expose our users email. if the email is invalid we still + // returning success to the caller + tracing::info!("reset token not found"); + + return format::json(()); + }; + user.into_active_model() + .reset_password(&ctx.db, ¶ms.password) + .await?; + + format::json(()) +} + +/// Creates a user login and returns a token +#[debug_handler] +async fn login(State(ctx): State, Json(params): Json) -> Result { + let user = users::Model::find_by_email(&ctx.db, ¶ms.email).await?; + + let valid = user.verify_password(¶ms.password); + + if !valid { + return unauthorized("unauthorized!"); + } + + let jwt_secret = ctx.config.get_jwt_config()?; + + let token = user + .generate_jwt(&jwt_secret.secret, &jwt_secret.expiration) + .or_else(|_| unauthorized("unauthorized!"))?; + + format::json(LoginResponse::new(&user, &token)) +} + +pub fn routes() -> Routes { + Routes::new() + .prefix("auth") + .add("/register", post(register)) + .add("/verify", post(verify)) + .add("/login", post(login)) + .add("/forgot", post(forgot)) + .add("/reset", post(reset)) +} diff --git a/examples/loco_starter/src/controllers/files.rs b/examples/loco_starter/src/controllers/files.rs new file mode 100644 index 000000000..3dc5d7d40 --- /dev/null +++ b/examples/loco_starter/src/controllers/files.rs @@ -0,0 +1,125 @@ +#![allow(clippy::missing_errors_doc)] +#![allow(clippy::unnecessary_struct_initialization)] +#![allow(clippy::unused_async)] +use std::{fs, io::Write, path::PathBuf}; + +use axum::{body::Body, debug_handler, extract::Multipart}; +use loco_rs::prelude::*; +use sea_orm::QueryOrder; +use serde::{Deserialize, Serialize}; +use tokio_util::io::ReaderStream; + +use crate::models::_entities::files; + +const upload_dir: &str = "./uploads"; + +#[debug_handler] +pub async fn upload( + auth: auth::JWT, + Path(notes_id): Path, + State(ctx): State, + mut multipart: Multipart, +) -> Result { + // Collect all uploaded files + let mut files = Vec::new(); + + // Iterate all files in the POST body + while let Some(field) = multipart.next_field().await.map_err(|err| { + tracing::error!(error = ?err,"could not readd multipart"); + Error::BadRequest("could not readd multipart".into()) + })? { + // Get the file name + let file_name = match field.file_name() { + Some(file_name) => file_name.to_string(), + _ => return Err(Error::BadRequest("file name not found".into())), + }; + + // Get the file content as bytes + let content = field.bytes().await.map_err(|err| { + tracing::error!(error = ?err,"could not readd bytes"); + Error::BadRequest("could not readd bytes".into()) + })?; + + // Create a folder to store the uploaded file + let now = chrono::offset::Local::now() + .format("%Y%m%d_%H%M%S") + .to_string(); + let uuid = uuid::Uuid::new_v4().to_string(); + let folder = format!("{now}_{uuid}"); + let upload_folder = PathBuf::from(upload_dir).join(&folder); + fs::create_dir_all(&upload_folder)?; + + // Write the file into the newly created folder + let path = upload_folder.join(file_name); + let mut f = fs::OpenOptions::new() + .create_new(true) + .write(true) + .open(&path)?; + f.write_all(&content)?; + f.flush()?; + + // Record the file upload in database + let file = files::ActiveModel { + notes_id: ActiveValue::Set(notes_id), + file_path: ActiveValue::Set( + path.strip_prefix(upload_dir) + .unwrap() + .to_str() + .unwrap() + .to_string(), + ), + ..Default::default() + } + .insert(&ctx.db) + .await?; + + files.push(file); + } + + format::json(files) +} + +#[debug_handler] +pub async fn list( + auth: auth::JWT, + Path(notes_id): Path, + State(ctx): State, +) -> Result { + // Fetch all files uploaded for a specific notes + let files = files::Entity::find() + .filter(files::Column::NotesId.eq(notes_id)) + .order_by_asc(files::Column::Id) + .all(&ctx.db) + .await?; + + format::json(files) +} + +#[debug_handler] +pub async fn view( + auth: auth::JWT, + Path(files_id): Path, + State(ctx): State, +) -> Result { + // Fetch the file info from database + let file = files::Entity::find_by_id(files_id) + .one(&ctx.db) + .await? + .expect("File not found"); + + // Stream the file + let file = tokio::fs::File::open(format!("{upload_dir}/{}", file.file_path)).await?; + let stream = ReaderStream::new(file); + let body = Body::from_stream(stream); + + Ok(format::render().response().body(body)?) +} + +pub fn routes() -> Routes { + // Bind the routes + Routes::new() + .prefix("files") + .add("/upload/:notes_id", post(upload)) + .add("/list/:notes_id", get(list)) + .add("/view/:files_id", get(view)) +} diff --git a/examples/loco_starter/src/controllers/mod.rs b/examples/loco_starter/src/controllers/mod.rs new file mode 100644 index 000000000..16dc8522e --- /dev/null +++ b/examples/loco_starter/src/controllers/mod.rs @@ -0,0 +1,4 @@ +pub mod auth; +pub mod files; +pub mod notes; +pub mod user; diff --git a/examples/loco_starter/src/controllers/notes.rs b/examples/loco_starter/src/controllers/notes.rs new file mode 100644 index 000000000..f378fb4d8 --- /dev/null +++ b/examples/loco_starter/src/controllers/notes.rs @@ -0,0 +1,75 @@ +#![allow(clippy::missing_errors_doc)] +#![allow(clippy::unnecessary_struct_initialization)] +#![allow(clippy::unused_async)] +use axum::debug_handler; +use loco_rs::prelude::*; +use serde::{Deserialize, Serialize}; + +use crate::models::_entities::notes::{ActiveModel, Entity, Model}; + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Params { + pub title: Option, + pub content: Option, +} + +impl Params { + fn update(&self, item: &mut ActiveModel) { + item.title = Set(self.title.clone()); + item.content = Set(self.content.clone()); + } +} + +async fn load_item(ctx: &AppContext, id: i32) -> Result { + let item = Entity::find_by_id(id).one(&ctx.db).await?; + item.ok_or_else(|| Error::NotFound) +} + +#[debug_handler] +pub async fn list(State(ctx): State) -> Result { + format::json(Entity::find().all(&ctx.db).await?) +} + +#[debug_handler] +pub async fn add(State(ctx): State, Json(params): Json) -> Result { + let mut item = ActiveModel { + ..Default::default() + }; + params.update(&mut item); + let item = item.insert(&ctx.db).await?; + format::json(item) +} + +#[debug_handler] +pub async fn update( + Path(id): Path, + State(ctx): State, + Json(params): Json, +) -> Result { + let item = load_item(&ctx, id).await?; + let mut item = item.into_active_model(); + params.update(&mut item); + let item = item.update(&ctx.db).await?; + format::json(item) +} + +#[debug_handler] +pub async fn remove(Path(id): Path, State(ctx): State) -> Result { + load_item(&ctx, id).await?.delete(&ctx.db).await?; + format::empty() +} + +#[debug_handler] +pub async fn get_one(Path(id): Path, State(ctx): State) -> Result { + format::json(load_item(&ctx, id).await?) +} + +pub fn routes() -> Routes { + Routes::new() + .prefix("notes") + .add("/", get(list)) + .add("/", post(add)) + .add("/:id", get(get_one)) + .add("/:id", delete(remove)) + .add("/:id", post(update)) +} diff --git a/examples/loco_starter/src/controllers/user.rs b/examples/loco_starter/src/controllers/user.rs new file mode 100644 index 000000000..1f432ae9e --- /dev/null +++ b/examples/loco_starter/src/controllers/user.rs @@ -0,0 +1,14 @@ +use axum::debug_handler; +use loco_rs::prelude::*; + +use crate::{models::_entities::users, views::user::CurrentResponse}; + +#[debug_handler] +async fn current(auth: auth::JWT, State(ctx): State) -> Result { + let user = users::Model::find_by_pid(&ctx.db, &auth.claims.pid).await?; + format::json(CurrentResponse::new(&user)) +} + +pub fn routes() -> Routes { + Routes::new().prefix("user").add("/current", get(current)) +} diff --git a/examples/loco_starter/src/fixtures/notes.yaml b/examples/loco_starter/src/fixtures/notes.yaml new file mode 100644 index 000000000..2237af81c --- /dev/null +++ b/examples/loco_starter/src/fixtures/notes.yaml @@ -0,0 +1,11 @@ +--- +- id: 1 + title: Loco note 1 + content: Loco note 1 content + created_at: "2023-11-12T12:34:56.789" + updated_at: "2023-11-12T12:34:56.789" +- id: 2 + title: Loco note 2 + content: Loco note 2 content + created_at: "2023-11-12T12:34:56.789" + updated_at: "2023-11-12T12:34:56.789" diff --git a/examples/loco_starter/src/fixtures/users.yaml b/examples/loco_starter/src/fixtures/users.yaml new file mode 100644 index 000000000..8b414e473 --- /dev/null +++ b/examples/loco_starter/src/fixtures/users.yaml @@ -0,0 +1,17 @@ +--- +- id: 1 + pid: 11111111-1111-1111-1111-111111111111 + email: user1@example.com + password: "$argon2id$v=19$m=19456,t=2,p=1$ETQBx4rTgNAZhSaeYZKOZg$eYTdH26CRT6nUJtacLDEboP0li6xUwUF/q5nSlQ8uuc" + api_key: lo-95ec80d7-cb60-4b70-9b4b-9ef74cb88758 + name: user1 + created_at: "2023-11-12T12:34:56.789" + updated_at: "2023-11-12T12:34:56.789" +- id: 2 + pid: 22222222-2222-2222-2222-222222222222 + email: user2@example.com + password: "$argon2id$v=19$m=19456,t=2,p=1$ETQBx4rTgNAZhSaeYZKOZg$eYTdH26CRT6nUJtacLDEboP0li6xUwUF/q5nSlQ8uuc" + api_key: lo-153561ca-fa84-4e1b-813a-c62526d0a77e + name: user2 + created_at: "2023-11-12T12:34:56.789" + updated_at: "2023-11-12T12:34:56.789" diff --git a/examples/loco_starter/src/lib.rs b/examples/loco_starter/src/lib.rs new file mode 100644 index 000000000..bcd9cbed8 --- /dev/null +++ b/examples/loco_starter/src/lib.rs @@ -0,0 +1,7 @@ +pub mod app; +pub mod controllers; +pub mod mailers; +pub mod models; +pub mod tasks; +pub mod views; +pub mod workers; diff --git a/examples/loco_starter/src/mailers/auth.rs b/examples/loco_starter/src/mailers/auth.rs new file mode 100644 index 000000000..30bb1bf2f --- /dev/null +++ b/examples/loco_starter/src/mailers/auth.rs @@ -0,0 +1,65 @@ +// auth mailer +#![allow(non_upper_case_globals)] + +use loco_rs::prelude::*; +use serde_json::json; + +use crate::models::users; + +static welcome: Dir<'_> = include_dir!("src/mailers/auth/welcome"); +static forgot: Dir<'_> = include_dir!("src/mailers/auth/forgot"); +// #[derive(Mailer)] // -- disabled for faster build speed. it works. but lets +// move on for now. + +#[allow(clippy::module_name_repetitions)] +pub struct AuthMailer {} +impl Mailer for AuthMailer {} +impl AuthMailer { + /// Sending welcome email the the given user + /// + /// # Errors + /// + /// When email sending is failed + pub async fn send_welcome(ctx: &AppContext, user: &users::Model) -> Result<()> { + Self::mail_template( + ctx, + &welcome, + mailer::Args { + to: user.email.to_string(), + locals: json!({ + "name": user.name, + "verifyToken": user.email_verification_token, + "domain": ctx.config.server.full_url() + }), + ..Default::default() + }, + ) + .await?; + + Ok(()) + } + + /// Sending forgot password email + /// + /// # Errors + /// + /// When email sending is failed + pub async fn forgot_password(ctx: &AppContext, user: &users::Model) -> Result<()> { + Self::mail_template( + ctx, + &forgot, + mailer::Args { + to: user.email.to_string(), + locals: json!({ + "name": user.name, + "resetToken": user.reset_token, + "domain": ctx.config.server.full_url() + }), + ..Default::default() + }, + ) + .await?; + + Ok(()) + } +} diff --git a/examples/loco_starter/src/mailers/auth/forgot/html.t b/examples/loco_starter/src/mailers/auth/forgot/html.t new file mode 100644 index 000000000..221dd6020 --- /dev/null +++ b/examples/loco_starter/src/mailers/auth/forgot/html.t @@ -0,0 +1,11 @@ +; + + + Hey {{name}}, + Forgot your password? No worries! You can reset it by clicking the link below: + Reset Your Password + If you didn't request a password reset, please ignore this email. + Best regards,
The Loco Team
+ + + diff --git a/examples/loco_starter/src/mailers/auth/forgot/subject.t b/examples/loco_starter/src/mailers/auth/forgot/subject.t new file mode 100644 index 000000000..4938df1e3 --- /dev/null +++ b/examples/loco_starter/src/mailers/auth/forgot/subject.t @@ -0,0 +1 @@ +Your reset password link diff --git a/examples/loco_starter/src/mailers/auth/forgot/text.t b/examples/loco_starter/src/mailers/auth/forgot/text.t new file mode 100644 index 000000000..58c30fd8d --- /dev/null +++ b/examples/loco_starter/src/mailers/auth/forgot/text.t @@ -0,0 +1,3 @@ +Reset your password with this link: + +http://localhost/reset#{{resetToken}} diff --git a/examples/loco_starter/src/mailers/auth/welcome/html.t b/examples/loco_starter/src/mailers/auth/welcome/html.t new file mode 100644 index 000000000..ae4c41c65 --- /dev/null +++ b/examples/loco_starter/src/mailers/auth/welcome/html.t @@ -0,0 +1,13 @@ +; + + + Dear {{name}}, + Welcome to Loco! You can now log in to your account. + Before you get started, please verify your account by clicking the link below: + + Verify Your Account + +

Best regards,
The Loco Team

+ + + diff --git a/examples/loco_starter/src/mailers/auth/welcome/subject.t b/examples/loco_starter/src/mailers/auth/welcome/subject.t new file mode 100644 index 000000000..82cc6fbf7 --- /dev/null +++ b/examples/loco_starter/src/mailers/auth/welcome/subject.t @@ -0,0 +1 @@ +Welcome {{name}} diff --git a/examples/loco_starter/src/mailers/auth/welcome/text.t b/examples/loco_starter/src/mailers/auth/welcome/text.t new file mode 100644 index 000000000..63beefd56 --- /dev/null +++ b/examples/loco_starter/src/mailers/auth/welcome/text.t @@ -0,0 +1,4 @@ +Welcome {{name}}, you can now log in. + Verify your account with the link below: + + http://localhost/verify#{{verifyToken}} diff --git a/examples/loco_starter/src/mailers/mod.rs b/examples/loco_starter/src/mailers/mod.rs new file mode 100644 index 000000000..0e4a05d59 --- /dev/null +++ b/examples/loco_starter/src/mailers/mod.rs @@ -0,0 +1 @@ +pub mod auth; diff --git a/examples/loco_starter/src/models/_entities/files.rs b/examples/loco_starter/src/models/_entities/files.rs new file mode 100644 index 000000000..86904d965 --- /dev/null +++ b/examples/loco_starter/src/models/_entities/files.rs @@ -0,0 +1,31 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.4 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[sea_orm(table_name = "files")] +pub struct Model { + pub created_at: DateTime, + pub updated_at: DateTime, + #[sea_orm(primary_key)] + pub id: i32, + pub notes_id: i32, + pub file_path: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::notes::Entity", + from = "Column::NotesId", + to = "super::notes::Column::Id" + )] + Notes, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Notes.def() + } +} diff --git a/examples/loco_starter/src/models/_entities/mod.rs b/examples/loco_starter/src/models/_entities/mod.rs new file mode 100644 index 000000000..1b159e47c --- /dev/null +++ b/examples/loco_starter/src/models/_entities/mod.rs @@ -0,0 +1,7 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.4 + +pub mod prelude; + +pub mod files; +pub mod notes; +pub mod users; diff --git a/examples/loco_starter/src/models/_entities/notes.rs b/examples/loco_starter/src/models/_entities/notes.rs new file mode 100644 index 000000000..a77c558e6 --- /dev/null +++ b/examples/loco_starter/src/models/_entities/notes.rs @@ -0,0 +1,18 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.4 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[sea_orm(table_name = "notes")] +pub struct Model { + pub created_at: DateTime, + pub updated_at: DateTime, + #[sea_orm(primary_key)] + pub id: i32, + pub title: Option, + pub content: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} diff --git a/examples/loco_starter/src/models/_entities/prelude.rs b/examples/loco_starter/src/models/_entities/prelude.rs new file mode 100644 index 000000000..0c11ecc03 --- /dev/null +++ b/examples/loco_starter/src/models/_entities/prelude.rs @@ -0,0 +1,3 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.4 + +pub use super::{notes::Entity as Notes, users::Entity as Users}; diff --git a/examples/loco_starter/src/models/_entities/users.rs b/examples/loco_starter/src/models/_entities/users.rs new file mode 100644 index 000000000..ef1366260 --- /dev/null +++ b/examples/loco_starter/src/models/_entities/users.rs @@ -0,0 +1,29 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.2 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[sea_orm(table_name = "users")] +pub struct Model { + pub created_at: DateTime, + pub updated_at: DateTime, + #[sea_orm(primary_key)] + pub id: i32, + #[sea_orm(unique)] + pub pid: Uuid, + #[sea_orm(unique)] + pub email: String, + pub password: String, + #[sea_orm(unique)] + pub api_key: String, + pub name: String, + pub reset_token: Option, + pub reset_sent_at: Option, + pub email_verification_token: Option, + pub email_verification_sent_at: Option, + pub email_verified_at: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} diff --git a/examples/loco_starter/src/models/files.rs b/examples/loco_starter/src/models/files.rs new file mode 100644 index 000000000..6e043ce0a --- /dev/null +++ b/examples/loco_starter/src/models/files.rs @@ -0,0 +1,7 @@ +use sea_orm::entity::prelude::*; + +use super::_entities::files::ActiveModel; + +impl ActiveModelBehavior for ActiveModel { + // extend activemodel below (keep comment for generators) +} diff --git a/examples/loco_starter/src/models/mod.rs b/examples/loco_starter/src/models/mod.rs new file mode 100644 index 000000000..882ae054a --- /dev/null +++ b/examples/loco_starter/src/models/mod.rs @@ -0,0 +1,4 @@ +pub mod _entities; +pub mod files; +pub mod notes; +pub mod users; diff --git a/examples/loco_starter/src/models/notes.rs b/examples/loco_starter/src/models/notes.rs new file mode 100644 index 000000000..110259823 --- /dev/null +++ b/examples/loco_starter/src/models/notes.rs @@ -0,0 +1,7 @@ +use sea_orm::entity::prelude::*; + +use super::_entities::notes::ActiveModel; + +impl ActiveModelBehavior for ActiveModel { + // extend activemodel below (keep comment for generators) +} diff --git a/examples/loco_starter/src/models/users.rs b/examples/loco_starter/src/models/users.rs new file mode 100644 index 000000000..b9c2ec62b --- /dev/null +++ b/examples/loco_starter/src/models/users.rs @@ -0,0 +1,267 @@ +use async_trait::async_trait; +use chrono::offset::Local; +use loco_rs::{auth::jwt, hash, prelude::*}; +use serde::{Deserialize, Serialize}; +use uuid::Uuid; + +pub use super::_entities::users::{self, ActiveModel, Entity, Model}; + +#[derive(Debug, Deserialize, Serialize)] +pub struct LoginParams { + pub email: String, + pub password: String, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct RegisterParams { + pub email: String, + pub password: String, + pub name: String, +} + +#[derive(Debug, Validate, Deserialize)] +pub struct Validator { + #[validate(length(min = 2, message = "Name must be at least 2 characters long."))] + pub name: String, + #[validate(custom = "validation::is_valid_email")] + pub email: String, +} + +impl Validatable for super::_entities::users::ActiveModel { + fn validator(&self) -> Box { + Box::new(Validator { + name: self.name.as_ref().to_owned(), + email: self.email.as_ref().to_owned(), + }) + } +} + +#[async_trait::async_trait] +impl ActiveModelBehavior for super::_entities::users::ActiveModel { + async fn before_save(self, _db: &C, insert: bool) -> Result + where + C: ConnectionTrait, + { + self.validate()?; + if insert { + let mut this = self; + this.pid = ActiveValue::Set(Uuid::new_v4()); + this.api_key = ActiveValue::Set(format!("lo-{}", Uuid::new_v4())); + Ok(this) + } else { + Ok(self) + } + } +} + +#[async_trait] +impl Authenticable for super::_entities::users::Model { + async fn find_by_api_key(db: &DatabaseConnection, api_key: &str) -> ModelResult { + let user = users::Entity::find() + .filter(users::Column::ApiKey.eq(api_key)) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + async fn find_by_claims_key(db: &DatabaseConnection, claims_key: &str) -> ModelResult { + Self::find_by_pid(db, claims_key).await + } +} + +impl super::_entities::users::Model { + /// finds a user by the provided email + /// + /// # Errors + /// + /// When could not find user by the given token or DB query error + pub async fn find_by_email(db: &DatabaseConnection, email: &str) -> ModelResult { + let user = users::Entity::find() + .filter(users::Column::Email.eq(email)) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + /// finds a user by the provided verification token + /// + /// # Errors + /// + /// When could not find user by the given token or DB query error + pub async fn find_by_verification_token( + db: &DatabaseConnection, + token: &str, + ) -> ModelResult { + let user = users::Entity::find() + .filter(users::Column::EmailVerificationToken.eq(token)) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + /// /// finds a user by the provided reset token + /// + /// # Errors + /// + /// When could not find user by the given token or DB query error + pub async fn find_by_reset_token(db: &DatabaseConnection, token: &str) -> ModelResult { + let user = users::Entity::find() + .filter(users::Column::ResetToken.eq(token)) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + /// finds a user by the provided pid + /// + /// # Errors + /// + /// When could not find user or DB query error + pub async fn find_by_pid(db: &DatabaseConnection, pid: &str) -> ModelResult { + let parse_uuid = Uuid::parse_str(pid).map_err(|e| ModelError::Any(e.into()))?; + let user = users::Entity::find() + .filter(users::Column::Pid.eq(parse_uuid)) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + /// finds a user by the provided api key + /// + /// # Errors + /// + /// When could not find user by the given token or DB query error + pub async fn find_by_api_key(db: &DatabaseConnection, api_key: &str) -> ModelResult { + let user = users::Entity::find() + .filter(users::Column::ApiKey.eq(api_key)) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + /// Verifies whether the provided plain password matches the hashed password + /// + /// # Errors + /// + /// when could not verify password + #[must_use] + pub fn verify_password(&self, password: &str) -> bool { + hash::verify_password(password, &self.password) + } + + /// Asynchronously creates a user with a password and saves it to the + /// database. + /// + /// # Errors + /// + /// When could not save the user into the DB + pub async fn create_with_password( + db: &DatabaseConnection, + params: &RegisterParams, + ) -> ModelResult { + let txn = db.begin().await?; + + if users::Entity::find() + .filter(users::Column::Email.eq(¶ms.email)) + .one(&txn) + .await? + .is_some() + { + return Err(ModelError::EntityAlreadyExists {}); + } + + let password_hash = + hash::hash_password(¶ms.password).map_err(|e| ModelError::Any(e.into()))?; + let user = users::ActiveModel { + email: ActiveValue::set(params.email.to_string()), + password: ActiveValue::set(password_hash), + name: ActiveValue::set(params.name.to_string()), + ..Default::default() + } + .insert(&txn) + .await?; + + txn.commit().await?; + + Ok(user) + } + + /// Creates a JWT + /// + /// # Errors + /// + /// when could not convert user claims to jwt token + pub fn generate_jwt(&self, secret: &str, expiration: &u64) -> ModelResult { + Ok(jwt::JWT::new(secret).generate_token(expiration, self.pid.to_string())?) + } +} + +impl super::_entities::users::ActiveModel { + /// Sets the email verification information for the user and + /// updates it in the database. + /// + /// This method is used to record the timestamp when the email verification + /// was sent and generate a unique verification token for the user. + /// + /// # Errors + /// + /// when has DB query error + pub async fn set_email_verification_sent( + mut self, + db: &DatabaseConnection, + ) -> ModelResult { + self.email_verification_sent_at = ActiveValue::set(Some(Local::now().naive_local())); + self.email_verification_token = ActiveValue::Set(Some(Uuid::new_v4().to_string())); + Ok(self.update(db).await?) + } + + /// Sets the information for a reset password request, + /// generates a unique reset password token, and updates it in the + /// database. + /// + /// This method records the timestamp when the reset password token is sent + /// and generates a unique token for the user. + /// + /// # Arguments + /// + /// # Errors + /// + /// when has DB query error + pub async fn set_forgot_password_sent(mut self, db: &DatabaseConnection) -> ModelResult { + self.reset_sent_at = ActiveValue::set(Some(Local::now().naive_local())); + self.reset_token = ActiveValue::Set(Some(Uuid::new_v4().to_string())); + Ok(self.update(db).await?) + } + + /// Records the verification time when a user verifies their + /// email and updates it in the database. + /// + /// This method sets the timestamp when the user successfully verifies their + /// email. + /// + /// # Errors + /// + /// when has DB query error + pub async fn verified(mut self, db: &DatabaseConnection) -> ModelResult { + self.email_verified_at = ActiveValue::set(Some(Local::now().naive_local())); + Ok(self.update(db).await?) + } + + /// Resets the current user password with a new password and + /// updates it in the database. + /// + /// This method hashes the provided password and sets it as the new password + /// for the user. + /// # Errors + /// + /// when has DB query error or could not hashed the given password + pub async fn reset_password( + mut self, + db: &DatabaseConnection, + password: &str, + ) -> ModelResult { + self.password = + ActiveValue::set(hash::hash_password(password).map_err(|e| ModelError::Any(e.into()))?); + Ok(self.update(db).await?) + } +} diff --git a/examples/loco_starter/src/tasks/mod.rs b/examples/loco_starter/src/tasks/mod.rs new file mode 100644 index 000000000..01fbddaa2 --- /dev/null +++ b/examples/loco_starter/src/tasks/mod.rs @@ -0,0 +1 @@ +pub mod seed; diff --git a/examples/loco_starter/src/tasks/seed.rs b/examples/loco_starter/src/tasks/seed.rs new file mode 100644 index 000000000..8405ddb99 --- /dev/null +++ b/examples/loco_starter/src/tasks/seed.rs @@ -0,0 +1,44 @@ +//! This task implements data seeding functionality for initializing new +//! development/demo environments. +//! +//! # Example +//! +//! Run the task with the following command: +//! ```sh +//! cargo run task +//! ``` +//! +//! To override existing data and reset the data structure, use the following +//! command with the `refresh:true` argument: +//! ```sh +//! cargo run task seed_data refresh:true +//! ``` +use std::collections::BTreeMap; + +use loco_rs::{db, prelude::*}; +use migration::Migrator; + +use crate::app::App; + +#[allow(clippy::module_name_repetitions)] +pub struct SeedData; +#[async_trait] +impl Task for SeedData { + fn task(&self) -> TaskInfo { + TaskInfo { + name: "seed_data".to_string(), + detail: "Task for seeding data".to_string(), + } + } + + async fn run(&self, app_context: &AppContext, vars: &BTreeMap) -> Result<()> { + let refresh = vars.get("refresh").is_some_and(|refresh| refresh == "true"); + + if refresh { + db::reset::(&app_context.db).await?; + } + let path = std::path::Path::new("src/fixtures"); + db::run_app_seed::(&app_context.db, path).await?; + Ok(()) + } +} diff --git a/examples/loco_starter/src/views/auth.rs b/examples/loco_starter/src/views/auth.rs new file mode 100644 index 000000000..2240a5087 --- /dev/null +++ b/examples/loco_starter/src/views/auth.rs @@ -0,0 +1,23 @@ +use serde::{Deserialize, Serialize}; + +use crate::models::_entities::users; + +#[derive(Debug, Deserialize, Serialize)] +pub struct LoginResponse { + pub token: String, + pub pid: String, + pub name: String, + pub is_verified: bool, +} + +impl LoginResponse { + #[must_use] + pub fn new(user: &users::Model, token: &String) -> Self { + Self { + token: token.to_string(), + pid: user.pid.to_string(), + name: user.name.clone(), + is_verified: user.email_verified_at.is_some(), + } + } +} diff --git a/examples/loco_starter/src/views/mod.rs b/examples/loco_starter/src/views/mod.rs new file mode 100644 index 000000000..f9bae3db2 --- /dev/null +++ b/examples/loco_starter/src/views/mod.rs @@ -0,0 +1,2 @@ +pub mod auth; +pub mod user; diff --git a/examples/loco_starter/src/views/user.rs b/examples/loco_starter/src/views/user.rs new file mode 100644 index 000000000..9d830410f --- /dev/null +++ b/examples/loco_starter/src/views/user.rs @@ -0,0 +1,21 @@ +use serde::{Deserialize, Serialize}; + +use crate::models::_entities::users; + +#[derive(Debug, Deserialize, Serialize)] +pub struct CurrentResponse { + pub pid: String, + pub name: String, + pub email: String, +} + +impl CurrentResponse { + #[must_use] + pub fn new(user: &users::Model) -> Self { + Self { + pid: user.pid.to_string(), + name: user.name.clone(), + email: user.email.clone(), + } + } +} diff --git a/examples/loco_starter/src/workers/downloader.rs b/examples/loco_starter/src/workers/downloader.rs new file mode 100644 index 000000000..42c0bd7a4 --- /dev/null +++ b/examples/loco_starter/src/workers/downloader.rs @@ -0,0 +1,43 @@ +use std::time::Duration; + +use loco_rs::prelude::*; +use serde::{Deserialize, Serialize}; +use tokio::time::sleep; + +use crate::models::users; + +pub struct DownloadWorker { + pub ctx: AppContext, +} + +#[derive(Deserialize, Debug, Serialize)] +pub struct DownloadWorkerArgs { + pub user_guid: String, +} + +impl worker::AppWorker for DownloadWorker { + fn build(ctx: &AppContext) -> Self { + Self { ctx: ctx.clone() } + } +} + +#[async_trait] +impl worker::Worker for DownloadWorker { + async fn perform(&self, args: DownloadWorkerArgs) -> worker::Result<()> { + // TODO: Some actual work goes here... + println!("================================================"); + println!("Sending payment report to user {}", args.user_guid); + + sleep(Duration::from_millis(2000)).await; + + let all = users::Entity::find() + .all(&self.ctx.db) + .await + .map_err(Box::from)?; + for user in &all { + println!("user: {}", user.id); + } + println!("================================================"); + Ok(()) + } +} diff --git a/examples/loco_starter/src/workers/mod.rs b/examples/loco_starter/src/workers/mod.rs new file mode 100644 index 000000000..acb5733da --- /dev/null +++ b/examples/loco_starter/src/workers/mod.rs @@ -0,0 +1 @@ +pub mod downloader; diff --git a/examples/loco_starter/tests/mod.rs b/examples/loco_starter/tests/mod.rs new file mode 100644 index 000000000..e56e88257 --- /dev/null +++ b/examples/loco_starter/tests/mod.rs @@ -0,0 +1,3 @@ +mod models; +mod requests; +mod tasks; diff --git a/examples/loco_starter/tests/models/mod.rs b/examples/loco_starter/tests/models/mod.rs new file mode 100644 index 000000000..59759880d --- /dev/null +++ b/examples/loco_starter/tests/models/mod.rs @@ -0,0 +1 @@ +mod users; diff --git a/examples/loco_starter/tests/models/snapshots/can_create_with_password@users.snap b/examples/loco_starter/tests/models/snapshots/can_create_with_password@users.snap new file mode 100644 index 000000000..6e66fd35a --- /dev/null +++ b/examples/loco_starter/tests/models/snapshots/can_create_with_password@users.snap @@ -0,0 +1,21 @@ +--- +source: tests/models/users.rs +expression: res +--- +Ok( + Model { + created_at: DATE, + updated_at: DATE, + id: ID + pid: PID, + email: "test@framework.com", + password: "PASSWORD", + api_key: "lo-PID", + name: "framework", + reset_token: None, + reset_sent_at: None, + email_verification_token: None, + email_verification_sent_at: None, + email_verified_at: None, + }, +) diff --git a/examples/loco_starter/tests/models/snapshots/can_find_by_email-2@users.snap b/examples/loco_starter/tests/models/snapshots/can_find_by_email-2@users.snap new file mode 100644 index 000000000..83dc06e1d --- /dev/null +++ b/examples/loco_starter/tests/models/snapshots/can_find_by_email-2@users.snap @@ -0,0 +1,7 @@ +--- +source: tests/models/main.rs +expression: non_existing_user_results +--- +Err( + EntityNotFound, +) diff --git a/examples/loco_starter/tests/models/snapshots/can_find_by_email@users-2.snap b/examples/loco_starter/tests/models/snapshots/can_find_by_email@users-2.snap new file mode 100644 index 000000000..25c700a5a --- /dev/null +++ b/examples/loco_starter/tests/models/snapshots/can_find_by_email@users-2.snap @@ -0,0 +1,7 @@ +--- +source: tests/models/users.rs +expression: non_existing_user_results +--- +Err( + EntityNotFound, +) diff --git a/examples/loco_starter/tests/models/snapshots/can_find_by_email@users.snap b/examples/loco_starter/tests/models/snapshots/can_find_by_email@users.snap new file mode 100644 index 000000000..f4ba90415 --- /dev/null +++ b/examples/loco_starter/tests/models/snapshots/can_find_by_email@users.snap @@ -0,0 +1,21 @@ +--- +source: tests/models/users.rs +expression: existing_user +--- +Ok( + Model { + created_at: 2023-11-12T12:34:56.789, + updated_at: 2023-11-12T12:34:56.789, + id: 1, + pid: 11111111-1111-1111-1111-111111111111, + email: "user1@example.com", + password: "$argon2id$v=19$m=19456,t=2,p=1$ETQBx4rTgNAZhSaeYZKOZg$eYTdH26CRT6nUJtacLDEboP0li6xUwUF/q5nSlQ8uuc", + api_key: "lo-95ec80d7-cb60-4b70-9b4b-9ef74cb88758", + name: "user1", + reset_token: None, + reset_sent_at: None, + email_verification_token: None, + email_verification_sent_at: None, + email_verified_at: None, + }, +) diff --git a/examples/loco_starter/tests/models/snapshots/can_find_by_pid-2@users.snap b/examples/loco_starter/tests/models/snapshots/can_find_by_pid-2@users.snap new file mode 100644 index 000000000..83dc06e1d --- /dev/null +++ b/examples/loco_starter/tests/models/snapshots/can_find_by_pid-2@users.snap @@ -0,0 +1,7 @@ +--- +source: tests/models/main.rs +expression: non_existing_user_results +--- +Err( + EntityNotFound, +) diff --git a/examples/loco_starter/tests/models/snapshots/can_find_by_pid@users-2.snap b/examples/loco_starter/tests/models/snapshots/can_find_by_pid@users-2.snap new file mode 100644 index 000000000..25c700a5a --- /dev/null +++ b/examples/loco_starter/tests/models/snapshots/can_find_by_pid@users-2.snap @@ -0,0 +1,7 @@ +--- +source: tests/models/users.rs +expression: non_existing_user_results +--- +Err( + EntityNotFound, +) diff --git a/examples/loco_starter/tests/models/snapshots/can_find_by_pid@users.snap b/examples/loco_starter/tests/models/snapshots/can_find_by_pid@users.snap new file mode 100644 index 000000000..f4ba90415 --- /dev/null +++ b/examples/loco_starter/tests/models/snapshots/can_find_by_pid@users.snap @@ -0,0 +1,21 @@ +--- +source: tests/models/users.rs +expression: existing_user +--- +Ok( + Model { + created_at: 2023-11-12T12:34:56.789, + updated_at: 2023-11-12T12:34:56.789, + id: 1, + pid: 11111111-1111-1111-1111-111111111111, + email: "user1@example.com", + password: "$argon2id$v=19$m=19456,t=2,p=1$ETQBx4rTgNAZhSaeYZKOZg$eYTdH26CRT6nUJtacLDEboP0li6xUwUF/q5nSlQ8uuc", + api_key: "lo-95ec80d7-cb60-4b70-9b4b-9ef74cb88758", + name: "user1", + reset_token: None, + reset_sent_at: None, + email_verification_token: None, + email_verification_sent_at: None, + email_verified_at: None, + }, +) diff --git a/examples/loco_starter/tests/models/snapshots/can_validate_model@users.snap b/examples/loco_starter/tests/models/snapshots/can_validate_model@users.snap new file mode 100644 index 000000000..4d457a703 --- /dev/null +++ b/examples/loco_starter/tests/models/snapshots/can_validate_model@users.snap @@ -0,0 +1,9 @@ +--- +source: tests/models/main.rs +expression: res +--- +Err( + Custom( + "{\"email\":[{\"code\":\"invalid email\",\"message\":null}],\"name\":[{\"code\":\"length\",\"message\":\"Name must be at least 2 characters long.\"}]}", + ), +) diff --git a/examples/loco_starter/tests/models/snapshots/handle_create_with_password_with_duplicate@users.snap b/examples/loco_starter/tests/models/snapshots/handle_create_with_password_with_duplicate@users.snap new file mode 100644 index 000000000..ff28ea196 --- /dev/null +++ b/examples/loco_starter/tests/models/snapshots/handle_create_with_password_with_duplicate@users.snap @@ -0,0 +1,7 @@ +--- +source: tests/models/users.rs +expression: new_user +--- +Err( + EntityAlreadyExists, +) diff --git a/examples/loco_starter/tests/models/users.rs b/examples/loco_starter/tests/models/users.rs new file mode 100644 index 000000000..6e3629d01 --- /dev/null +++ b/examples/loco_starter/tests/models/users.rs @@ -0,0 +1,223 @@ +use insta::assert_debug_snapshot; +use loco_rs::{model::ModelError, testing}; +use loco_starter::{ + app::App, + models::users::{self, Model, RegisterParams}, +}; +use sea_orm::{ActiveModelTrait, ActiveValue, IntoActiveModel}; +use serial_test::serial; + +macro_rules! configure_insta { + ($($expr:expr),*) => { + let mut settings = insta::Settings::clone_current(); + settings.set_prepend_module_to_snapshot(false); + settings.set_snapshot_suffix("users"); + let _guard = settings.bind_to_scope(); + }; +} + +#[tokio::test] +#[serial] +async fn test_can_validate_model() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + + let res = users::ActiveModel { + name: ActiveValue::set("1".to_string()), + email: ActiveValue::set("invalid-email".to_string()), + ..Default::default() + } + .insert(&boot.app_context.db) + .await; + + assert_debug_snapshot!(res); +} + +#[tokio::test] +#[serial] +async fn can_create_with_password() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + + let params = RegisterParams { + email: "test@framework.com".to_string(), + password: "1234".to_string(), + name: "framework".to_string(), + }; + let res = Model::create_with_password(&boot.app_context.db, ¶ms).await; + + insta::with_settings!({ + filters => testing::cleanup_user_model() + }, { + assert_debug_snapshot!(res); + }); +} + +#[tokio::test] +#[serial] +async fn handle_create_with_password_with_duplicate() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let new_user: Result = Model::create_with_password( + &boot.app_context.db, + &RegisterParams { + email: "user1@example.com".to_string(), + password: "1234".to_string(), + name: "framework".to_string(), + }, + ) + .await; + assert_debug_snapshot!(new_user); +} + +#[tokio::test] +#[serial] +async fn can_find_by_email() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let existing_user = Model::find_by_email(&boot.app_context.db, "user1@example.com").await; + let non_existing_user_results = + Model::find_by_email(&boot.app_context.db, "un@existing-email.com").await; + + assert_debug_snapshot!(existing_user); + assert_debug_snapshot!(non_existing_user_results); +} + +#[tokio::test] +#[serial] +async fn can_find_by_pid() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let existing_user = + Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111").await; + let non_existing_user_results = + Model::find_by_email(&boot.app_context.db, "23232323-2323-2323-2323-232323232323").await; + + assert_debug_snapshot!(existing_user); + assert_debug_snapshot!(non_existing_user_results); +} + +#[tokio::test] +#[serial] +async fn can_verification_token() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.email_verification_sent_at.is_none()); + assert!(user.email_verification_token.is_none()); + + assert!(user + .into_active_model() + .set_email_verification_sent(&boot.app_context.db) + .await + .is_ok()); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.email_verification_sent_at.is_some()); + assert!(user.email_verification_token.is_some()); +} + +#[tokio::test] +#[serial] +async fn can_set_forgot_password_sent() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.reset_sent_at.is_none()); + assert!(user.reset_token.is_none()); + + assert!(user + .into_active_model() + .set_forgot_password_sent(&boot.app_context.db) + .await + .is_ok()); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.reset_sent_at.is_some()); + assert!(user.reset_token.is_some()); +} + +#[tokio::test] +#[serial] +async fn can_verified() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.email_verified_at.is_none()); + + assert!(user + .into_active_model() + .verified(&boot.app_context.db) + .await + .is_ok()); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.email_verified_at.is_some()); +} + +#[tokio::test] +#[serial] +async fn can_reset_password() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.verify_password("12341234")); + + assert!(user + .clone() + .into_active_model() + .reset_password(&boot.app_context.db, "new-password") + .await + .is_ok()); + + assert!( + Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap() + .verify_password("new-password") + ); +} diff --git a/examples/loco_starter/tests/requests/auth.rs b/examples/loco_starter/tests/requests/auth.rs new file mode 100644 index 000000000..b41811600 --- /dev/null +++ b/examples/loco_starter/tests/requests/auth.rs @@ -0,0 +1,192 @@ +use insta::{assert_debug_snapshot, with_settings}; +use loco_rs::testing; +use loco_starter::{app::App, models::users}; +use rstest::rstest; +use serial_test::serial; + +use super::prepare_data; + +// TODO: see how to dedup / extract this to app-local test utils +// not to framework, because that would require a runtime dep on insta +macro_rules! configure_insta { + ($($expr:expr),*) => { + let mut settings = insta::Settings::clone_current(); + settings.set_prepend_module_to_snapshot(false); + settings.set_snapshot_suffix("auth_request"); + let _guard = settings.bind_to_scope(); + }; +} + +#[tokio::test] +#[serial] +async fn can_register() { + configure_insta!(); + + testing::request::(|request, ctx| async move { + let email = "test@loco.com"; + let payload = serde_json::json!({ + "name": "loco", + "email": email, + "password": "12341234" + }); + + let _response = request.post("/api/auth/register").json(&payload).await; + let saved_user = users::Model::find_by_email(&ctx.db, email).await; + + with_settings!({ + filters => testing::cleanup_user_model() + }, { + assert_debug_snapshot!(saved_user); + }); + + with_settings!({ + filters => testing::cleanup_email() + }, { + assert_debug_snapshot!(ctx.mailer.unwrap().deliveries()); + }); + }) + .await; +} + +#[rstest] +#[case("login_with_valid_password", "12341234")] +#[case("login_with_invalid_password", "invalid-password")] +#[tokio::test] +#[serial] +async fn can_login_with_verify(#[case] test_name: &str, #[case] password: &str) { + configure_insta!(); + + testing::request::(|request, ctx| async move { + let email = "test@loco.com"; + let register_payload = serde_json::json!({ + "name": "loco", + "email": email, + "password": "12341234" + }); + + //Creating a new user + _ = request + .post("/api/auth/register") + .json(®ister_payload) + .await; + + let user = users::Model::find_by_email(&ctx.db, email).await.unwrap(); + let verify_payload = serde_json::json!({ + "token": user.email_verification_token, + }); + request.post("/api/auth/verify").json(&verify_payload).await; + + //verify user request + let response = request + .post("/api/auth/login") + .json(&serde_json::json!({ + "email": email, + "password": password + })) + .await; + + // Make sure email_verified_at is set + assert!(users::Model::find_by_email(&ctx.db, email) + .await + .unwrap() + .email_verified_at + .is_some()); + + with_settings!({ + filters => testing::cleanup_user_model() + }, { + assert_debug_snapshot!(test_name, (response.status_code(), response.text())); + }); + }) + .await; +} + +#[tokio::test] +#[serial] +async fn can_login_without_verify() { + configure_insta!(); + + testing::request::(|request, _ctx| async move { + let email = "test@loco.com"; + let password = "12341234"; + let register_payload = serde_json::json!({ + "name": "loco", + "email": email, + "password": password + }); + + //Creating a new user + _ = request + .post("/api/auth/register") + .json(®ister_payload) + .await; + + //verify user request + let response = request + .post("/api/auth/login") + .json(&serde_json::json!({ + "email": email, + "password": password + })) + .await; + + with_settings!({ + filters => testing::cleanup_user_model() + }, { + assert_debug_snapshot!((response.status_code(), response.text())); + }); + }) + .await; +} + +#[tokio::test] +#[serial] +async fn can_reset_password() { + configure_insta!(); + + testing::request::(|request, ctx| async move { + let login_data = prepare_data::init_user_login(&request, &ctx).await; + + let forgot_payload = serde_json::json!({ + "email": login_data.user.email, + }); + _ = request.post("/api/auth/forgot").json(&forgot_payload).await; + + let user = users::Model::find_by_email(&ctx.db, &login_data.user.email) + .await + .unwrap(); + assert!(user.reset_token.is_some()); + + let new_password = "new-password"; + let reset_payload = serde_json::json!({ + "token": user.reset_token, + "password": new_password, + }); + + let reset_response = request.post("/api/auth/reset").json(&reset_payload).await; + + let user = users::Model::find_by_email(&ctx.db, &user.email) + .await + .unwrap(); + assert!(user.reset_sent_at.is_some()); + + assert_debug_snapshot!((reset_response.status_code(), reset_response.text())); + + let response = request + .post("/api/auth/login") + .json(&serde_json::json!({ + "email": user.email, + "password": new_password + })) + .await; + + assert_eq!(response.status_code(), 200); + + with_settings!({ + filters => testing::cleanup_email() + }, { + assert_debug_snapshot!(ctx.mailer.unwrap().deliveries()); + }); + }) + .await; +} diff --git a/examples/loco_starter/tests/requests/mod.rs b/examples/loco_starter/tests/requests/mod.rs new file mode 100644 index 000000000..81ed68f96 --- /dev/null +++ b/examples/loco_starter/tests/requests/mod.rs @@ -0,0 +1,4 @@ +mod auth; +mod notes; +mod prepare_data; +mod user; diff --git a/examples/loco_starter/tests/requests/notes.rs b/examples/loco_starter/tests/requests/notes.rs new file mode 100644 index 000000000..04936342b --- /dev/null +++ b/examples/loco_starter/tests/requests/notes.rs @@ -0,0 +1,123 @@ +use insta::{assert_debug_snapshot, with_settings}; +use loco_rs::testing; +use loco_starter::{app::App, models::_entities::notes::Entity}; +use sea_orm::entity::prelude::*; +use serial_test::serial; + +// TODO: see how to dedup / extract this to app-local test utils +// not to framework, because that would require a runtime dep on insta +macro_rules! configure_insta { + ($($expr:expr),*) => { + let mut settings = insta::Settings::clone_current(); + settings.set_prepend_module_to_snapshot(false); + settings.set_snapshot_suffix("notes_request"); + let _guard = settings.bind_to_scope(); + }; +} + +#[tokio::test] +#[serial] +async fn can_get_notes() { + configure_insta!(); + + testing::request::(|request, ctx| async move { + testing::seed::(&ctx.db).await.unwrap(); + + let notes = request.get("/api/notes").await; + + with_settings!({ + filters => { + let mut combined_filters = testing::CLEANUP_DATE.to_vec(); + combined_filters.extend(vec![(r#"\"id\\":\d+"#, r#""id\":ID"#)]); + combined_filters + } + }, { + assert_debug_snapshot!( + (notes.status_code(), notes.text()) + ); + }); + }) + .await; +} + +#[tokio::test] +#[serial] +async fn can_add_note() { + configure_insta!(); + + testing::request::(|request, _ctx| async move { + let payload = serde_json::json!({ + "title": "loco", + "content": "loco note test", + }); + + let add_note_request = request.post("/api/notes").json(&payload).await; + + with_settings!({ + filters => { + let mut combined_filters = testing::CLEANUP_DATE.to_vec(); + combined_filters.extend(vec![(r#"\"id\\":\d+"#, r#""id\":ID"#)]); + combined_filters + } + }, { + assert_debug_snapshot!( + (add_note_request.status_code(), add_note_request.text()) + ); + }); + }) + .await; +} + +#[tokio::test] +#[serial] +async fn can_get_note() { + configure_insta!(); + + testing::request::(|request, ctx| async move { + testing::seed::(&ctx.db).await.unwrap(); + + let add_note_request = request.get("/api/notes/1").await; + + with_settings!({ + filters => { + let mut combined_filters = testing::CLEANUP_DATE.to_vec(); + combined_filters.extend(vec![(r#"\"id\\":\d+"#, r#""id\":ID"#)]); + combined_filters + } + }, { + assert_debug_snapshot!( + (add_note_request.status_code(), add_note_request.text()) + ); + }); + }) + .await; +} + +#[tokio::test] +#[serial] +async fn can_delete_note() { + configure_insta!(); + + testing::request::(|request, ctx| async move { + testing::seed::(&ctx.db).await.unwrap(); + + let count_before_delete = Entity::find().all(&ctx.db).await.unwrap().len(); + let delete_note_request = request.delete("/api/notes/1").await; + + with_settings!({ + filters => { + let mut combined_filters = testing::CLEANUP_DATE.to_vec(); + combined_filters.extend(vec![(r#"\"id\\":\d+"#, r#""id\":ID"#)]); + combined_filters + } + }, { + assert_debug_snapshot!( + (delete_note_request.status_code(), delete_note_request.text()) + ); + }); + + let count_after_delete = Entity::find().all(&ctx.db).await.unwrap().len(); + assert_eq!(count_after_delete, count_before_delete - 1); + }) + .await; +} diff --git a/examples/loco_starter/tests/requests/prepare_data.rs b/examples/loco_starter/tests/requests/prepare_data.rs new file mode 100644 index 000000000..73c6c0399 --- /dev/null +++ b/examples/loco_starter/tests/requests/prepare_data.rs @@ -0,0 +1,57 @@ +use axum::http::{HeaderName, HeaderValue}; +use loco_rs::{app::AppContext, TestServer}; +use loco_starter::{models::users, views::auth::LoginResponse}; + +const USER_EMAIL: &str = "test@loco.com"; +const USER_PASSWORD: &str = "1234"; + +pub struct LoggedInUser { + pub user: users::Model, + pub token: String, +} + +pub async fn init_user_login(request: &TestServer, ctx: &AppContext) -> LoggedInUser { + let register_payload = serde_json::json!({ + "name": "loco", + "email": USER_EMAIL, + "password": USER_PASSWORD + }); + + //Creating a new user + request + .post("/api/auth/register") + .json(®ister_payload) + .await; + let user = users::Model::find_by_email(&ctx.db, USER_EMAIL) + .await + .unwrap(); + + let verify_payload = serde_json::json!({ + "token": user.email_verification_token, + }); + + request.post("/api/auth/verify").json(&verify_payload).await; + + let response = request + .post("/api/auth/login") + .json(&serde_json::json!({ + "email": USER_EMAIL, + "password": USER_PASSWORD + })) + .await; + + let login_response: LoginResponse = serde_json::from_str(&response.text()).unwrap(); + + LoggedInUser { + user: users::Model::find_by_email(&ctx.db, USER_EMAIL) + .await + .unwrap(), + token: login_response.token, + } +} + +pub fn auth_header(token: &str) -> (HeaderName, HeaderValue) { + let auth_header_value = HeaderValue::from_str(&format!("Bearer {}", &token)).unwrap(); + + (HeaderName::from_static("authorization"), auth_header_value) +} diff --git a/examples/loco_starter/tests/requests/snapshots/can_add_note@notes_request.snap b/examples/loco_starter/tests/requests/snapshots/can_add_note@notes_request.snap new file mode 100644 index 000000000..03fef48b7 --- /dev/null +++ b/examples/loco_starter/tests/requests/snapshots/can_add_note@notes_request.snap @@ -0,0 +1,8 @@ +--- +source: tests/requests/notes.rs +expression: "(add_note_request.status_code(), add_note_request.text())" +--- +( + 200, + "{\"created_at\":\"DATE\",\"updated_at\":\"DATE\",\"id\":ID,\"title\":\"loco\",\"content\":\"loco note test\"}", +) diff --git a/examples/loco_starter/tests/requests/snapshots/can_delete_note@notes_request.snap b/examples/loco_starter/tests/requests/snapshots/can_delete_note@notes_request.snap new file mode 100644 index 000000000..3481fc36d --- /dev/null +++ b/examples/loco_starter/tests/requests/snapshots/can_delete_note@notes_request.snap @@ -0,0 +1,8 @@ +--- +source: tests/requests/notes.rs +expression: "(delete_note_request.status_code(), delete_note_request.text())" +--- +( + 200, + "", +) diff --git a/examples/loco_starter/tests/requests/snapshots/can_get_current_user@user_request.snap b/examples/loco_starter/tests/requests/snapshots/can_get_current_user@user_request.snap new file mode 100644 index 000000000..85d53db17 --- /dev/null +++ b/examples/loco_starter/tests/requests/snapshots/can_get_current_user@user_request.snap @@ -0,0 +1,8 @@ +--- +source: tests/requests/user.rs +expression: "(response.status_code(), response.text())" +--- +( + 200, + "{\"pid\":\"PID\",\"name\":\"loco\",\"email\":\"test@loco.com\"}", +) diff --git a/examples/loco_starter/tests/requests/snapshots/can_get_current_user_with_api_key@user_request.snap b/examples/loco_starter/tests/requests/snapshots/can_get_current_user_with_api_key@user_request.snap new file mode 100644 index 000000000..85d53db17 --- /dev/null +++ b/examples/loco_starter/tests/requests/snapshots/can_get_current_user_with_api_key@user_request.snap @@ -0,0 +1,8 @@ +--- +source: tests/requests/user.rs +expression: "(response.status_code(), response.text())" +--- +( + 200, + "{\"pid\":\"PID\",\"name\":\"loco\",\"email\":\"test@loco.com\"}", +) diff --git a/examples/loco_starter/tests/requests/snapshots/can_get_note@notes_request.snap b/examples/loco_starter/tests/requests/snapshots/can_get_note@notes_request.snap new file mode 100644 index 000000000..ae182ee58 --- /dev/null +++ b/examples/loco_starter/tests/requests/snapshots/can_get_note@notes_request.snap @@ -0,0 +1,8 @@ +--- +source: tests/requests/notes.rs +expression: "(add_note_request.status_code(), add_note_request.text())" +--- +( + 200, + "{\"created_at\":\"DATE\",\"updated_at\":\"DATE\",\"id\":ID,\"title\":\"Loco note 1\",\"content\":\"Loco note 1 content\"}", +) diff --git a/examples/loco_starter/tests/requests/snapshots/can_get_notes@notes_request.snap b/examples/loco_starter/tests/requests/snapshots/can_get_notes@notes_request.snap new file mode 100644 index 000000000..6b25cc056 --- /dev/null +++ b/examples/loco_starter/tests/requests/snapshots/can_get_notes@notes_request.snap @@ -0,0 +1,8 @@ +--- +source: tests/requests/notes.rs +expression: "(notes.status_code(), notes.text())" +--- +( + 200, + "[{\"created_at\":\"DATE\",\"updated_at\":\"DATE\",\"id\":ID,\"title\":\"Loco note 1\",\"content\":\"Loco note 1 content\"},{\"created_at\":\"DATE\",\"updated_at\":\"DATE\",\"id\":ID,\"title\":\"Loco note 2\",\"content\":\"Loco note 2 content\"}]", +) diff --git a/examples/loco_starter/tests/requests/snapshots/can_login_without_verify@auth_request.snap b/examples/loco_starter/tests/requests/snapshots/can_login_without_verify@auth_request.snap new file mode 100644 index 000000000..ef54ba671 --- /dev/null +++ b/examples/loco_starter/tests/requests/snapshots/can_login_without_verify@auth_request.snap @@ -0,0 +1,8 @@ +--- +source: tests/requests/auth.rs +expression: "(response.status_code(), response.text())" +--- +( + 200, + "{\"token\":\"TOKEN\",\"pid\":\"PID\",\"name\":\"loco\",\"is_verified\":false}", +) diff --git a/examples/loco_starter/tests/requests/snapshots/can_register@auth_request-2.snap b/examples/loco_starter/tests/requests/snapshots/can_register@auth_request-2.snap new file mode 100644 index 000000000..bbe01f32c --- /dev/null +++ b/examples/loco_starter/tests/requests/snapshots/can_register@auth_request-2.snap @@ -0,0 +1,10 @@ +--- +source: tests/requests/auth.rs +expression: ctx.mailer.unwrap().deliveries() +--- +Deliveries { + count: 1, + messages: [ + "From: System \r\nTo: test@loco.com\r\nSubject: Welcome =?utf-8?b?bG9jbwo=?=\r\nMIME-Version: 1.0\r\nDate: DATE\r\nContent-Type: multipart/alternative;\r\n boundary=\"IDENTIFIER\"\r\n\r\n--IDENTIFIER\r\nContent-Type: text/plain; charset=utf-8\r\nContent-Transfer-Encoding: 7bit\r\n\r\nWelcome loco, you can now log in.\r\n Verify your account with the link below:\r\n\r\n http://localhost/verify#RANDOM_ID\r\n\r\n--IDENTIFIER\r\nContent-Type: text/html; charset=utf-8\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\n;\r\n\r\n\r\n Dear loco,\r\n Welcome to Loco! You can now log in to your account.\r\n Before you get started, please verify your account by clicking the link b=\r\nelow:\r\n \r\nTo: test@loco.com\r\nSubject: Welcome =?utf-8?b?bG9jbwo=?=\r\nMIME-Version: 1.0\r\nDate: DATE\r\nContent-Type: multipart/alternative;\r\n boundary=\"IDENTIFIER\"\r\n\r\n--IDENTIFIER\r\nContent-Type: text/plain; charset=utf-8\r\nContent-Transfer-Encoding: 7bit\r\n\r\nWelcome loco, you can now log in.\r\n Verify your account with the link below:\r\n\r\n http://localhost/verify#RANDOM_ID\r\n\r\n--IDENTIFIER\r\nContent-Type: text/html; charset=utf-8\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\n;\r\n\r\n\r\n Dear loco,\r\n Welcome to Loco! You can now log in to your account.\r\n Before you get started, please verify your account by clicking the link b=\r\nelow:\r\n \r\nTo: test@loco.com\r\nSubject: Your reset password =?utf-8?b?bGluawo=?=\r\nMIME-Version: 1.0\r\nDate: DATE\r\nContent-Type: multipart/alternative;\r\n boundary=\"IDENTIFIER\"\r\n\r\n--IDENTIFIER\r\nContent-Type: text/plain; charset=utf-8\r\nContent-Transfer-Encoding: 7bit\r\n\r\nReset your password with this link:\r\n\r\nhttp://localhost/reset#RANDOM_ID\r\n\r\n--IDENTIFIER\r\nContent-Type: text/html; charset=utf-8\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\n;\r\n\r\n\r\n Hey loco,\r\n Forgot your password? No worries! You can reset it by clicking the link b=\r\nelow:\r\n { + let mut settings = insta::Settings::clone_current(); + settings.set_prepend_module_to_snapshot(false); + settings.set_snapshot_suffix("user_request"); + let _guard = settings.bind_to_scope(); + }; +} + +#[tokio::test] +#[serial] +async fn can_get_current_user() { + configure_insta!(); + + testing::request::(|request, ctx| async move { + let user = prepare_data::init_user_login(&request, &ctx).await; + + let (auth_key, auth_value) = prepare_data::auth_header(&user.token); + let response = request + .get("/api/user/current") + .add_header(auth_key, auth_value) + .await; + + with_settings!({ + filters => testing::cleanup_user_model() + }, { + assert_debug_snapshot!((response.status_code(), response.text())); + }); + }) + .await; +} diff --git a/examples/loco_starter/tests/tasks/mod.rs b/examples/loco_starter/tests/tasks/mod.rs new file mode 100644 index 000000000..01fbddaa2 --- /dev/null +++ b/examples/loco_starter/tests/tasks/mod.rs @@ -0,0 +1 @@ +pub mod seed; diff --git a/examples/loco_starter/tests/tasks/seed.rs b/examples/loco_starter/tests/tasks/seed.rs new file mode 100644 index 000000000..710d2048c --- /dev/null +++ b/examples/loco_starter/tests/tasks/seed.rs @@ -0,0 +1,42 @@ +//! This task implements data seeding functionality for initializing new +//! development/demo environments. +//! +//! # Example +//! +//! Run the task with the following command: +//! ```sh +//! cargo run task +//! ``` +//! +//! To override existing data and reset the data structure, use the following +//! command with the `refresh:true` argument: +//! ```sh +//! cargo run task seed_data refresh:true +//! ``` +use std::collections::BTreeMap; + +use loco_rs::{db, prelude::*}; +use loco_starter::app::App; +use migration::Migrator; + +#[allow(clippy::module_name_repetitions)] +pub struct SeedData; +#[async_trait] +impl Task for SeedData { + fn task(&self) -> TaskInfo { + TaskInfo { + name: "seed_data".to_string(), + detail: "Task for seeding data".to_string(), + } + } + async fn run(&self, app_context: &AppContext, vars: &BTreeMap) -> Result<()> { + let refresh = vars.get("refresh").is_some_and(|refresh| refresh == "true"); + + if refresh { + db::reset::(&app_context.db).await?; + } + let path = std::path::Path::new("src/fixtures"); + db::run_app_seed::(&app_context.db, path).await?; + Ok(()) + } +} diff --git a/examples/loco_starter/uploads/20240520_183255_c9a37b9b-b039-4858-9fba-f4936979379c/SeaORM banner (1).png b/examples/loco_starter/uploads/20240520_183255_c9a37b9b-b039-4858-9fba-f4936979379c/SeaORM banner (1).png new file mode 100644 index 0000000000000000000000000000000000000000..faee52b2b9ffe8273f8c54655a7b51ca4f013e2d GIT binary patch literal 198058 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

WN37 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%0A)T1uhp-B<65R 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 Jiyj-l{U2eYsJ;LI literal 0 HcmV?d00001

WN37 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%0A)T1uhp-B<65R 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 Jiyj-l{U2eYsJ;LI literal 0 HcmV?d00001 diff --git a/examples/loco_starter/uploads/20240520_183255_eb07c11d-aa13-4834-bc11-7bf84dc3c986/SeaORM banner.png b/examples/loco_starter/uploads/20240520_183255_eb07c11d-aa13-4834-bc11-7bf84dc3c986/SeaORM banner.png new file mode 100644 index 0000000000000000000000000000000000000000..faee52b2b9ffe8273f8c54655a7b51ca4f013e2d GIT binary patch literal 198058 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