From fef33dc2d4f1e21907a34e98f1bb7f4d1dc15840 Mon Sep 17 00:00:00 2001 From: Fabrice Bellamy <12b@distrilab.fr> Date: Tue, 22 Oct 2024 11:16:08 +0200 Subject: [PATCH] remove the client side rendering version of the app --- nixin_farm/.cargo/config.toml | 4 - nixin_farm/.devcontainer/.env | 6 - nixin_farm/.devcontainer/Dockerfile | 8 - nixin_farm/.devcontainer/compose.yaml | 49 - nixin_farm/.devcontainer/devcontainer.json | 9 - nixin_farm/.github/workflows/ci.yaml | 102 - nixin_farm/.gitignore | 19 - nixin_farm/.rustfmt.toml | 2 - nixin_farm/Cargo.lock | 5552 ----------------- nixin_farm/Cargo.toml | 55 - nixin_farm/README.md | 58 - nixin_farm/assets/i18n/de-DE/main.ftl | 4 - nixin_farm/assets/i18n/en-US/main.ftl | 10 - nixin_farm/assets/i18n/shared.ftl | 1 - nixin_farm/assets/static/404.html | 3 - nixin_farm/assets/static/image.png | Bin 304720 -> 0 bytes nixin_farm/assets/views/base.html | 26 - nixin_farm/assets/views/home/hello.html | 12 - nixin_farm/assets/views/server/create.html | 54 - nixin_farm/assets/views/server/edit.html | 73 - nixin_farm/assets/views/server/list.html | 27 - nixin_farm/assets/views/server/show.html | 19 - nixin_farm/config/development.yaml | 138 - nixin_farm/config/test.yaml | 101 - nixin_farm/examples/playground.rs | 21 - nixin_farm/frontend/.gitignore | 31 - nixin_farm/frontend/README.md | 42 - nixin_farm/frontend/biome.json | 24 - nixin_farm/frontend/package.json | 24 - nixin_farm/frontend/rsbuild.config.ts | 20 - nixin_farm/frontend/src/LocoSplash.tsx | 105 - nixin_farm/frontend/src/assets/favicon.ico | Bin 15406 -> 0 bytes nixin_farm/frontend/src/env.d.ts | 1 - nixin_farm/frontend/src/index.css | 100 - nixin_farm/frontend/src/index.tsx | 17 - nixin_farm/frontend/tsconfig.json | 15 - nixin_farm/migration/Cargo.toml | 22 - nixin_farm/migration/src/lib.rs | 20 - .../migration/src/m20220101_000001_users.rs | 50 - .../migration/src/m20231103_114510_notes.rs | 34 - .../migration/src/m20241016_180911_servers.rs | 37 - nixin_farm/src/app.rs | 79 - nixin_farm/src/bin/main.rs | 8 - nixin_farm/src/bin/tool.rs | 8 - nixin_farm/src/controllers/auth.rs | 150 - nixin_farm/src/controllers/mod.rs | 5 - nixin_farm/src/controllers/notes.rs | 75 - nixin_farm/src/controllers/server.rs | 115 - nixin_farm/src/controllers/user.rs | 16 - nixin_farm/src/fixtures/notes.yaml | 11 - nixin_farm/src/fixtures/users.yaml | 17 - nixin_farm/src/initializers/mod.rs | 2 - nixin_farm/src/initializers/view_engine.rs | 36 - nixin_farm/src/lib.rs | 8 - nixin_farm/src/mailers/auth.rs | 65 - nixin_farm/src/mailers/auth/forgot/html.t | 11 - nixin_farm/src/mailers/auth/forgot/subject.t | 1 - nixin_farm/src/mailers/auth/forgot/text.t | 3 - nixin_farm/src/mailers/auth/welcome/html.t | 13 - nixin_farm/src/mailers/auth/welcome/subject.t | 1 - nixin_farm/src/mailers/auth/welcome/text.t | 4 - nixin_farm/src/mailers/mod.rs | 1 - nixin_farm/src/models/_entities/mod.rs | 7 - nixin_farm/src/models/_entities/notes.rs | 18 - nixin_farm/src/models/_entities/prelude.rs | 5 - nixin_farm/src/models/_entities/servers.rs | 18 - nixin_farm/src/models/_entities/users.rs | 28 - nixin_farm/src/models/mod.rs | 4 - nixin_farm/src/models/notes.rs | 7 - nixin_farm/src/models/servers.rs | 7 - nixin_farm/src/models/users.rs | 298 - nixin_farm/src/tasks/mod.rs | 1 - nixin_farm/src/tasks/seed.rs | 45 - nixin_farm/src/views/auth.rs | 23 - nixin_farm/src/views/mod.rs | 4 - nixin_farm/src/views/server.rs | 39 - nixin_farm/src/views/user.rs | 21 - nixin_farm/src/workers/downloader.rs | 40 - nixin_farm/src/workers/mod.rs | 1 - nixin_farm/tests/mod.rs | 4 - nixin_farm/tests/models/mod.rs | 3 - nixin_farm/tests/models/servers.rs | 31 - .../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 - nixin_farm/tests/models/users.rs | 223 - nixin_farm/tests/requests/auth.rs | 195 - nixin_farm/tests/requests/mod.rs | 4 - nixin_farm/tests/requests/notes.rs | 123 - nixin_farm/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@auth_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 - nixin_farm/tests/requests/user.rs | 40 - nixin_farm/tests/tasks/mod.rs | 1 - nixin_farm/tests/tasks/seed.rs | 17 - nixin_farm/tests/workers/mod.rs | 1 - 112 files changed, 9014 deletions(-) delete mode 100644 nixin_farm/.cargo/config.toml delete mode 100644 nixin_farm/.devcontainer/.env delete mode 100644 nixin_farm/.devcontainer/Dockerfile delete mode 100644 nixin_farm/.devcontainer/compose.yaml delete mode 100644 nixin_farm/.devcontainer/devcontainer.json delete mode 100644 nixin_farm/.github/workflows/ci.yaml delete mode 100644 nixin_farm/.gitignore delete mode 100644 nixin_farm/.rustfmt.toml delete mode 100644 nixin_farm/Cargo.lock delete mode 100644 nixin_farm/Cargo.toml delete mode 100644 nixin_farm/README.md delete mode 100644 nixin_farm/assets/i18n/de-DE/main.ftl delete mode 100644 nixin_farm/assets/i18n/en-US/main.ftl delete mode 100644 nixin_farm/assets/i18n/shared.ftl delete mode 100644 nixin_farm/assets/static/404.html delete mode 100644 nixin_farm/assets/static/image.png delete mode 100644 nixin_farm/assets/views/base.html delete mode 100644 nixin_farm/assets/views/home/hello.html delete mode 100644 nixin_farm/assets/views/server/create.html delete mode 100644 nixin_farm/assets/views/server/edit.html delete mode 100644 nixin_farm/assets/views/server/list.html delete mode 100644 nixin_farm/assets/views/server/show.html delete mode 100644 nixin_farm/config/development.yaml delete mode 100644 nixin_farm/config/test.yaml delete mode 100644 nixin_farm/examples/playground.rs delete mode 100644 nixin_farm/frontend/.gitignore delete mode 100644 nixin_farm/frontend/README.md delete mode 100644 nixin_farm/frontend/biome.json delete mode 100644 nixin_farm/frontend/package.json delete mode 100644 nixin_farm/frontend/rsbuild.config.ts delete mode 100644 nixin_farm/frontend/src/LocoSplash.tsx delete mode 100644 nixin_farm/frontend/src/assets/favicon.ico delete mode 100644 nixin_farm/frontend/src/env.d.ts delete mode 100644 nixin_farm/frontend/src/index.css delete mode 100644 nixin_farm/frontend/src/index.tsx delete mode 100644 nixin_farm/frontend/tsconfig.json delete mode 100644 nixin_farm/migration/Cargo.toml delete mode 100644 nixin_farm/migration/src/lib.rs delete mode 100644 nixin_farm/migration/src/m20220101_000001_users.rs delete mode 100644 nixin_farm/migration/src/m20231103_114510_notes.rs delete mode 100644 nixin_farm/migration/src/m20241016_180911_servers.rs delete mode 100644 nixin_farm/src/app.rs delete mode 100644 nixin_farm/src/bin/main.rs delete mode 100644 nixin_farm/src/bin/tool.rs delete mode 100644 nixin_farm/src/controllers/auth.rs delete mode 100644 nixin_farm/src/controllers/mod.rs delete mode 100644 nixin_farm/src/controllers/notes.rs delete mode 100644 nixin_farm/src/controllers/server.rs delete mode 100644 nixin_farm/src/controllers/user.rs delete mode 100644 nixin_farm/src/fixtures/notes.yaml delete mode 100644 nixin_farm/src/fixtures/users.yaml delete mode 100644 nixin_farm/src/initializers/mod.rs delete mode 100644 nixin_farm/src/initializers/view_engine.rs delete mode 100644 nixin_farm/src/lib.rs delete mode 100644 nixin_farm/src/mailers/auth.rs delete mode 100644 nixin_farm/src/mailers/auth/forgot/html.t delete mode 100644 nixin_farm/src/mailers/auth/forgot/subject.t delete mode 100644 nixin_farm/src/mailers/auth/forgot/text.t delete mode 100644 nixin_farm/src/mailers/auth/welcome/html.t delete mode 100644 nixin_farm/src/mailers/auth/welcome/subject.t delete mode 100644 nixin_farm/src/mailers/auth/welcome/text.t delete mode 100644 nixin_farm/src/mailers/mod.rs delete mode 100644 nixin_farm/src/models/_entities/mod.rs delete mode 100644 nixin_farm/src/models/_entities/notes.rs delete mode 100644 nixin_farm/src/models/_entities/prelude.rs delete mode 100644 nixin_farm/src/models/_entities/servers.rs delete mode 100644 nixin_farm/src/models/_entities/users.rs delete mode 100644 nixin_farm/src/models/mod.rs delete mode 100644 nixin_farm/src/models/notes.rs delete mode 100644 nixin_farm/src/models/servers.rs delete mode 100644 nixin_farm/src/models/users.rs delete mode 100644 nixin_farm/src/tasks/mod.rs delete mode 100644 nixin_farm/src/tasks/seed.rs delete mode 100644 nixin_farm/src/views/auth.rs delete mode 100644 nixin_farm/src/views/mod.rs delete mode 100644 nixin_farm/src/views/server.rs delete mode 100644 nixin_farm/src/views/user.rs delete mode 100644 nixin_farm/src/workers/downloader.rs delete mode 100644 nixin_farm/src/workers/mod.rs delete mode 100644 nixin_farm/tests/mod.rs delete mode 100644 nixin_farm/tests/models/mod.rs delete mode 100644 nixin_farm/tests/models/servers.rs delete mode 100644 nixin_farm/tests/models/snapshots/can_create_with_password@users.snap delete mode 100644 nixin_farm/tests/models/snapshots/can_find_by_email-2@users.snap delete mode 100644 nixin_farm/tests/models/snapshots/can_find_by_email@users-2.snap delete mode 100644 nixin_farm/tests/models/snapshots/can_find_by_email@users.snap delete mode 100644 nixin_farm/tests/models/snapshots/can_find_by_pid-2@users.snap delete mode 100644 nixin_farm/tests/models/snapshots/can_find_by_pid@users-2.snap delete mode 100644 nixin_farm/tests/models/snapshots/can_find_by_pid@users.snap delete mode 100644 nixin_farm/tests/models/snapshots/can_validate_model@users.snap delete mode 100644 nixin_farm/tests/models/snapshots/handle_create_with_password_with_duplicate@users.snap delete mode 100644 nixin_farm/tests/models/users.rs delete mode 100644 nixin_farm/tests/requests/auth.rs delete mode 100644 nixin_farm/tests/requests/mod.rs delete mode 100644 nixin_farm/tests/requests/notes.rs delete mode 100644 nixin_farm/tests/requests/prepare_data.rs delete mode 100644 nixin_farm/tests/requests/snapshots/can_add_note@notes_request.snap delete mode 100644 nixin_farm/tests/requests/snapshots/can_delete_note@notes_request.snap delete mode 100644 nixin_farm/tests/requests/snapshots/can_get_current_user@auth_request.snap delete mode 100644 nixin_farm/tests/requests/snapshots/can_get_note@notes_request.snap delete mode 100644 nixin_farm/tests/requests/snapshots/can_get_notes@notes_request.snap delete mode 100644 nixin_farm/tests/requests/snapshots/can_login_without_verify@auth_request.snap delete mode 100644 nixin_farm/tests/requests/snapshots/can_register@auth_request-2.snap delete mode 100644 nixin_farm/tests/requests/snapshots/can_register@auth_request.snap delete mode 100644 nixin_farm/tests/requests/snapshots/can_reset_password@auth_request-2.snap delete mode 100644 nixin_farm/tests/requests/snapshots/can_reset_password@auth_request.snap delete mode 100644 nixin_farm/tests/requests/snapshots/login_with_invalid_password@auth_request.snap delete mode 100644 nixin_farm/tests/requests/snapshots/login_with_valid_password@auth_request.snap delete mode 100644 nixin_farm/tests/requests/user.rs delete mode 100644 nixin_farm/tests/tasks/mod.rs delete mode 100644 nixin_farm/tests/tasks/seed.rs delete mode 100644 nixin_farm/tests/workers/mod.rs diff --git a/nixin_farm/.cargo/config.toml b/nixin_farm/.cargo/config.toml deleted file mode 100644 index fb921ea..0000000 --- a/nixin_farm/.cargo/config.toml +++ /dev/null @@ -1,4 +0,0 @@ -[alias] -loco = "run --" -loco-tool = "run --bin tool --" -playground = "run --example playground" diff --git a/nixin_farm/.devcontainer/.env b/nixin_farm/.devcontainer/.env deleted file mode 100644 index 1a3ca5b..0000000 --- a/nixin_farm/.devcontainer/.env +++ /dev/null @@ -1,6 +0,0 @@ -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/nixin_farm/.devcontainer/Dockerfile b/nixin_farm/.devcontainer/Dockerfile deleted file mode 100644 index 49616a5..0000000 --- a/nixin_farm/.devcontainer/Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -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/nixin_farm/.devcontainer/compose.yaml b/nixin_farm/.devcontainer/compose.yaml deleted file mode 100644 index e461417..0000000 --- a/nixin_farm/.devcontainer/compose.yaml +++ /dev/null @@ -1,49 +0,0 @@ -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/nixin_farm/.devcontainer/devcontainer.json b/nixin_farm/.devcontainer/devcontainer.json deleted file mode 100644 index b2d83c2..0000000 --- a/nixin_farm/.devcontainer/devcontainer.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "Loco", - "dockerComposeFile": "compose.yaml", - "service": "app", - "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", - "forwardPorts": [ - 5150 - ] -} \ No newline at end of file diff --git a/nixin_farm/.github/workflows/ci.yaml b/nixin_farm/.github/workflows/ci.yaml deleted file mode 100644 index 75ba8a5..0000000 --- a/nixin_farm/.github/workflows/ci.yaml +++ /dev/null @@ -1,102 +0,0 @@ -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: dtolnay/rust-toolchain@stable - with: - toolchain: ${{ env.RUST_TOOLCHAIN }} - 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: dtolnay/rust-toolchain@stable - with: - toolchain: ${{ env.RUST_TOOLCHAIN }} - - 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: dtolnay/rust-toolchain@stable - with: - toolchain: ${{ env.RUST_TOOLCHAIN }} - - 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/nixin_farm/.gitignore b/nixin_farm/.gitignore deleted file mode 100644 index d83d21a..0000000 --- a/nixin_farm/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -**/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 - -*.sqlite \ No newline at end of file diff --git a/nixin_farm/.rustfmt.toml b/nixin_farm/.rustfmt.toml deleted file mode 100644 index d862e08..0000000 --- a/nixin_farm/.rustfmt.toml +++ /dev/null @@ -1,2 +0,0 @@ -max_width = 100 -use_small_heuristics = "Default" diff --git a/nixin_farm/Cargo.lock b/nixin_farm/Cargo.lock deleted file mode 100644 index f7f6b81..0000000 --- a/nixin_farm/Cargo.lock +++ /dev/null @@ -1,5552 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "addr2line" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" -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.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" - -[[package]] -name = "anstyle-parse" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" -dependencies = [ - "anstyle", - "windows-sys 0.52.0", -] - -[[package]] -name = "anyhow" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" - -[[package]] -name = "arc-swap" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" - -[[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 = "assert-json-diff" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" -dependencies = [ - "serde", - "serde_json", -] - -[[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.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" -dependencies = [ - "concurrent-queue", - "event-listener-strategy", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-compression" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fec134f64e2bc57411226dfc4e52dec859ddfc7e711fc5e07b612584f000e4aa" -dependencies = [ - "brotli", - "flate2", - "futures-core", - "memchr", - "pin-project-lite", - "tokio", - "zstd", - "zstd-safe", -] - -[[package]] -name = "async-executor" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7ebdfa2ebdab6b1760375fa7d6f382b9f486eac35fc994625a00e89280bdbb7" -dependencies = [ - "async-task", - "concurrent-queue", - "fastrand 2.1.0", - "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.3.1", - "async-executor", - "async-io 2.3.3", - "async-lock 3.4.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.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" -dependencies = [ - "async-lock 3.4.0", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite 2.3.0", - "parking", - "polling 3.7.2", - "rustix 0.38.34", - "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.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" -dependencies = [ - "event-listener 5.3.1", - "event-listener-strategy", - "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.72", -] - -[[package]] -name = "async-task" -version = "4.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" - -[[package]] -name = "async-trait" -version = "0.1.81" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[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.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" - -[[package]] -name = "axum" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504e3947307ac8326a5437504c517c4b56716c9d98fac0028c2acc7ca47d70ae" -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", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "serde_json", - "serde_path_to_error", - "serde_urlencoded", - "sync_wrapper 1.0.1", - "tokio", - "tower 0.5.1", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "axum-core" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http 1.1.0", - "http-body", - "http-body-util", - "mime", - "pin-project-lite", - "rustversion", - "sync_wrapper 1.0.1", - "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 0.4.13", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "axum-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "axum-test" -version = "16.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3254184de359bbae2a8ca10b050870a7a4f1c8332a2c27d53f360b9835bb3911" -dependencies = [ - "anyhow", - "assert-json-diff", - "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 0.5.1", - "url", -] - -[[package]] -name = "backtrace" -version = "0.3.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" -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.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[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.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10cf871f3ff2ce56432fddc2615ac7acc3aa22ca321f8fea800846fbb32f188" -dependencies = [ - "async-trait", - "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.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" -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.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" -dependencies = [ - "async-channel 2.3.1", - "async-task", - "futures-io", - "futures-lite 2.3.0", - "piper", -] - -[[package]] -name = "borsh" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" -dependencies = [ - "borsh-derive", - "cfg_aliases", -] - -[[package]] -name = "borsh-derive" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" -dependencies = [ - "once_cell", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.72", - "syn_derive", -] - -[[package]] -name = "brotli" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "4.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" -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.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" - -[[package]] -name = "camino" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" -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.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" -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.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - -[[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.6", -] - -[[package]] -name = "chrono-tz" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb" -dependencies = [ - "chrono", - "chrono-tz-build", - "phf", -] - -[[package]] -name = "chrono-tz-build" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1" -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.5", - "stacker", -] - -[[package]] -name = "clap" -version = "4.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6b81fb3c84f5563d509c59b5a48d935f689e993afa90fe39047f05adef9142" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca6706fd5224857d9ac5eb9355f6683563cc0541c7cd9d014043b57cbec78ac" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "clap_lex" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" - -[[package]] -name = "colorchoice" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" - -[[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.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -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", - "unicode-width", - "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.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "cron" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8c3e73077b4b4a6ab1ea5047c37c57aee77657bc8ecd6f29b0af082d0b0c07" -dependencies = [ - "chrono", - "nom", - "once_cell", -] - -[[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-channel" -version = "0.5.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" -dependencies = [ - "crossbeam-utils", -] - -[[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.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" - -[[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 = "darling" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.72", -] - -[[package]] -name = "darling_macro" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.72", -] - -[[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.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339544cc9e2c4dc3fc7149fd630c5f22263a4fdf18a98afd0075784968b5cf00" - -[[package]] -name = "dialoguer" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de" -dependencies = [ - "console", - "shell-words", - "tempfile", - "thiserror", - "zeroize", -] - -[[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 = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[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 = "duct_sh" -version = "0.13.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6633cadba557545fbbe0299a2f9adc4bb2fc5fb238773f5e841e0c23d62146" -dependencies = [ - "duct", -] - -[[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.72", -] - -[[package]] -name = "either" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" -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.1", - "memchr", -] - -[[package]] -name = "email_address" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46b7a0ac6570e31bfe2c6cf575a576a55af9893d1a6b30b4444e6e90b216bb84" - -[[package]] -name = "encode_unicode" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" - -[[package]] -name = "english-to-cron" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c16423ac933fee80f05a52b435a912d5b08edbbbfe936e0042ebb3accdf303da" -dependencies = [ - "lazy_static", - "regex", -] - -[[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.72", -] - -[[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.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" -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 = "5.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" -dependencies = [ - "event-listener 5.3.1", - "pin-project-lite", -] - -[[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.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" - -[[package]] -name = "flate2" -version = "1.0.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "fluent" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb74634707bebd0ce645a981148e8fb8c7bccd4c33c652aeffd28bf2f96d555a" -dependencies = [ - "fluent-bundle", - "unic-langid", -] - -[[package]] -name = "fluent-bundle" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe0a21ee80050c678013f82edf4b705fe2f26f1f9877593d13198612503f493" -dependencies = [ - "fluent-langneg", - "fluent-syntax", - "intl-memoizer", - "intl_pluralrules", - "rustc-hash", - "self_cell 0.10.3", - "smallvec", - "unic-langid", -] - -[[package]] -name = "fluent-langneg" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94" -dependencies = [ - "unic-langid", -] - -[[package]] -name = "fluent-syntax" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a530c4694a6a8d528794ee9bbd8ba0122e779629ac908d15ad5a7ae7763a33d" -dependencies = [ - "thiserror", -] - -[[package]] -name = "fluent-template-macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec7592cd1f45c1afe9084ce59c62a3a7c266c125c4c2ec97e95b0563c4aa914" -dependencies = [ - "flume 0.10.14", - "ignore", - "once_cell", - "proc-macro2", - "quote", - "syn 1.0.109", - "unic-langid", -] - -[[package]] -name = "fluent-templates" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c3ef2c2152757885365abce32ddf682746062f1b6b3c0824a29fbed6ee4d080" -dependencies = [ - "arc-swap", - "fluent", - "fluent-bundle", - "fluent-langneg", - "fluent-syntax", - "fluent-template-macros", - "flume 0.10.14", - "heck 0.4.1", - "ignore", - "intl-memoizer", - "lazy_static", - "log", - "once_cell", - "serde_json", - "snafu 0.7.5", - "tera", - "unic-langid", -] - -[[package]] -name = "flume" -version = "0.10.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" -dependencies = [ - "spin", -] - -[[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", -] - -[[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.1.0", - "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.72", -] - -[[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.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "gimli" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" - -[[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.7", - "regex-syntax 0.8.4", -] - -[[package]] -name = "globwalk" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" -dependencies = [ - "bitflags 2.6.0", - "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.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -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.5", -] - -[[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 = "hermit-abi" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" - -[[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.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9c7c7c8ac16c798734b8a24560c1362120597c40d5e1459f09498f8f6c8f2ba" -dependencies = [ - "cfg-if", - "libc", - "windows", -] - -[[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.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http 1.1.0", -] - -[[package]] -name = "http-body-util" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" -dependencies = [ - "bytes", - "futures-util", - "http 1.1.0", - "http-body", - "pin-project-lite", -] - -[[package]] -name = "http-range-header" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a397c49fec283e3d6211adbe480be95aae5f304cfb923e9970e08956d5168a" - -[[package]] -name = "httparse" -version = "1.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" - -[[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.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" -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.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "http 1.1.0", - "http-body", - "hyper", - "pin-project-lite", - "socket2 0.5.7", - "tokio", - "tower 0.4.13", - "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 = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[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 = "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.7", - "same-file", - "walkdir", - "winapi-util", -] - -[[package]] -name = "include_dir" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" -dependencies = [ - "include_dir_macros", -] - -[[package]] -name = "include_dir_macros" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "indexmap" -version = "2.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" -dependencies = [ - "equivalent", - "hashbrown 0.14.5", -] - -[[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.72", -] - -[[package]] -name = "insta" -version = "1.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "810ae6042d48e2c9e9215043563a58a80b877bc863228a74cf10c49d4620a6f5" -dependencies = [ - "console", - "lazy_static", - "linked-hash-map", - "pest", - "pest_derive", - "regex", - "serde", - "similar", -] - -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "intl-memoizer" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe22e020fce238ae18a6d5d8c502ee76a52a6e880d99477657e6acc30ec57bda" -dependencies = [ - "type-map", - "unic-langid", -] - -[[package]] -name = "intl_pluralrules" -version = "7.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972" -dependencies = [ - "unic-langid", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "ipnetwork" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" -dependencies = [ - "serde", -] - -[[package]] -name = "is-terminal" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" -dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" - -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -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.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" -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.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin", -] - -[[package]] -name = "lettre" -version = "0.11.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a62049a808f1c4e2356a2a380bd5f2aca3b011b0b482cf3b914ba1731426969" -dependencies = [ - "async-trait", - "base64 0.22.1", - "chumsky", - "email-encoding", - "email_address", - "fastrand 2.1.0", - "futures-io", - "futures-util", - "hostname", - "httpdate", - "idna", - "mime", - "nom", - "percent-encoding", - "quoted_printable", - "rustls 0.23.12", - "rustls-pemfile 2.1.2", - "socket2 0.5.7", - "tokio", - "tokio-rustls", - "url", - "webpki-roots 0.26.3", -] - -[[package]] -name = "libc" -version = "0.2.155" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" - -[[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.6.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.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - -[[package]] -name = "lock_api" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "loco-rs" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d90fd97a367bd7e46192e69877c22c02ed73675a6b793124b2f4327e203647" -dependencies = [ - "argon2", - "async-trait", - "axum", - "axum-extra", - "axum-test", - "backtrace_printer", - "bb8", - "byte-unit", - "bytes", - "cargo_metadata", - "cfg-if", - "chrono", - "clap", - "colored", - "dialoguer", - "duct", - "duct_sh", - "english-to-cron", - "fs-err", - "futures-util", - "heck 0.4.1", - "hyper", - "include_dir", - "ipnetwork", - "jsonwebtoken", - "lazy_static", - "lettre", - "mime", - "moka", - "object_store", - "rand", - "regex", - "rrgen", - "rusty-sidekiq", - "sea-orm", - "sea-orm-migration", - "serde", - "serde_json", - "serde_variant", - "serde_yaml", - "sqlx", - "tera", - "thiserror", - "tokio", - "tokio-cron-scheduler", - "tower 0.4.13", - "tower-http", - "tracing", - "tracing-appender", - "tracing-subscriber", - "ulid", - "uuid", - "validator", -] - -[[package]] -name = "log" -version = "0.4.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" -dependencies = [ - "value-bag", -] - -[[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.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[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.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -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.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" -dependencies = [ - "hermit-abi 0.3.9", - "libc", - "wasi", - "windows-sys 0.52.0", -] - -[[package]] -name = "moka" -version = "0.12.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cf62eb4dd975d2dde76432fb1075c49e3ee2331cf36f1f8fd4b66550d32b6f" -dependencies = [ - "crossbeam-channel", - "crossbeam-epoch", - "crossbeam-utils", - "once_cell", - "parking_lot", - "quanta", - "rustc_version", - "smallvec", - "tagptr", - "thiserror", - "triomphe", - "uuid", -] - -[[package]] -name = "nixin_farm" -version = "0.1.0" -dependencies = [ - "async-trait", - "axum", - "chrono", - "fluent-templates", - "include_dir", - "insta", - "loco-rs", - "migration", - "rstest", - "sea-orm", - "serde", - "serde_json", - "serial_test", - "tokio", - "tracing", - "tracing-subscriber", - "unic-langid", - "uuid", - "validator", -] - -[[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.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "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-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[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.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -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 0.3.9", - "libc", -] - -[[package]] -name = "object" -version = "0.36.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e" -dependencies = [ - "memchr", -] - -[[package]] -name = "object_store" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a0c4b3a0e31f8b66f71ad8064521efa773910196e2cde791436f13409f3b45" -dependencies = [ - "async-trait", - "bytes", - "chrono", - "futures", - "humantime", - "itertools", - "parking_lot", - "percent-encoding", - "snafu 0.8.5", - "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.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29d73ba8daf8fac13b0501d1abeddcfe21ba7401ada61a819144b6c2a4f32209" -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.72", -] - -[[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.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.5.3", - "smallvec", - "windows-targets 0.52.6", -] - -[[package]] -name = "parse-zoneinfo" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" -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.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "pem" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" -dependencies = [ - "base64 0.22.1", - "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.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" -dependencies = [ - "memchr", - "thiserror", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "pest_meta" -version = "2.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f" -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.72", -] - -[[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.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" -dependencies = [ - "atomic-waker", - "fastrand 2.1.0", - "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.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3ed00ed3fbf728b5816498ecd316d1716eecaced9c0c8d2c5a6740ca214985b" -dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi 0.4.0", - "pin-project-lite", - "rustix 0.38.34", - "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-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - -[[package]] -name = "proc-macro2" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" -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 = "quanta" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5167a477619228a0b284fac2674e3c388cba90631d7b7de620e6f1fcd08da5" -dependencies = [ - "crossbeam-utils", - "libc", - "once_cell", - "raw-cpuid", - "wasi", - "web-sys", - "winapi", -] - -[[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.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "640c9bd8497b02465aeef5375144c26062e0dcd5939dfcbb0f5db76cb8c17c73" - -[[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 = "raw-cpuid" -version = "11.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb9ee317cfe3fbd54b36a511efc1edd42e216903c9cd575e686dd68a2ba90d8d" -dependencies = [ - "bitflags 2.6.0", -] - -[[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_syscall" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" -dependencies = [ - "bitflags 2.6.0", -] - -[[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.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", -] - -[[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.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.8.4", -] - -[[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.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" - -[[package]] -name = "relative-path" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" - -[[package]] -name = "rend" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" -dependencies = [ - "bytecheck", -] - -[[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", - "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.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afd55a67069d6e434a95161415f5beeada95a01c7b815508a82dcb0e1593682" -dependencies = [ - "futures", - "futures-timer", - "rstest_macros", - "rustc_version", -] - -[[package]] -name = "rstest_macros" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4165dfae59a39dd41d8dec720d3cbfbc71f69744efb480a3920f5d4e0cc6798d" -dependencies = [ - "cfg-if", - "glob", - "proc-macro-crate", - "proc-macro2", - "quote", - "regex", - "relative-path", - "rustc_version", - "syn 2.0.72", - "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.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[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.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" -dependencies = [ - "bitflags 2.6.0", - "errno", - "libc", - "linux-raw-sys 0.4.14", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "ring", - "rustls-webpki 0.101.7", - "sct", -] - -[[package]] -name = "rustls" -version = "0.23.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" -dependencies = [ - "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki 0.102.6", - "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.1", - "rustls-pki-types", -] - -[[package]] -name = "rustls-pki-types" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" - -[[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.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" - -[[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.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - -[[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 = "scc" -version = "2.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fadf67e3cf23f8b11a6c8c48a16cb2437381503615acd91094ec7b4686a5a53" -dependencies = [ - "sdd", -] - -[[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 = "sdd" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85f05a494052771fc5bd0619742363b5e24e5ad72ab3111ec2e27925b8edc5f3" - -[[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.72", -] - -[[package]] -name = "sea-orm" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d4ec1cdd8bdd3553d3c946079f58efa33fedc477f32603652652abcef96fe6" -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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d525eee597817631f800857b0c2fe8645ec9c65b4304176a44bf14b93366009e" -dependencies = [ - "chrono", - "clap", - "dotenvy", - "glob", - "regex", - "sea-schema", - "tracing", - "tracing-subscriber", - "url", -] - -[[package]] -name = "sea-orm-macros" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f363ead48b625a6f8f905322a820464f728fa4fe4f1c222bed5234ccf8fb8555" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "sea-bae", - "syn 2.0.72", - "unicode-ident", -] - -[[package]] -name = "sea-orm-migration" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5df62369752f91b9295f8d71c146d84f818301a9ae7295106ebe8bbaa989a072" -dependencies = [ - "async-trait", - "clap", - "dotenvy", - "futures", - "sea-orm", - "sea-orm-cli", - "sea-schema", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "sea-query" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e5073b2cfed767511a57d18115f3b3d8bcb5690bf8c89518caec6cb22c0cd74" -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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754965d4aee6145bec25d0898e5c931e6c22859789ce62fd85a42a15ed5a8ce3" -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.72", - "thiserror", -] - -[[package]] -name = "sea-schema" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad52149fc81836ea7424c3425d8f6ed8ad448dd16d2e4f6a3907ba46f3f2fd78" -dependencies = [ - "futures", - "sea-query", - "sea-schema-derive", -] - -[[package]] -name = "sea-schema-derive" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "debdc8729c37fdbf88472f97fd470393089f997a909e535ff67c544d18cfccf0" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "seahash" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" - -[[package]] -name = "self_cell" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14e4d63b804dc0c7ec4a1e52bcb63f02c7ac94476755aa579edac21e01f915d" -dependencies = [ - "self_cell 1.0.4", -] - -[[package]] -name = "self_cell" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a" - -[[package]] -name = "semver" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" -dependencies = [ - "serde", -] - -[[package]] -name = "serde" -version = "1.0.204" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.204" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "serde_json" -version = "1.0.120" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" -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 = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b4b487fe2acf240a021cf57c6b2b4903b1e78ca0ecd862a71b71d2a51fed77d" -dependencies = [ - "futures", - "log", - "once_cell", - "parking_lot", - "scc", - "serial_test_derive", -] - -[[package]] -name = "serial_test_derive" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[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.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" - -[[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-registry" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" -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.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" - -[[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 = "snafu" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" -dependencies = [ - "doc-comment", - "snafu-derive 0.7.5", -] - -[[package]] -name = "snafu" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" -dependencies = [ - "snafu-derive 0.8.5", -] - -[[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 = "snafu-derive" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[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.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[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.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f895e3734318cc55f1fe66258926c9b910c124d47520339efecbb6c59cec7c1f" -dependencies = [ - "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.12", - "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.6.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.6.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 0.11.0", - "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.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" -dependencies = [ - "unicode-bidi", - "unicode-normalization", - "unicode-properties", -] - -[[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.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[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.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" -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.72", -] - -[[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 = "tagptr" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" - -[[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.1.0", - "rustix 0.38.34", - "windows-sys 0.52.0", -] - -[[package]] -name = "tera" -version = "1.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab9d851b45e865f178319da0abdbfe6acbc4328759ff18dafc3a41c16b4cd2ee" -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 = "thiserror" -version = "1.0.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[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.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" -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.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "tinystr" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" -dependencies = [ - "displaydoc", -] - -[[package]] -name = "tinyvec" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" -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.40.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2 0.5.7", - "tokio-macros", - "windows-sys 0.52.0", -] - -[[package]] -name = "tokio-cron-scheduler" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7b9480125554f0ace1c3c3797a24b5cc56c6a7cd82c739db35fb54c4dc046f3" -dependencies = [ - "chrono", - "cron", - "num-derive", - "num-traits", - "tokio", - "tracing", - "uuid", -] - -[[package]] -name = "tokio-macros" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" -dependencies = [ - "rustls 0.23.12", - "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.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" - -[[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" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper 0.1.2", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8437150ab6bbc8c5f0f519e3d5ed4aa883a83dd4cdd3d1b21f9482936046cb97" -dependencies = [ - "async-compression", - "bitflags 2.6.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.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - -[[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-appender" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" -dependencies = [ - "crossbeam-channel", - "thiserror", - "time", - "tracing-subscriber", -] - -[[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.72", -] - -[[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 = "triomphe" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859eb650cfee7434994602c3a68b25d77ad9e68c8a6cd491616ef86661382eb3" - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "type-map" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" -dependencies = [ - "rustc-hash", -] - -[[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 = "ulid" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04f903f293d11f31c0c29e4148f6dc0d033a7f80cebc0282bea147611667d289" -dependencies = [ - "getrandom", - "rand", - "web-time", -] - -[[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-langid" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dd9d1e72a73b25e07123a80776aae3e7b0ec461ef94f9151eed6ec88005a44" -dependencies = [ - "unic-langid-impl", - "unic-langid-macros", -] - -[[package]] -name = "unic-langid-impl" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a5422c1f65949306c99240b81de9f3f15929f5a8bfe05bb44b034cc8bf593e5" -dependencies = [ - "tinystr", -] - -[[package]] -name = "unic-langid-macros" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da1cd2c042d3c7569a1008806b02039e7a4a2bdf8f8e96bd3c792434a0e275e" -dependencies = [ - "proc-macro-hack", - "tinystr", - "unic-langid-impl", - "unic-langid-macros-impl", -] - -[[package]] -name = "unic-langid-macros-impl" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ed7f4237ba393424195053097c1516bd4590dc82b84f2f97c5c69e12704555b" -dependencies = [ - "proc-macro-hack", - "quote", - "syn 2.0.72", - "unic-langid-impl", -] - -[[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-normalization" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-properties" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" - -[[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.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" - -[[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.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" -dependencies = [ - "form_urlencoded", - "idna", - "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.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "uuid" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" -dependencies = [ - "getrandom", - "rand", - "serde", -] - -[[package]] -name = "validator" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db79c75af171630a3148bd3e6d7c4f42b6a9a014c2945bc5ed0020cbb8d9478e" -dependencies = [ - "idna", - "once_cell", - "regex", - "serde", - "serde_derive", - "serde_json", - "url", - "validator_derive", -] - -[[package]] -name = "validator_derive" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0bcf92720c40105ac4b2dda2a4ea3aa717d4d6a862cc217da653a4bd5c6b10" -dependencies = [ - "darling", - "once_cell", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[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.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101" - -[[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.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" - -[[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.72", - "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.72", - "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 = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -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.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" -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 0.4.1", - "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.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" -dependencies = [ - "windows-sys 0.52.0", -] - -[[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" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" -dependencies = [ - "windows-core", - "windows-targets 0.52.6", -] - -[[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.6", -] - -[[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.6", -] - -[[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.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[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.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[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.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[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.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[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.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[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.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[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.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[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.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - -[[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.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - -[[package]] -name = "zeroize" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" - -[[package]] -name = "zstd" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "7.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa556e971e7b568dc775c136fc9de8c779b1c2fc3a63defaafadffdbd3181afa" -dependencies = [ - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.12+zstd.1.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4e40c320c3cb459d9a9ff6de98cff88f4751ee9275d140e2be94a2b74e4c13" -dependencies = [ - "cc", - "pkg-config", -] diff --git a/nixin_farm/Cargo.toml b/nixin_farm/Cargo.toml deleted file mode 100644 index e7c0d80..0000000 --- a/nixin_farm/Cargo.toml +++ /dev/null @@ -1,55 +0,0 @@ -[workspace] - -[package] -name = "nixin_farm" -version = "0.1.0" -edition = "2021" -publish = false -default-run = "nixin_farm-cli" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] - -loco-rs = { version = "0.10.1" } -migration = { path = "migration" } - -serde = { version = "1", features = ["derive"] } -serde_json = "1" -tokio = { version = "1.33.0", default-features = false } -async-trait = "0.1.74" -tracing = "0.1.40" -chrono = "0.4" -validator = { version = "0.18" } -sea-orm = { version = "1.0.0", features = [ - "sqlx-sqlite", - "sqlx-postgres", - "runtime-tokio-rustls", - "macros", -] } - -axum = "0.7.5" -include_dir = "0.7" -uuid = { version = "1.6.0", features = ["v4"] } -tracing-subscriber = { version = "0.3.17", features = ["env-filter", "json"] } - -# view engine i18n -fluent-templates = { version = "0.8.0", features = ["tera"] } -unic-langid = "0.9.4" -# /view engine - -[[bin]] -name = "nixin_farm-cli" -path = "src/bin/main.rs" -required-features = [] - -[[bin]] -name = "tool" -path = "src/bin/tool.rs" -required-features = [] - -[dev-dependencies] -serial_test = "3.1.1" -rstest = "0.21.0" -loco-rs = { version = "0.10.1", features = ["testing"] } -insta = { version = "1.34.0", features = ["redactions", "yaml", "filters"] } diff --git a/nixin_farm/README.md b/nixin_farm/README.md deleted file mode 100644 index 43b9bdd..0000000 --- a/nixin_farm/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# Welcome to Loco :train: - -[Loco](https://loco.rs) is a web and API framework running on Rust. - -This is the **SaaS starter** which includes a `User` model and authentication based on JWT. -It also include configuration sections that help you pick either a frontend or a server-side template set up for your fullstack server. - - -## Quick Start - -```sh -cargo loco start -``` - -```sh -$ 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 - - ▄ ▀ - ▀ ▄ - ▄ ▀ ▄ ▄ ▄▀ - ▄ ▀▄▄ - ▄ ▀ ▀ ▀▄▀█▄ - ▀█▄ -▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄ ▀▀█ - ██████ █████ ███ █████ ███ █████ ███ ▀█ - ██████ █████ ███ █████ ▀▀▀ █████ ███ ▄█▄ - ██████ █████ ███ █████ █████ ███ ████▄ - ██████ █████ ███ █████ ▄▄▄ █████ ███ █████ - ██████ █████ ███ ████ ███ █████ ███ ████▀ - ▀▀▀██▄ ▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀ ██▀ - ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ - https://loco.rs - -environment: development - database: automigrate - logger: debug -compilation: debug - modes: server - -listening on http://localhost:5150 -``` - -## Full Stack Serving - -You can check your [configuration](config/development.yaml) to pick either frontend setup or server-side rendered template, and activate the relevant configuration sections. - - -## 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/nixin_farm/assets/i18n/de-DE/main.ftl b/nixin_farm/assets/i18n/de-DE/main.ftl deleted file mode 100644 index ced609f..0000000 --- a/nixin_farm/assets/i18n/de-DE/main.ftl +++ /dev/null @@ -1,4 +0,0 @@ -hello-world = Hallo Welt! -greeting = Hallochen { $name }! - .placeholder = Hallo Freund! -about = Uber diff --git a/nixin_farm/assets/i18n/en-US/main.ftl b/nixin_farm/assets/i18n/en-US/main.ftl deleted file mode 100644 index 9d4d5e7..0000000 --- a/nixin_farm/assets/i18n/en-US/main.ftl +++ /dev/null @@ -1,10 +0,0 @@ -hello-world = Hello World! -greeting = Hello { $name }! - .placeholder = Hello Friend! -about = About -simple = simple text -reference = simple text with a reference: { -something } -parameter = text with a { $param } -parameter2 = text one { $param } second { $multi-word-param } -email = text with an EMAIL("example@example.org") -fallback = this should fall back diff --git a/nixin_farm/assets/i18n/shared.ftl b/nixin_farm/assets/i18n/shared.ftl deleted file mode 100644 index f169eca..0000000 --- a/nixin_farm/assets/i18n/shared.ftl +++ /dev/null @@ -1 +0,0 @@ --something = foo diff --git a/nixin_farm/assets/static/404.html b/nixin_farm/assets/static/404.html deleted file mode 100644 index 66e78fb..0000000 --- a/nixin_farm/assets/static/404.html +++ /dev/null @@ -1,3 +0,0 @@ - -not found :-( - diff --git a/nixin_farm/assets/static/image.png b/nixin_farm/assets/static/image.png deleted file mode 100644 index fa5a09508d1b4510e2de0cb7d0fa20a44eb631c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304720 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%0DeQf`{ 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�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%0DZ^Q%>elM^F6+0A)oFJ{$ckKC-VUABW#^>PD3wb_ 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%0DqC9P??cV;AKw1TI!SOt??NfSBi^fWgGAq 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 diff --git a/nixin_farm/assets/views/base.html b/nixin_farm/assets/views/base.html deleted file mode 100644 index d0d8c43..0000000 --- a/nixin_farm/assets/views/base.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - {% block title %}{% endblock title %} - - - - {% block head %} - - {% endblock head %} - - - -
- {% block content %} - {% endblock content %} -
- - {% block js %} - - {% endblock js %} - - - \ No newline at end of file diff --git a/nixin_farm/assets/views/home/hello.html b/nixin_farm/assets/views/home/hello.html deleted file mode 100644 index 6b97c39..0000000 --- a/nixin_farm/assets/views/home/hello.html +++ /dev/null @@ -1,12 +0,0 @@ - - -
- find this tera template at assets/views/home/hello.html: -
-
- {{ t(key="hello-world", lang="en-US") }}, -
- {{ t(key="hello-world", lang="de-DE") }} - - - \ No newline at end of file diff --git a/nixin_farm/assets/views/server/create.html b/nixin_farm/assets/views/server/create.html deleted file mode 100644 index 9dc318c..0000000 --- a/nixin_farm/assets/views/server/create.html +++ /dev/null @@ -1,54 +0,0 @@ -{% extends "base.html" %} - -{% block title %} -Create server -{% endblock title %} - -{% block content %} -
-
-

Create new server

-
-
- -
- -
-
- -
- -
-
-
- -
-
-
-{% endblock content %} - -{% block js %} - -{% endblock js %} \ No newline at end of file diff --git a/nixin_farm/assets/views/server/edit.html b/nixin_farm/assets/views/server/edit.html deleted file mode 100644 index b2b8c7f..0000000 --- a/nixin_farm/assets/views/server/edit.html +++ /dev/null @@ -1,73 +0,0 @@ -{% extends "base.html" %} - -{% block title %} -Edit server: {{ item.id }} -{% endblock title %} - -{% block content %} -

Edit server: {{ item.id }}

-
-
-
-{% endblock content %} - -{% block js %} - -{% endblock js %} \ No newline at end of file diff --git a/nixin_farm/assets/views/server/list.html b/nixin_farm/assets/views/server/list.html deleted file mode 100644 index 5e732dd..0000000 --- a/nixin_farm/assets/views/server/list.html +++ /dev/null @@ -1,27 +0,0 @@ -{% extends "base.html" %} - -{% block title %} -List of server -{% endblock title %} - -{% block content %} -

server

-
- {% for item in items %} -
-
- -
-
- -
- Edit - View -
- {% endfor %} - -
-
- New server -
-{% endblock content %} diff --git a/nixin_farm/assets/views/server/show.html b/nixin_farm/assets/views/server/show.html deleted file mode 100644 index aff640a..0000000 --- a/nixin_farm/assets/views/server/show.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "base.html" %} - -{% block title %} -View server: {{ item.id }} -{% endblock title %} - -{% block content %} -

View server: {{ item.id }}

-
-
- -
-
- -
-
-Back to servers -
-{% endblock content %} diff --git a/nixin_farm/config/development.yaml b/nixin_farm/config/development.yaml deleted file mode 100644 index 43b90ff..0000000 --- a/nixin_farm/config/development.yaml +++ /dev/null @@ -1,138 +0,0 @@ -# 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: 5150 - # 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: - # ############################################# - # Full stack SaaS asset serving - # ############################################# - # - # You can choose from: - # - # (1) Server-side rendered templates (like erb in Ruby, ejs in nodejs) based on the Tera templating engine. - # (2) Client-side frontend set up - # - # You can also choose both. - # - # Uncomment the relevant sections below: - - # - # (1) Server-side static assets config - # ==================================== - # - # for use with the view_engine in initializers/view_engine.rs - # (server-block-start) - # static: - # enable: true - # must_exist: true - # precompressed: false - # folder: - # uri: "/static" - # path: "assets/static" - # fallback: "assets/static/404.html" - # (server-block-end) - - # - # (2) Client side app static config - # ================================= - # - # Note that you need to go in `frontend` and run your frontend build first, - # e.g.: $ npm install & npm build - # - static: - enable: true - must_exist: true - precompressed: false - folder: - uri: "/" - path: "frontend/dist" - fallback: "frontend/dist/index.html" - # - -# 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: BackgroundAsync - -# 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="sqlite://nixin_farm_development.sqlite?mode=rwc") }} - # When enabled, the sql query will be logged. - enable_logging: false - # Set the timeout duration when acquiring a connection. - connect_timeout: {{ get_env(name="DB_CONNECT_TIMEOUT", default="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 - -# Queue Configuration -queue: - kind: 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: H86EQ4JaalMucUtxGnQP - # Token expiration time in seconds - expiration: 604800 # 7 days diff --git a/nixin_farm/config/test.yaml b/nixin_farm/config/test.yaml deleted file mode 100644 index 359ec0a..0000000 --- a/nixin_farm/config/test.yaml +++ /dev/null @@ -1,101 +0,0 @@ -# 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: 5150 - # 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: - static: - enable: true - precompressed: false - must_exist: false - folder: - uri: "/" - path: "frontend/dist" - fallback: "frontend/dist/index.html" - -# 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="sqlite://nixin_farm_test.sqlite?mode=rwc")}} - # When enabled, the sql query will be logged. - enable_logging: false - # Set the timeout duration when acquiring a connection. - connect_timeout: {{ get_env(name="DB_CONNECT_TIMEOUT", default="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 - -# Queue Configuration -queue: - kind: 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: 6GBXpgynnJ82bdkkjBa6 - # Token expiration time in seconds - expiration: 604800 # 7 days - diff --git a/nixin_farm/examples/playground.rs b/nixin_farm/examples/playground.rs deleted file mode 100644 index 338f7f3..0000000 --- a/nixin_farm/examples/playground.rs +++ /dev/null @@ -1,21 +0,0 @@ -#[allow(unused_imports)] -use loco_rs::{cli::playground, prelude::*}; -use nixin_farm::app::App; - -#[tokio::main] -async fn main() -> loco_rs::Result<()> { - let _ctx = playground::().await?; - - // 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/nixin_farm/frontend/.gitignore b/nixin_farm/frontend/.gitignore deleted file mode 100644 index a1dccae..0000000 --- a/nixin_farm/frontend/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist-ssr -dist/ -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? - -# Common local dotenv files popularised by Create React App & Next.js -# https://rsbuild.dev/guide/advanced/env-vars#env-file -.env.local -.env.development.local -.env.production.local -.env.test.local diff --git a/nixin_farm/frontend/README.md b/nixin_farm/frontend/README.md deleted file mode 100644 index 9fd9aed..0000000 --- a/nixin_farm/frontend/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# SaaS Frontend - -## Batteries included - -- [TypeScript](https://www.typescriptlang.org/): A typed superset of JavaScript -- [Rsbuild](https://rsbuild.dev/): A Rust-based web build tool -- [Biome](https://biomejs.dev/): A Rust-based formatter and sensible linter for the web -- [React](https://reactjs.org/): A JavaScript library for building user interfaces - -If you don't like React for some reason, Rsbuild makes it easy to replace it with something else! - -# Development - -To get started with the development of the SaaS frontend, follow these steps: - -### 1. Install Packages - -Use the following command to install the required packages using pnpm: - -```sh -pnpm install -``` - -### 2. Run in Development Mode - -Once the packages are installed, run your frontend application in development mode with the following command: - -```sh -pnpm dev -``` - -This will start the development frontend server serving via vit - -### 3. Build The application - -To build your application run the following command: - -```sh -pnpm build -``` - -After the build `dist` folder is ready to served by loco. run loco `cargo loco start` and the frontend application will served via Loco \ No newline at end of file diff --git a/nixin_farm/frontend/biome.json b/nixin_farm/frontend/biome.json deleted file mode 100644 index 0dd3251..0000000 --- a/nixin_farm/frontend/biome.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "$schema": "https://biomejs.dev/schemas/1.8.2/schema.json", - "organizeImports": { - "enabled": true - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true - } - }, - "javascript": { - "formatter": { - "enabled": true, - "indentStyle": "space" - } - }, - "json": { - "formatter": { - "enabled": true, - "indentStyle": "space" - } - } -} diff --git a/nixin_farm/frontend/package.json b/nixin_farm/frontend/package.json deleted file mode 100644 index dd7a791..0000000 --- a/nixin_farm/frontend/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "frontend", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "rsbuild dev --open", - "build": "rsbuild build", - "lint": "biome check src/", - "preview": "rsbuild preview" - }, - "dependencies": { - "react": "^18", - "react-dom": "^18" - }, - "devDependencies": { - "@biomejs/biome": "^1", - "@rsbuild/core": "^1", - "@rsbuild/plugin-react": "^1", - "@types/react": "^18", - "@types/react-dom": "^18", - "typescript": "^5" - } -} diff --git a/nixin_farm/frontend/rsbuild.config.ts b/nixin_farm/frontend/rsbuild.config.ts deleted file mode 100644 index d86582c..0000000 --- a/nixin_farm/frontend/rsbuild.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { defineConfig } from "@rsbuild/core"; -import { pluginReact } from "@rsbuild/plugin-react"; - -// https://rsbuild.dev/guide/basic/configure-rsbuild -export default defineConfig({ - plugins: [pluginReact()], - html: { - favicon: "src/assets/favicon.ico", - title: "Loco SaaS Starter", - }, - server: { - proxy: { - "/api": { - target: "http://127.0.0.1:5150", - changeOrigin: true, - secure: false, - }, - }, - }, -}); diff --git a/nixin_farm/frontend/src/LocoSplash.tsx b/nixin_farm/frontend/src/LocoSplash.tsx deleted file mode 100644 index cb96ace..0000000 --- a/nixin_farm/frontend/src/LocoSplash.tsx +++ /dev/null @@ -1,105 +0,0 @@ -export const LocoSplash = () => { - return ( - - ); -}; diff --git a/nixin_farm/frontend/src/assets/favicon.ico b/nixin_farm/frontend/src/assets/favicon.ico deleted file mode 100644 index 07f5b73722d25ce4a2ee7e8bb5aa16c354c44a55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15406 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 diff --git a/nixin_farm/frontend/src/env.d.ts b/nixin_farm/frontend/src/env.d.ts deleted file mode 100644 index b0ac762..0000000 --- a/nixin_farm/frontend/src/env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/nixin_farm/frontend/src/index.css b/nixin_farm/frontend/src/index.css deleted file mode 100644 index 854aa19..0000000 --- a/nixin_farm/frontend/src/index.css +++ /dev/null @@ -1,100 +0,0 @@ -body { - margin: 0; - font-family: "Arimo", -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - background: #212529; - color: #dee2e6; - -webkit-text-size-adjust: 100%; - -webkit-tap-highlight-color: rgba(29, 45, 53, 0) -} - -ul { - margin-top: 0; - margin-bottom: 1rem; - list-style: none; -} - -a { - color: #dee2e6; - text-decoration: none -} - -.container { - max-width: 1320px; - padding-right: var(--bs-gutter-x, 24px); - padding-left: var(--bs-gutter-x, 24px); - margin-right: auto; - margin-left: auto -} - - -.navbar { - padding-top: .5rem; - padding-bottom: .5rem -} - -.navbar .container { - display: flex; - justify-content: space-between -} - -.navbar-nav { - margin-bottom: 0; -} -.navbar-nav li { - display: inline-flex; - margin-right: 10px; -} - -.fixed-top { - position: fixed; - top: 0; - right: 0; - left: 0; -} - -body { - font-size: 1rem; - padding-top: 6rem !important -} - -.navbar { - border-bottom: 1px solid #2a2f34; -} - - -.logo { - max-width: 1280px; - margin: 0 auto; - text-align: center; -} - -.logo img { - width: 250px; -} -footer { - position: absolute; - bottom: 0; - width: 100%; - text-align: center; -} - -footer ul { - display: inline-block; - padding: 0; -} - -footer ul li { - display: inline-flex; - align-items: center; - margin: 0 5px; - list-style: none; -} - -footer ul li:not(:last-child) { - border-right: 1px solid #ccc; - padding-right: 5px; - height: 15px; -} \ No newline at end of file diff --git a/nixin_farm/frontend/src/index.tsx b/nixin_farm/frontend/src/index.tsx deleted file mode 100644 index 8d48a1d..0000000 --- a/nixin_farm/frontend/src/index.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; -import ReactDOM from "react-dom/client"; -import { LocoSplash } from "./LocoSplash"; - -import "./index.css"; - -const root = document.getElementById("root"); - -if (!root) { - throw new Error("No root element found"); -} - -ReactDOM.createRoot(root).render( - - - , -); diff --git a/nixin_farm/frontend/tsconfig.json b/nixin_farm/frontend/tsconfig.json deleted file mode 100644 index e6b9bdf..0000000 --- a/nixin_farm/frontend/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "lib": ["DOM", "ES2020"], - "module": "ESNext", - "jsx": "react-jsx", - "strict": true, - "skipLibCheck": true, - "isolatedModules": true, - "resolveJsonModule": true, - "moduleResolution": "bundler", - "useDefineForClassFields": true - }, - "include": ["src"] -} diff --git a/nixin_farm/migration/Cargo.toml b/nixin_farm/migration/Cargo.toml deleted file mode 100644 index bf79cfe..0000000 --- a/nixin_farm/migration/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -[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.10.1" } - -[dependencies.sea-orm-migration] -version = "1.0.0" -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/nixin_farm/migration/src/lib.rs b/nixin_farm/migration/src/lib.rs deleted file mode 100644 index 48f563c..0000000 --- a/nixin_farm/migration/src/lib.rs +++ /dev/null @@ -1,20 +0,0 @@ -#![allow(elided_lifetimes_in_paths)] -#![allow(clippy::wildcard_imports)] -pub use sea_orm_migration::prelude::*; - -mod m20220101_000001_users; -mod m20231103_114510_notes; - -mod m20241016_180911_servers; -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(m20241016_180911_servers::Migration), - ] - } -} \ No newline at end of file diff --git a/nixin_farm/migration/src/m20220101_000001_users.rs b/nixin_farm/migration/src/m20220101_000001_users.rs deleted file mode 100644 index 936ad3d..0000000 --- a/nixin_farm/migration/src/m20220101_000001_users.rs +++ /dev/null @@ -1,50 +0,0 @@ -use loco_rs::schema::table_auto_tz; -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_tz(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_with_time_zone_null(Users::ResetSentAt)) - .col(string_null(Users::EmailVerificationToken)) - .col(timestamp_with_time_zone_null( - Users::EmailVerificationSentAt, - )) - .col(timestamp_with_time_zone_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/nixin_farm/migration/src/m20231103_114510_notes.rs b/nixin_farm/migration/src/m20231103_114510_notes.rs deleted file mode 100644 index d0d8a5a..0000000 --- a/nixin_farm/migration/src/m20231103_114510_notes.rs +++ /dev/null @@ -1,34 +0,0 @@ -use loco_rs::schema::table_auto_tz; -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_tz(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)] -enum Notes { - Table, - Id, - Title, - Content, -} diff --git a/nixin_farm/migration/src/m20241016_180911_servers.rs b/nixin_farm/migration/src/m20241016_180911_servers.rs deleted file mode 100644 index 30a9518..0000000 --- a/nixin_farm/migration/src/m20241016_180911_servers.rs +++ /dev/null @@ -1,37 +0,0 @@ -use loco_rs::schema::table_auto_tz; -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_tz(Servers::Table) - .col(pk_auto(Servers::Id)) - .col(string_null(Servers::Name)) - .col(string_null(Servers::Domain)) - .to_owned(), - ) - .await - } - - async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { - manager - .drop_table(Table::drop().table(Servers::Table).to_owned()) - .await - } -} - -#[derive(DeriveIden)] -enum Servers { - Table, - Id, - Name, - Domain, - -} - - diff --git a/nixin_farm/src/app.rs b/nixin_farm/src/app.rs deleted file mode 100644 index 1c9a468..0000000 --- a/nixin_farm/src/app.rs +++ /dev/null @@ -1,79 +0,0 @@ -use std::path::Path; - -use async_trait::async_trait; -use loco_rs::{ - app::{AppContext, Hooks, Initializer}, - bgworker::{BackgroundWorker, Queue}, - boot::{create_app, BootResult, StartMode}, - controller::AppRoutes, - db::{self, truncate_table}, - environment::Environment, - task::Tasks, - Result, -}; -use migration::Migrator; -use sea_orm::DatabaseConnection; - -use crate::{ - controllers, initializers, - 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 - } - - async fn initializers(_ctx: &AppContext) -> Result>> { - Ok(vec![Box::new( - initializers::view_engine::ViewEngineInitializer, - )]) - } - - fn routes(_ctx: &AppContext) -> AppRoutes { - AppRoutes::with_default_routes() - .add_route(controllers::server::routes()) - .add_route(controllers::notes::routes()) - .add_route(controllers::auth::routes()) - .add_route(controllers::user::routes()) - } - - async fn connect_workers(ctx: &AppContext, queue: &Queue) -> Result<()> { - queue.register(DownloadWorker::build(ctx)).await?; - Ok(()) - } - - 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(()) - } -} \ No newline at end of file diff --git a/nixin_farm/src/bin/main.rs b/nixin_farm/src/bin/main.rs deleted file mode 100644 index 9bf7397..0000000 --- a/nixin_farm/src/bin/main.rs +++ /dev/null @@ -1,8 +0,0 @@ -use loco_rs::cli; -use nixin_farm::app::App; -use migration::Migrator; - -#[tokio::main] -async fn main() -> loco_rs::Result<()> { - cli::main::().await -} diff --git a/nixin_farm/src/bin/tool.rs b/nixin_farm/src/bin/tool.rs deleted file mode 100644 index 9bf7397..0000000 --- a/nixin_farm/src/bin/tool.rs +++ /dev/null @@ -1,8 +0,0 @@ -use loco_rs::cli; -use nixin_farm::app::App; -use migration::Migrator; - -#[tokio::main] -async fn main() -> loco_rs::Result<()> { - cli::main::().await -} diff --git a/nixin_farm/src/controllers/auth.rs b/nixin_farm/src/controllers/auth.rs deleted file mode 100644 index 9978d9d..0000000 --- a/nixin_farm/src/controllers/auth.rs +++ /dev/null @@ -1,150 +0,0 @@ -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(()); - } - }; - - 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("api/auth") - .add("/register", post(register)) - .add("/verify", post(verify)) - .add("/login", post(login)) - .add("/forgot", post(forgot)) - .add("/reset", post(reset)) -} diff --git a/nixin_farm/src/controllers/mod.rs b/nixin_farm/src/controllers/mod.rs deleted file mode 100644 index baf6605..0000000 --- a/nixin_farm/src/controllers/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -pub mod auth; -pub mod notes; -pub mod user; - -pub mod server; \ No newline at end of file diff --git a/nixin_farm/src/controllers/notes.rs b/nixin_farm/src/controllers/notes.rs deleted file mode 100644 index c95aa3e..0000000 --- a/nixin_farm/src/controllers/notes.rs +++ /dev/null @@ -1,75 +0,0 @@ -#![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("api/notes") - .add("/", get(list)) - .add("/", post(add)) - .add("/:id", get(get_one)) - .add("/:id", delete(remove)) - .add("/:id", post(update)) -} diff --git a/nixin_farm/src/controllers/server.rs b/nixin_farm/src/controllers/server.rs deleted file mode 100644 index 1de9dda..0000000 --- a/nixin_farm/src/controllers/server.rs +++ /dev/null @@ -1,115 +0,0 @@ -#![allow(clippy::missing_errors_doc)] -#![allow(clippy::unnecessary_struct_initialization)] -#![allow(clippy::unused_async)] -use loco_rs::prelude::*; -use serde::{Deserialize, Serialize}; -use sea_orm::{sea_query::Order, QueryOrder}; -use axum::debug_handler; - -use crate::{ - models::_entities::servers::{ActiveModel, Column, Entity, Model}, - views, -}; - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct Params { - pub name: Option, - pub domain: Option, - } - -impl Params { - fn update(&self, item: &mut ActiveModel) { - item.name = Set(self.name.clone()); - item.domain = Set(self.domain.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( - ViewEngine(v): ViewEngine, - State(ctx): State, -) -> Result { - let item = Entity::find() - .order_by(Column::Id, Order::Desc) - .all(&ctx.db) - .await?; - views::server::list(&v, &item) -} - -#[debug_handler] -pub async fn new( - ViewEngine(v): ViewEngine, - State(_ctx): State, -) -> Result { - views::server::create(&v) -} - -#[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 edit( - Path(id): Path, - ViewEngine(v): ViewEngine, - State(ctx): State, -) -> Result { - let item = load_item(&ctx, id).await?; - views::server::edit(&v, &item) -} - -#[debug_handler] -pub async fn show( - Path(id): Path, - ViewEngine(v): ViewEngine, - State(ctx): State, -) -> Result { - let item = load_item(&ctx, id).await?; - views::server::show(&v, &item) -} - -#[debug_handler] -pub async fn add( - ViewEngine(v): ViewEngine, - State(ctx): State, - Json(params): Json, -) -> Result { - let mut item = ActiveModel { - ..Default::default() - }; - params.update(&mut item); - let item = item.insert(&ctx.db).await?; - views::server::show(&v, &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() -} - -pub fn routes() -> Routes { - Routes::new() - .prefix("servers/") - .add("/", get(list)) - .add("/", post(add)) - .add("new", get(new)) - .add(":id", get(show)) - .add(":id/edit", get(edit)) - .add(":id", post(update)) - .add(":id", delete(remove)) -} diff --git a/nixin_farm/src/controllers/user.rs b/nixin_farm/src/controllers/user.rs deleted file mode 100644 index a7c0af3..0000000 --- a/nixin_farm/src/controllers/user.rs +++ /dev/null @@ -1,16 +0,0 @@ -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("api/user") - .add("/current", get(current)) -} diff --git a/nixin_farm/src/fixtures/notes.yaml b/nixin_farm/src/fixtures/notes.yaml deleted file mode 100644 index 0e66c95..0000000 --- a/nixin_farm/src/fixtures/notes.yaml +++ /dev/null @@ -1,11 +0,0 @@ ---- -- id: 1 - title: Loco note 1 - content: Loco note 1 content - created_at: "2023-11-12T12:34:56.789Z" - updated_at: "2023-11-12T12:34:56.789Z" -- id: 2 - title: Loco note 2 - content: Loco note 2 content - created_at: "2023-11-12T12:34:56.789Z" - updated_at: "2023-11-12T12:34:56.789Z" diff --git a/nixin_farm/src/fixtures/users.yaml b/nixin_farm/src/fixtures/users.yaml deleted file mode 100644 index 8f5b5ed..0000000 --- a/nixin_farm/src/fixtures/users.yaml +++ /dev/null @@ -1,17 +0,0 @@ ---- -- 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.789Z" - updated_at: "2023-11-12T12:34:56.789Z" -- 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.789Z" - updated_at: "2023-11-12T12:34:56.789Z" diff --git a/nixin_farm/src/initializers/mod.rs b/nixin_farm/src/initializers/mod.rs deleted file mode 100644 index 8b3bec4..0000000 --- a/nixin_farm/src/initializers/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![allow(clippy::module_name_repetitions)] -pub mod view_engine; diff --git a/nixin_farm/src/initializers/view_engine.rs b/nixin_farm/src/initializers/view_engine.rs deleted file mode 100644 index f0a5ffb..0000000 --- a/nixin_farm/src/initializers/view_engine.rs +++ /dev/null @@ -1,36 +0,0 @@ -use axum::{async_trait, Extension, Router as AxumRouter}; -use fluent_templates::{ArcLoader, FluentLoader}; -use loco_rs::{ - app::{AppContext, Initializer}, - controller::views::{engines, ViewEngine}, - Error, Result, -}; -use tracing::info; - -const I18N_DIR: &str = "assets/i18n"; -const I18N_SHARED: &str = "assets/i18n/shared.ftl"; - -pub struct ViewEngineInitializer; -#[async_trait] -impl Initializer for ViewEngineInitializer { - fn name(&self) -> String { - "view-engine".to_string() - } - - async fn after_routes(&self, router: AxumRouter, _ctx: &AppContext) -> Result { - let mut tera_engine = engines::TeraView::build()?; - if std::path::Path::new(I18N_DIR).exists() { - let arc = ArcLoader::builder(&I18N_DIR, unic_langid::langid!("en-US")) - .shared_resources(Some(&[I18N_SHARED.into()])) - .customize(|bundle| bundle.set_use_isolating(false)) - .build() - .map_err(|e| Error::string(&e.to_string()))?; - tera_engine - .tera - .register_function("t", FluentLoader::new(arc)); - info!("locales loaded"); - } - - Ok(router.layer(Extension(ViewEngine::from(tera_engine)))) - } -} diff --git a/nixin_farm/src/lib.rs b/nixin_farm/src/lib.rs deleted file mode 100644 index dc3ea76..0000000 --- a/nixin_farm/src/lib.rs +++ /dev/null @@ -1,8 +0,0 @@ -pub mod app; -pub mod controllers; -pub mod initializers; -pub mod mailers; -pub mod models; -pub mod tasks; -pub mod views; -pub mod workers; diff --git a/nixin_farm/src/mailers/auth.rs b/nixin_farm/src/mailers/auth.rs deleted file mode 100644 index 30bb1bf..0000000 --- a/nixin_farm/src/mailers/auth.rs +++ /dev/null @@ -1,65 +0,0 @@ -// 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/nixin_farm/src/mailers/auth/forgot/html.t b/nixin_farm/src/mailers/auth/forgot/html.t deleted file mode 100644 index 221dd60..0000000 --- a/nixin_farm/src/mailers/auth/forgot/html.t +++ /dev/null @@ -1,11 +0,0 @@ -; - - - 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/nixin_farm/src/mailers/auth/forgot/subject.t b/nixin_farm/src/mailers/auth/forgot/subject.t deleted file mode 100644 index 4938df1..0000000 --- a/nixin_farm/src/mailers/auth/forgot/subject.t +++ /dev/null @@ -1 +0,0 @@ -Your reset password link diff --git a/nixin_farm/src/mailers/auth/forgot/text.t b/nixin_farm/src/mailers/auth/forgot/text.t deleted file mode 100644 index 58c30fd..0000000 --- a/nixin_farm/src/mailers/auth/forgot/text.t +++ /dev/null @@ -1,3 +0,0 @@ -Reset your password with this link: - -http://localhost/reset#{{resetToken}} diff --git a/nixin_farm/src/mailers/auth/welcome/html.t b/nixin_farm/src/mailers/auth/welcome/html.t deleted file mode 100644 index ae4c41c..0000000 --- a/nixin_farm/src/mailers/auth/welcome/html.t +++ /dev/null @@ -1,13 +0,0 @@ -; - - - 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/nixin_farm/src/mailers/auth/welcome/subject.t b/nixin_farm/src/mailers/auth/welcome/subject.t deleted file mode 100644 index 82cc6fb..0000000 --- a/nixin_farm/src/mailers/auth/welcome/subject.t +++ /dev/null @@ -1 +0,0 @@ -Welcome {{name}} diff --git a/nixin_farm/src/mailers/auth/welcome/text.t b/nixin_farm/src/mailers/auth/welcome/text.t deleted file mode 100644 index 63beefd..0000000 --- a/nixin_farm/src/mailers/auth/welcome/text.t +++ /dev/null @@ -1,4 +0,0 @@ -Welcome {{name}}, you can now log in. - Verify your account with the link below: - - http://localhost/verify#{{verifyToken}} diff --git a/nixin_farm/src/mailers/mod.rs b/nixin_farm/src/mailers/mod.rs deleted file mode 100644 index 0e4a05d..0000000 --- a/nixin_farm/src/mailers/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod auth; diff --git a/nixin_farm/src/models/_entities/mod.rs b/nixin_farm/src/models/_entities/mod.rs deleted file mode 100644 index fa23d39..0000000 --- a/nixin_farm/src/models/_entities/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.0 - -pub mod prelude; - -pub mod notes; -pub mod servers; -pub mod users; diff --git a/nixin_farm/src/models/_entities/notes.rs b/nixin_farm/src/models/_entities/notes.rs deleted file mode 100644 index 0bf2b7c..0000000 --- a/nixin_farm/src/models/_entities/notes.rs +++ /dev/null @@ -1,18 +0,0 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.0 - -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: DateTimeWithTimeZone, - pub updated_at: DateTimeWithTimeZone, - #[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/nixin_farm/src/models/_entities/prelude.rs b/nixin_farm/src/models/_entities/prelude.rs deleted file mode 100644 index 2a9300a..0000000 --- a/nixin_farm/src/models/_entities/prelude.rs +++ /dev/null @@ -1,5 +0,0 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.0 - -pub use super::notes::Entity as Notes; -pub use super::servers::Entity as Servers; -pub use super::users::Entity as Users; diff --git a/nixin_farm/src/models/_entities/servers.rs b/nixin_farm/src/models/_entities/servers.rs deleted file mode 100644 index 7f1f434..0000000 --- a/nixin_farm/src/models/_entities/servers.rs +++ /dev/null @@ -1,18 +0,0 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.0 - -use sea_orm::entity::prelude::*; -use serde::{Deserialize, Serialize}; - -#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] -#[sea_orm(table_name = "servers")] -pub struct Model { - pub created_at: DateTimeWithTimeZone, - pub updated_at: DateTimeWithTimeZone, - #[sea_orm(primary_key)] - pub id: i32, - pub name: Option, - pub domain: Option, -} - -#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] -pub enum Relation {} diff --git a/nixin_farm/src/models/_entities/users.rs b/nixin_farm/src/models/_entities/users.rs deleted file mode 100644 index d5441bb..0000000 --- a/nixin_farm/src/models/_entities/users.rs +++ /dev/null @@ -1,28 +0,0 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.0 - -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: DateTimeWithTimeZone, - pub updated_at: DateTimeWithTimeZone, - #[sea_orm(primary_key)] - pub id: i32, - 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/nixin_farm/src/models/mod.rs b/nixin_farm/src/models/mod.rs deleted file mode 100644 index 2622fcb..0000000 --- a/nixin_farm/src/models/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub mod _entities; -pub mod notes; -pub mod users; -pub mod servers; diff --git a/nixin_farm/src/models/notes.rs b/nixin_farm/src/models/notes.rs deleted file mode 100644 index 1102598..0000000 --- a/nixin_farm/src/models/notes.rs +++ /dev/null @@ -1,7 +0,0 @@ -use sea_orm::entity::prelude::*; - -use super::_entities::notes::ActiveModel; - -impl ActiveModelBehavior for ActiveModel { - // extend activemodel below (keep comment for generators) -} diff --git a/nixin_farm/src/models/servers.rs b/nixin_farm/src/models/servers.rs deleted file mode 100644 index cb875b7..0000000 --- a/nixin_farm/src/models/servers.rs +++ /dev/null @@ -1,7 +0,0 @@ -use sea_orm::entity::prelude::*; -use super::_entities::servers::{ActiveModel, Entity}; -pub type Servers = Entity; - -impl ActiveModelBehavior for ActiveModel { - // extend activemodel below (keep comment for generators) -} diff --git a/nixin_farm/src/models/users.rs b/nixin_farm/src/models/users.rs deleted file mode 100644 index b4f3aae..0000000 --- a/nixin_farm/src/models/users.rs +++ /dev/null @@ -1,298 +0,0 @@ -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(function = "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( - model::query::condition() - .eq(users::Column::ApiKey, api_key) - .build(), - ) - .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( - model::query::condition() - .eq(users::Column::Email, email) - .build(), - ) - .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( - model::query::condition() - .eq(users::Column::EmailVerificationToken, token) - .build(), - ) - .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( - model::query::condition() - .eq(users::Column::ResetToken, token) - .build(), - ) - .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( - model::query::condition() - .eq(users::Column::Pid, parse_uuid) - .build(), - ) - .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( - model::query::condition() - .eq(users::Column::ApiKey, api_key) - .build(), - ) - .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( - model::query::condition() - .eq(users::Column::Email, ¶ms.email) - .build(), - ) - .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(), None)?) - } -} - -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().into())); - 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().into())); - 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().into())); - 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()))?); - self.reset_token = ActiveValue::Set(None); - self.reset_sent_at = ActiveValue::Set(None); - Ok(self.update(db).await?) - } -} diff --git a/nixin_farm/src/tasks/mod.rs b/nixin_farm/src/tasks/mod.rs deleted file mode 100644 index 01fbdda..0000000 --- a/nixin_farm/src/tasks/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod seed; diff --git a/nixin_farm/src/tasks/seed.rs b/nixin_farm/src/tasks/seed.rs deleted file mode 100644 index 1647beb..0000000 --- a/nixin_farm/src/tasks/seed.rs +++ /dev/null @@ -1,45 +0,0 @@ -//! 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 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: &task::Vars) -> Result<()> { - let refresh = vars - .cli_arg("refresh") - .is_ok_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/nixin_farm/src/views/auth.rs b/nixin_farm/src/views/auth.rs deleted file mode 100644 index 2240a50..0000000 --- a/nixin_farm/src/views/auth.rs +++ /dev/null @@ -1,23 +0,0 @@ -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/nixin_farm/src/views/mod.rs b/nixin_farm/src/views/mod.rs deleted file mode 100644 index b8613a9..0000000 --- a/nixin_farm/src/views/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub mod auth; -pub mod user; - -pub mod server; \ No newline at end of file diff --git a/nixin_farm/src/views/server.rs b/nixin_farm/src/views/server.rs deleted file mode 100644 index 01e4ce3..0000000 --- a/nixin_farm/src/views/server.rs +++ /dev/null @@ -1,39 +0,0 @@ -use loco_rs::prelude::*; - -use crate::models::_entities::servers; - -/// Render a list view of servers. -/// -/// # Errors -/// -/// When there is an issue with rendering the view. -pub fn list(v: &impl ViewRenderer, items: &Vec) -> Result { - format::render().view(v, "server/list.html", data!({"items": items})) -} - -/// Render a single server view. -/// -/// # Errors -/// -/// When there is an issue with rendering the view. -pub fn show(v: &impl ViewRenderer, item: &servers::Model) -> Result { - format::render().view(v, "server/show.html", data!({"item": item})) -} - -/// Render a server create form. -/// -/// # Errors -/// -/// When there is an issue with rendering the view. -pub fn create(v: &impl ViewRenderer) -> Result { - format::render().view(v, "server/create.html", data!({})) -} - -/// Render a server edit form. -/// -/// # Errors -/// -/// When there is an issue with rendering the view. -pub fn edit(v: &impl ViewRenderer, item: &servers::Model) -> Result { - format::render().view(v, "server/edit.html", data!({"item": item})) -} diff --git a/nixin_farm/src/views/user.rs b/nixin_farm/src/views/user.rs deleted file mode 100644 index 9d83041..0000000 --- a/nixin_farm/src/views/user.rs +++ /dev/null @@ -1,21 +0,0 @@ -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/nixin_farm/src/workers/downloader.rs b/nixin_farm/src/workers/downloader.rs deleted file mode 100644 index fa094d5..0000000 --- a/nixin_farm/src/workers/downloader.rs +++ /dev/null @@ -1,40 +0,0 @@ -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, -} - -#[async_trait] -impl BackgroundWorker for DownloadWorker { - fn build(ctx: &AppContext) -> Self { - Self { ctx: ctx.clone() } - } - async fn perform(&self, args: DownloadWorkerArgs) -> 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/nixin_farm/src/workers/mod.rs b/nixin_farm/src/workers/mod.rs deleted file mode 100644 index acb5733..0000000 --- a/nixin_farm/src/workers/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod downloader; diff --git a/nixin_farm/tests/mod.rs b/nixin_farm/tests/mod.rs deleted file mode 100644 index b42f234..0000000 --- a/nixin_farm/tests/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -mod models; -mod requests; -mod tasks; -mod workers; diff --git a/nixin_farm/tests/models/mod.rs b/nixin_farm/tests/models/mod.rs deleted file mode 100644 index 22e060c..0000000 --- a/nixin_farm/tests/models/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -mod users; - -mod servers; \ No newline at end of file diff --git a/nixin_farm/tests/models/servers.rs b/nixin_farm/tests/models/servers.rs deleted file mode 100644 index 4ff12ef..0000000 --- a/nixin_farm/tests/models/servers.rs +++ /dev/null @@ -1,31 +0,0 @@ -use nixin_farm::app::App; -use loco_rs::testing; -use serial_test::serial; - -macro_rules! configure_insta { - ($($expr:expr),*) => { - let mut settings = insta::Settings::clone_current(); - settings.set_prepend_module_to_snapshot(false); - let _guard = settings.bind_to_scope(); - }; -} - -#[tokio::test] -#[serial] -async fn test_model() { - configure_insta!(); - - let boot = testing::boot_test::().await.unwrap(); - testing::seed::(&boot.app_context.db).await.unwrap(); - - // query your model, e.g.: - // - // let item = models::posts::Model::find_by_pid( - // &boot.app_context.db, - // "11111111-1111-1111-1111-111111111111", - // ) - // .await; - - // snapshot the result: - // assert_debug_snapshot!(item); -} diff --git a/nixin_farm/tests/models/snapshots/can_create_with_password@users.snap b/nixin_farm/tests/models/snapshots/can_create_with_password@users.snap deleted file mode 100644 index 6e66fd3..0000000 --- a/nixin_farm/tests/models/snapshots/can_create_with_password@users.snap +++ /dev/null @@ -1,21 +0,0 @@ ---- -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/nixin_farm/tests/models/snapshots/can_find_by_email-2@users.snap b/nixin_farm/tests/models/snapshots/can_find_by_email-2@users.snap deleted file mode 100644 index 83dc06e..0000000 --- a/nixin_farm/tests/models/snapshots/can_find_by_email-2@users.snap +++ /dev/null @@ -1,7 +0,0 @@ ---- -source: tests/models/main.rs -expression: non_existing_user_results ---- -Err( - EntityNotFound, -) diff --git a/nixin_farm/tests/models/snapshots/can_find_by_email@users-2.snap b/nixin_farm/tests/models/snapshots/can_find_by_email@users-2.snap deleted file mode 100644 index 25c700a..0000000 --- a/nixin_farm/tests/models/snapshots/can_find_by_email@users-2.snap +++ /dev/null @@ -1,7 +0,0 @@ ---- -source: tests/models/users.rs -expression: non_existing_user_results ---- -Err( - EntityNotFound, -) diff --git a/nixin_farm/tests/models/snapshots/can_find_by_email@users.snap b/nixin_farm/tests/models/snapshots/can_find_by_email@users.snap deleted file mode 100644 index 067d0e7..0000000 --- a/nixin_farm/tests/models/snapshots/can_find_by_email@users.snap +++ /dev/null @@ -1,21 +0,0 @@ ---- -source: tests/models/users.rs -expression: existing_user ---- -Ok( - Model { - created_at: 2023-11-12T12:34:56.789+00:00, - updated_at: 2023-11-12T12:34:56.789+00:00, - 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/nixin_farm/tests/models/snapshots/can_find_by_pid-2@users.snap b/nixin_farm/tests/models/snapshots/can_find_by_pid-2@users.snap deleted file mode 100644 index 83dc06e..0000000 --- a/nixin_farm/tests/models/snapshots/can_find_by_pid-2@users.snap +++ /dev/null @@ -1,7 +0,0 @@ ---- -source: tests/models/main.rs -expression: non_existing_user_results ---- -Err( - EntityNotFound, -) diff --git a/nixin_farm/tests/models/snapshots/can_find_by_pid@users-2.snap b/nixin_farm/tests/models/snapshots/can_find_by_pid@users-2.snap deleted file mode 100644 index 25c700a..0000000 --- a/nixin_farm/tests/models/snapshots/can_find_by_pid@users-2.snap +++ /dev/null @@ -1,7 +0,0 @@ ---- -source: tests/models/users.rs -expression: non_existing_user_results ---- -Err( - EntityNotFound, -) diff --git a/nixin_farm/tests/models/snapshots/can_find_by_pid@users.snap b/nixin_farm/tests/models/snapshots/can_find_by_pid@users.snap deleted file mode 100644 index 067d0e7..0000000 --- a/nixin_farm/tests/models/snapshots/can_find_by_pid@users.snap +++ /dev/null @@ -1,21 +0,0 @@ ---- -source: tests/models/users.rs -expression: existing_user ---- -Ok( - Model { - created_at: 2023-11-12T12:34:56.789+00:00, - updated_at: 2023-11-12T12:34:56.789+00:00, - 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/nixin_farm/tests/models/snapshots/can_validate_model@users.snap b/nixin_farm/tests/models/snapshots/can_validate_model@users.snap deleted file mode 100644 index 4d457a7..0000000 --- a/nixin_farm/tests/models/snapshots/can_validate_model@users.snap +++ /dev/null @@ -1,9 +0,0 @@ ---- -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/nixin_farm/tests/models/snapshots/handle_create_with_password_with_duplicate@users.snap b/nixin_farm/tests/models/snapshots/handle_create_with_password_with_duplicate@users.snap deleted file mode 100644 index ff28ea1..0000000 --- a/nixin_farm/tests/models/snapshots/handle_create_with_password_with_duplicate@users.snap +++ /dev/null @@ -1,7 +0,0 @@ ---- -source: tests/models/users.rs -expression: new_user ---- -Err( - EntityAlreadyExists, -) diff --git a/nixin_farm/tests/models/users.rs b/nixin_farm/tests/models/users.rs deleted file mode 100644 index 536767c..0000000 --- a/nixin_farm/tests/models/users.rs +++ /dev/null @@ -1,223 +0,0 @@ -use insta::assert_debug_snapshot; -use loco_rs::{model::ModelError, testing}; -use nixin_farm::{ - 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_pid(&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/nixin_farm/tests/requests/auth.rs b/nixin_farm/tests/requests/auth.rs deleted file mode 100644 index 4e1b74c..0000000 --- a/nixin_farm/tests/requests/auth.rs +++ /dev/null @@ -1,195 +0,0 @@ -use insta::{assert_debug_snapshot, with_settings}; -use loco_rs::testing; -use nixin_farm::{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()); - assert!(user.reset_sent_at.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_token.is_none()); - assert!(user.reset_sent_at.is_none()); - - 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/nixin_farm/tests/requests/mod.rs b/nixin_farm/tests/requests/mod.rs deleted file mode 100644 index 81ed68f..0000000 --- a/nixin_farm/tests/requests/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -mod auth; -mod notes; -mod prepare_data; -mod user; diff --git a/nixin_farm/tests/requests/notes.rs b/nixin_farm/tests/requests/notes.rs deleted file mode 100644 index 87e7def..0000000 --- a/nixin_farm/tests/requests/notes.rs +++ /dev/null @@ -1,123 +0,0 @@ -use insta::{assert_debug_snapshot, with_settings}; -use loco_rs::testing; -use nixin_farm::{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/nixin_farm/tests/requests/prepare_data.rs b/nixin_farm/tests/requests/prepare_data.rs deleted file mode 100644 index 931799c..0000000 --- a/nixin_farm/tests/requests/prepare_data.rs +++ /dev/null @@ -1,57 +0,0 @@ -use axum::http::{HeaderName, HeaderValue}; -use loco_rs::{app::AppContext, TestServer}; -use nixin_farm::{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/nixin_farm/tests/requests/snapshots/can_add_note@notes_request.snap b/nixin_farm/tests/requests/snapshots/can_add_note@notes_request.snap deleted file mode 100644 index f8457d7..0000000 --- a/nixin_farm/tests/requests/snapshots/can_add_note@notes_request.snap +++ /dev/null @@ -1,8 +0,0 @@ ---- -source: tests/requests/notes.rs -expression: "(add_note_request.status_code(), add_note_request.text())" ---- -( - 200, - "{\"created_at\":\"DATEZ\",\"updated_at\":\"DATEZ\",\"id\":ID,\"title\":\"loco\",\"content\":\"loco note test\"}", -) diff --git a/nixin_farm/tests/requests/snapshots/can_delete_note@notes_request.snap b/nixin_farm/tests/requests/snapshots/can_delete_note@notes_request.snap deleted file mode 100644 index 3481fc3..0000000 --- a/nixin_farm/tests/requests/snapshots/can_delete_note@notes_request.snap +++ /dev/null @@ -1,8 +0,0 @@ ---- -source: tests/requests/notes.rs -expression: "(delete_note_request.status_code(), delete_note_request.text())" ---- -( - 200, - "", -) diff --git a/nixin_farm/tests/requests/snapshots/can_get_current_user@auth_request.snap b/nixin_farm/tests/requests/snapshots/can_get_current_user@auth_request.snap deleted file mode 100644 index 85d53db..0000000 --- a/nixin_farm/tests/requests/snapshots/can_get_current_user@auth_request.snap +++ /dev/null @@ -1,8 +0,0 @@ ---- -source: tests/requests/user.rs -expression: "(response.status_code(), response.text())" ---- -( - 200, - "{\"pid\":\"PID\",\"name\":\"loco\",\"email\":\"test@loco.com\"}", -) diff --git a/nixin_farm/tests/requests/snapshots/can_get_note@notes_request.snap b/nixin_farm/tests/requests/snapshots/can_get_note@notes_request.snap deleted file mode 100644 index 8af1604..0000000 --- a/nixin_farm/tests/requests/snapshots/can_get_note@notes_request.snap +++ /dev/null @@ -1,8 +0,0 @@ ---- -source: tests/requests/notes.rs -expression: "(add_note_request.status_code(), add_note_request.text())" ---- -( - 200, - "{\"created_at\":\"DATEZ\",\"updated_at\":\"DATEZ\",\"id\":ID,\"title\":\"Loco note 1\",\"content\":\"Loco note 1 content\"}", -) diff --git a/nixin_farm/tests/requests/snapshots/can_get_notes@notes_request.snap b/nixin_farm/tests/requests/snapshots/can_get_notes@notes_request.snap deleted file mode 100644 index 014b75c..0000000 --- a/nixin_farm/tests/requests/snapshots/can_get_notes@notes_request.snap +++ /dev/null @@ -1,8 +0,0 @@ ---- -source: tests/requests/notes.rs -expression: "(notes.status_code(), notes.text())" ---- -( - 200, - "[{\"created_at\":\"DATEZ\",\"updated_at\":\"DATEZ\",\"id\":ID,\"title\":\"Loco note 1\",\"content\":\"Loco note 1 content\"},{\"created_at\":\"DATEZ\",\"updated_at\":\"DATEZ\",\"id\":ID,\"title\":\"Loco note 2\",\"content\":\"Loco note 2 content\"}]", -) diff --git a/nixin_farm/tests/requests/snapshots/can_login_without_verify@auth_request.snap b/nixin_farm/tests/requests/snapshots/can_login_without_verify@auth_request.snap deleted file mode 100644 index ef54ba6..0000000 --- a/nixin_farm/tests/requests/snapshots/can_login_without_verify@auth_request.snap +++ /dev/null @@ -1,8 +0,0 @@ ---- -source: tests/requests/auth.rs -expression: "(response.status_code(), response.text())" ---- -( - 200, - "{\"token\":\"TOKEN\",\"pid\":\"PID\",\"name\":\"loco\",\"is_verified\":false}", -) diff --git a/nixin_farm/tests/requests/snapshots/can_register@auth_request-2.snap b/nixin_farm/tests/requests/snapshots/can_register@auth_request-2.snap deleted file mode 100644 index 45c63cb..0000000 --- a/nixin_farm/tests/requests/snapshots/can_register@auth_request-2.snap +++ /dev/null @@ -1,10 +0,0 @@ ---- -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("auth_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/nixin_farm/tests/tasks/mod.rs b/nixin_farm/tests/tasks/mod.rs deleted file mode 100644 index 01fbdda..0000000 --- a/nixin_farm/tests/tasks/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod seed; diff --git a/nixin_farm/tests/tasks/seed.rs b/nixin_farm/tests/tasks/seed.rs deleted file mode 100644 index 6835954..0000000 --- a/nixin_farm/tests/tasks/seed.rs +++ /dev/null @@ -1,17 +0,0 @@ -use loco_rs::{boot::run_task, task, testing}; -use nixin_farm::app::App; -use serial_test::serial; - -#[tokio::test] -#[serial] -async fn test_can_seed_data() { - let boot = testing::boot_test::().await.unwrap(); - - assert!(run_task::( - &boot.app_context, - Some(&"seed_data".to_string()), - &task::Vars::default() - ) - .await - .is_ok()); -} diff --git a/nixin_farm/tests/workers/mod.rs b/nixin_farm/tests/workers/mod.rs deleted file mode 100644 index 090884b..0000000 --- a/nixin_farm/tests/workers/mod.rs +++ /dev/null @@ -1 +0,0 @@ -// workers mod