From 82d18e237ac01136029d81429c1fab461bd50c9c Mon Sep 17 00:00:00 2001 From: Morpheus Date: Sat, 1 Nov 2025 16:06:37 +0100 Subject: [PATCH 01/13] Add daily rewards --- .gitignore | 1728 +++++++++++++++++ .idea/.gitignore | 11 + Cargo.lock | 51 + Cargo.toml | 5 +- academy/Cargo.toml | 1 + academy/src/commands/serve.rs | 17 +- academy/src/environment/mod.rs | 98 +- academy/src/environment/types.rs | 25 +- academy_api/rest/Cargo.toml | 2 + academy_api/rest/src/lib.rs | 8 + academy_api/rest/src/models/daily_rewards.rs | 126 ++ academy_api/rest/src/models/mod.rs | 1 + academy_api/rest/src/routes/daily_rewards.rs | 121 ++ academy_api/rest/src/routes/mod.rs | 1 + academy_config/src/lib.rs | 59 + .../daily_rewards/contracts/Cargo.toml | 23 + .../daily_rewards/contracts/src/lib.rs | 178 ++ academy_core/daily_rewards/impl/Cargo.toml | 40 + .../daily_rewards/impl/src/activity.rs | 273 +++ academy_core/daily_rewards/impl/src/lib.rs | 12 + .../daily_rewards/impl/src/service.rs | 879 +++++++++ .../daily_rewards/impl/src/tests/claim.rs | 233 +++ .../daily_rewards/impl/src/tests/mod.rs | 19 + .../daily_rewards/impl/src/tests/snapshot.rs | 162 ++ academy_models/Cargo.toml | 3 +- academy_models/src/daily_rewards.rs | 144 ++ academy_models/src/lib.rs | 1 + academy_persistence/contracts/Cargo.toml | 2 + .../contracts/src/daily_rewards.rs | 78 + academy_persistence/contracts/src/lib.rs | 1 + academy_persistence/postgres/Cargo.toml | 5 +- .../down.sql | 4 + .../up.sql | 22 + .../postgres/src/daily_rewards.rs | 226 +++ academy_persistence/postgres/src/lib.rs | 3 +- config.dev.toml | 10 + config.toml | 10 + dump.rdb | Bin 0 -> 88 bytes 38 files changed, 4566 insertions(+), 16 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 academy_api/rest/src/models/daily_rewards.rs create mode 100644 academy_api/rest/src/routes/daily_rewards.rs create mode 100644 academy_core/daily_rewards/contracts/Cargo.toml create mode 100644 academy_core/daily_rewards/contracts/src/lib.rs create mode 100644 academy_core/daily_rewards/impl/Cargo.toml create mode 100644 academy_core/daily_rewards/impl/src/activity.rs create mode 100644 academy_core/daily_rewards/impl/src/lib.rs create mode 100644 academy_core/daily_rewards/impl/src/service.rs create mode 100644 academy_core/daily_rewards/impl/src/tests/claim.rs create mode 100644 academy_core/daily_rewards/impl/src/tests/mod.rs create mode 100644 academy_core/daily_rewards/impl/src/tests/snapshot.rs create mode 100644 academy_models/src/daily_rewards.rs create mode 100644 academy_persistence/contracts/src/daily_rewards.rs create mode 100644 academy_persistence/postgres/migrations/2025-10-31-130000_create_daily_reward_entries/down.sql create mode 100644 academy_persistence/postgres/migrations/2025-10-31-130000_create_daily_reward_entries/up.sql create mode 100644 academy_persistence/postgres/src/daily_rewards.rs create mode 100644 dump.rdb diff --git a/.gitignore b/.gitignore index 6c65d4b1..d620a729 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,1731 @@ repl-result-* .invoices .credit_notes .nixos-test-history +/.tmp/pgdata/base/1/112 +/.tmp/pgdata/base/1/113 +/.tmp/pgdata/base/1/174 +/.tmp/pgdata/base/1/175 +/.tmp/pgdata/base/1/548 +/.tmp/pgdata/base/1/549 +/.tmp/pgdata/base/1/826 +/.tmp/pgdata/base/1/827 +/.tmp/pgdata/base/1/828 +/.tmp/pgdata/base/1/1247 +/.tmp/pgdata/base/1/1247_fsm +/.tmp/pgdata/base/1/1247_vm +/.tmp/pgdata/base/1/1249 +/.tmp/pgdata/base/1/1249_fsm +/.tmp/pgdata/base/1/1249_vm +/.tmp/pgdata/base/1/1255 +/.tmp/pgdata/base/1/1255_fsm +/.tmp/pgdata/base/1/1255_vm +/.tmp/pgdata/base/1/1259 +/.tmp/pgdata/base/1/1259_fsm +/.tmp/pgdata/base/1/1259_vm +/.tmp/pgdata/base/1/1417 +/.tmp/pgdata/base/1/1418 +/.tmp/pgdata/base/1/2187 +/.tmp/pgdata/base/1/2224 +/.tmp/pgdata/base/1/2228 +/.tmp/pgdata/base/1/2328 +/.tmp/pgdata/base/1/2336 +/.tmp/pgdata/base/1/2337 +/.tmp/pgdata/base/1/2579 +/.tmp/pgdata/base/1/2600 +/.tmp/pgdata/base/1/2600_fsm +/.tmp/pgdata/base/1/2600_vm +/.tmp/pgdata/base/1/2601 +/.tmp/pgdata/base/1/2601_fsm +/.tmp/pgdata/base/1/2601_vm +/.tmp/pgdata/base/1/2602 +/.tmp/pgdata/base/1/2602_fsm +/.tmp/pgdata/base/1/2602_vm +/.tmp/pgdata/base/1/2603 +/.tmp/pgdata/base/1/2603_fsm +/.tmp/pgdata/base/1/2603_vm +/.tmp/pgdata/base/1/2604 +/.tmp/pgdata/base/1/2605 +/.tmp/pgdata/base/1/2605_fsm +/.tmp/pgdata/base/1/2605_vm +/.tmp/pgdata/base/1/2606 +/.tmp/pgdata/base/1/2606_fsm +/.tmp/pgdata/base/1/2606_vm +/.tmp/pgdata/base/1/2607 +/.tmp/pgdata/base/1/2607_fsm +/.tmp/pgdata/base/1/2607_vm +/.tmp/pgdata/base/1/2608 +/.tmp/pgdata/base/1/2608_fsm +/.tmp/pgdata/base/1/2608_vm +/.tmp/pgdata/base/1/2609 +/.tmp/pgdata/base/1/2609_fsm +/.tmp/pgdata/base/1/2609_vm +/.tmp/pgdata/base/1/2610 +/.tmp/pgdata/base/1/2610_fsm +/.tmp/pgdata/base/1/2610_vm +/.tmp/pgdata/base/1/2611 +/.tmp/pgdata/base/1/2612 +/.tmp/pgdata/base/1/2612_fsm +/.tmp/pgdata/base/1/2612_vm +/.tmp/pgdata/base/1/2613 +/.tmp/pgdata/base/1/2615 +/.tmp/pgdata/base/1/2615_fsm +/.tmp/pgdata/base/1/2615_vm +/.tmp/pgdata/base/1/2616 +/.tmp/pgdata/base/1/2616_fsm +/.tmp/pgdata/base/1/2616_vm +/.tmp/pgdata/base/1/2617 +/.tmp/pgdata/base/1/2617_fsm +/.tmp/pgdata/base/1/2617_vm +/.tmp/pgdata/base/1/2618 +/.tmp/pgdata/base/1/2618_fsm +/.tmp/pgdata/base/1/2618_vm +/.tmp/pgdata/base/1/2619 +/.tmp/pgdata/base/1/2619_fsm +/.tmp/pgdata/base/1/2619_vm +/.tmp/pgdata/base/1/2620 +/.tmp/pgdata/base/1/2650 +/.tmp/pgdata/base/1/2651 +/.tmp/pgdata/base/1/2652 +/.tmp/pgdata/base/1/2653 +/.tmp/pgdata/base/1/2654 +/.tmp/pgdata/base/1/2655 +/.tmp/pgdata/base/1/2656 +/.tmp/pgdata/base/1/2657 +/.tmp/pgdata/base/1/2658 +/.tmp/pgdata/base/1/2659 +/.tmp/pgdata/base/1/2660 +/.tmp/pgdata/base/1/2661 +/.tmp/pgdata/base/1/2662 +/.tmp/pgdata/base/1/2663 +/.tmp/pgdata/base/1/2664 +/.tmp/pgdata/base/1/2665 +/.tmp/pgdata/base/1/2666 +/.tmp/pgdata/base/1/2667 +/.tmp/pgdata/base/1/2668 +/.tmp/pgdata/base/1/2669 +/.tmp/pgdata/base/1/2670 +/.tmp/pgdata/base/1/2673 +/.tmp/pgdata/base/1/2674 +/.tmp/pgdata/base/1/2675 +/.tmp/pgdata/base/1/2678 +/.tmp/pgdata/base/1/2679 +/.tmp/pgdata/base/1/2680 +/.tmp/pgdata/base/1/2681 +/.tmp/pgdata/base/1/2682 +/.tmp/pgdata/base/1/2683 +/.tmp/pgdata/base/1/2684 +/.tmp/pgdata/base/1/2685 +/.tmp/pgdata/base/1/2686 +/.tmp/pgdata/base/1/2687 +/.tmp/pgdata/base/1/2688 +/.tmp/pgdata/base/1/2689 +/.tmp/pgdata/base/1/2690 +/.tmp/pgdata/base/1/2691 +/.tmp/pgdata/base/1/2692 +/.tmp/pgdata/base/1/2693 +/.tmp/pgdata/base/1/2696 +/.tmp/pgdata/base/1/2699 +/.tmp/pgdata/base/1/2701 +/.tmp/pgdata/base/1/2702 +/.tmp/pgdata/base/1/2703 +/.tmp/pgdata/base/1/2704 +/.tmp/pgdata/base/1/2753 +/.tmp/pgdata/base/1/2753_fsm +/.tmp/pgdata/base/1/2753_vm +/.tmp/pgdata/base/1/2754 +/.tmp/pgdata/base/1/2755 +/.tmp/pgdata/base/1/2756 +/.tmp/pgdata/base/1/2757 +/.tmp/pgdata/base/1/2830 +/.tmp/pgdata/base/1/2831 +/.tmp/pgdata/base/1/2832 +/.tmp/pgdata/base/1/2833 +/.tmp/pgdata/base/1/2834 +/.tmp/pgdata/base/1/2835 +/.tmp/pgdata/base/1/2836 +/.tmp/pgdata/base/1/2836_fsm +/.tmp/pgdata/base/1/2836_vm +/.tmp/pgdata/base/1/2837 +/.tmp/pgdata/base/1/2838 +/.tmp/pgdata/base/1/2838_fsm +/.tmp/pgdata/base/1/2838_vm +/.tmp/pgdata/base/1/2839 +/.tmp/pgdata/base/1/2840 +/.tmp/pgdata/base/1/2840_fsm +/.tmp/pgdata/base/1/2840_vm +/.tmp/pgdata/base/1/2841 +/.tmp/pgdata/base/1/2995 +/.tmp/pgdata/base/1/2996 +/.tmp/pgdata/base/1/3079 +/.tmp/pgdata/base/1/3079_fsm +/.tmp/pgdata/base/1/3079_vm +/.tmp/pgdata/base/1/3080 +/.tmp/pgdata/base/1/3081 +/.tmp/pgdata/base/1/3085 +/.tmp/pgdata/base/1/3118 +/.tmp/pgdata/base/1/3119 +/.tmp/pgdata/base/1/3164 +/.tmp/pgdata/base/1/3256 +/.tmp/pgdata/base/1/3257 +/.tmp/pgdata/base/1/3258 +/.tmp/pgdata/base/1/3350 +/.tmp/pgdata/base/1/3351 +/.tmp/pgdata/base/1/3379 +/.tmp/pgdata/base/1/3380 +/.tmp/pgdata/base/1/3381 +/.tmp/pgdata/base/1/3394 +/.tmp/pgdata/base/1/3394_fsm +/.tmp/pgdata/base/1/3394_vm +/.tmp/pgdata/base/1/3395 +/.tmp/pgdata/base/1/3429 +/.tmp/pgdata/base/1/3430 +/.tmp/pgdata/base/1/3431 +/.tmp/pgdata/base/1/3433 +/.tmp/pgdata/base/1/3439 +/.tmp/pgdata/base/1/3440 +/.tmp/pgdata/base/1/3455 +/.tmp/pgdata/base/1/3456 +/.tmp/pgdata/base/1/3456_fsm +/.tmp/pgdata/base/1/3456_vm +/.tmp/pgdata/base/1/3466 +/.tmp/pgdata/base/1/3467 +/.tmp/pgdata/base/1/3468 +/.tmp/pgdata/base/1/3501 +/.tmp/pgdata/base/1/3502 +/.tmp/pgdata/base/1/3503 +/.tmp/pgdata/base/1/3534 +/.tmp/pgdata/base/1/3541 +/.tmp/pgdata/base/1/3541_fsm +/.tmp/pgdata/base/1/3541_vm +/.tmp/pgdata/base/1/3542 +/.tmp/pgdata/base/1/3574 +/.tmp/pgdata/base/1/3575 +/.tmp/pgdata/base/1/3576 +/.tmp/pgdata/base/1/3596 +/.tmp/pgdata/base/1/3597 +/.tmp/pgdata/base/1/3598 +/.tmp/pgdata/base/1/3599 +/.tmp/pgdata/base/1/3600 +/.tmp/pgdata/base/1/3600_fsm +/.tmp/pgdata/base/1/3600_vm +/.tmp/pgdata/base/1/3601 +/.tmp/pgdata/base/1/3601_fsm +/.tmp/pgdata/base/1/3601_vm +/.tmp/pgdata/base/1/3602 +/.tmp/pgdata/base/1/3602_fsm +/.tmp/pgdata/base/1/3602_vm +/.tmp/pgdata/base/1/3603 +/.tmp/pgdata/base/1/3603_fsm +/.tmp/pgdata/base/1/3603_vm +/.tmp/pgdata/base/1/3604 +/.tmp/pgdata/base/1/3605 +/.tmp/pgdata/base/1/3606 +/.tmp/pgdata/base/1/3607 +/.tmp/pgdata/base/1/3608 +/.tmp/pgdata/base/1/3609 +/.tmp/pgdata/base/1/3712 +/.tmp/pgdata/base/1/3764 +/.tmp/pgdata/base/1/3764_fsm +/.tmp/pgdata/base/1/3764_vm +/.tmp/pgdata/base/1/3766 +/.tmp/pgdata/base/1/3767 +/.tmp/pgdata/base/1/3997 +/.tmp/pgdata/base/1/4143 +/.tmp/pgdata/base/1/4144 +/.tmp/pgdata/base/1/4145 +/.tmp/pgdata/base/1/4146 +/.tmp/pgdata/base/1/4147 +/.tmp/pgdata/base/1/4148 +/.tmp/pgdata/base/1/4149 +/.tmp/pgdata/base/1/4150 +/.tmp/pgdata/base/1/4151 +/.tmp/pgdata/base/1/4152 +/.tmp/pgdata/base/1/4153 +/.tmp/pgdata/base/1/4154 +/.tmp/pgdata/base/1/4155 +/.tmp/pgdata/base/1/4156 +/.tmp/pgdata/base/1/4157 +/.tmp/pgdata/base/1/4158 +/.tmp/pgdata/base/1/4159 +/.tmp/pgdata/base/1/4160 +/.tmp/pgdata/base/1/4163 +/.tmp/pgdata/base/1/4164 +/.tmp/pgdata/base/1/4165 +/.tmp/pgdata/base/1/4166 +/.tmp/pgdata/base/1/4167 +/.tmp/pgdata/base/1/4168 +/.tmp/pgdata/base/1/4169 +/.tmp/pgdata/base/1/4170 +/.tmp/pgdata/base/1/4171 +/.tmp/pgdata/base/1/4172 +/.tmp/pgdata/base/1/4173 +/.tmp/pgdata/base/1/4174 +/.tmp/pgdata/base/1/5002 +/.tmp/pgdata/base/1/6102 +/.tmp/pgdata/base/1/6104 +/.tmp/pgdata/base/1/6106 +/.tmp/pgdata/base/1/6110 +/.tmp/pgdata/base/1/6111 +/.tmp/pgdata/base/1/6112 +/.tmp/pgdata/base/1/6113 +/.tmp/pgdata/base/1/6116 +/.tmp/pgdata/base/1/6117 +/.tmp/pgdata/base/1/6175 +/.tmp/pgdata/base/1/6176 +/.tmp/pgdata/base/1/6228 +/.tmp/pgdata/base/1/6229 +/.tmp/pgdata/base/1/6237 +/.tmp/pgdata/base/1/6238 +/.tmp/pgdata/base/1/6239 +/.tmp/pgdata/base/1/6351 +/.tmp/pgdata/base/1/6352 +/.tmp/pgdata/base/1/15043 +/.tmp/pgdata/base/1/15043_fsm +/.tmp/pgdata/base/1/15043_vm +/.tmp/pgdata/base/1/15046 +/.tmp/pgdata/base/1/15047 +/.tmp/pgdata/base/1/15048 +/.tmp/pgdata/base/1/15048_fsm +/.tmp/pgdata/base/1/15048_vm +/.tmp/pgdata/base/1/15051 +/.tmp/pgdata/base/1/15052 +/.tmp/pgdata/base/1/15053 +/.tmp/pgdata/base/1/15053_fsm +/.tmp/pgdata/base/1/15053_vm +/.tmp/pgdata/base/1/15056 +/.tmp/pgdata/base/1/15057 +/.tmp/pgdata/base/1/15058 +/.tmp/pgdata/base/1/15058_fsm +/.tmp/pgdata/base/1/15058_vm +/.tmp/pgdata/base/1/15061 +/.tmp/pgdata/base/1/15062 +/.tmp/pgdata/base/1/pg_filenode.map +/.tmp/pgdata/base/1/pg_internal.init +/.tmp/pgdata/base/1/PG_VERSION +/.tmp/pgdata/base/4/112 +/.tmp/pgdata/base/4/113 +/.tmp/pgdata/base/4/174 +/.tmp/pgdata/base/4/175 +/.tmp/pgdata/base/4/548 +/.tmp/pgdata/base/4/549 +/.tmp/pgdata/base/4/826 +/.tmp/pgdata/base/4/827 +/.tmp/pgdata/base/4/828 +/.tmp/pgdata/base/4/1247 +/.tmp/pgdata/base/4/1247_fsm +/.tmp/pgdata/base/4/1247_vm +/.tmp/pgdata/base/4/1249 +/.tmp/pgdata/base/4/1249_fsm +/.tmp/pgdata/base/4/1249_vm +/.tmp/pgdata/base/4/1255 +/.tmp/pgdata/base/4/1255_fsm +/.tmp/pgdata/base/4/1255_vm +/.tmp/pgdata/base/4/1259 +/.tmp/pgdata/base/4/1259_fsm +/.tmp/pgdata/base/4/1259_vm +/.tmp/pgdata/base/4/1417 +/.tmp/pgdata/base/4/1418 +/.tmp/pgdata/base/4/2187 +/.tmp/pgdata/base/4/2224 +/.tmp/pgdata/base/4/2228 +/.tmp/pgdata/base/4/2328 +/.tmp/pgdata/base/4/2336 +/.tmp/pgdata/base/4/2337 +/.tmp/pgdata/base/4/2579 +/.tmp/pgdata/base/4/2600 +/.tmp/pgdata/base/4/2600_fsm +/.tmp/pgdata/base/4/2600_vm +/.tmp/pgdata/base/4/2601 +/.tmp/pgdata/base/4/2601_fsm +/.tmp/pgdata/base/4/2601_vm +/.tmp/pgdata/base/4/2602 +/.tmp/pgdata/base/4/2602_fsm +/.tmp/pgdata/base/4/2602_vm +/.tmp/pgdata/base/4/2603 +/.tmp/pgdata/base/4/2603_fsm +/.tmp/pgdata/base/4/2603_vm +/.tmp/pgdata/base/4/2604 +/.tmp/pgdata/base/4/2605 +/.tmp/pgdata/base/4/2605_fsm +/.tmp/pgdata/base/4/2605_vm +/.tmp/pgdata/base/4/2606 +/.tmp/pgdata/base/4/2606_fsm +/.tmp/pgdata/base/4/2606_vm +/.tmp/pgdata/base/4/2607 +/.tmp/pgdata/base/4/2607_fsm +/.tmp/pgdata/base/4/2607_vm +/.tmp/pgdata/base/4/2608 +/.tmp/pgdata/base/4/2608_fsm +/.tmp/pgdata/base/4/2608_vm +/.tmp/pgdata/base/4/2609 +/.tmp/pgdata/base/4/2609_fsm +/.tmp/pgdata/base/4/2609_vm +/.tmp/pgdata/base/4/2610 +/.tmp/pgdata/base/4/2610_fsm +/.tmp/pgdata/base/4/2610_vm +/.tmp/pgdata/base/4/2611 +/.tmp/pgdata/base/4/2612 +/.tmp/pgdata/base/4/2612_fsm +/.tmp/pgdata/base/4/2612_vm +/.tmp/pgdata/base/4/2613 +/.tmp/pgdata/base/4/2615 +/.tmp/pgdata/base/4/2615_fsm +/.tmp/pgdata/base/4/2615_vm +/.tmp/pgdata/base/4/2616 +/.tmp/pgdata/base/4/2616_fsm +/.tmp/pgdata/base/4/2616_vm +/.tmp/pgdata/base/4/2617 +/.tmp/pgdata/base/4/2617_fsm +/.tmp/pgdata/base/4/2617_vm +/.tmp/pgdata/base/4/2618 +/.tmp/pgdata/base/4/2618_fsm +/.tmp/pgdata/base/4/2618_vm +/.tmp/pgdata/base/4/2619 +/.tmp/pgdata/base/4/2619_fsm +/.tmp/pgdata/base/4/2619_vm +/.tmp/pgdata/base/4/2620 +/.tmp/pgdata/base/4/2650 +/.tmp/pgdata/base/4/2651 +/.tmp/pgdata/base/4/2652 +/.tmp/pgdata/base/4/2653 +/.tmp/pgdata/base/4/2654 +/.tmp/pgdata/base/4/2655 +/.tmp/pgdata/base/4/2656 +/.tmp/pgdata/base/4/2657 +/.tmp/pgdata/base/4/2658 +/.tmp/pgdata/base/4/2659 +/.tmp/pgdata/base/4/2660 +/.tmp/pgdata/base/4/2661 +/.tmp/pgdata/base/4/2662 +/.tmp/pgdata/base/4/2663 +/.tmp/pgdata/base/4/2664 +/.tmp/pgdata/base/4/2665 +/.tmp/pgdata/base/4/2666 +/.tmp/pgdata/base/4/2667 +/.tmp/pgdata/base/4/2668 +/.tmp/pgdata/base/4/2669 +/.tmp/pgdata/base/4/2670 +/.tmp/pgdata/base/4/2673 +/.tmp/pgdata/base/4/2674 +/.tmp/pgdata/base/4/2675 +/.tmp/pgdata/base/4/2678 +/.tmp/pgdata/base/4/2679 +/.tmp/pgdata/base/4/2680 +/.tmp/pgdata/base/4/2681 +/.tmp/pgdata/base/4/2682 +/.tmp/pgdata/base/4/2683 +/.tmp/pgdata/base/4/2684 +/.tmp/pgdata/base/4/2685 +/.tmp/pgdata/base/4/2686 +/.tmp/pgdata/base/4/2687 +/.tmp/pgdata/base/4/2688 +/.tmp/pgdata/base/4/2689 +/.tmp/pgdata/base/4/2690 +/.tmp/pgdata/base/4/2691 +/.tmp/pgdata/base/4/2692 +/.tmp/pgdata/base/4/2693 +/.tmp/pgdata/base/4/2696 +/.tmp/pgdata/base/4/2699 +/.tmp/pgdata/base/4/2701 +/.tmp/pgdata/base/4/2702 +/.tmp/pgdata/base/4/2703 +/.tmp/pgdata/base/4/2704 +/.tmp/pgdata/base/4/2753 +/.tmp/pgdata/base/4/2753_fsm +/.tmp/pgdata/base/4/2753_vm +/.tmp/pgdata/base/4/2754 +/.tmp/pgdata/base/4/2755 +/.tmp/pgdata/base/4/2756 +/.tmp/pgdata/base/4/2757 +/.tmp/pgdata/base/4/2830 +/.tmp/pgdata/base/4/2831 +/.tmp/pgdata/base/4/2832 +/.tmp/pgdata/base/4/2833 +/.tmp/pgdata/base/4/2834 +/.tmp/pgdata/base/4/2835 +/.tmp/pgdata/base/4/2836 +/.tmp/pgdata/base/4/2836_fsm +/.tmp/pgdata/base/4/2836_vm +/.tmp/pgdata/base/4/2837 +/.tmp/pgdata/base/4/2838 +/.tmp/pgdata/base/4/2838_fsm +/.tmp/pgdata/base/4/2838_vm +/.tmp/pgdata/base/4/2839 +/.tmp/pgdata/base/4/2840 +/.tmp/pgdata/base/4/2840_fsm +/.tmp/pgdata/base/4/2840_vm +/.tmp/pgdata/base/4/2841 +/.tmp/pgdata/base/4/2995 +/.tmp/pgdata/base/4/2996 +/.tmp/pgdata/base/4/3079 +/.tmp/pgdata/base/4/3079_fsm +/.tmp/pgdata/base/4/3079_vm +/.tmp/pgdata/base/4/3080 +/.tmp/pgdata/base/4/3081 +/.tmp/pgdata/base/4/3085 +/.tmp/pgdata/base/4/3118 +/.tmp/pgdata/base/4/3119 +/.tmp/pgdata/base/4/3164 +/.tmp/pgdata/base/4/3256 +/.tmp/pgdata/base/4/3257 +/.tmp/pgdata/base/4/3258 +/.tmp/pgdata/base/4/3350 +/.tmp/pgdata/base/4/3351 +/.tmp/pgdata/base/4/3379 +/.tmp/pgdata/base/4/3380 +/.tmp/pgdata/base/4/3381 +/.tmp/pgdata/base/4/3394 +/.tmp/pgdata/base/4/3394_fsm +/.tmp/pgdata/base/4/3394_vm +/.tmp/pgdata/base/4/3395 +/.tmp/pgdata/base/4/3429 +/.tmp/pgdata/base/4/3430 +/.tmp/pgdata/base/4/3431 +/.tmp/pgdata/base/4/3433 +/.tmp/pgdata/base/4/3439 +/.tmp/pgdata/base/4/3440 +/.tmp/pgdata/base/4/3455 +/.tmp/pgdata/base/4/3456 +/.tmp/pgdata/base/4/3456_fsm +/.tmp/pgdata/base/4/3456_vm +/.tmp/pgdata/base/4/3466 +/.tmp/pgdata/base/4/3467 +/.tmp/pgdata/base/4/3468 +/.tmp/pgdata/base/4/3501 +/.tmp/pgdata/base/4/3502 +/.tmp/pgdata/base/4/3503 +/.tmp/pgdata/base/4/3534 +/.tmp/pgdata/base/4/3541 +/.tmp/pgdata/base/4/3541_fsm +/.tmp/pgdata/base/4/3541_vm +/.tmp/pgdata/base/4/3542 +/.tmp/pgdata/base/4/3574 +/.tmp/pgdata/base/4/3575 +/.tmp/pgdata/base/4/3576 +/.tmp/pgdata/base/4/3596 +/.tmp/pgdata/base/4/3597 +/.tmp/pgdata/base/4/3598 +/.tmp/pgdata/base/4/3599 +/.tmp/pgdata/base/4/3600 +/.tmp/pgdata/base/4/3600_fsm +/.tmp/pgdata/base/4/3600_vm +/.tmp/pgdata/base/4/3601 +/.tmp/pgdata/base/4/3601_fsm +/.tmp/pgdata/base/4/3601_vm +/.tmp/pgdata/base/4/3602 +/.tmp/pgdata/base/4/3602_fsm +/.tmp/pgdata/base/4/3602_vm +/.tmp/pgdata/base/4/3603 +/.tmp/pgdata/base/4/3603_fsm +/.tmp/pgdata/base/4/3603_vm +/.tmp/pgdata/base/4/3604 +/.tmp/pgdata/base/4/3605 +/.tmp/pgdata/base/4/3606 +/.tmp/pgdata/base/4/3607 +/.tmp/pgdata/base/4/3608 +/.tmp/pgdata/base/4/3609 +/.tmp/pgdata/base/4/3712 +/.tmp/pgdata/base/4/3764 +/.tmp/pgdata/base/4/3764_fsm +/.tmp/pgdata/base/4/3764_vm +/.tmp/pgdata/base/4/3766 +/.tmp/pgdata/base/4/3767 +/.tmp/pgdata/base/4/3997 +/.tmp/pgdata/base/4/4143 +/.tmp/pgdata/base/4/4144 +/.tmp/pgdata/base/4/4145 +/.tmp/pgdata/base/4/4146 +/.tmp/pgdata/base/4/4147 +/.tmp/pgdata/base/4/4148 +/.tmp/pgdata/base/4/4149 +/.tmp/pgdata/base/4/4150 +/.tmp/pgdata/base/4/4151 +/.tmp/pgdata/base/4/4152 +/.tmp/pgdata/base/4/4153 +/.tmp/pgdata/base/4/4154 +/.tmp/pgdata/base/4/4155 +/.tmp/pgdata/base/4/4156 +/.tmp/pgdata/base/4/4157 +/.tmp/pgdata/base/4/4158 +/.tmp/pgdata/base/4/4159 +/.tmp/pgdata/base/4/4160 +/.tmp/pgdata/base/4/4163 +/.tmp/pgdata/base/4/4164 +/.tmp/pgdata/base/4/4165 +/.tmp/pgdata/base/4/4166 +/.tmp/pgdata/base/4/4167 +/.tmp/pgdata/base/4/4168 +/.tmp/pgdata/base/4/4169 +/.tmp/pgdata/base/4/4170 +/.tmp/pgdata/base/4/4171 +/.tmp/pgdata/base/4/4172 +/.tmp/pgdata/base/4/4173 +/.tmp/pgdata/base/4/4174 +/.tmp/pgdata/base/4/5002 +/.tmp/pgdata/base/4/6102 +/.tmp/pgdata/base/4/6104 +/.tmp/pgdata/base/4/6106 +/.tmp/pgdata/base/4/6110 +/.tmp/pgdata/base/4/6111 +/.tmp/pgdata/base/4/6112 +/.tmp/pgdata/base/4/6113 +/.tmp/pgdata/base/4/6116 +/.tmp/pgdata/base/4/6117 +/.tmp/pgdata/base/4/6175 +/.tmp/pgdata/base/4/6176 +/.tmp/pgdata/base/4/6228 +/.tmp/pgdata/base/4/6229 +/.tmp/pgdata/base/4/6237 +/.tmp/pgdata/base/4/6238 +/.tmp/pgdata/base/4/6239 +/.tmp/pgdata/base/4/6351 +/.tmp/pgdata/base/4/6352 +/.tmp/pgdata/base/4/15043 +/.tmp/pgdata/base/4/15043_fsm +/.tmp/pgdata/base/4/15043_vm +/.tmp/pgdata/base/4/15046 +/.tmp/pgdata/base/4/15047 +/.tmp/pgdata/base/4/15048 +/.tmp/pgdata/base/4/15048_fsm +/.tmp/pgdata/base/4/15048_vm +/.tmp/pgdata/base/4/15051 +/.tmp/pgdata/base/4/15052 +/.tmp/pgdata/base/4/15053 +/.tmp/pgdata/base/4/15053_fsm +/.tmp/pgdata/base/4/15053_vm +/.tmp/pgdata/base/4/15056 +/.tmp/pgdata/base/4/15057 +/.tmp/pgdata/base/4/15058 +/.tmp/pgdata/base/4/15058_fsm +/.tmp/pgdata/base/4/15058_vm +/.tmp/pgdata/base/4/15061 +/.tmp/pgdata/base/4/15062 +/.tmp/pgdata/base/4/pg_filenode.map +/.tmp/pgdata/base/4/PG_VERSION +/.tmp/pgdata/base/5/112 +/.tmp/pgdata/base/5/113 +/.tmp/pgdata/base/5/174 +/.tmp/pgdata/base/5/175 +/.tmp/pgdata/base/5/548 +/.tmp/pgdata/base/5/549 +/.tmp/pgdata/base/5/826 +/.tmp/pgdata/base/5/827 +/.tmp/pgdata/base/5/828 +/.tmp/pgdata/base/5/1247 +/.tmp/pgdata/base/5/1247_fsm +/.tmp/pgdata/base/5/1247_vm +/.tmp/pgdata/base/5/1249 +/.tmp/pgdata/base/5/1249_fsm +/.tmp/pgdata/base/5/1249_vm +/.tmp/pgdata/base/5/1255 +/.tmp/pgdata/base/5/1255_fsm +/.tmp/pgdata/base/5/1255_vm +/.tmp/pgdata/base/5/1259 +/.tmp/pgdata/base/5/1259_fsm +/.tmp/pgdata/base/5/1259_vm +/.tmp/pgdata/base/5/1417 +/.tmp/pgdata/base/5/1418 +/.tmp/pgdata/base/5/2187 +/.tmp/pgdata/base/5/2224 +/.tmp/pgdata/base/5/2228 +/.tmp/pgdata/base/5/2328 +/.tmp/pgdata/base/5/2336 +/.tmp/pgdata/base/5/2337 +/.tmp/pgdata/base/5/2579 +/.tmp/pgdata/base/5/2600 +/.tmp/pgdata/base/5/2600_fsm +/.tmp/pgdata/base/5/2600_vm +/.tmp/pgdata/base/5/2601 +/.tmp/pgdata/base/5/2601_fsm +/.tmp/pgdata/base/5/2601_vm +/.tmp/pgdata/base/5/2602 +/.tmp/pgdata/base/5/2602_fsm +/.tmp/pgdata/base/5/2602_vm +/.tmp/pgdata/base/5/2603 +/.tmp/pgdata/base/5/2603_fsm +/.tmp/pgdata/base/5/2603_vm +/.tmp/pgdata/base/5/2604 +/.tmp/pgdata/base/5/2605 +/.tmp/pgdata/base/5/2605_fsm +/.tmp/pgdata/base/5/2605_vm +/.tmp/pgdata/base/5/2606 +/.tmp/pgdata/base/5/2606_fsm +/.tmp/pgdata/base/5/2606_vm +/.tmp/pgdata/base/5/2607 +/.tmp/pgdata/base/5/2607_fsm +/.tmp/pgdata/base/5/2607_vm +/.tmp/pgdata/base/5/2608 +/.tmp/pgdata/base/5/2608_fsm +/.tmp/pgdata/base/5/2608_vm +/.tmp/pgdata/base/5/2609 +/.tmp/pgdata/base/5/2609_fsm +/.tmp/pgdata/base/5/2609_vm +/.tmp/pgdata/base/5/2610 +/.tmp/pgdata/base/5/2610_fsm +/.tmp/pgdata/base/5/2610_vm +/.tmp/pgdata/base/5/2611 +/.tmp/pgdata/base/5/2612 +/.tmp/pgdata/base/5/2612_fsm +/.tmp/pgdata/base/5/2612_vm +/.tmp/pgdata/base/5/2613 +/.tmp/pgdata/base/5/2615 +/.tmp/pgdata/base/5/2615_fsm +/.tmp/pgdata/base/5/2615_vm +/.tmp/pgdata/base/5/2616 +/.tmp/pgdata/base/5/2616_fsm +/.tmp/pgdata/base/5/2616_vm +/.tmp/pgdata/base/5/2617 +/.tmp/pgdata/base/5/2617_fsm +/.tmp/pgdata/base/5/2617_vm +/.tmp/pgdata/base/5/2618 +/.tmp/pgdata/base/5/2618_fsm +/.tmp/pgdata/base/5/2618_vm +/.tmp/pgdata/base/5/2619 +/.tmp/pgdata/base/5/2619_fsm +/.tmp/pgdata/base/5/2619_vm +/.tmp/pgdata/base/5/2620 +/.tmp/pgdata/base/5/2650 +/.tmp/pgdata/base/5/2651 +/.tmp/pgdata/base/5/2652 +/.tmp/pgdata/base/5/2653 +/.tmp/pgdata/base/5/2654 +/.tmp/pgdata/base/5/2655 +/.tmp/pgdata/base/5/2656 +/.tmp/pgdata/base/5/2657 +/.tmp/pgdata/base/5/2658 +/.tmp/pgdata/base/5/2659 +/.tmp/pgdata/base/5/2660 +/.tmp/pgdata/base/5/2661 +/.tmp/pgdata/base/5/2662 +/.tmp/pgdata/base/5/2663 +/.tmp/pgdata/base/5/2664 +/.tmp/pgdata/base/5/2665 +/.tmp/pgdata/base/5/2666 +/.tmp/pgdata/base/5/2667 +/.tmp/pgdata/base/5/2668 +/.tmp/pgdata/base/5/2669 +/.tmp/pgdata/base/5/2670 +/.tmp/pgdata/base/5/2673 +/.tmp/pgdata/base/5/2674 +/.tmp/pgdata/base/5/2675 +/.tmp/pgdata/base/5/2678 +/.tmp/pgdata/base/5/2679 +/.tmp/pgdata/base/5/2680 +/.tmp/pgdata/base/5/2681 +/.tmp/pgdata/base/5/2682 +/.tmp/pgdata/base/5/2683 +/.tmp/pgdata/base/5/2684 +/.tmp/pgdata/base/5/2685 +/.tmp/pgdata/base/5/2686 +/.tmp/pgdata/base/5/2687 +/.tmp/pgdata/base/5/2688 +/.tmp/pgdata/base/5/2689 +/.tmp/pgdata/base/5/2690 +/.tmp/pgdata/base/5/2691 +/.tmp/pgdata/base/5/2692 +/.tmp/pgdata/base/5/2693 +/.tmp/pgdata/base/5/2696 +/.tmp/pgdata/base/5/2699 +/.tmp/pgdata/base/5/2701 +/.tmp/pgdata/base/5/2702 +/.tmp/pgdata/base/5/2703 +/.tmp/pgdata/base/5/2704 +/.tmp/pgdata/base/5/2753 +/.tmp/pgdata/base/5/2753_fsm +/.tmp/pgdata/base/5/2753_vm +/.tmp/pgdata/base/5/2754 +/.tmp/pgdata/base/5/2755 +/.tmp/pgdata/base/5/2756 +/.tmp/pgdata/base/5/2757 +/.tmp/pgdata/base/5/2830 +/.tmp/pgdata/base/5/2831 +/.tmp/pgdata/base/5/2832 +/.tmp/pgdata/base/5/2833 +/.tmp/pgdata/base/5/2834 +/.tmp/pgdata/base/5/2835 +/.tmp/pgdata/base/5/2836 +/.tmp/pgdata/base/5/2836_fsm +/.tmp/pgdata/base/5/2836_vm +/.tmp/pgdata/base/5/2837 +/.tmp/pgdata/base/5/2838 +/.tmp/pgdata/base/5/2838_fsm +/.tmp/pgdata/base/5/2838_vm +/.tmp/pgdata/base/5/2839 +/.tmp/pgdata/base/5/2840 +/.tmp/pgdata/base/5/2840_fsm +/.tmp/pgdata/base/5/2840_vm +/.tmp/pgdata/base/5/2841 +/.tmp/pgdata/base/5/2995 +/.tmp/pgdata/base/5/2996 +/.tmp/pgdata/base/5/3079 +/.tmp/pgdata/base/5/3079_fsm +/.tmp/pgdata/base/5/3079_vm +/.tmp/pgdata/base/5/3080 +/.tmp/pgdata/base/5/3081 +/.tmp/pgdata/base/5/3085 +/.tmp/pgdata/base/5/3118 +/.tmp/pgdata/base/5/3119 +/.tmp/pgdata/base/5/3164 +/.tmp/pgdata/base/5/3256 +/.tmp/pgdata/base/5/3257 +/.tmp/pgdata/base/5/3258 +/.tmp/pgdata/base/5/3350 +/.tmp/pgdata/base/5/3351 +/.tmp/pgdata/base/5/3379 +/.tmp/pgdata/base/5/3380 +/.tmp/pgdata/base/5/3381 +/.tmp/pgdata/base/5/3394 +/.tmp/pgdata/base/5/3394_fsm +/.tmp/pgdata/base/5/3394_vm +/.tmp/pgdata/base/5/3395 +/.tmp/pgdata/base/5/3429 +/.tmp/pgdata/base/5/3430 +/.tmp/pgdata/base/5/3431 +/.tmp/pgdata/base/5/3433 +/.tmp/pgdata/base/5/3439 +/.tmp/pgdata/base/5/3440 +/.tmp/pgdata/base/5/3455 +/.tmp/pgdata/base/5/3456 +/.tmp/pgdata/base/5/3456_fsm +/.tmp/pgdata/base/5/3456_vm +/.tmp/pgdata/base/5/3466 +/.tmp/pgdata/base/5/3467 +/.tmp/pgdata/base/5/3468 +/.tmp/pgdata/base/5/3501 +/.tmp/pgdata/base/5/3502 +/.tmp/pgdata/base/5/3503 +/.tmp/pgdata/base/5/3534 +/.tmp/pgdata/base/5/3541 +/.tmp/pgdata/base/5/3541_fsm +/.tmp/pgdata/base/5/3541_vm +/.tmp/pgdata/base/5/3542 +/.tmp/pgdata/base/5/3574 +/.tmp/pgdata/base/5/3575 +/.tmp/pgdata/base/5/3576 +/.tmp/pgdata/base/5/3596 +/.tmp/pgdata/base/5/3597 +/.tmp/pgdata/base/5/3598 +/.tmp/pgdata/base/5/3599 +/.tmp/pgdata/base/5/3600 +/.tmp/pgdata/base/5/3600_fsm +/.tmp/pgdata/base/5/3600_vm +/.tmp/pgdata/base/5/3601 +/.tmp/pgdata/base/5/3601_fsm +/.tmp/pgdata/base/5/3601_vm +/.tmp/pgdata/base/5/3602 +/.tmp/pgdata/base/5/3602_fsm +/.tmp/pgdata/base/5/3602_vm +/.tmp/pgdata/base/5/3603 +/.tmp/pgdata/base/5/3603_fsm +/.tmp/pgdata/base/5/3603_vm +/.tmp/pgdata/base/5/3604 +/.tmp/pgdata/base/5/3605 +/.tmp/pgdata/base/5/3606 +/.tmp/pgdata/base/5/3607 +/.tmp/pgdata/base/5/3608 +/.tmp/pgdata/base/5/3609 +/.tmp/pgdata/base/5/3712 +/.tmp/pgdata/base/5/3764 +/.tmp/pgdata/base/5/3764_fsm +/.tmp/pgdata/base/5/3764_vm +/.tmp/pgdata/base/5/3766 +/.tmp/pgdata/base/5/3767 +/.tmp/pgdata/base/5/3997 +/.tmp/pgdata/base/5/4143 +/.tmp/pgdata/base/5/4144 +/.tmp/pgdata/base/5/4145 +/.tmp/pgdata/base/5/4146 +/.tmp/pgdata/base/5/4147 +/.tmp/pgdata/base/5/4148 +/.tmp/pgdata/base/5/4149 +/.tmp/pgdata/base/5/4150 +/.tmp/pgdata/base/5/4151 +/.tmp/pgdata/base/5/4152 +/.tmp/pgdata/base/5/4153 +/.tmp/pgdata/base/5/4154 +/.tmp/pgdata/base/5/4155 +/.tmp/pgdata/base/5/4156 +/.tmp/pgdata/base/5/4157 +/.tmp/pgdata/base/5/4158 +/.tmp/pgdata/base/5/4159 +/.tmp/pgdata/base/5/4160 +/.tmp/pgdata/base/5/4163 +/.tmp/pgdata/base/5/4164 +/.tmp/pgdata/base/5/4165 +/.tmp/pgdata/base/5/4166 +/.tmp/pgdata/base/5/4167 +/.tmp/pgdata/base/5/4168 +/.tmp/pgdata/base/5/4169 +/.tmp/pgdata/base/5/4170 +/.tmp/pgdata/base/5/4171 +/.tmp/pgdata/base/5/4172 +/.tmp/pgdata/base/5/4173 +/.tmp/pgdata/base/5/4174 +/.tmp/pgdata/base/5/5002 +/.tmp/pgdata/base/5/6102 +/.tmp/pgdata/base/5/6104 +/.tmp/pgdata/base/5/6106 +/.tmp/pgdata/base/5/6110 +/.tmp/pgdata/base/5/6111 +/.tmp/pgdata/base/5/6112 +/.tmp/pgdata/base/5/6113 +/.tmp/pgdata/base/5/6116 +/.tmp/pgdata/base/5/6117 +/.tmp/pgdata/base/5/6175 +/.tmp/pgdata/base/5/6176 +/.tmp/pgdata/base/5/6228 +/.tmp/pgdata/base/5/6229 +/.tmp/pgdata/base/5/6237 +/.tmp/pgdata/base/5/6238 +/.tmp/pgdata/base/5/6239 +/.tmp/pgdata/base/5/6351 +/.tmp/pgdata/base/5/6352 +/.tmp/pgdata/base/5/15043 +/.tmp/pgdata/base/5/15043_fsm +/.tmp/pgdata/base/5/15043_vm +/.tmp/pgdata/base/5/15046 +/.tmp/pgdata/base/5/15047 +/.tmp/pgdata/base/5/15048 +/.tmp/pgdata/base/5/15048_fsm +/.tmp/pgdata/base/5/15048_vm +/.tmp/pgdata/base/5/15051 +/.tmp/pgdata/base/5/15052 +/.tmp/pgdata/base/5/15053 +/.tmp/pgdata/base/5/15053_fsm +/.tmp/pgdata/base/5/15053_vm +/.tmp/pgdata/base/5/15056 +/.tmp/pgdata/base/5/15057 +/.tmp/pgdata/base/5/15058 +/.tmp/pgdata/base/5/15058_fsm +/.tmp/pgdata/base/5/15058_vm +/.tmp/pgdata/base/5/15061 +/.tmp/pgdata/base/5/15062 +/.tmp/pgdata/base/5/pg_filenode.map +/.tmp/pgdata/base/5/pg_internal.init +/.tmp/pgdata/base/5/PG_VERSION +/.tmp/pgdata/base/16389/112 +/.tmp/pgdata/base/16389/113 +/.tmp/pgdata/base/16389/174 +/.tmp/pgdata/base/16389/175 +/.tmp/pgdata/base/16389/548 +/.tmp/pgdata/base/16389/549 +/.tmp/pgdata/base/16389/826 +/.tmp/pgdata/base/16389/827 +/.tmp/pgdata/base/16389/828 +/.tmp/pgdata/base/16389/1247 +/.tmp/pgdata/base/16389/1247_fsm +/.tmp/pgdata/base/16389/1247_vm +/.tmp/pgdata/base/16389/1249 +/.tmp/pgdata/base/16389/1249_fsm +/.tmp/pgdata/base/16389/1249_vm +/.tmp/pgdata/base/16389/1255 +/.tmp/pgdata/base/16389/1255_fsm +/.tmp/pgdata/base/16389/1255_vm +/.tmp/pgdata/base/16389/1259 +/.tmp/pgdata/base/16389/1259_fsm +/.tmp/pgdata/base/16389/1259_vm +/.tmp/pgdata/base/16389/1417 +/.tmp/pgdata/base/16389/1418 +/.tmp/pgdata/base/16389/2187 +/.tmp/pgdata/base/16389/2224 +/.tmp/pgdata/base/16389/2228 +/.tmp/pgdata/base/16389/2328 +/.tmp/pgdata/base/16389/2336 +/.tmp/pgdata/base/16389/2337 +/.tmp/pgdata/base/16389/2579 +/.tmp/pgdata/base/16389/2600 +/.tmp/pgdata/base/16389/2600_fsm +/.tmp/pgdata/base/16389/2600_vm +/.tmp/pgdata/base/16389/2601 +/.tmp/pgdata/base/16389/2601_fsm +/.tmp/pgdata/base/16389/2601_vm +/.tmp/pgdata/base/16389/2602 +/.tmp/pgdata/base/16389/2602_fsm +/.tmp/pgdata/base/16389/2602_vm +/.tmp/pgdata/base/16389/2603 +/.tmp/pgdata/base/16389/2603_fsm +/.tmp/pgdata/base/16389/2603_vm +/.tmp/pgdata/base/16389/2604 +/.tmp/pgdata/base/16389/2605 +/.tmp/pgdata/base/16389/2605_fsm +/.tmp/pgdata/base/16389/2605_vm +/.tmp/pgdata/base/16389/2606 +/.tmp/pgdata/base/16389/2606_fsm +/.tmp/pgdata/base/16389/2606_vm +/.tmp/pgdata/base/16389/2607 +/.tmp/pgdata/base/16389/2607_fsm +/.tmp/pgdata/base/16389/2607_vm +/.tmp/pgdata/base/16389/2608 +/.tmp/pgdata/base/16389/2608_fsm +/.tmp/pgdata/base/16389/2608_vm +/.tmp/pgdata/base/16389/2609 +/.tmp/pgdata/base/16389/2609_fsm +/.tmp/pgdata/base/16389/2609_vm +/.tmp/pgdata/base/16389/2610 +/.tmp/pgdata/base/16389/2610_fsm +/.tmp/pgdata/base/16389/2610_vm +/.tmp/pgdata/base/16389/2611 +/.tmp/pgdata/base/16389/2612 +/.tmp/pgdata/base/16389/2612_fsm +/.tmp/pgdata/base/16389/2612_vm +/.tmp/pgdata/base/16389/2613 +/.tmp/pgdata/base/16389/2615 +/.tmp/pgdata/base/16389/2615_fsm +/.tmp/pgdata/base/16389/2615_vm +/.tmp/pgdata/base/16389/2616 +/.tmp/pgdata/base/16389/2616_fsm +/.tmp/pgdata/base/16389/2616_vm +/.tmp/pgdata/base/16389/2617 +/.tmp/pgdata/base/16389/2617_fsm +/.tmp/pgdata/base/16389/2617_vm +/.tmp/pgdata/base/16389/2618 +/.tmp/pgdata/base/16389/2618_fsm +/.tmp/pgdata/base/16389/2618_vm +/.tmp/pgdata/base/16389/2619 +/.tmp/pgdata/base/16389/2619_fsm +/.tmp/pgdata/base/16389/2619_vm +/.tmp/pgdata/base/16389/2620 +/.tmp/pgdata/base/16389/2620_fsm +/.tmp/pgdata/base/16389/2620_vm +/.tmp/pgdata/base/16389/2650 +/.tmp/pgdata/base/16389/2651 +/.tmp/pgdata/base/16389/2652 +/.tmp/pgdata/base/16389/2653 +/.tmp/pgdata/base/16389/2654 +/.tmp/pgdata/base/16389/2655 +/.tmp/pgdata/base/16389/2656 +/.tmp/pgdata/base/16389/2657 +/.tmp/pgdata/base/16389/2658 +/.tmp/pgdata/base/16389/2659 +/.tmp/pgdata/base/16389/2660 +/.tmp/pgdata/base/16389/2661 +/.tmp/pgdata/base/16389/2662 +/.tmp/pgdata/base/16389/2663 +/.tmp/pgdata/base/16389/2664 +/.tmp/pgdata/base/16389/2665 +/.tmp/pgdata/base/16389/2666 +/.tmp/pgdata/base/16389/2667 +/.tmp/pgdata/base/16389/2668 +/.tmp/pgdata/base/16389/2669 +/.tmp/pgdata/base/16389/2670 +/.tmp/pgdata/base/16389/2673 +/.tmp/pgdata/base/16389/2674 +/.tmp/pgdata/base/16389/2675 +/.tmp/pgdata/base/16389/2678 +/.tmp/pgdata/base/16389/2679 +/.tmp/pgdata/base/16389/2680 +/.tmp/pgdata/base/16389/2681 +/.tmp/pgdata/base/16389/2682 +/.tmp/pgdata/base/16389/2683 +/.tmp/pgdata/base/16389/2684 +/.tmp/pgdata/base/16389/2685 +/.tmp/pgdata/base/16389/2686 +/.tmp/pgdata/base/16389/2687 +/.tmp/pgdata/base/16389/2688 +/.tmp/pgdata/base/16389/2689 +/.tmp/pgdata/base/16389/2690 +/.tmp/pgdata/base/16389/2691 +/.tmp/pgdata/base/16389/2692 +/.tmp/pgdata/base/16389/2693 +/.tmp/pgdata/base/16389/2696 +/.tmp/pgdata/base/16389/2699 +/.tmp/pgdata/base/16389/2701 +/.tmp/pgdata/base/16389/2702 +/.tmp/pgdata/base/16389/2703 +/.tmp/pgdata/base/16389/2704 +/.tmp/pgdata/base/16389/2753 +/.tmp/pgdata/base/16389/2753_fsm +/.tmp/pgdata/base/16389/2753_vm +/.tmp/pgdata/base/16389/2754 +/.tmp/pgdata/base/16389/2755 +/.tmp/pgdata/base/16389/2756 +/.tmp/pgdata/base/16389/2757 +/.tmp/pgdata/base/16389/2830 +/.tmp/pgdata/base/16389/2831 +/.tmp/pgdata/base/16389/2832 +/.tmp/pgdata/base/16389/2833 +/.tmp/pgdata/base/16389/2834 +/.tmp/pgdata/base/16389/2835 +/.tmp/pgdata/base/16389/2836 +/.tmp/pgdata/base/16389/2836_fsm +/.tmp/pgdata/base/16389/2836_vm +/.tmp/pgdata/base/16389/2837 +/.tmp/pgdata/base/16389/2838 +/.tmp/pgdata/base/16389/2838_fsm +/.tmp/pgdata/base/16389/2838_vm +/.tmp/pgdata/base/16389/2839 +/.tmp/pgdata/base/16389/2840 +/.tmp/pgdata/base/16389/2840_fsm +/.tmp/pgdata/base/16389/2840_vm +/.tmp/pgdata/base/16389/2841 +/.tmp/pgdata/base/16389/2995 +/.tmp/pgdata/base/16389/2996 +/.tmp/pgdata/base/16389/3079 +/.tmp/pgdata/base/16389/3079_fsm +/.tmp/pgdata/base/16389/3079_vm +/.tmp/pgdata/base/16389/3080 +/.tmp/pgdata/base/16389/3081 +/.tmp/pgdata/base/16389/3085 +/.tmp/pgdata/base/16389/3118 +/.tmp/pgdata/base/16389/3119 +/.tmp/pgdata/base/16389/3164 +/.tmp/pgdata/base/16389/3256 +/.tmp/pgdata/base/16389/3257 +/.tmp/pgdata/base/16389/3258 +/.tmp/pgdata/base/16389/3350 +/.tmp/pgdata/base/16389/3351 +/.tmp/pgdata/base/16389/3379 +/.tmp/pgdata/base/16389/3380 +/.tmp/pgdata/base/16389/3381 +/.tmp/pgdata/base/16389/3394 +/.tmp/pgdata/base/16389/3394_fsm +/.tmp/pgdata/base/16389/3394_vm +/.tmp/pgdata/base/16389/3395 +/.tmp/pgdata/base/16389/3429 +/.tmp/pgdata/base/16389/3430 +/.tmp/pgdata/base/16389/3431 +/.tmp/pgdata/base/16389/3433 +/.tmp/pgdata/base/16389/3439 +/.tmp/pgdata/base/16389/3440 +/.tmp/pgdata/base/16389/3455 +/.tmp/pgdata/base/16389/3456 +/.tmp/pgdata/base/16389/3456_fsm +/.tmp/pgdata/base/16389/3456_vm +/.tmp/pgdata/base/16389/3466 +/.tmp/pgdata/base/16389/3467 +/.tmp/pgdata/base/16389/3468 +/.tmp/pgdata/base/16389/3501 +/.tmp/pgdata/base/16389/3502 +/.tmp/pgdata/base/16389/3503 +/.tmp/pgdata/base/16389/3534 +/.tmp/pgdata/base/16389/3541 +/.tmp/pgdata/base/16389/3541_fsm +/.tmp/pgdata/base/16389/3541_vm +/.tmp/pgdata/base/16389/3542 +/.tmp/pgdata/base/16389/3574 +/.tmp/pgdata/base/16389/3575 +/.tmp/pgdata/base/16389/3576 +/.tmp/pgdata/base/16389/3596 +/.tmp/pgdata/base/16389/3597 +/.tmp/pgdata/base/16389/3598 +/.tmp/pgdata/base/16389/3599 +/.tmp/pgdata/base/16389/3600 +/.tmp/pgdata/base/16389/3600_fsm +/.tmp/pgdata/base/16389/3600_vm +/.tmp/pgdata/base/16389/3601 +/.tmp/pgdata/base/16389/3601_fsm +/.tmp/pgdata/base/16389/3601_vm +/.tmp/pgdata/base/16389/3602 +/.tmp/pgdata/base/16389/3602_fsm +/.tmp/pgdata/base/16389/3602_vm +/.tmp/pgdata/base/16389/3603 +/.tmp/pgdata/base/16389/3603_fsm +/.tmp/pgdata/base/16389/3603_vm +/.tmp/pgdata/base/16389/3604 +/.tmp/pgdata/base/16389/3605 +/.tmp/pgdata/base/16389/3606 +/.tmp/pgdata/base/16389/3607 +/.tmp/pgdata/base/16389/3608 +/.tmp/pgdata/base/16389/3609 +/.tmp/pgdata/base/16389/3712 +/.tmp/pgdata/base/16389/3764 +/.tmp/pgdata/base/16389/3764_fsm +/.tmp/pgdata/base/16389/3764_vm +/.tmp/pgdata/base/16389/3766 +/.tmp/pgdata/base/16389/3767 +/.tmp/pgdata/base/16389/3997 +/.tmp/pgdata/base/16389/4143 +/.tmp/pgdata/base/16389/4144 +/.tmp/pgdata/base/16389/4145 +/.tmp/pgdata/base/16389/4146 +/.tmp/pgdata/base/16389/4147 +/.tmp/pgdata/base/16389/4148 +/.tmp/pgdata/base/16389/4149 +/.tmp/pgdata/base/16389/4150 +/.tmp/pgdata/base/16389/4151 +/.tmp/pgdata/base/16389/4152 +/.tmp/pgdata/base/16389/4153 +/.tmp/pgdata/base/16389/4154 +/.tmp/pgdata/base/16389/4155 +/.tmp/pgdata/base/16389/4156 +/.tmp/pgdata/base/16389/4157 +/.tmp/pgdata/base/16389/4158 +/.tmp/pgdata/base/16389/4159 +/.tmp/pgdata/base/16389/4160 +/.tmp/pgdata/base/16389/4163 +/.tmp/pgdata/base/16389/4164 +/.tmp/pgdata/base/16389/4165 +/.tmp/pgdata/base/16389/4166 +/.tmp/pgdata/base/16389/4167 +/.tmp/pgdata/base/16389/4168 +/.tmp/pgdata/base/16389/4169 +/.tmp/pgdata/base/16389/4170 +/.tmp/pgdata/base/16389/4171 +/.tmp/pgdata/base/16389/4172 +/.tmp/pgdata/base/16389/4173 +/.tmp/pgdata/base/16389/4174 +/.tmp/pgdata/base/16389/5002 +/.tmp/pgdata/base/16389/6102 +/.tmp/pgdata/base/16389/6104 +/.tmp/pgdata/base/16389/6106 +/.tmp/pgdata/base/16389/6110 +/.tmp/pgdata/base/16389/6111 +/.tmp/pgdata/base/16389/6112 +/.tmp/pgdata/base/16389/6113 +/.tmp/pgdata/base/16389/6116 +/.tmp/pgdata/base/16389/6117 +/.tmp/pgdata/base/16389/6175 +/.tmp/pgdata/base/16389/6176 +/.tmp/pgdata/base/16389/6228 +/.tmp/pgdata/base/16389/6229 +/.tmp/pgdata/base/16389/6237 +/.tmp/pgdata/base/16389/6238 +/.tmp/pgdata/base/16389/6239 +/.tmp/pgdata/base/16389/6351 +/.tmp/pgdata/base/16389/6352 +/.tmp/pgdata/base/16389/15043 +/.tmp/pgdata/base/16389/15043_fsm +/.tmp/pgdata/base/16389/15043_vm +/.tmp/pgdata/base/16389/15046 +/.tmp/pgdata/base/16389/15047 +/.tmp/pgdata/base/16389/15048 +/.tmp/pgdata/base/16389/15048_fsm +/.tmp/pgdata/base/16389/15048_vm +/.tmp/pgdata/base/16389/15051 +/.tmp/pgdata/base/16389/15052 +/.tmp/pgdata/base/16389/15053 +/.tmp/pgdata/base/16389/15053_fsm +/.tmp/pgdata/base/16389/15053_vm +/.tmp/pgdata/base/16389/15056 +/.tmp/pgdata/base/16389/15057 +/.tmp/pgdata/base/16389/15058 +/.tmp/pgdata/base/16389/15058_fsm +/.tmp/pgdata/base/16389/15058_vm +/.tmp/pgdata/base/16389/15061 +/.tmp/pgdata/base/16389/15062 +/.tmp/pgdata/base/16389/16735 +/.tmp/pgdata/base/16389/16739 +/.tmp/pgdata/base/16389/16740 +/.tmp/pgdata/base/16389/16741 +/.tmp/pgdata/base/16389/16743 +/.tmp/pgdata/base/16389/16753 +/.tmp/pgdata/base/16389/16754 +/.tmp/pgdata/base/16389/16755 +/.tmp/pgdata/base/16389/16757 +/.tmp/pgdata/base/16389/16758 +/.tmp/pgdata/base/16389/16759 +/.tmp/pgdata/base/16389/16766 +/.tmp/pgdata/base/16389/16767 +/.tmp/pgdata/base/16389/16768 +/.tmp/pgdata/base/16389/16780 +/.tmp/pgdata/base/16389/16785 +/.tmp/pgdata/base/16389/16786 +/.tmp/pgdata/base/16389/16787 +/.tmp/pgdata/base/16389/16794 +/.tmp/pgdata/base/16389/16801 +/.tmp/pgdata/base/16389/16802 +/.tmp/pgdata/base/16389/16803 +/.tmp/pgdata/base/16389/16810 +/.tmp/pgdata/base/16389/16815 +/.tmp/pgdata/base/16389/16816 +/.tmp/pgdata/base/16389/16817 +/.tmp/pgdata/base/16389/16824 +/.tmp/pgdata/base/16389/16831 +/.tmp/pgdata/base/16389/16833 +/.tmp/pgdata/base/16389/16840 +/.tmp/pgdata/base/16389/16845 +/.tmp/pgdata/base/16389/16846 +/.tmp/pgdata/base/16389/16847 +/.tmp/pgdata/base/16389/16859 +/.tmp/pgdata/base/16389/16864 +/.tmp/pgdata/base/16389/16865 +/.tmp/pgdata/base/16389/16866 +/.tmp/pgdata/base/16389/16877 +/.tmp/pgdata/base/16389/16886 +/.tmp/pgdata/base/16389/16887 +/.tmp/pgdata/base/16389/16888 +/.tmp/pgdata/base/16389/16895 +/.tmp/pgdata/base/16389/16900 +/.tmp/pgdata/base/16389/16904 +/.tmp/pgdata/base/16389/16905 +/.tmp/pgdata/base/16389/16906 +/.tmp/pgdata/base/16389/16918 +/.tmp/pgdata/base/16389/16926 +/.tmp/pgdata/base/16389/16933 +/.tmp/pgdata/base/16389/16943 +/.tmp/pgdata/base/16389/16944 +/.tmp/pgdata/base/16389/16945 +/.tmp/pgdata/base/16389/16947 +/.tmp/pgdata/base/16389/16954 +/.tmp/pgdata/base/16389/16955 +/.tmp/pgdata/base/16389/16963 +/.tmp/pgdata/base/16389/16964 +/.tmp/pgdata/base/16389/16965 +/.tmp/pgdata/base/16389/16972 +/.tmp/pgdata/base/16389/16973 +/.tmp/pgdata/base/16389/16978 +/.tmp/pgdata/base/16389/16980 +/.tmp/pgdata/base/16389/16987 +/.tmp/pgdata/base/16389/16994 +/.tmp/pgdata/base/16389/17001 +/.tmp/pgdata/base/16389/17008 +/.tmp/pgdata/base/16389/17034 +/.tmp/pgdata/base/16389/17037 +/.tmp/pgdata/base/16389/17053 +/.tmp/pgdata/base/16389/17053_fsm +/.tmp/pgdata/base/16389/17053_vm +/.tmp/pgdata/base/16389/17068 +/.tmp/pgdata/base/16389/17069 +/.tmp/pgdata/base/16389/17070 +/.tmp/pgdata/base/16389/17077 +/.tmp/pgdata/base/16389/17078 +/.tmp/pgdata/base/16389/pg_filenode.map +/.tmp/pgdata/base/16389/pg_internal.init +/.tmp/pgdata/base/16389/PG_VERSION +/.tmp/pgdata/base/17081/112 +/.tmp/pgdata/base/17081/113 +/.tmp/pgdata/base/17081/174 +/.tmp/pgdata/base/17081/175 +/.tmp/pgdata/base/17081/548 +/.tmp/pgdata/base/17081/549 +/.tmp/pgdata/base/17081/826 +/.tmp/pgdata/base/17081/827 +/.tmp/pgdata/base/17081/828 +/.tmp/pgdata/base/17081/1247 +/.tmp/pgdata/base/17081/1247_fsm +/.tmp/pgdata/base/17081/1247_vm +/.tmp/pgdata/base/17081/1249 +/.tmp/pgdata/base/17081/1249_fsm +/.tmp/pgdata/base/17081/1249_vm +/.tmp/pgdata/base/17081/1255 +/.tmp/pgdata/base/17081/1255_fsm +/.tmp/pgdata/base/17081/1255_vm +/.tmp/pgdata/base/17081/1259 +/.tmp/pgdata/base/17081/1259_fsm +/.tmp/pgdata/base/17081/1259_vm +/.tmp/pgdata/base/17081/1417 +/.tmp/pgdata/base/17081/1418 +/.tmp/pgdata/base/17081/2187 +/.tmp/pgdata/base/17081/2224 +/.tmp/pgdata/base/17081/2228 +/.tmp/pgdata/base/17081/2328 +/.tmp/pgdata/base/17081/2336 +/.tmp/pgdata/base/17081/2337 +/.tmp/pgdata/base/17081/2579 +/.tmp/pgdata/base/17081/2600 +/.tmp/pgdata/base/17081/2600_fsm +/.tmp/pgdata/base/17081/2600_vm +/.tmp/pgdata/base/17081/2601 +/.tmp/pgdata/base/17081/2601_fsm +/.tmp/pgdata/base/17081/2601_vm +/.tmp/pgdata/base/17081/2602 +/.tmp/pgdata/base/17081/2602_fsm +/.tmp/pgdata/base/17081/2602_vm +/.tmp/pgdata/base/17081/2603 +/.tmp/pgdata/base/17081/2603_fsm +/.tmp/pgdata/base/17081/2603_vm +/.tmp/pgdata/base/17081/2604 +/.tmp/pgdata/base/17081/2605 +/.tmp/pgdata/base/17081/2605_fsm +/.tmp/pgdata/base/17081/2605_vm +/.tmp/pgdata/base/17081/2606 +/.tmp/pgdata/base/17081/2606_fsm +/.tmp/pgdata/base/17081/2606_vm +/.tmp/pgdata/base/17081/2607 +/.tmp/pgdata/base/17081/2607_fsm +/.tmp/pgdata/base/17081/2607_vm +/.tmp/pgdata/base/17081/2608 +/.tmp/pgdata/base/17081/2608_fsm +/.tmp/pgdata/base/17081/2608_vm +/.tmp/pgdata/base/17081/2609 +/.tmp/pgdata/base/17081/2609_fsm +/.tmp/pgdata/base/17081/2609_vm +/.tmp/pgdata/base/17081/2610 +/.tmp/pgdata/base/17081/2610_fsm +/.tmp/pgdata/base/17081/2610_vm +/.tmp/pgdata/base/17081/2611 +/.tmp/pgdata/base/17081/2612 +/.tmp/pgdata/base/17081/2612_fsm +/.tmp/pgdata/base/17081/2612_vm +/.tmp/pgdata/base/17081/2613 +/.tmp/pgdata/base/17081/2615 +/.tmp/pgdata/base/17081/2615_fsm +/.tmp/pgdata/base/17081/2615_vm +/.tmp/pgdata/base/17081/2616 +/.tmp/pgdata/base/17081/2616_fsm +/.tmp/pgdata/base/17081/2616_vm +/.tmp/pgdata/base/17081/2617 +/.tmp/pgdata/base/17081/2617_fsm +/.tmp/pgdata/base/17081/2617_vm +/.tmp/pgdata/base/17081/2618 +/.tmp/pgdata/base/17081/2618_fsm +/.tmp/pgdata/base/17081/2618_vm +/.tmp/pgdata/base/17081/2619 +/.tmp/pgdata/base/17081/2619_fsm +/.tmp/pgdata/base/17081/2619_vm +/.tmp/pgdata/base/17081/2620 +/.tmp/pgdata/base/17081/2620_fsm +/.tmp/pgdata/base/17081/2650 +/.tmp/pgdata/base/17081/2651 +/.tmp/pgdata/base/17081/2652 +/.tmp/pgdata/base/17081/2653 +/.tmp/pgdata/base/17081/2654 +/.tmp/pgdata/base/17081/2655 +/.tmp/pgdata/base/17081/2656 +/.tmp/pgdata/base/17081/2657 +/.tmp/pgdata/base/17081/2658 +/.tmp/pgdata/base/17081/2659 +/.tmp/pgdata/base/17081/2660 +/.tmp/pgdata/base/17081/2661 +/.tmp/pgdata/base/17081/2662 +/.tmp/pgdata/base/17081/2663 +/.tmp/pgdata/base/17081/2664 +/.tmp/pgdata/base/17081/2665 +/.tmp/pgdata/base/17081/2666 +/.tmp/pgdata/base/17081/2667 +/.tmp/pgdata/base/17081/2668 +/.tmp/pgdata/base/17081/2669 +/.tmp/pgdata/base/17081/2670 +/.tmp/pgdata/base/17081/2673 +/.tmp/pgdata/base/17081/2674 +/.tmp/pgdata/base/17081/2675 +/.tmp/pgdata/base/17081/2678 +/.tmp/pgdata/base/17081/2679 +/.tmp/pgdata/base/17081/2680 +/.tmp/pgdata/base/17081/2681 +/.tmp/pgdata/base/17081/2682 +/.tmp/pgdata/base/17081/2683 +/.tmp/pgdata/base/17081/2684 +/.tmp/pgdata/base/17081/2685 +/.tmp/pgdata/base/17081/2686 +/.tmp/pgdata/base/17081/2687 +/.tmp/pgdata/base/17081/2688 +/.tmp/pgdata/base/17081/2689 +/.tmp/pgdata/base/17081/2690 +/.tmp/pgdata/base/17081/2691 +/.tmp/pgdata/base/17081/2692 +/.tmp/pgdata/base/17081/2693 +/.tmp/pgdata/base/17081/2696 +/.tmp/pgdata/base/17081/2699 +/.tmp/pgdata/base/17081/2701 +/.tmp/pgdata/base/17081/2702 +/.tmp/pgdata/base/17081/2703 +/.tmp/pgdata/base/17081/2704 +/.tmp/pgdata/base/17081/2753 +/.tmp/pgdata/base/17081/2753_fsm +/.tmp/pgdata/base/17081/2753_vm +/.tmp/pgdata/base/17081/2754 +/.tmp/pgdata/base/17081/2755 +/.tmp/pgdata/base/17081/2756 +/.tmp/pgdata/base/17081/2757 +/.tmp/pgdata/base/17081/2830 +/.tmp/pgdata/base/17081/2831 +/.tmp/pgdata/base/17081/2832 +/.tmp/pgdata/base/17081/2833 +/.tmp/pgdata/base/17081/2834 +/.tmp/pgdata/base/17081/2835 +/.tmp/pgdata/base/17081/2836 +/.tmp/pgdata/base/17081/2836_fsm +/.tmp/pgdata/base/17081/2836_vm +/.tmp/pgdata/base/17081/2837 +/.tmp/pgdata/base/17081/2838 +/.tmp/pgdata/base/17081/2838_fsm +/.tmp/pgdata/base/17081/2838_vm +/.tmp/pgdata/base/17081/2839 +/.tmp/pgdata/base/17081/2840 +/.tmp/pgdata/base/17081/2840_fsm +/.tmp/pgdata/base/17081/2840_vm +/.tmp/pgdata/base/17081/2841 +/.tmp/pgdata/base/17081/2995 +/.tmp/pgdata/base/17081/2996 +/.tmp/pgdata/base/17081/3079 +/.tmp/pgdata/base/17081/3079_fsm +/.tmp/pgdata/base/17081/3079_vm +/.tmp/pgdata/base/17081/3080 +/.tmp/pgdata/base/17081/3081 +/.tmp/pgdata/base/17081/3085 +/.tmp/pgdata/base/17081/3118 +/.tmp/pgdata/base/17081/3119 +/.tmp/pgdata/base/17081/3164 +/.tmp/pgdata/base/17081/3256 +/.tmp/pgdata/base/17081/3257 +/.tmp/pgdata/base/17081/3258 +/.tmp/pgdata/base/17081/3350 +/.tmp/pgdata/base/17081/3351 +/.tmp/pgdata/base/17081/3379 +/.tmp/pgdata/base/17081/3380 +/.tmp/pgdata/base/17081/3381 +/.tmp/pgdata/base/17081/3394 +/.tmp/pgdata/base/17081/3394_fsm +/.tmp/pgdata/base/17081/3394_vm +/.tmp/pgdata/base/17081/3395 +/.tmp/pgdata/base/17081/3429 +/.tmp/pgdata/base/17081/3430 +/.tmp/pgdata/base/17081/3431 +/.tmp/pgdata/base/17081/3433 +/.tmp/pgdata/base/17081/3439 +/.tmp/pgdata/base/17081/3440 +/.tmp/pgdata/base/17081/3455 +/.tmp/pgdata/base/17081/3456 +/.tmp/pgdata/base/17081/3456_fsm +/.tmp/pgdata/base/17081/3456_vm +/.tmp/pgdata/base/17081/3466 +/.tmp/pgdata/base/17081/3467 +/.tmp/pgdata/base/17081/3468 +/.tmp/pgdata/base/17081/3501 +/.tmp/pgdata/base/17081/3502 +/.tmp/pgdata/base/17081/3503 +/.tmp/pgdata/base/17081/3534 +/.tmp/pgdata/base/17081/3541 +/.tmp/pgdata/base/17081/3541_fsm +/.tmp/pgdata/base/17081/3541_vm +/.tmp/pgdata/base/17081/3542 +/.tmp/pgdata/base/17081/3574 +/.tmp/pgdata/base/17081/3575 +/.tmp/pgdata/base/17081/3576 +/.tmp/pgdata/base/17081/3596 +/.tmp/pgdata/base/17081/3597 +/.tmp/pgdata/base/17081/3598 +/.tmp/pgdata/base/17081/3599 +/.tmp/pgdata/base/17081/3600 +/.tmp/pgdata/base/17081/3600_fsm +/.tmp/pgdata/base/17081/3600_vm +/.tmp/pgdata/base/17081/3601 +/.tmp/pgdata/base/17081/3601_fsm +/.tmp/pgdata/base/17081/3601_vm +/.tmp/pgdata/base/17081/3602 +/.tmp/pgdata/base/17081/3602_fsm +/.tmp/pgdata/base/17081/3602_vm +/.tmp/pgdata/base/17081/3603 +/.tmp/pgdata/base/17081/3603_fsm +/.tmp/pgdata/base/17081/3603_vm +/.tmp/pgdata/base/17081/3604 +/.tmp/pgdata/base/17081/3605 +/.tmp/pgdata/base/17081/3606 +/.tmp/pgdata/base/17081/3607 +/.tmp/pgdata/base/17081/3608 +/.tmp/pgdata/base/17081/3609 +/.tmp/pgdata/base/17081/3712 +/.tmp/pgdata/base/17081/3764 +/.tmp/pgdata/base/17081/3764_fsm +/.tmp/pgdata/base/17081/3764_vm +/.tmp/pgdata/base/17081/3766 +/.tmp/pgdata/base/17081/3767 +/.tmp/pgdata/base/17081/3997 +/.tmp/pgdata/base/17081/4143 +/.tmp/pgdata/base/17081/4144 +/.tmp/pgdata/base/17081/4145 +/.tmp/pgdata/base/17081/4146 +/.tmp/pgdata/base/17081/4147 +/.tmp/pgdata/base/17081/4148 +/.tmp/pgdata/base/17081/4149 +/.tmp/pgdata/base/17081/4150 +/.tmp/pgdata/base/17081/4151 +/.tmp/pgdata/base/17081/4152 +/.tmp/pgdata/base/17081/4153 +/.tmp/pgdata/base/17081/4154 +/.tmp/pgdata/base/17081/4155 +/.tmp/pgdata/base/17081/4156 +/.tmp/pgdata/base/17081/4157 +/.tmp/pgdata/base/17081/4158 +/.tmp/pgdata/base/17081/4159 +/.tmp/pgdata/base/17081/4160 +/.tmp/pgdata/base/17081/4163 +/.tmp/pgdata/base/17081/4164 +/.tmp/pgdata/base/17081/4165 +/.tmp/pgdata/base/17081/4166 +/.tmp/pgdata/base/17081/4167 +/.tmp/pgdata/base/17081/4168 +/.tmp/pgdata/base/17081/4169 +/.tmp/pgdata/base/17081/4170 +/.tmp/pgdata/base/17081/4171 +/.tmp/pgdata/base/17081/4172 +/.tmp/pgdata/base/17081/4173 +/.tmp/pgdata/base/17081/4174 +/.tmp/pgdata/base/17081/5002 +/.tmp/pgdata/base/17081/6102 +/.tmp/pgdata/base/17081/6104 +/.tmp/pgdata/base/17081/6106 +/.tmp/pgdata/base/17081/6110 +/.tmp/pgdata/base/17081/6111 +/.tmp/pgdata/base/17081/6112 +/.tmp/pgdata/base/17081/6113 +/.tmp/pgdata/base/17081/6116 +/.tmp/pgdata/base/17081/6117 +/.tmp/pgdata/base/17081/6175 +/.tmp/pgdata/base/17081/6176 +/.tmp/pgdata/base/17081/6228 +/.tmp/pgdata/base/17081/6229 +/.tmp/pgdata/base/17081/6237 +/.tmp/pgdata/base/17081/6238 +/.tmp/pgdata/base/17081/6239 +/.tmp/pgdata/base/17081/6351 +/.tmp/pgdata/base/17081/6352 +/.tmp/pgdata/base/17081/15043 +/.tmp/pgdata/base/17081/15043_fsm +/.tmp/pgdata/base/17081/15043_vm +/.tmp/pgdata/base/17081/15046 +/.tmp/pgdata/base/17081/15047 +/.tmp/pgdata/base/17081/15048 +/.tmp/pgdata/base/17081/15048_fsm +/.tmp/pgdata/base/17081/15048_vm +/.tmp/pgdata/base/17081/15051 +/.tmp/pgdata/base/17081/15052 +/.tmp/pgdata/base/17081/15053 +/.tmp/pgdata/base/17081/15053_fsm +/.tmp/pgdata/base/17081/15053_vm +/.tmp/pgdata/base/17081/15056 +/.tmp/pgdata/base/17081/15057 +/.tmp/pgdata/base/17081/15058 +/.tmp/pgdata/base/17081/15058_fsm +/.tmp/pgdata/base/17081/15058_vm +/.tmp/pgdata/base/17081/15061 +/.tmp/pgdata/base/17081/15062 +/.tmp/pgdata/base/17081/17082 +/.tmp/pgdata/base/17081/17087 +/.tmp/pgdata/base/17081/17088 +/.tmp/pgdata/base/17081/17089 +/.tmp/pgdata/base/17081/17091 +/.tmp/pgdata/base/17081/17097 +/.tmp/pgdata/base/17081/17098 +/.tmp/pgdata/base/17081/17099 +/.tmp/pgdata/base/17081/17101 +/.tmp/pgdata/base/17081/17109 +/.tmp/pgdata/base/17081/17110 +/.tmp/pgdata/base/17081/17111 +/.tmp/pgdata/base/17081/17113 +/.tmp/pgdata/base/17081/17118 +/.tmp/pgdata/base/17081/17130 +/.tmp/pgdata/base/17081/17137 +/.tmp/pgdata/base/17081/17138 +/.tmp/pgdata/base/17081/17139 +/.tmp/pgdata/base/17081/17146 +/.tmp/pgdata/base/17081/17155 +/.tmp/pgdata/base/17081/17162 +/.tmp/pgdata/base/17081/17169 +/.tmp/pgdata/base/17081/17170 +/.tmp/pgdata/base/17081/17171 +/.tmp/pgdata/base/17081/17178 +/.tmp/pgdata/base/17081/17185 +/.tmp/pgdata/base/17081/17186 +/.tmp/pgdata/base/17081/17187 +/.tmp/pgdata/base/17081/17194 +/.tmp/pgdata/base/17081/17201 +/.tmp/pgdata/base/17081/17202 +/.tmp/pgdata/base/17081/17203 +/.tmp/pgdata/base/17081/17210 +/.tmp/pgdata/base/17081/17218 +/.tmp/pgdata/base/17081/17226 +/.tmp/pgdata/base/17081/17227 +/.tmp/pgdata/base/17081/17255 +/.tmp/pgdata/base/17081/17264 +/.tmp/pgdata/base/17081/17265 +/.tmp/pgdata/base/17081/17266 +/.tmp/pgdata/base/17081/17273 +/.tmp/pgdata/base/17081/17278 +/.tmp/pgdata/base/17081/17279 +/.tmp/pgdata/base/17081/17280 +/.tmp/pgdata/base/17081/17293 +/.tmp/pgdata/base/17081/17299 +/.tmp/pgdata/base/17081/17323 +/.tmp/pgdata/base/17081/17332 +/.tmp/pgdata/base/17081/17333 +/.tmp/pgdata/base/17081/17334 +/.tmp/pgdata/base/17081/17351 +/.tmp/pgdata/base/17081/17358 +/.tmp/pgdata/base/17081/17363 +/.tmp/pgdata/base/17081/17373 +/.tmp/pgdata/base/17081/17374 +/.tmp/pgdata/base/17081/17375 +/.tmp/pgdata/base/17081/17382 +/.tmp/pgdata/base/17081/17390 +/.tmp/pgdata/base/17081/17408 +/.tmp/pgdata/base/17081/17415 +/.tmp/pgdata/base/17081/17416 +/.tmp/pgdata/base/17081/17417 +/.tmp/pgdata/base/17081/17424 +/.tmp/pgdata/base/17081/17432 +/.tmp/pgdata/base/17081/17454 +/.tmp/pgdata/base/17081/17455 +/.tmp/pgdata/base/17081/pg_filenode.map +/.tmp/pgdata/base/17081/pg_internal.init +/.tmp/pgdata/base/17081/PG_VERSION +/.tmp/pgdata/global/1213 +/.tmp/pgdata/global/1213_fsm +/.tmp/pgdata/global/1213_vm +/.tmp/pgdata/global/1214 +/.tmp/pgdata/global/1232 +/.tmp/pgdata/global/1233 +/.tmp/pgdata/global/1260 +/.tmp/pgdata/global/1260_fsm +/.tmp/pgdata/global/1260_vm +/.tmp/pgdata/global/1261 +/.tmp/pgdata/global/1261_fsm +/.tmp/pgdata/global/1261_vm +/.tmp/pgdata/global/1262 +/.tmp/pgdata/global/1262_fsm +/.tmp/pgdata/global/1262_vm +/.tmp/pgdata/global/2396 +/.tmp/pgdata/global/2396_fsm +/.tmp/pgdata/global/2396_vm +/.tmp/pgdata/global/2397 +/.tmp/pgdata/global/2671 +/.tmp/pgdata/global/2672 +/.tmp/pgdata/global/2676 +/.tmp/pgdata/global/2677 +/.tmp/pgdata/global/2694 +/.tmp/pgdata/global/2695 +/.tmp/pgdata/global/2697 +/.tmp/pgdata/global/2698 +/.tmp/pgdata/global/2846 +/.tmp/pgdata/global/2847 +/.tmp/pgdata/global/2964 +/.tmp/pgdata/global/2965 +/.tmp/pgdata/global/2966 +/.tmp/pgdata/global/2967 +/.tmp/pgdata/global/3592 +/.tmp/pgdata/global/3593 +/.tmp/pgdata/global/4060 +/.tmp/pgdata/global/4061 +/.tmp/pgdata/global/4177 +/.tmp/pgdata/global/4178 +/.tmp/pgdata/global/4183 +/.tmp/pgdata/global/4184 +/.tmp/pgdata/global/4185 +/.tmp/pgdata/global/4186 +/.tmp/pgdata/global/6000 +/.tmp/pgdata/global/6001 +/.tmp/pgdata/global/6002 +/.tmp/pgdata/global/6100 +/.tmp/pgdata/global/6114 +/.tmp/pgdata/global/6115 +/.tmp/pgdata/global/6243 +/.tmp/pgdata/global/6244 +/.tmp/pgdata/global/6245 +/.tmp/pgdata/global/6246 +/.tmp/pgdata/global/6247 +/.tmp/pgdata/global/6302 +/.tmp/pgdata/global/6303 +/.tmp/pgdata/global/config_exec_params +/.tmp/pgdata/global/pg_control +/.tmp/pgdata/global/pg_filenode.map +/.tmp/pgdata/global/pg_internal.init +/.tmp/pgdata/pg_logical/replorigin_checkpoint +/.tmp/pgdata/pg_multixact/members/0000 +/.tmp/pgdata/pg_multixact/offsets/0000 +/.tmp/pgdata/pg_subtrans/0000 +/.tmp/pgdata/pg_wal/000000010000000000000001 +/.tmp/pgdata/pg_wal/000000010000000000000002 +/.tmp/pgdata/pg_xact/0000 +/.tmp/pgdata/pg_hba.conf +/.tmp/pgdata/pg_ident.conf +/.tmp/pgdata/PG_VERSION +/.tmp/pgdata/postgresql.auto.conf +/.tmp/pgdata/postgresql.conf +/.tmp/pgdata/postmaster.opts +/.tmp/pgdata/postmaster.pid +/.tmp/config.override.toml +/.tmp/daily_rewards_manual.ps1 +/.tmp/pg.log +/.tmp/run_daily_rewards_test.ps1 +/.tmp/server.log diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..b12f7b93 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,11 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +/backend.iml +/modules.xml +/vcs.xml diff --git a/Cargo.lock b/Cargo.lock index d59d0b04..dc83d60d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -15,6 +15,7 @@ dependencies = [ "academy_core_coin_impl", "academy_core_config_impl", "academy_core_contact_impl", + "academy_core_daily_rewards_impl", "academy_core_finance_contracts", "academy_core_finance_impl", "academy_core_health_impl", @@ -68,6 +69,7 @@ dependencies = [ "academy_core_coin_contracts", "academy_core_config_contracts", "academy_core_contact_contracts", + "academy_core_daily_rewards_contracts", "academy_core_finance_contracts", "academy_core_health_contracts", "academy_core_heart_contracts", @@ -86,6 +88,7 @@ dependencies = [ "axum", "axum-extra", "base64 0.22.1", + "chrono", "futures", "mime", "regex", @@ -244,6 +247,45 @@ dependencies = [ "tracing", ] +[[package]] +name = "academy_core_daily_rewards_contracts" +version = "0.0.0" +dependencies = [ + "academy_models", + "anyhow", + "chrono", + "mockall", + "schemars", + "serde", + "serde_json", + "thiserror 2.0.17", +] + +[[package]] +name = "academy_core_daily_rewards_impl" +version = "0.0.0" +dependencies = [ + "academy_auth_contracts", + "academy_core_coin_contracts", + "academy_core_daily_rewards_contracts", + "academy_di", + "academy_models", + "academy_persistence_contracts", + "academy_shared_contracts", + "academy_utils", + "anyhow", + "bb8", + "bb8-postgres", + "chrono", + "mockall", + "serde", + "serde_json", + "tokio", + "tokio-postgres", + "tracing", + "uuid", +] + [[package]] name = "academy_core_finance_contracts" version = "0.0.0" @@ -650,6 +692,7 @@ dependencies = [ "hex", "lettre", "nutype", + "postgres-types", "regex", "schemars", "serde", @@ -668,7 +711,9 @@ dependencies = [ "chrono", "futures", "mockall", + "serde_json", "thiserror 2.0.17", + "uuid", ] [[package]] @@ -688,8 +733,11 @@ dependencies = [ "clorinde", "futures", "ouroboros", + "postgres-types", "pretty_assertions", + "serde_json", "tokio", + "tokio-postgres", "tracing", "uuid", ] @@ -2914,6 +2962,8 @@ dependencies = [ "fallible-iterator", "postgres-derive", "postgres-protocol", + "serde_core", + "serde_json", "uuid", ] @@ -3513,6 +3563,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" dependencies = [ + "chrono", "dyn-clone", "indexmap", "ref-cast", diff --git a/Cargo.toml b/Cargo.toml index 7b4eb4b9..cb33fec8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,6 +55,8 @@ academy_core_coin_contracts.path = "academy_core/coin/contracts" academy_core_coin_impl.path = "academy_core/coin/impl" academy_core_config_contracts.path = "academy_core/config/contracts" academy_core_config_impl.path = "academy_core/config/impl" +academy_core_daily_rewards_contracts.path = "academy_core/daily_rewards/contracts" +academy_core_daily_rewards_impl.path = "academy_core/daily_rewards/impl" academy_core_contact_contracts.path = "academy_core/contact/contracts" academy_core_contact_impl.path = "academy_core/contact/impl" academy_core_finance_contracts.path = "academy_core/finance/contracts" @@ -131,6 +133,7 @@ mockall = { version = "0.13.1", default-features = false } nutype = { version = "0.6.2", default-features = false, features = ["std", "regex", "serde", "schemars08"] } oauth2 = { version = "5.0.0", default-features = false, features = ["reqwest", "rustls-tls"] } pretty_assertions = { version = "1.4.1", default-features = false, features = ["std"] } +postgres-types = { version = "0.2.11", default-features = false, features = ["derive"] } proc-macro2 = { version = "1.0.103", default-features = false, features = ["proc-macro"] } quote = { version = "1.0.41", default-features = false, features = ["proc-macro"] } rand = { version = "0.9.2", default-features = false, features = ["thread_rng"] } @@ -138,7 +141,7 @@ regex = { version = "1.12.2", default-features = false } reqwest = { version = "0.12.24", default-features = false, features = ["http2", "rustls-tls", "json"] } rust_decimal = { version = "1.39.0", default-features = false, features = ["std", "serde-str"] } rust_decimal_macros = { version = "1.39.0", default-features = false } -schemars = { version = "0.9.0", default-features = false, features = ["derive", "preserve_order", "uuid1", "url2"] } +schemars = { version = "0.9.0", default-features = false, features = ["chrono04", "derive", "preserve_order", "uuid1", "url2"] } serde = { version = "1.0.228", default-features = false, features = ["derive", "std"] } serde_json = { version = "1.0.145", default-features = false, features = ["std"] } sha2 = { version = "0.10.9", default-features = false } diff --git a/academy/Cargo.toml b/academy/Cargo.toml index a48e9372..dc6e36e0 100644 --- a/academy/Cargo.toml +++ b/academy/Cargo.toml @@ -19,6 +19,7 @@ academy_config.workspace = true academy_core_coin_contracts.workspace = true academy_core_coin_impl.workspace = true academy_core_config_impl.workspace = true +academy_core_daily_rewards_impl.workspace = true academy_core_contact_impl.workspace = true academy_core_finance_contracts.workspace = true academy_core_finance_impl.workspace = true diff --git a/academy/src/commands/serve.rs b/academy/src/commands/serve.rs index ea7aedba..bfdc1c3b 100644 --- a/academy/src/commands/serve.rs +++ b/academy/src/commands/serve.rs @@ -8,7 +8,10 @@ use tracing::{info, warn}; use crate::{ cache, database, email, - environment::{ConfigProvider, Provider, types::RestServer}, + environment::{ + ConfigProvider, Provider, + types::{DailyRewardActivity, RestServer}, + }, }; pub async fn serve(config: Config) -> anyhow::Result<()> { @@ -55,7 +58,17 @@ pub async fn serve(config: Config) -> anyhow::Result<()> { email.ping().await?; let config_provider = ConfigProvider::new(&config)?; - let mut provider = Provider::new(config_provider, database, cache, email); + let activity_configs = config_provider.daily_reward_activity_configs(); + let daily_reward_activity = + DailyRewardActivity::new(activity_configs.skills, activity_configs.challenges).await?; + + let mut provider = Provider::new( + config_provider, + database, + cache, + email, + daily_reward_activity, + ); let server: RestServer = provider.provide(); server.serve().await diff --git a/academy/src/environment/mod.rs b/academy/src/environment/mod.rs index 3a351045..67ab470d 100644 --- a/academy/src/environment/mod.rs +++ b/academy/src/environment/mod.rs @@ -2,8 +2,13 @@ use std::{collections::HashMap, sync::Arc}; use academy_api_rest::{RestServerConfig, RestServerRealIpConfig}; use academy_auth_impl::AuthServiceConfig; -use academy_config::Config; +use academy_config::{Config, DailyRewardsPostgresConfig}; use academy_core_contact_impl::ContactFeatureConfig; +use academy_core_daily_rewards_impl::{ + ChallengesActivityConfig, DailyRewardActivityServiceImpl, + DailyRewardCoinsConfig as CoreDailyRewardCoinsConfig, DailyRewardFeatureConfig, + SkillsActivityConfig, +}; use academy_core_finance_impl::FinanceFeatureConfig; use academy_core_health_impl::HealthFeatureConfig; use academy_core_heart_impl::HeartFeatureConfig; @@ -24,16 +29,23 @@ use academy_shared_impl::{ totp::TotpServiceConfig, }; use anyhow::Context; -use types::{Cache, Database, Email}; +use types::{Cache, DailyRewardActivity, Database, Email}; pub mod types; +#[derive(Debug, Clone)] +pub struct DailyRewardActivityConfigs { + pub skills: Option, + pub challenges: Option, +} + provider! { /// The default provider, capable of providing all the dependencies pub Provider { database: Database, cache: Cache, email: Email, + daily_reward_activity: DailyRewardActivity, ..config: ConfigProvider { // API RestServerConfig, @@ -60,19 +72,28 @@ provider! { UserFeatureConfig, PaypalFeatureConfig, FinanceFeatureConfig, + DailyRewardFeatureConfig, HeartFeatureConfig, PremiumFeatureConfig, + DailyRewardActivityConfigs, } } } impl Provider { - pub fn new(config: ConfigProvider, database: Database, cache: Cache, email: Email) -> Self { + pub fn new( + config: ConfigProvider, + database: Database, + cache: Cache, + email: Email, + daily_reward_activity: DailyRewardActivity, + ) -> Self { Self { _cache: Default::default(), database, cache, email, + daily_reward_activity, config, } } @@ -90,7 +111,21 @@ impl Provider { .await .context("Failed to connect to email server")?; - Ok(Self::new(config_provider, database, cache, email)) + let activity_configs = config_provider.daily_reward_activity_configs(); + let daily_reward_activity = DailyRewardActivityServiceImpl::new( + activity_configs.skills, + activity_configs.challenges, + ) + .await + .context("Failed to initialise daily reward activity service")?; + + Ok(Self::new( + config_provider, + database, + cache, + email, + daily_reward_activity, + )) } } @@ -124,6 +159,8 @@ provider! { finance_feature_config: FinanceFeatureConfig, heart_feature_config: HeartFeatureConfig, premium_feature_config: PremiumFeatureConfig, + daily_reward_feature_config: DailyRewardFeatureConfig, + daily_reward_activity_configs: DailyRewardActivityConfigs, } } @@ -248,6 +285,31 @@ impl ConfigProvider { purchase_range: config.coin.purchase_min..=config.coin.purchase_max, }; + let daily_reward_feature_config = DailyRewardFeatureConfig { + enable: config.daily_rewards.enable, + coins: CoreDailyRewardCoinsConfig { + arrival: config.daily_rewards.coins.arrival, + lecture: config.daily_rewards.coins.lecture, + practice: config.daily_rewards.coins.practice, + lab: config.daily_rewards.coins.lab, + }, + cache_ttl: config.daily_rewards.cache_ttl.map(Into::into), + }; + + let daily_reward_activity_configs = DailyRewardActivityConfigs { + skills: config + .daily_rewards + .activity_sources + .skills + .as_ref() + .map(map_daily_rewards_source), + challenges: config + .daily_rewards + .activity_sources + .challenges + .as_ref() + .map(map_daily_rewards_source), + }; let finance_feature_config = FinanceFeatureConfig { vat_percent: config.finance.vat_percent, invoices_archive: config.finance.invoices_archive.clone().into(), @@ -293,11 +355,28 @@ impl ConfigProvider { session_feature_config, user_feature_config, paypal_feature_config, + daily_reward_feature_config, finance_feature_config, heart_feature_config, premium_feature_config, + daily_reward_activity_configs, }) } + + pub fn daily_reward_activity_configs(&self) -> DailyRewardActivityConfigs { + self.daily_reward_activity_configs.clone() + } +} + +fn map_daily_rewards_source(cfg: &DailyRewardsPostgresConfig) -> SkillsActivityConfig { + SkillsActivityConfig { + dsn: cfg.dsn.clone(), + max_connections: cfg.max_connections, + min_connections: cfg.min_connections, + acquire_timeout: cfg.acquire_timeout.into(), + idle_timeout: cfg.idle_timeout.map(Into::into), + max_lifetime: cfg.max_lifetime.map(Into::into), + } } #[cfg(test)] @@ -319,7 +398,16 @@ mod tests { let cache = ValkeyCache::dummy().await; let email = EmailServiceImpl::dummy().await; - let mut provider = Provider::new(config_provider, database, cache, email); + let daily_reward_activity = DailyRewardActivityServiceImpl::new(None, None) + .await + .unwrap(); + let mut provider = Provider::new( + config_provider, + database, + cache, + email, + daily_reward_activity, + ); let _: RestServer = provider.provide(); } } diff --git a/academy/src/environment/types.rs b/academy/src/environment/types.rs index a9bcb02b..7edc9c8e 100644 --- a/academy/src/environment/types.rs +++ b/academy/src/environment/types.rs @@ -8,6 +8,10 @@ use academy_cache_valkey::ValkeyCache; use academy_core_coin_impl::{CoinFeatureServiceImpl, coin::CoinServiceImpl}; use academy_core_config_impl::ConfigFeatureServiceImpl; use academy_core_contact_impl::ContactFeatureServiceImpl; +use academy_core_daily_rewards_impl::{ + DailyRewardActivityServiceImpl, + DailyRewardFeatureServiceImpl as CoreDailyRewardFeatureServiceImpl, +}; use academy_core_finance_impl::{ FinanceFeatureServiceImpl, coin::FinanceCoinServiceImpl, invoice::FinanceInvoiceServiceImpl, }; @@ -42,10 +46,10 @@ use academy_extern_impl::{ render::RenderApiServiceImpl, vat::VatApiServiceImpl, }; use academy_persistence_postgres::{ - PostgresDatabase, coin::PostgresCoinRepository, heart::PostgresHeartRepository, - mfa::PostgresMfaRepository, oauth2::PostgresOAuth2Repository, paypal::PostgresPaypalRepository, - premium::PostgresPremiumRepository, session::PostgresSessionRepository, - user::PostgresUserRepository, + PostgresDatabase, coin::PostgresCoinRepository, daily_rewards::PostgresDailyRewardRepository, + heart::PostgresHeartRepository, mfa::PostgresMfaRepository, oauth2::PostgresOAuth2Repository, + paypal::PostgresPaypalRepository, premium::PostgresPremiumRepository, + session::PostgresSessionRepository, user::PostgresUserRepository, }; use academy_shared_impl::{ captcha::CaptchaServiceImpl, fs::FsServiceImpl, hash::HashServiceImpl, id::IdServiceImpl, @@ -64,6 +68,7 @@ pub type RestServer = academy_api_rest::RestServer< MfaFeature, OAuth2Feature, CoinFeature, + DailyRewardFeature, PaypalFeature, FinanceFeature, HeartFeature, @@ -111,6 +116,7 @@ pub type CoinRepo = PostgresCoinRepository; pub type PaypalRepo = PostgresPaypalRepository; pub type HeartRepo = PostgresHeartRepository; pub type PremiumRepo = PostgresPremiumRepository; +pub type DailyRewardRepo = PostgresDailyRewardRepository; // Auth pub type Auth = @@ -231,4 +237,15 @@ pub type PremiumPlan = PremiumPlanServiceImpl; pub type Premium = PremiumServiceImpl; pub type PremiumPurchase = PremiumPurchaseServiceImpl; +pub type DailyRewardFeature = CoreDailyRewardFeatureServiceImpl< + Database, + Auth, + DailyRewardRepo, + Coin, + DailyRewardActivity, + Id, + Time, +>; +pub type DailyRewardActivity = DailyRewardActivityServiceImpl; + pub type Internal = InternalServiceImpl; diff --git a/academy_api/rest/Cargo.toml b/academy_api/rest/Cargo.toml index d5da0578..4bd9c195 100644 --- a/academy_api/rest/Cargo.toml +++ b/academy_api/rest/Cargo.toml @@ -13,6 +13,7 @@ workspace = true academy_assets.workspace = true academy_auth_contracts.workspace = true academy_core_coin_contracts.workspace = true +academy_core_daily_rewards_contracts.workspace = true academy_core_config_contracts.workspace = true academy_core_contact_contracts.workspace = true academy_core_finance_contracts.workspace = true @@ -41,6 +42,7 @@ axum.workspace = true base64.workspace = true futures.workspace = true mime.workspace = true +chrono.workspace = true regex.workspace = true schemars.workspace = true serde.workspace = true diff --git a/academy_api/rest/src/lib.rs b/academy_api/rest/src/lib.rs index 2147f96e..b028fbd5 100644 --- a/academy_api/rest/src/lib.rs +++ b/academy_api/rest/src/lib.rs @@ -6,6 +6,7 @@ use std::{ use academy_core_coin_contracts::CoinFeatureService; use academy_core_config_contracts::ConfigFeatureService; use academy_core_contact_contracts::ContactFeatureService; +use academy_core_daily_rewards_contracts::DailyRewardFeatureService; use academy_core_finance_contracts::FinanceFeatureService; use academy_core_health_contracts::HealthFeatureService; use academy_core_heart_contracts::HeartFeatureService; @@ -53,6 +54,7 @@ pub struct RestServer< Mfa, OAuth2, Coin, + DailyReward, Paypal, Finance, Heart, @@ -68,6 +70,7 @@ pub struct RestServer< mfa: Mfa, oauth2: OAuth2, coin: Coin, + daily_reward: DailyReward, paypal: Paypal, finance: Finance, heart: Heart, @@ -97,6 +100,7 @@ impl< Mfa, OAuth2, Coin, + DailyReward, Paypal, Finance, Heart, @@ -112,6 +116,7 @@ impl< Mfa, OAuth2, Coin, + DailyReward, Paypal, Finance, Heart, @@ -127,6 +132,7 @@ where Mfa: MfaFeatureService, OAuth2: OAuth2FeatureService, Coin: CoinFeatureService, + DailyReward: DailyRewardFeatureService, Paypal: PaypalFeatureService, Finance: FinanceFeatureService, Heart: HeartFeatureService, @@ -158,6 +164,7 @@ where routes::mfa::TAG, routes::oauth2::TAG, routes::coin::TAG, + routes::daily_rewards::TAG, routes::paypal::TAG, routes::finance::TAG, routes::heart::TAG, @@ -235,6 +242,7 @@ where .merge(routes::mfa::router(self.mfa.into())) .merge(routes::oauth2::router(self.oauth2.into())) .merge(routes::coin::router(self.coin.into())) + .merge(routes::daily_rewards::router(self.daily_reward.into())) .merge(routes::paypal::router(self.paypal.into())) .merge(routes::finance::router(self.finance.into())) .merge(routes::heart::router(self.heart.into())) diff --git a/academy_api/rest/src/models/daily_rewards.rs b/academy_api/rest/src/models/daily_rewards.rs new file mode 100644 index 00000000..3b3948ff --- /dev/null +++ b/academy_api/rest/src/models/daily_rewards.rs @@ -0,0 +1,126 @@ +use std::str::FromStr; + +use academy_core_daily_rewards_contracts::{ + DailyRewardCategory, DailyRewardClaimAllResponse as CoreClaimAllResponse, + DailyRewardClaimResponse as CoreClaimResponse, DailyRewardClaimSkip as CoreClaimSkip, + DailyRewardClaimSkipReason as CoreSkipReason, DailyRewardClaimSuccess as CoreClaimSuccess, +}; +use chrono::{DateTime, Utc}; +use schemars::JsonSchema; +use serde::{Deserialize, Deserializer, Serialize}; + +#[derive(Debug, Serialize, JsonSchema)] +pub struct ApiDailyRewardClaimResponse { + pub status: &'static str, + pub success: ApiDailyRewardClaimSuccess, +} + +impl ApiDailyRewardClaimResponse { + pub const STATUS_OK: &'static str = "ok"; +} + +impl From for ApiDailyRewardClaimResponse { + fn from(response: CoreClaimResponse) -> Self { + Self { + status: Self::STATUS_OK, + success: ApiDailyRewardClaimSuccess::from(response.success), + } + } +} + +#[derive(Debug, Serialize, JsonSchema)] +pub struct ApiDailyRewardClaimSuccess { + pub category: DailyRewardCategory, + pub coins: i32, + pub claimed_at: DateTime, +} + +impl From for ApiDailyRewardClaimSuccess { + fn from(success: CoreClaimSuccess) -> Self { + Self { + category: success.category, + coins: success.coins, + claimed_at: success.claimed_at, + } + } +} + +#[derive(Debug, Serialize, JsonSchema)] +pub struct ApiDailyRewardClaimAllResponse { + pub status: &'static str, + pub claimed: Vec, + pub skipped_categories: Vec, +} + +impl ApiDailyRewardClaimAllResponse { + pub const STATUS_OK: &'static str = "ok"; +} + +impl From for ApiDailyRewardClaimAllResponse { + fn from(response: CoreClaimAllResponse) -> Self { + let claimed = response + .claimed + .into_iter() + .map(ApiDailyRewardClaimSuccess::from) + .collect(); + let skipped = response + .skipped + .into_iter() + .map(ApiDailyRewardClaimSkip::from) + .collect(); + + Self { + status: Self::STATUS_OK, + claimed, + skipped_categories: skipped, + } + } +} + +#[derive(Debug, Serialize, JsonSchema)] +pub struct ApiDailyRewardClaimSkip { + pub category: DailyRewardCategory, + #[serde(rename = "reason")] + pub reason: ApiDailyRewardClaimSkipReason, +} + +#[derive(Debug, Serialize, JsonSchema)] +#[serde(rename_all = "snake_case")] +pub enum ApiDailyRewardClaimSkipReason { + Pending, + Unavailable, + AlreadyClaimed, + Error, +} + +impl From for ApiDailyRewardClaimSkip { + fn from(skip: CoreClaimSkip) -> Self { + Self { + category: skip.category, + reason: map_skip_reason(skip.reason), + } + } +} + +fn map_skip_reason(reason: CoreSkipReason) -> ApiDailyRewardClaimSkipReason { + match reason { + CoreSkipReason::Pending => ApiDailyRewardClaimSkipReason::Pending, + CoreSkipReason::Unavailable => ApiDailyRewardClaimSkipReason::Unavailable, + CoreSkipReason::AlreadyClaimed => ApiDailyRewardClaimSkipReason::AlreadyClaimed, + CoreSkipReason::Error => ApiDailyRewardClaimSkipReason::Error, + } +} + +#[derive(Debug, Deserialize, JsonSchema)] +pub struct PathDailyRewardCategory { + #[serde(deserialize_with = "deserialize_category")] + pub category: DailyRewardCategory, +} + +fn deserialize_category<'de, D>(deserializer: D) -> Result +where + D: Deserializer<'de>, +{ + let raw = String::deserialize(deserializer)?; + DailyRewardCategory::from_str(&raw).map_err(serde::de::Error::custom) +} diff --git a/academy_api/rest/src/models/mod.rs b/academy_api/rest/src/models/mod.rs index f291485d..9a93a0c2 100644 --- a/academy_api/rest/src/models/mod.rs +++ b/academy_api/rest/src/models/mod.rs @@ -8,6 +8,7 @@ use crate::const_schema; pub mod coin; pub mod contact; +pub mod daily_rewards; pub mod heart; pub mod oauth2; pub mod premium; diff --git a/academy_api/rest/src/routes/daily_rewards.rs b/academy_api/rest/src/routes/daily_rewards.rs new file mode 100644 index 00000000..9d1b64d2 --- /dev/null +++ b/academy_api/rest/src/routes/daily_rewards.rs @@ -0,0 +1,121 @@ +use std::sync::Arc; + +use academy_core_daily_rewards_contracts::{ + DailyRewardClaimAllError, DailyRewardClaimError, DailyRewardFeatureService, + DailyRewardGetError, DailyRewardsSnapshot, +}; +use aide::{ + axum::{ApiRouter, routing}, + transform::TransformOperation, +}; +use axum::{ + Json, + extract::{Path, State}, + http::StatusCode, + response::{IntoResponse, Response}, +}; + +use crate::{ + docs::TransformOperationExt, + error_code, + errors::{auth_error, auth_error_docs, internal_server_error, internal_server_error_docs}, + extractors::auth::ApiToken, + models::daily_rewards::{ + ApiDailyRewardClaimAllResponse, ApiDailyRewardClaimResponse, PathDailyRewardCategory, + }, +}; + +pub const TAG: &str = "DailyRewards"; + +pub fn router(service: Arc) -> ApiRouter<()> { + ApiRouter::new() + .api_route("/daily-rewards", routing::get_with(get, get_docs)) + .api_route( + "/daily-rewards/{category}/claim", + routing::post_with(claim, claim_docs), + ) + .api_route( + "/daily-rewards/claim-all", + routing::post_with(claim_all, claim_all_docs), + ) + .with_state(service) + .with_path_items(|op| op.tag(TAG)) +} + +async fn get( + State(service): State>, + token: ApiToken, +) -> Response { + match service.get_today(&token.0).await { + Ok(response) => Json(response.snapshot).into_response(), + Err(DailyRewardGetError::FeatureDisabled) => FeatureDisabledError.into_response(), + Err(DailyRewardGetError::Auth(err)) => auth_error(err), + Err(DailyRewardGetError::Other(err)) => internal_server_error(err), + } +} + +fn get_docs(op: TransformOperation) -> TransformOperation { + op.summary("Return the daily rewards snapshot for the authenticated user.") + .add_response::(StatusCode::OK, None) + .add_error::() + .with(auth_error_docs) + .with(internal_server_error_docs) +} + +async fn claim( + State(service): State>, + token: ApiToken, + Path(PathDailyRewardCategory { category }): Path, +) -> Response { + match service.claim(&token.0, category).await { + Ok(result) => Json(ApiDailyRewardClaimResponse::from(result)).into_response(), + Err(DailyRewardClaimError::FeatureDisabled) => FeatureDisabledError.into_response(), + Err(DailyRewardClaimError::Auth(err)) => auth_error(err), + Err(DailyRewardClaimError::NotReady) => RewardNotReadyError.into_response(), + Err(DailyRewardClaimError::Unavailable) => RewardUnavailableError.into_response(), + Err(DailyRewardClaimError::AlreadyClaimed) => RewardAlreadyClaimedError.into_response(), + Err(DailyRewardClaimError::Other(err)) => internal_server_error(err), + } +} + +fn claim_docs(op: TransformOperation) -> TransformOperation { + op.summary("Claim a single daily reward category.") + .add_response::(StatusCode::OK, None) + .add_error::() + .add_error::() + .add_error::() + .add_error::() + .with(auth_error_docs) + .with(internal_server_error_docs) +} + +async fn claim_all( + State(service): State>, + token: ApiToken, +) -> Response { + match service.claim_all(&token.0).await { + Ok(result) => Json(ApiDailyRewardClaimAllResponse::from(result)).into_response(), + Err(DailyRewardClaimAllError::FeatureDisabled) => FeatureDisabledError.into_response(), + Err(DailyRewardClaimAllError::Auth(err)) => auth_error(err), + Err(DailyRewardClaimAllError::Other(err)) => internal_server_error(err), + } +} + +fn claim_all_docs(op: TransformOperation) -> TransformOperation { + op.summary("Claim all available daily rewards.") + .add_response::(StatusCode::OK, None) + .add_error::() + .with(auth_error_docs) + .with(internal_server_error_docs) +} + +error_code! { + /// The daily rewards feature is disabled for this environment. + pub FeatureDisabledError(NOT_FOUND, "daily_rewards_feature_disabled"); + /// The reward cannot be claimed yet. + pub RewardNotReadyError(CONFLICT, "reward_not_ready"); + /// The reward is currently unavailable. + pub RewardUnavailableError(CONFLICT, "reward_unavailable"); + /// The reward has already been claimed. + pub RewardAlreadyClaimedError(CONFLICT, "reward_already_claimed"); +} diff --git a/academy_api/rest/src/routes/mod.rs b/academy_api/rest/src/routes/mod.rs index 4c68f943..0ed225a6 100644 --- a/academy_api/rest/src/routes/mod.rs +++ b/academy_api/rest/src/routes/mod.rs @@ -1,6 +1,7 @@ pub mod coin; pub mod config; pub mod contact; +pub mod daily_rewards; pub mod finance; pub mod health; pub mod heart; diff --git a/academy_config/src/lib.rs b/academy_config/src/lib.rs index 432d7f13..bf81ae2a 100644 --- a/academy_config/src/lib.rs +++ b/academy_config/src/lib.rs @@ -93,6 +93,7 @@ pub struct Config { pub vat: VatConfig, pub paypal: PaypalConfig, pub coin: CoinConfig, + pub daily_rewards: DailyRewardsConfig, pub heart: HeartConfig, pub premium: PremiumConfig, pub render: RenderConfig, @@ -224,6 +225,47 @@ pub struct CoinConfig { pub purchase_max: u64, } +#[derive(Debug, Deserialize)] +pub struct DailyRewardsConfig { + pub enable: bool, + pub coins: DailyRewardsCoinsConfig, + #[serde(default)] + pub cache_ttl: Option, + #[serde(default)] + pub activity_sources: DailyRewardsActivitySourcesConfig, +} + +#[derive(Debug, Deserialize)] +pub struct DailyRewardsCoinsConfig { + pub arrival: i32, + pub lecture: i32, + pub practice: i32, + pub lab: i32, +} + +#[derive(Debug, Default, Deserialize)] +pub struct DailyRewardsActivitySourcesConfig { + #[serde(default)] + pub skills: Option, + #[serde(default)] + pub challenges: Option, +} + +#[derive(Debug, Deserialize)] +pub struct DailyRewardsPostgresConfig { + pub dsn: String, + #[serde(default = "default_max_connections")] + pub max_connections: u32, + #[serde(default = "default_min_connections")] + pub min_connections: u32, + #[serde(default = "default_acquire_timeout")] + pub acquire_timeout: Duration, + #[serde(default)] + pub idle_timeout: Option, + #[serde(default)] + pub max_lifetime: Option, +} + #[derive(Debug, Deserialize)] pub struct HeartConfig { pub max: u64, @@ -276,6 +318,18 @@ pub struct OAuth2ProviderConfig { pub scopes: Vec, } +fn default_max_connections() -> u32 { + 5 +} + +fn default_min_connections() -> u32 { + 1 +} + +fn default_acquire_timeout() -> Duration { + Duration(std::time::Duration::from_secs(30)) +} + #[cfg(test)] mod tests { #[test] @@ -292,6 +346,11 @@ mod tests { "email.smtp_url = \"\"", "email.from = \"Test \"", "jwt.secret = \"\"", + "daily_rewards.enable = false", + "daily_rewards.coins.arrival = 20", + "daily_rewards.coins.lecture = 20", + "daily_rewards.coins.practice = 10", + "daily_rewards.coins.lab = 30", "contact.email = \"test@example.com\"", "recaptcha.sitekey = \"\"", "recaptcha.secret = \"\"", diff --git a/academy_core/daily_rewards/contracts/Cargo.toml b/academy_core/daily_rewards/contracts/Cargo.toml new file mode 100644 index 00000000..29fa0f31 --- /dev/null +++ b/academy_core/daily_rewards/contracts/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "academy_core_daily_rewards_contracts" +version.workspace = true +edition.workspace = true +publish.workspace = true +homepage.workspace = true +repository.workspace = true + +[lints] +workspace = true + +[features] +mock = ["dep:mockall"] + +[dependencies] +academy_models.workspace = true +anyhow.workspace = true +chrono.workspace = true +mockall = { workspace = true, optional = true } +schemars.workspace = true +serde.workspace = true +serde_json.workspace = true +thiserror.workspace = true diff --git a/academy_core/daily_rewards/contracts/src/lib.rs b/academy_core/daily_rewards/contracts/src/lib.rs new file mode 100644 index 00000000..7b7631e8 --- /dev/null +++ b/academy_core/daily_rewards/contracts/src/lib.rs @@ -0,0 +1,178 @@ +use std::future::Future; + +use academy_models::{ + auth::{AccessToken, AuthError}, + user::UserId, +}; +use chrono::{DateTime, NaiveDate, Utc}; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; +use serde_json::Value; +use thiserror::Error; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)] +#[serde(rename_all = "snake_case")] +pub enum DailyRewardStatus { + Pending, + Ready, + Claimed, + Unavailable, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)] +#[serde(rename_all = "snake_case")] +pub enum DailyRewardUnavailableReason { + NoRecommendation, + Unknown, +} + +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)] +pub struct DailyRewardItem { + pub category: DailyRewardCategory, + pub coins: i32, + pub status: DailyRewardStatus, + pub claimable_since: Option>, + pub last_detected_at: Option>, + pub claimed_at: Option>, + pub activity_sample: Option, + pub unavailable_reason: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)] +pub struct DailyRewardClaimTotals { + pub available_coins: i32, + pub claimed_today: i32, +} + +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)] +pub struct DailyRewardsSnapshot { + pub date_utc: NaiveDate, + pub feature_enabled: bool, + pub rewards: Vec, + pub claim_totals: DailyRewardClaimTotals, +} + +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)] +pub struct DailyRewardClaimSuccess { + pub category: DailyRewardCategory, + pub coins: i32, + pub claimed_at: DateTime, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)] +#[serde(rename_all = "snake_case")] +pub enum DailyRewardClaimSkipReason { + Pending, + Unavailable, + AlreadyClaimed, + Error, +} + +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)] +pub struct DailyRewardClaimSkip { + pub category: DailyRewardCategory, + pub reason: DailyRewardClaimSkipReason, +} + +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)] +pub struct DailyRewardClaimAllResponse { + pub claimed: Vec, + pub skipped: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)] +pub struct DailyRewardClaimResponse { + pub success: DailyRewardClaimSuccess, +} + +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)] +pub struct DailyRewardGetResponse { + pub snapshot: DailyRewardsSnapshot, +} + +#[derive(Debug, Error)] +pub enum DailyRewardGetError { + #[error(transparent)] + Auth(#[from] AuthError), + #[error("Daily rewards feature is disabled.")] + FeatureDisabled, + #[error(transparent)] + Other(#[from] anyhow::Error), +} + +#[derive(Debug, Error)] +pub enum DailyRewardClaimError { + #[error(transparent)] + Auth(#[from] AuthError), + #[error("Daily rewards feature is disabled.")] + FeatureDisabled, + #[error("Reward is not ready to claim.")] + NotReady, + #[error("Reward has already been claimed.")] + AlreadyClaimed, + #[error("Reward is currently unavailable.")] + Unavailable, + #[error(transparent)] + Other(#[from] anyhow::Error), +} + +#[derive(Debug, Error)] +pub enum DailyRewardClaimAllError { + #[error(transparent)] + Auth(#[from] AuthError), + #[error("Daily rewards feature is disabled.")] + FeatureDisabled, + #[error(transparent)] + Other(#[from] anyhow::Error), +} + +#[cfg_attr(feature = "mock", mockall::automock)] +pub trait DailyRewardFeatureService: Send + Sync + 'static { + fn get_today( + &self, + token: &AccessToken, + ) -> impl Future> + Send; + + fn claim( + &self, + token: &AccessToken, + category: DailyRewardCategory, + ) -> impl Future> + Send; + + fn claim_all( + &self, + token: &AccessToken, + ) -> impl Future> + Send; +} + +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)] +pub struct DailyRewardActivity { + pub first_detected_at: DateTime, + pub last_detected_at: DateTime, + pub activity_sample: Option, +} + +#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)] +pub struct DailyRewardActivityState { + pub detected: Option, + pub unavailable_reason: Option, +} + +#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)] +pub struct DailyRewardActivitySnapshot { + pub lecture: DailyRewardActivityState, + pub practice: DailyRewardActivityState, + pub lab: DailyRewardActivityState, +} + +#[cfg_attr(feature = "mock", mockall::automock)] +pub trait DailyRewardActivityService: Send + Sync + 'static { + fn detect( + &self, + user_id: UserId, + day_start: DateTime, + day_end: DateTime, + ) -> impl Future> + Send; +} + +pub use academy_models::daily_rewards::{DailyRewardCategory, DailyRewardEntry}; diff --git a/academy_core/daily_rewards/impl/Cargo.toml b/academy_core/daily_rewards/impl/Cargo.toml new file mode 100644 index 00000000..7c51d408 --- /dev/null +++ b/academy_core/daily_rewards/impl/Cargo.toml @@ -0,0 +1,40 @@ +[package] +name = "academy_core_daily_rewards_impl" +version.workspace = true +edition.workspace = true +publish.workspace = true +homepage.workspace = true +repository.workspace = true + +[lints] +workspace = true + +[dependencies] +academy_auth_contracts.workspace = true +academy_core_coin_contracts.workspace = true +academy_core_daily_rewards_contracts.workspace = true +academy_di.workspace = true +academy_models.workspace = true +academy_persistence_contracts.workspace = true +academy_shared_contracts.workspace = true +academy_utils.workspace = true +anyhow.workspace = true +bb8 = { version = "0.9.0", default-features = false } +bb8-postgres = { version = "0.9.0", default-features = false, features = ["with-chrono-0_4", "with-uuid-1", "with-serde_json-1"] } +chrono.workspace = true +serde.workspace = true +serde_json.workspace = true +tokio-postgres = { version = "0.7.15", features = ["with-chrono-0_4", "with-uuid-1", "with-serde_json-1"] } +tracing.workspace = true +uuid.workspace = true + +[dev-dependencies] +academy_auth_contracts = { workspace = true, features = ["mock"] } +academy_core_coin_contracts = { workspace = true, features = ["mock"] } +academy_core_daily_rewards_contracts = { workspace = true, features = ["mock"] } +academy_models.workspace = true +academy_persistence_contracts = { workspace = true, features = ["mock"] } +academy_shared_contracts = { workspace = true, features = ["mock"] } +serde_json.workspace = true +tokio.workspace = true +mockall.workspace = true diff --git a/academy_core/daily_rewards/impl/src/activity.rs b/academy_core/daily_rewards/impl/src/activity.rs new file mode 100644 index 00000000..2ce64f80 --- /dev/null +++ b/academy_core/daily_rewards/impl/src/activity.rs @@ -0,0 +1,273 @@ +use std::time::Duration; + +use academy_core_daily_rewards_contracts::{ + DailyRewardActivity, DailyRewardActivityService, DailyRewardActivitySnapshot, + DailyRewardUnavailableReason, +}; +use academy_models::user::UserId; +use anyhow::{Context, Result}; +use bb8::{Pool, PooledConnection}; +use bb8_postgres::PostgresConnectionManager; +use chrono::{DateTime, Utc}; +use serde_json::json; +use tokio_postgres::NoTls; +use tracing::warn; + +#[derive(Debug, Clone)] +pub struct PostgresActivityConfig { + pub dsn: String, + pub max_connections: u32, + pub min_connections: u32, + pub acquire_timeout: Duration, + pub idle_timeout: Option, + pub max_lifetime: Option, +} + +pub type SkillsActivityConfig = PostgresActivityConfig; +pub type ChallengesActivityConfig = PostgresActivityConfig; + +#[derive(Debug, Clone)] +pub struct DailyRewardActivityServiceImpl { + skills: Option, + challenges: Option, +} + +#[derive(Debug, Clone)] +struct ActivityPool { + pool: Pool>, +} + +type PgConnection<'a> = PooledConnection<'a, PostgresConnectionManager>; + +impl ActivityPool { + async fn new(config: &PostgresActivityConfig) -> Result { + let manager = PostgresConnectionManager::new(config.dsn.parse()?, NoTls); + let min_idle = (config.min_connections > 0).then_some(config.min_connections); + let pool = Pool::builder() + .max_size(config.max_connections) + .min_idle(min_idle) + .connection_timeout(config.acquire_timeout) + .idle_timeout(config.idle_timeout) + .max_lifetime(config.max_lifetime) + .build(manager) + .await?; + + Ok(Self { pool }) + } + + async fn connection(&self) -> Result> { + self.pool.get().await.map_err(Into::into) + } +} + +impl DailyRewardActivityServiceImpl { + pub async fn new( + skills: Option, + challenges: Option, + ) -> Result { + let skills_pool = match skills { + Some(ref cfg) => Some( + ActivityPool::new(cfg) + .await + .context("Failed to initialise skills activity pool")?, + ), + None => None, + }; + + let challenges_pool = match challenges { + Some(ref cfg) => Some( + ActivityPool::new(cfg) + .await + .context("Failed to initialise challenges activity pool")?, + ), + None => None, + }; + + Ok(Self { + skills: skills_pool, + challenges: challenges_pool, + }) + } +} + +impl DailyRewardActivityService for DailyRewardActivityServiceImpl { + async fn detect( + &self, + user_id: UserId, + day_start: DateTime, + day_end: DateTime, + ) -> Result { + let mut snapshot = DailyRewardActivitySnapshot::default(); + + if let Some(skills) = &self.skills { + match skills.connection().await { + Ok(conn) => match detect_lecture(&conn, user_id, day_start, day_end).await { + Ok(Some(activity)) => snapshot.lecture.detected = Some(activity), + Ok(None) => {} + Err(err) => { + warn!(error = %err, "Failed to detect lecture completion"); + snapshot.lecture.unavailable_reason = + Some(DailyRewardUnavailableReason::Unknown); + } + }, + Err(err) => { + warn!(error = %err, "Failed to acquire skills connection"); + snapshot.lecture.unavailable_reason = + Some(DailyRewardUnavailableReason::Unknown); + } + } + } + + if let Some(challenges) = &self.challenges { + match challenges.connection().await { + Ok(conn) => { + match detect_subtask( + &conn, + user_id, + day_start, + day_end, + &["matching", "multiple_choice_question", "question"], + ) + .await + { + Ok(Some(activity)) => snapshot.practice.detected = Some(activity), + Ok(None) => {} + Err(err) => { + warn!(error = %err, "Failed to detect practice completion"); + snapshot.practice.unavailable_reason = + Some(DailyRewardUnavailableReason::Unknown); + } + } + + match detect_subtask(&conn, user_id, day_start, day_end, &["coding_challenge"]) + .await + { + Ok(Some(activity)) => snapshot.lab.detected = Some(activity), + Ok(None) => {} + Err(err) => { + warn!(error = %err, "Failed to detect lab completion"); + snapshot.lab.unavailable_reason = + Some(DailyRewardUnavailableReason::Unknown); + } + } + } + Err(err) => { + warn!(error = %err, "Failed to acquire challenges connection"); + snapshot.practice.unavailable_reason = + Some(DailyRewardUnavailableReason::Unknown); + snapshot.lab.unavailable_reason = Some(DailyRewardUnavailableReason::Unknown); + } + } + } + + Ok(snapshot) + } +} + +async fn detect_lecture( + conn: &PgConnection<'_>, + user_id: UserId, + day_start: DateTime, + day_end: DateTime, +) -> Result> { + let first_row = conn + .query_opt( + "select course_id, lecture_id, completed \ + from skills_lecture_progress \ + where user_id = $1::uuid \ + and completed >= $2 \ + and completed < $3 \ + order by completed asc \ + limit 1", + &[&*user_id, &day_start, &day_end], + ) + .await?; + + let Some(first_row) = first_row else { + return Ok(None); + }; + + let last_completed = conn + .query_opt( + "select max(completed) as completed \ + from skills_lecture_progress \ + where user_id = $1::uuid \ + and completed >= $2 \ + and completed < $3", + &[&*user_id, &day_start, &day_end], + ) + .await? + .and_then(|row| row.get::<_, Option>>("completed")) + .unwrap_or_else(|| first_row.get::<_, DateTime>("completed")); + + let first_completed: DateTime = first_row.get("completed"); + let sample = json!({ + "course_id": first_row.get::<_, String>("course_id"), + "lecture_id": first_row.get::<_, String>("lecture_id"), + }); + + Ok(Some(DailyRewardActivity { + first_detected_at: first_completed, + last_detected_at: last_completed, + activity_sample: Some(sample), + })) +} + +async fn detect_subtask( + conn: &PgConnection<'_>, + user_id: UserId, + day_start: DateTime, + day_end: DateTime, + allowed_types: &[&str], +) -> Result> { + let first_row = conn + .query_opt( + "select cs.task_id, cs.ty, cus.subtask_id, cus.solved_timestamp \ + from challenges_user_subtasks cus \ + join challenges_subtasks cs on cs.id = cus.subtask_id \ + where cus.user_id = $1::uuid \ + and cus.solved_timestamp >= $2 \ + and cus.solved_timestamp < $3 \ + and cs.enabled is true \ + and cs.retired is false \ + and cs.ty = any($4) \ + order by cus.solved_timestamp asc \ + limit 1", + &[&*user_id, &day_start, &day_end, &allowed_types], + ) + .await?; + + let Some(first_row) = first_row else { + return Ok(None); + }; + + let last_solved = conn + .query_opt( + "select max(cus.solved_timestamp) as solved_timestamp \ + from challenges_user_subtasks cus \ + join challenges_subtasks cs on cs.id = cus.subtask_id \ + where cus.user_id = $1::uuid \ + and cus.solved_timestamp >= $2 \ + and cus.solved_timestamp < $3 \ + and cs.enabled is true \ + and cs.retired is false \ + and cs.ty = any($4)", + &[&*user_id, &day_start, &day_end, &allowed_types], + ) + .await? + .and_then(|row| row.get::<_, Option>>("solved_timestamp")) + .unwrap_or_else(|| first_row.get::<_, DateTime>("solved_timestamp")); + + let first_solved: DateTime = first_row.get("solved_timestamp"); + let sample = json!({ + "task_id": first_row.get::<_, String>("task_id"), + "subtask_id": first_row.get::<_, String>("subtask_id"), + "subtask_type": first_row.get::<_, String>("ty"), + }); + + Ok(Some(DailyRewardActivity { + first_detected_at: first_solved, + last_detected_at: last_solved, + activity_sample: Some(sample), + })) +} diff --git a/academy_core/daily_rewards/impl/src/lib.rs b/academy_core/daily_rewards/impl/src/lib.rs new file mode 100644 index 00000000..7a74c65e --- /dev/null +++ b/academy_core/daily_rewards/impl/src/lib.rs @@ -0,0 +1,12 @@ +mod activity; +mod service; + +#[cfg(test)] +mod tests; + +pub use activity::{ + ChallengesActivityConfig, DailyRewardActivityServiceImpl, SkillsActivityConfig, +}; +pub use service::{ + DailyRewardCoinsConfig, DailyRewardFeatureConfig, DailyRewardFeatureServiceImpl, +}; diff --git a/academy_core/daily_rewards/impl/src/service.rs b/academy_core/daily_rewards/impl/src/service.rs new file mode 100644 index 00000000..a63a19fc --- /dev/null +++ b/academy_core/daily_rewards/impl/src/service.rs @@ -0,0 +1,879 @@ +use std::{collections::HashMap, time::Duration}; + +use academy_auth_contracts::{AuthResultExt, AuthService}; +use academy_core_coin_contracts::coin::CoinService; +use academy_core_daily_rewards_contracts::{ + DailyRewardActivityService, DailyRewardActivitySnapshot, DailyRewardActivityState, + DailyRewardClaimAllError, DailyRewardClaimAllResponse, DailyRewardClaimError, + DailyRewardClaimResponse, DailyRewardClaimSkip, DailyRewardClaimSkipReason, + DailyRewardClaimSuccess, DailyRewardFeatureService, DailyRewardGetError, + DailyRewardGetResponse, DailyRewardItem, DailyRewardStatus, DailyRewardUnavailableReason, + DailyRewardsSnapshot, +}; +use academy_di::Build; +use academy_models::{ + auth::AccessToken, + coin::TransactionDescription, + daily_rewards::{DailyRewardCategory, DailyRewardEntry}, + user::UserId, +}; +use academy_persistence_contracts::{ + Database, Transaction, + daily_rewards::{ + DailyRewardEntryUpsert, DailyRewardMarkClaimed, DailyRewardMarkClaimedError, + DailyRewardMarkReady, DailyRewardRepository, + }, +}; +use academy_shared_contracts::{id::IdService, time::TimeService}; +use academy_utils::trace_instrument; +use anyhow::{Result, anyhow}; +use chrono::{DateTime, NaiveDate, NaiveTime, Utc}; +use tracing::{info, warn}; + +#[derive(Debug, Clone)] +pub struct DailyRewardCoinsConfig { + pub arrival: i32, + pub lecture: i32, + pub practice: i32, + pub lab: i32, +} + +impl DailyRewardCoinsConfig { + fn get(&self, category: DailyRewardCategory) -> i32 { + match category { + DailyRewardCategory::Arrival => self.arrival, + DailyRewardCategory::Lecture => self.lecture, + DailyRewardCategory::Practice => self.practice, + DailyRewardCategory::Lab => self.lab, + } + } +} + +#[derive(Debug, Clone)] +pub struct DailyRewardFeatureConfig { + pub enable: bool, + pub coins: DailyRewardCoinsConfig, + pub cache_ttl: Option, +} + +#[derive(Debug, Clone, Build)] +pub struct DailyRewardFeatureServiceImpl { + db: Db, + auth: Auth, + repo: Repo, + coin: Coin, + activity: Activity, + id: Id, + time: Time, + config: DailyRewardFeatureConfig, +} + +pub(crate) struct RefreshedRewards { + pub(crate) entries: HashMap, + pub(crate) unavailability: HashMap>, +} + +impl DailyRewardFeatureService + for DailyRewardFeatureServiceImpl +where + Db: Database, + Auth: AuthService, + Repo: DailyRewardRepository, + Coin: CoinService, + Activity: DailyRewardActivityService, + Id: IdService, + Time: TimeService, +{ + #[trace_instrument(skip(self))] + async fn get_today( + &self, + token: &AccessToken, + ) -> Result { + if !self.config.enable { + return Err(DailyRewardGetError::FeatureDisabled); + } + + let auth = self.auth.authenticate(token).await.map_auth_err()?; + let user_id = auth.user_id; + + let now = self.time.now(); + let date = now.date_naive(); + let day_start = start_of_day_utc(date); + let day_end = day_start + chrono::Duration::days(1); + + let mut txn = self + .db + .begin_transaction() + .await + .map_err(DailyRewardGetError::Other)?; + + let refreshed = self + .refresh_entries(&mut txn, user_id, date, day_start, day_end) + .await + .map_err(DailyRewardGetError::Other)?; + + txn.commit().await.map_err(DailyRewardGetError::Other)?; + + let snapshot = build_snapshot(date, refreshed); + self.emit_view_event(user_id, &snapshot); + + Ok(DailyRewardGetResponse { snapshot }) + } + + #[trace_instrument(skip(self))] + async fn claim( + &self, + token: &AccessToken, + category: DailyRewardCategory, + ) -> Result { + if !self.config.enable { + return Err(DailyRewardClaimError::FeatureDisabled); + } + + let auth = self.auth.authenticate(token).await.map_auth_err()?; + let user_id = auth.user_id; + + let now = self.time.now(); + let date = now.date_naive(); + let day_start = start_of_day_utc(date); + let day_end = day_start + chrono::Duration::days(1); + let coins = self.config.coins.get(category); + + let mut txn = self + .db + .begin_transaction() + .await + .map_err(DailyRewardClaimError::Other)?; + + let refreshed = self + .refresh_entries(&mut txn, user_id, date, day_start, day_end) + .await + .map_err(DailyRewardClaimError::Other)?; + + let entry = refreshed.entries.get(&category).ok_or_else(|| { + DailyRewardClaimError::Other(anyhow!("Reward entry missing for category {category}")) + })?; + + if entry.claimed_at.is_some() { + return Err(DailyRewardClaimError::AlreadyClaimed); + } + + if entry.claimable_since.is_none() { + if refreshed + .unavailability + .get(&category) + .and_then(|r| *r) + .is_some() + { + return Err(DailyRewardClaimError::Unavailable); + } + return Err(DailyRewardClaimError::NotReady); + } + + let mark_params = DailyRewardMarkClaimed { + user_id, + date_utc: date, + category, + claimed_at: now, + }; + + let updated_entry = self + .repo + .mark_claimed(&mut txn, mark_params) + .await + .map_err(|err| map_claim_error(err, category))?; + + let description = TransactionDescription::try_from(format!("Daily reward - {}", category)) + .map(Some) + .map_err(|err| DailyRewardClaimError::Other(err.into()))?; + + self.coin + .add_coins(&mut txn, user_id, coins as i64, false, description, false) + .await + .map_err(|err| DailyRewardClaimError::Other(err.into()))?; + + let claimed_entry = updated_entry.clone(); + let claimed_at = claimed_entry.claimed_at.unwrap_or(now); + + txn.commit().await.map_err(DailyRewardClaimError::Other)?; + + self.emit_claim_event(user_id, category, coins, claimed_at, &claimed_entry); + + Ok(DailyRewardClaimResponse { + success: DailyRewardClaimSuccess { + category, + coins, + claimed_at, + }, + }) + } + + #[trace_instrument(skip(self))] + async fn claim_all( + &self, + token: &AccessToken, + ) -> Result { + if !self.config.enable { + return Err(DailyRewardClaimAllError::FeatureDisabled); + } + + let auth = self.auth.authenticate(token).await.map_auth_err()?; + let user_id = auth.user_id; + + let now = self.time.now(); + let date = now.date_naive(); + let day_start = start_of_day_utc(date); + let day_end = day_start + chrono::Duration::days(1); + + let mut txn = self + .db + .begin_transaction() + .await + .map_err(DailyRewardClaimAllError::Other)?; + + let refreshed = self + .refresh_entries(&mut txn, user_id, date, day_start, day_end) + .await + .map_err(DailyRewardClaimAllError::Other)?; + + let mut claimed = Vec::new(); + let mut skipped = Vec::new(); + let mut claimed_entries = Vec::new(); + + for category in DailyRewardCategory::ALL { + let coins = self.config.coins.get(category); + let entry = match refreshed.entries.get(&category) { + Some(entry) => entry, + None => { + skipped.push(DailyRewardClaimSkip { + category, + reason: DailyRewardClaimSkipReason::Error, + }); + continue; + } + }; + + if entry.claimed_at.is_some() { + skipped.push(DailyRewardClaimSkip { + category, + reason: DailyRewardClaimSkipReason::AlreadyClaimed, + }); + continue; + } + + if entry.claimable_since.is_none() { + let reason = refreshed + .unavailability + .get(&category) + .and_then(|r| *r) + .map(|_| DailyRewardClaimSkipReason::Unavailable) + .unwrap_or(DailyRewardClaimSkipReason::Pending); + + skipped.push(DailyRewardClaimSkip { category, reason }); + continue; + } + + let mark_params = DailyRewardMarkClaimed { + user_id, + date_utc: date, + category, + claimed_at: now, + }; + + match self.repo.mark_claimed(&mut txn, mark_params).await { + Ok(updated_entry) => { + let description = + TransactionDescription::try_from(format!("Daily reward - {}", category)) + .map(Some) + .map_err(|err| DailyRewardClaimAllError::Other(err.into()))?; + + if let Err(err) = self + .coin + .add_coins(&mut txn, user_id, coins as i64, false, description, false) + .await + { + return Err(DailyRewardClaimAllError::Other(err.into())); + } + + let claimed_at = updated_entry.claimed_at.unwrap_or(now); + claimed.push(DailyRewardClaimSuccess { + category, + coins, + claimed_at, + }); + claimed_entries.push((category, coins, claimed_at, updated_entry)); + } + Err(DailyRewardMarkClaimedError::NotReady) => { + skipped.push(DailyRewardClaimSkip { + category, + reason: DailyRewardClaimSkipReason::Pending, + }); + } + Err(DailyRewardMarkClaimedError::AlreadyClaimed) => { + skipped.push(DailyRewardClaimSkip { + category, + reason: DailyRewardClaimSkipReason::AlreadyClaimed, + }); + } + Err(DailyRewardMarkClaimedError::NotFound) => { + skipped.push(DailyRewardClaimSkip { + category, + reason: DailyRewardClaimSkipReason::Error, + }); + } + Err(DailyRewardMarkClaimedError::Other(err)) => { + return Err(DailyRewardClaimAllError::Other(err)); + } + } + } + + txn.commit() + .await + .map_err(DailyRewardClaimAllError::Other)?; + + for (category, coins, claimed_at, entry) in &claimed_entries { + self.emit_claim_event(user_id, *category, *coins, *claimed_at, entry); + } + self.emit_claim_all_event(user_id, &claimed, &skipped); + + Ok(DailyRewardClaimAllResponse { claimed, skipped }) + } +} + +impl + DailyRewardFeatureServiceImpl +{ + fn emit_view_event(&self, user_id: UserId, snapshot: &DailyRewardsSnapshot) { + let ready_categories = snapshot + .rewards + .iter() + .filter(|reward| matches!(reward.status, DailyRewardStatus::Ready)) + .map(|reward| reward.category.as_str()) + .collect::>(); + let unavailable_categories = snapshot + .rewards + .iter() + .filter(|reward| matches!(reward.status, DailyRewardStatus::Unavailable)) + .map(|reward| reward.category.as_str()) + .collect::>(); + + info!( + event = "daily_reward.viewed", + user_id = ?user_id, + date = %snapshot.date_utc, + available_coins = snapshot.claim_totals.available_coins, + claimed_today = snapshot.claim_totals.claimed_today, + ready_categories = ?ready_categories, + unavailable_categories = ?unavailable_categories, + feature_enabled = snapshot.feature_enabled, + ); + } + + fn emit_claim_event( + &self, + user_id: UserId, + category: DailyRewardCategory, + coins: i32, + claimed_at: DateTime, + entry: &DailyRewardEntry, + ) { + info!( + event = "daily_reward.claimed", + user_id = ?user_id, + category = %category, + coins, + claimed_at = %claimed_at, + date = %entry.date_utc, + first_detected_at = ?entry.first_detected_at, + last_detected_at = ?entry.last_detected_at, + claimable_since = ?entry.claimable_since, + activity_sample = ?entry.activity_sample, + ); + } + + fn emit_claim_all_event( + &self, + user_id: UserId, + claimed: &[DailyRewardClaimSuccess], + skipped: &[DailyRewardClaimSkip], + ) { + let claimed_categories = claimed + .iter() + .map(|success| success.category.as_str()) + .collect::>(); + let skipped_details = skipped + .iter() + .map(|skip| (skip.category.as_str(), skip.reason)) + .collect::>(); + let total_claimed_coins: i32 = claimed.iter().map(|success| success.coins).sum(); + + info!( + event = "daily_reward.claim_all", + user_id = ?user_id, + total_claimed_coins, + claimed_categories = ?claimed_categories, + skipped = ?skipped_details, + ); + } + + fn emit_category_ready_event( + &self, + user_id: UserId, + category: DailyRewardCategory, + entry: &DailyRewardEntry, + ) { + info!( + event = "daily_reward.category_ready", + user_id = ?user_id, + category = %category, + coins = entry.coins, + date = %entry.date_utc, + first_detected_at = ?entry.first_detected_at, + last_detected_at = ?entry.last_detected_at, + claimable_since = ?entry.claimable_since, + activity_sample = ?entry.activity_sample, + ); + } +} + +#[cfg(test)] +impl + DailyRewardFeatureServiceImpl +{ + pub(crate) fn new_for_tests( + db: Db, + auth: Auth, + repo: Repo, + coin: Coin, + activity: Activity, + id: Id, + time: Time, + config: DailyRewardFeatureConfig, + ) -> Self { + Self { + db, + auth, + repo, + coin, + activity, + id, + time, + config, + } + } +} + +fn start_of_day_utc(date: NaiveDate) -> DateTime { + date.and_time(NaiveTime::MIN).and_utc() +} + +fn map_claim_error( + err: DailyRewardMarkClaimedError, + category: DailyRewardCategory, +) -> DailyRewardClaimError { + match err { + DailyRewardMarkClaimedError::NotReady => DailyRewardClaimError::NotReady, + DailyRewardMarkClaimedError::AlreadyClaimed => DailyRewardClaimError::AlreadyClaimed, + DailyRewardMarkClaimedError::NotFound => { + DailyRewardClaimError::Other(anyhow!("Reward entry not found for {category}")) + } + DailyRewardMarkClaimedError::Other(err) => DailyRewardClaimError::Other(err), + } +} + +pub(crate) fn build_snapshot( + date: NaiveDate, + refreshed: RefreshedRewards, +) -> DailyRewardsSnapshot { + let mut rewards = Vec::new(); + let mut available_total = 0; + let mut claimed_total = 0; + + for category in DailyRewardCategory::ALL { + if let Some(entry) = refreshed.entries.get(&category) { + let unavailable_reason = refreshed.unavailability.get(&category).copied().flatten(); + let status = determine_status(entry, unavailable_reason); + + if entry.claimable_since.is_some() && entry.claimed_at.is_none() { + available_total += entry.coins; + } + + if let Some(claimed_at) = entry.claimed_at { + if claimed_at.date_naive() == date { + claimed_total += entry.coins; + } + } + + rewards.push(DailyRewardItem { + category, + coins: entry.coins, + status, + claimable_since: entry.claimable_since, + last_detected_at: entry.last_detected_at, + claimed_at: entry.claimed_at, + activity_sample: entry.activity_sample.clone(), + unavailable_reason, + }); + } + } + + DailyRewardsSnapshot { + date_utc: date, + feature_enabled: true, + rewards, + claim_totals: academy_core_daily_rewards_contracts::DailyRewardClaimTotals { + available_coins: available_total, + claimed_today: claimed_total, + }, + } +} + +fn determine_status( + entry: &DailyRewardEntry, + unavailable: Option, +) -> DailyRewardStatus { + if entry.claimed_at.is_some() { + DailyRewardStatus::Claimed + } else if entry.claimable_since.is_some() { + DailyRewardStatus::Ready + } else if unavailable.is_some() { + DailyRewardStatus::Unavailable + } else { + DailyRewardStatus::Pending + } +} + +impl + DailyRewardFeatureServiceImpl +where + Db: Database, + Repo: DailyRewardRepository, + Activity: DailyRewardActivityService, + Id: IdService, + Time: TimeService, +{ + async fn refresh_entries( + &self, + txn: &mut Db::Transaction, + user_id: UserId, + date: NaiveDate, + day_start: DateTime, + day_end: DateTime, + ) -> Result { + let mut entries = self.repo.list_by_user_and_date(txn, user_id, date).await?; + + let mut map: HashMap = entries + .drain(..) + .map(|entry| (entry.category, entry)) + .collect(); + + for category in DailyRewardCategory::ALL { + let coins = self.config.coins.get(category); + let maybe_entry = map.get(&category).cloned(); + let entry = match maybe_entry { + Some(entry) if entry.claimed_at.is_some() => entry, + Some(entry) if entry.coins == coins => entry, + Some(entry) => { + let params = DailyRewardEntryUpsert { + id: entry.id, + user_id, + date_utc: date, + category, + coins, + }; + self.repo.upsert_entry(txn, params).await? + } + None => { + let new_id: uuid::Uuid = self.id.generate(); + let params = DailyRewardEntryUpsert { + id: new_id, + user_id, + date_utc: date, + category, + coins, + }; + self.repo.upsert_entry(txn, params).await? + } + }; + map.insert(category, entry); + } + + if let Some(entry) = map.get(&DailyRewardCategory::Arrival).cloned() { + let was_ready = entry.claimable_since.is_some(); + if entry.claimable_since.is_none() && entry.claimed_at.is_none() { + let now = self.time.now(); + let params = DailyRewardMarkReady { + user_id, + date_utc: date, + category: DailyRewardCategory::Arrival, + first_detected_at: Some(now), + last_detected_at: Some(now), + claimable_since: Some(now), + activity_sample: None, + }; + let updated = self.repo.mark_ready(txn, params).await?; + if !was_ready && updated.claimable_since.is_some() { + self.emit_category_ready_event(user_id, DailyRewardCategory::Arrival, &updated); + } + map.insert(DailyRewardCategory::Arrival, updated); + } + } + + let activity = self + .activity + .detect(user_id, day_start, day_end) + .await + .unwrap_or_else(|err| { + warn!(error = %err, "Failed to fetch activity data"); + DailyRewardActivitySnapshot::default() + }); + + if apply_activity( + txn, + user_id, + date, + DailyRewardCategory::Lecture, + &activity.lecture, + &self.repo, + &mut map, + ) + .await? + { + if let Some(entry) = map.get(&DailyRewardCategory::Lecture) { + self.emit_category_ready_event(user_id, DailyRewardCategory::Lecture, entry); + } + } + if apply_activity( + txn, + user_id, + date, + DailyRewardCategory::Practice, + &activity.practice, + &self.repo, + &mut map, + ) + .await? + { + if let Some(entry) = map.get(&DailyRewardCategory::Practice) { + self.emit_category_ready_event(user_id, DailyRewardCategory::Practice, entry); + } + } + if apply_activity( + txn, + user_id, + date, + DailyRewardCategory::Lab, + &activity.lab, + &self.repo, + &mut map, + ) + .await? + { + if let Some(entry) = map.get(&DailyRewardCategory::Lab) { + self.emit_category_ready_event(user_id, DailyRewardCategory::Lab, entry); + } + } + + let mut unavailability = HashMap::new(); + unavailability.insert( + DailyRewardCategory::Lecture, + activity.lecture.unavailable_reason, + ); + unavailability.insert( + DailyRewardCategory::Practice, + activity.practice.unavailable_reason, + ); + unavailability.insert(DailyRewardCategory::Lab, activity.lab.unavailable_reason); + unavailability.insert(DailyRewardCategory::Arrival, None); + + Ok(RefreshedRewards { + entries: map, + unavailability, + }) + } +} + +async fn apply_activity( + txn: &mut Txn, + user_id: UserId, + date: NaiveDate, + category: DailyRewardCategory, + state: &DailyRewardActivityState, + repo: &Repo, + map: &mut HashMap, +) -> Result +where + Repo: DailyRewardRepository, + Txn: Transaction, +{ + let Some(activity) = &state.detected else { + return Ok(false); + }; + + let was_ready = map + .get(&category) + .and_then(|entry| entry.claimable_since) + .is_some(); + + let params = DailyRewardMarkReady { + user_id, + date_utc: date, + category, + first_detected_at: Some(activity.first_detected_at), + last_detected_at: Some(activity.last_detected_at), + claimable_since: Some(activity.first_detected_at), + activity_sample: activity.activity_sample.clone(), + }; + + let updated = repo.mark_ready(txn, params).await?; + let is_ready = updated.claimable_since.is_some(); + map.insert(category, updated); + Ok(!was_ready && is_ready) +} + +#[cfg(test)] +mod refresh_entries_tests { + use super::*; + use crate::DailyRewardFeatureConfig; + use academy_auth_contracts::MockAuthService; + use academy_core_coin_contracts::coin::MockCoinService; + use academy_core_daily_rewards_contracts::DailyRewardActivitySnapshot; + use academy_core_daily_rewards_contracts::MockDailyRewardActivityService; + use academy_persistence_contracts::{ + MockDatabase, MockTransaction, + daily_rewards::MockDailyRewardRepository, + }; + use academy_shared_contracts::{id::MockIdService, time::MockTimeService}; + use chrono::TimeZone; + use mockall::predicate; + use std::future; + + fn claimed_entry( + user_id: UserId, + date: NaiveDate, + claimed_at: DateTime, + coins: i32, + ) -> DailyRewardEntry { + let detected_at = claimed_at - chrono::Duration::minutes(5); + DailyRewardEntry { + id: uuid::Uuid::new_v4(), + user_id, + date_utc: date, + category: DailyRewardCategory::Arrival, + coins, + first_detected_at: Some(detected_at), + last_detected_at: Some(detected_at), + claimable_since: Some(detected_at), + claimed_at: Some(claimed_at), + activity_sample: None, + created_at: claimed_at, + updated_at: claimed_at, + } + } + + fn entry( + user_id: UserId, + category: DailyRewardCategory, + date: NaiveDate, + coins: i32, + ) -> DailyRewardEntry { + DailyRewardEntry { + id: uuid::Uuid::new_v4(), + user_id, + date_utc: date, + category, + coins, + first_detected_at: None, + last_detected_at: None, + claimable_since: None, + claimed_at: None, + activity_sample: None, + created_at: Utc::now(), + updated_at: Utc::now(), + } + } + + #[tokio::test] + async fn refresh_entries_keeps_claimed_coin_amounts() { + let user_id = UserId::from(uuid::Uuid::new_v4()); + let date = NaiveDate::from_ymd_opt(2025, 11, 1).unwrap(); + let day_start = date.and_hms_opt(0, 0, 0).unwrap().and_utc(); + let day_end = day_start + chrono::Duration::days(1); + let claimed_at = Utc.with_ymd_and_hms(2025, 11, 1, 8, 0, 0).unwrap(); + + let arrival_entry = claimed_entry(user_id.clone(), date, claimed_at, 20); + let lecture_entry = entry(user_id.clone(), DailyRewardCategory::Lecture, date, 20); + let practice_entry = entry(user_id.clone(), DailyRewardCategory::Practice, date, 10); + let lab_entry = entry(user_id.clone(), DailyRewardCategory::Lab, date, 30); + + let entries = vec![ + arrival_entry.clone(), + lecture_entry, + practice_entry, + lab_entry, + ]; + + let mut repo = MockDailyRewardRepository::new(); + { + let entries = entries.clone(); + repo.expect_list_by_user_and_date() + .once() + .with( + predicate::always(), + predicate::eq(user_id.clone()), + predicate::eq(date), + ) + .return_once(move |_, _, _| Box::pin(future::ready(Ok(entries)))); + } + repo.expect_upsert_entry().never(); + + let mut activity = MockDailyRewardActivityService::new(); + let expected_day_start = day_start; + let expected_day_end = day_end; + activity + .expect_detect() + .once() + .with( + predicate::eq(user_id.clone()), + predicate::eq(expected_day_start), + predicate::eq(expected_day_end), + ) + .return_once(|_, _, _| { + Box::pin(future::ready(Ok(DailyRewardActivitySnapshot::default()))) + }); + + let sut = DailyRewardFeatureServiceImpl::new_for_tests( + MockDatabase::new(), + MockAuthService::::new(), + repo, + MockCoinService::::new(), + activity, + MockIdService::new(), + MockTimeService::new(), + DailyRewardFeatureConfig { + enable: true, + coins: DailyRewardCoinsConfig { + arrival: 5, + lecture: 20, + practice: 10, + lab: 30, + }, + cache_ttl: None, + }, + ); + + let mut txn = MockTransaction::new(); + + let refreshed = sut + .refresh_entries(&mut txn, user_id.clone(), date, day_start, day_end) + .await + .unwrap(); + + let stored_arrival = refreshed + .entries + .get(&DailyRewardCategory::Arrival) + .expect("arrival entry missing"); + assert_eq!(stored_arrival.coins, 20); + assert_eq!(stored_arrival.claimed_at, Some(claimed_at)); + } +} diff --git a/academy_core/daily_rewards/impl/src/tests/claim.rs b/academy_core/daily_rewards/impl/src/tests/claim.rs new file mode 100644 index 00000000..d77ae8e0 --- /dev/null +++ b/academy_core/daily_rewards/impl/src/tests/claim.rs @@ -0,0 +1,233 @@ +use std::future; + +use academy_auth_contracts::{Authentication, MockAuthService}; +use academy_core_coin_contracts::coin::MockCoinService; +use academy_core_daily_rewards_contracts::{ + DailyRewardActivitySnapshot, DailyRewardClaimError, DailyRewardFeatureService, + MockDailyRewardActivityService, +}; +use academy_models::{ + Sha256Hash, + auth::AccessToken, + coin::Balance, + coin::TransactionDescription, + daily_rewards::{DailyRewardCategory, DailyRewardEntry}, + session::{SessionId, SessionRefreshTokenHash}, + user::UserId, +}; +use academy_persistence_contracts::{ + MockDatabase, MockTransaction, + daily_rewards::{DailyRewardMarkClaimed, MockDailyRewardRepository}, +}; +use academy_shared_contracts::{id::MockIdService, time::MockTimeService}; +use chrono::{DateTime, Duration as ChronoDuration, NaiveDate, TimeZone, Utc}; +use mockall::predicate; +use uuid::Uuid; + +use crate::DailyRewardFeatureServiceImpl; + +fn make_entry( + category: DailyRewardCategory, + coins: i32, + date: NaiveDate, + claimable_since: Option>, + claimed_at: Option>, +) -> DailyRewardEntry { + DailyRewardEntry { + id: Uuid::new_v4(), + user_id: UserId::from(Uuid::new_v4()), + date_utc: date, + category, + coins, + first_detected_at: claimable_since, + last_detected_at: claimable_since, + claimable_since, + claimed_at, + activity_sample: None, + created_at: Utc::now(), + updated_at: Utc::now(), + } +} + +fn auth_service(user_id: UserId) -> MockAuthService { + let mut auth = MockAuthService::new(); + auth.expect_authenticate() + .once() + .with(predicate::eq(AccessToken::new("token"))) + .return_once(move |_| { + Box::pin(future::ready(Ok(Authentication { + user_id, + session_id: SessionId::from(Uuid::new_v4()), + refresh_token_hash: SessionRefreshTokenHash::new(Sha256Hash::default()), + admin: false, + email_verified: true, + }))) + }); + auth +} + +fn activity_service() -> MockDailyRewardActivityService { + let mut activity = MockDailyRewardActivityService::new(); + activity + .expect_detect() + .once() + .return_once(|_, _, _| Box::pin(future::ready(Ok(DailyRewardActivitySnapshot::default())))); + activity +} + +fn base_entries(user_id: UserId, date: NaiveDate, now: DateTime) -> [DailyRewardEntry; 4] { + [ + DailyRewardEntry { + user_id, + ..make_entry( + DailyRewardCategory::Arrival, + 20, + date, + Some(now - ChronoDuration::hours(1)), + None, + ) + }, + DailyRewardEntry { + user_id, + ..make_entry( + DailyRewardCategory::Lecture, + 20, + date, + Some(now - ChronoDuration::minutes(10)), + None, + ) + }, + DailyRewardEntry { + user_id, + ..make_entry(DailyRewardCategory::Practice, 10, date, None, None) + }, + DailyRewardEntry { + user_id, + ..make_entry(DailyRewardCategory::Lab, 30, date, None, None) + }, + ] +} + +#[tokio::test] +async fn claim_success() { + // Arrange + let user_id = UserId::from(Uuid::new_v4()); + let date = NaiveDate::from_ymd_opt(2025, 11, 1).unwrap(); + let now = Utc.with_ymd_and_hms(2025, 11, 1, 12, 0, 0).unwrap(); + + let entries_array = base_entries(user_id, date, now); + let lecture_entry = entries_array[1].clone(); + let entries_vec = Vec::from(entries_array); + + let mut repo = MockDailyRewardRepository::new(); + repo.expect_list_by_user_and_date() + .once() + .with( + predicate::always(), + predicate::eq(user_id), + predicate::eq(date), + ) + .return_once(move |_, _, _| Box::pin(future::ready(Ok(entries_vec)))); + + let lecture_for_claim = lecture_entry.clone(); + repo.expect_mark_claimed() + .once() + .with( + predicate::always(), + predicate::function(move |params: &DailyRewardMarkClaimed| { + params.user_id == user_id + && params.category == DailyRewardCategory::Lecture + && params.date_utc == date + }), + ) + .return_once(move |_, params| { + let mut updated = lecture_for_claim; + updated.claimed_at = Some(params.claimed_at); + Box::pin(future::ready(Ok(updated))) + }); + + let description = + TransactionDescription::try_from("Daily reward - lecture".to_string()).unwrap(); + let coin = MockCoinService::new().with_add_coins( + user_id, + 20, + false, + Some(description), + false, + Ok(Balance::default()), + ); + + let db = MockDatabase::build(true); + let auth = auth_service(user_id); + let activity = activity_service(); + let time = MockTimeService::new().with_now(now); + + let sut = DailyRewardFeatureServiceImpl::new_for_tests( + db, + auth, + repo, + coin, + activity, + MockIdService::new(), + time, + Default::default(), + ); + + // Act + let result = sut + .claim(&AccessToken::new("token"), DailyRewardCategory::Lecture) + .await + .unwrap(); + + // Assert + assert_eq!(result.success.category, DailyRewardCategory::Lecture); + assert_eq!(result.success.coins, 20); + assert_eq!(result.success.claimed_at, now); +} + +#[tokio::test] +async fn claim_already_claimed() { + // Arrange + let user_id = UserId::from(Uuid::new_v4()); + let date = NaiveDate::from_ymd_opt(2025, 11, 1).unwrap(); + let now = Utc.with_ymd_and_hms(2025, 11, 1, 12, 0, 0).unwrap(); + + let mut entries = base_entries(user_id, date, now); + entries[1].claimed_at = Some(now - ChronoDuration::minutes(5)); + let entries_vec = Vec::from(entries); + + let mut repo = MockDailyRewardRepository::new(); + repo.expect_list_by_user_and_date() + .once() + .with( + predicate::always(), + predicate::eq(user_id), + predicate::eq(date), + ) + .return_once(move |_, _, _| Box::pin(future::ready(Ok(entries_vec)))); + + let db = MockDatabase::build(false); + let auth = auth_service(user_id); + let activity = activity_service(); + let time = MockTimeService::new().with_now(now); + + let coin = MockCoinService::new(); + let sut = DailyRewardFeatureServiceImpl::new_for_tests( + db, + auth, + repo, + coin, + activity, + MockIdService::new(), + time, + Default::default(), + ); + + // Act + let result = sut + .claim(&AccessToken::new("token"), DailyRewardCategory::Lecture) + .await; + + // Assert + assert!(matches!(result, Err(DailyRewardClaimError::AlreadyClaimed))); +} diff --git a/academy_core/daily_rewards/impl/src/tests/mod.rs b/academy_core/daily_rewards/impl/src/tests/mod.rs new file mode 100644 index 00000000..64e18ea8 --- /dev/null +++ b/academy_core/daily_rewards/impl/src/tests/mod.rs @@ -0,0 +1,19 @@ +use crate::{DailyRewardCoinsConfig, DailyRewardFeatureConfig}; + +pub mod claim; +pub mod snapshot; + +impl Default for DailyRewardFeatureConfig { + fn default() -> Self { + Self { + enable: true, + coins: DailyRewardCoinsConfig { + arrival: 20, + lecture: 20, + practice: 10, + lab: 30, + }, + cache_ttl: None, + } + } +} diff --git a/academy_core/daily_rewards/impl/src/tests/snapshot.rs b/academy_core/daily_rewards/impl/src/tests/snapshot.rs new file mode 100644 index 00000000..be1d0c21 --- /dev/null +++ b/academy_core/daily_rewards/impl/src/tests/snapshot.rs @@ -0,0 +1,162 @@ +use std::collections::HashMap; + +use academy_core_daily_rewards_contracts::{DailyRewardStatus, DailyRewardUnavailableReason}; +use academy_models::daily_rewards::{DailyRewardCategory, DailyRewardEntry}; +use chrono::{NaiveDate, TimeZone, Utc}; +use uuid::Uuid; + +use crate::service::{RefreshedRewards, build_snapshot}; + +fn entry( + category: DailyRewardCategory, + coins: i32, + date: NaiveDate, + claimable_since: Option>, + claimed_at: Option>, +) -> DailyRewardEntry { + DailyRewardEntry { + id: Uuid::new_v4(), + user_id: Uuid::new_v4().into(), + date_utc: date, + category, + coins, + first_detected_at: claimable_since, + last_detected_at: claimable_since, + claimable_since, + claimed_at, + activity_sample: None, + created_at: Utc::now(), + updated_at: Utc::now(), + } +} + +#[test] +fn build_snapshot_assigns_statuses_and_totals() { + let date = NaiveDate::from_ymd_opt(2025, 11, 1).unwrap(); + let ready_time = Utc.with_ymd_and_hms(2025, 11, 1, 7, 15, 0).unwrap(); + let claimed_time = Utc.with_ymd_and_hms(2025, 11, 1, 6, 0, 0).unwrap(); + + let mut entries = HashMap::new(); + entries.insert( + DailyRewardCategory::Arrival, + entry(DailyRewardCategory::Arrival, 20, date, None, None), + ); + entries.insert( + DailyRewardCategory::Lecture, + entry( + DailyRewardCategory::Lecture, + 20, + date, + Some(claimed_time - chrono::Duration::minutes(5)), + Some(claimed_time), + ), + ); + entries.insert( + DailyRewardCategory::Practice, + entry(DailyRewardCategory::Practice, 10, date, None, None), + ); + entries.insert( + DailyRewardCategory::Lab, + entry(DailyRewardCategory::Lab, 30, date, Some(ready_time), None), + ); + + let mut unavailability = HashMap::new(); + unavailability.insert(DailyRewardCategory::Arrival, None); + unavailability.insert(DailyRewardCategory::Lecture, None); + unavailability.insert( + DailyRewardCategory::Practice, + Some(DailyRewardUnavailableReason::NoRecommendation), + ); + unavailability.insert(DailyRewardCategory::Lab, None); + + let refreshed = RefreshedRewards { + entries, + unavailability, + }; + + let snapshot = build_snapshot(date, refreshed); + + let arrival = snapshot + .rewards + .iter() + .find(|reward| reward.category == DailyRewardCategory::Arrival) + .unwrap(); + let lecture = snapshot + .rewards + .iter() + .find(|reward| reward.category == DailyRewardCategory::Lecture) + .unwrap(); + let practice = snapshot + .rewards + .iter() + .find(|reward| reward.category == DailyRewardCategory::Practice) + .unwrap(); + let lab = snapshot + .rewards + .iter() + .find(|reward| reward.category == DailyRewardCategory::Lab) + .unwrap(); + + assert_eq!(arrival.status, DailyRewardStatus::Pending); + assert_eq!(lecture.status, DailyRewardStatus::Claimed); + assert_eq!(practice.status, DailyRewardStatus::Unavailable); + assert_eq!(lab.status, DailyRewardStatus::Ready); + assert_eq!(snapshot.claim_totals.available_coins, 30); + assert_eq!(snapshot.claim_totals.claimed_today, 20); +} + +#[test] +fn build_snapshot_uses_entry_coin_amounts() { + let date = NaiveDate::from_ymd_opt(2025, 11, 2).unwrap(); + let ready_time = Utc.with_ymd_and_hms(2025, 11, 2, 9, 0, 0).unwrap(); + let claimed_time = Utc.with_ymd_and_hms(2025, 11, 2, 8, 0, 0).unwrap(); + + let mut entries = HashMap::new(); + entries.insert( + DailyRewardCategory::Arrival, + entry( + DailyRewardCategory::Arrival, + 20, + date, + Some(claimed_time - chrono::Duration::minutes(15)), + Some(claimed_time), + ), + ); + entries.insert( + DailyRewardCategory::Lab, + entry( + DailyRewardCategory::Lab, + 7, + date, + Some(ready_time), + None, + ), + ); + + let mut unavailability = HashMap::new(); + unavailability.insert(DailyRewardCategory::Arrival, None); + unavailability.insert(DailyRewardCategory::Lab, None); + + let refreshed = RefreshedRewards { + entries, + unavailability, + }; + + let snapshot = build_snapshot(date, refreshed); + + let arrival = snapshot + .rewards + .iter() + .find(|reward| reward.category == DailyRewardCategory::Arrival) + .unwrap(); + let lab = snapshot + .rewards + .iter() + .find(|reward| reward.category == DailyRewardCategory::Lab) + .unwrap(); + + assert_eq!(arrival.coins, 20); + assert_eq!(lab.coins, 7); + assert_eq!(snapshot.claim_totals.claimed_today, 20); + assert_eq!(snapshot.claim_totals.available_coins, 7); +} diff --git a/academy_models/Cargo.toml b/academy_models/Cargo.toml index 9059ae9c..d48db335 100644 --- a/academy_models/Cargo.toml +++ b/academy_models/Cargo.toml @@ -19,9 +19,10 @@ nutype.workspace = true regex.workspace = true schemars.workspace = true serde.workspace = true +serde_json.workspace = true thiserror.workspace = true url.workspace = true uuid.workspace = true +postgres-types.workspace = true [dev-dependencies] -serde_json.workspace = true diff --git a/academy_models/src/daily_rewards.rs b/academy_models/src/daily_rewards.rs new file mode 100644 index 00000000..52a6d18b --- /dev/null +++ b/academy_models/src/daily_rewards.rs @@ -0,0 +1,144 @@ +use std::{fmt, str::FromStr}; + +use postgres_types::private::BytesMut; +use postgres_types::{FromSql, IsNull, ToSql, Type}; + +use chrono::{DateTime, NaiveDate, Utc}; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; +use serde_json::Value; +use thiserror::Error; +use uuid::Uuid; + +use crate::user::UserId; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)] +#[serde(rename_all = "snake_case")] +pub enum DailyRewardCategory { + Arrival, + Lecture, + Practice, + Lab, +} + +impl DailyRewardCategory { + pub const ALL: [Self; 4] = [Self::Arrival, Self::Lecture, Self::Practice, Self::Lab]; + + pub fn as_str(&self) -> &'static str { + match self { + Self::Arrival => "arrival", + Self::Lecture => "lecture", + Self::Practice => "practice", + Self::Lab => "lab", + } + } +} + +impl fmt::Display for DailyRewardCategory { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.write_str(self.as_str()) + } +} + +#[derive(Debug, Error)] +#[error("Unknown daily reward category: {0}")] +pub struct ParseDailyRewardCategoryError(String); + +impl FromStr for DailyRewardCategory { + type Err = ParseDailyRewardCategoryError; + + fn from_str(value: &str) -> Result { + match value { + "arrival" => Ok(Self::Arrival), + "lecture" => Ok(Self::Lecture), + "practice" => Ok(Self::Practice), + "lab" => Ok(Self::Lab), + other => Err(ParseDailyRewardCategoryError(other.into())), + } + } +} + +impl TryFrom<&str> for DailyRewardCategory { + type Error = ParseDailyRewardCategoryError; + + fn try_from(value: &str) -> Result { + Self::from_str(value) + } +} + +impl ToSql for DailyRewardCategory { + fn to_sql( + &self, + ty: &Type, + out: &mut BytesMut, + ) -> Result> { + if ty.name() != "daily_reward_category" { + return Err(format!( + "DailyRewardCategory does not support Postgres type {}.{}", + ty.schema(), + ty.name() + ) + .into()); + } + + out.extend_from_slice(self.as_str().as_bytes()); + Ok(IsNull::No) + } + + fn accepts(ty: &Type) -> bool { + ty.name() == "daily_reward_category" + } + + postgres_types::to_sql_checked!(); +} + +impl<'a> FromSql<'a> for DailyRewardCategory { + fn from_sql( + ty: &Type, + raw: &'a [u8], + ) -> Result> { + if ty.name() != "daily_reward_category" { + return Err(format!( + "DailyRewardCategory does not support Postgres type {}.{}", + ty.schema(), + ty.name() + ) + .into()); + } + + let value = std::str::from_utf8(raw)?; + DailyRewardCategory::from_str(value).map_err(|err| Box::new(err) as _) + } + + fn accepts(ty: &Type) -> bool { + ty.name() == "daily_reward_category" + } +} + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)] +pub struct DailyRewardEntry { + pub id: Uuid, + pub user_id: UserId, + pub date_utc: NaiveDate, + pub category: DailyRewardCategory, + pub coins: i32, + pub first_detected_at: Option>, + pub last_detected_at: Option>, + pub claimable_since: Option>, + pub claimed_at: Option>, + pub activity_sample: Option, + pub created_at: DateTime, + pub updated_at: DateTime, +} + +impl DailyRewardEntry { + #[must_use] + pub fn is_ready(&self) -> bool { + self.claimable_since.is_some() && self.claimed_at.is_none() + } + + #[must_use] + pub fn is_claimed(&self) -> bool { + self.claimed_at.is_some() + } +} diff --git a/academy_models/src/lib.rs b/academy_models/src/lib.rs index a488e94b..6c46f941 100644 --- a/academy_models/src/lib.rs +++ b/academy_models/src/lib.rs @@ -8,6 +8,7 @@ use serde::{Deserialize, Serialize}; pub mod auth; pub mod coin; pub mod contact; +pub mod daily_rewards; pub mod email_address; pub mod heart; mod macros; diff --git a/academy_persistence/contracts/Cargo.toml b/academy_persistence/contracts/Cargo.toml index 7c518c9b..de021852 100644 --- a/academy_persistence/contracts/Cargo.toml +++ b/academy_persistence/contracts/Cargo.toml @@ -18,4 +18,6 @@ anyhow.workspace = true chrono.workspace = true futures.workspace = true mockall = { workspace = true, optional = true } +serde_json.workspace = true thiserror.workspace = true +uuid.workspace = true diff --git a/academy_persistence/contracts/src/daily_rewards.rs b/academy_persistence/contracts/src/daily_rewards.rs new file mode 100644 index 00000000..d15792b2 --- /dev/null +++ b/academy_persistence/contracts/src/daily_rewards.rs @@ -0,0 +1,78 @@ +use std::future::Future; + +use academy_models::{ + daily_rewards::{DailyRewardCategory, DailyRewardEntry}, + user::UserId, +}; +use chrono::{DateTime, NaiveDate, Utc}; +use serde_json::Value; +use thiserror::Error; +use uuid::Uuid; + +#[derive(Debug, Clone)] +pub struct DailyRewardEntryUpsert { + pub id: Uuid, + pub user_id: UserId, + pub date_utc: NaiveDate, + pub category: DailyRewardCategory, + pub coins: i32, +} + +#[derive(Debug, Clone)] +pub struct DailyRewardMarkReady { + pub user_id: UserId, + pub date_utc: NaiveDate, + pub category: DailyRewardCategory, + pub first_detected_at: Option>, + pub last_detected_at: Option>, + pub claimable_since: Option>, + pub activity_sample: Option, +} + +#[derive(Debug, Clone)] +pub struct DailyRewardMarkClaimed { + pub user_id: UserId, + pub date_utc: NaiveDate, + pub category: DailyRewardCategory, + pub claimed_at: DateTime, +} + +#[derive(Debug, Error)] +pub enum DailyRewardMarkClaimedError { + #[error("Daily reward is not yet ready to claim.")] + NotReady, + #[error("Daily reward already claimed.")] + AlreadyClaimed, + #[error("Daily reward entry not found.")] + NotFound, + #[error(transparent)] + Other(#[from] anyhow::Error), +} + +#[cfg_attr(feature = "mock", mockall::automock)] +pub trait DailyRewardRepository: Send + Sync + 'static { + fn list_by_user_and_date( + &self, + txn: &mut Txn, + user_id: UserId, + date_utc: NaiveDate, + ) -> impl Future>> + Send; + + fn upsert_entry( + &self, + txn: &mut Txn, + params: DailyRewardEntryUpsert, + ) -> impl Future> + Send; + + fn mark_ready( + &self, + txn: &mut Txn, + params: DailyRewardMarkReady, + ) -> impl Future> + Send; + + fn mark_claimed( + &self, + txn: &mut Txn, + params: DailyRewardMarkClaimed, + ) -> impl Future> + Send; +} diff --git a/academy_persistence/contracts/src/lib.rs b/academy_persistence/contracts/src/lib.rs index e3de7bcf..a1e62730 100644 --- a/academy_persistence/contracts/src/lib.rs +++ b/academy_persistence/contracts/src/lib.rs @@ -1,6 +1,7 @@ use std::future::Future; pub mod coin; +pub mod daily_rewards; pub mod heart; pub mod mfa; pub mod oauth2; diff --git a/academy_persistence/postgres/Cargo.toml b/academy_persistence/postgres/Cargo.toml index 96beddd6..f5776ec9 100644 --- a/academy_persistence/postgres/Cargo.toml +++ b/academy_persistence/postgres/Cargo.toml @@ -19,13 +19,16 @@ academy_persistence_contracts.workspace = true academy_utils.workspace = true anyhow.workspace = true bb8 = { version = "0.9.0", default-features = false } -bb8-postgres = { version = "0.9.0", default-features = false, features = ["with-chrono-0_4", "with-uuid-1"] } +bb8-postgres = { version = "0.9.0", default-features = false, features = ["with-chrono-0_4", "with-uuid-1", "with-serde_json-1"] } chrono.workspace = true clorinde.path = "./clorinde" futures.workspace = true ouroboros = { version = "0.18.5", default-features = false } +serde_json.workspace = true tracing.workspace = true uuid.workspace = true +tokio-postgres = { version = "0.7.15", default-features = false, features = ["with-chrono-0_4", "with-uuid-1", "with-serde_json-1"] } +postgres-types = { workspace = true, features = ["with-serde_json-1", "with-chrono-0_4", "with-uuid-1"] } [dev-dependencies] academy_config.workspace = true diff --git a/academy_persistence/postgres/migrations/2025-10-31-130000_create_daily_reward_entries/down.sql b/academy_persistence/postgres/migrations/2025-10-31-130000_create_daily_reward_entries/down.sql new file mode 100644 index 00000000..1cfd31c0 --- /dev/null +++ b/academy_persistence/postgres/migrations/2025-10-31-130000_create_daily_reward_entries/down.sql @@ -0,0 +1,4 @@ +drop index if exists daily_reward_entries_claimable_idx; +drop index if exists daily_reward_entries_user_date_category_idx; +drop table if exists daily_reward_entries; +drop type if exists daily_reward_category; diff --git a/academy_persistence/postgres/migrations/2025-10-31-130000_create_daily_reward_entries/up.sql b/academy_persistence/postgres/migrations/2025-10-31-130000_create_daily_reward_entries/up.sql new file mode 100644 index 00000000..0e2699e9 --- /dev/null +++ b/academy_persistence/postgres/migrations/2025-10-31-130000_create_daily_reward_entries/up.sql @@ -0,0 +1,22 @@ +create type daily_reward_category as enum ('arrival', 'lecture', 'practice', 'lab'); + +create table daily_reward_entries ( + id uuid primary key, + user_id uuid not null references users(id) on delete cascade, + date_utc date not null, + category daily_reward_category not null, + coins integer not null check (coins >= 0), + first_detected_at timestamptz, + last_detected_at timestamptz, + claimable_since timestamptz, + claimed_at timestamptz, + activity_sample jsonb, + created_at timestamptz not null default now(), + updated_at timestamptz not null default now(), + constraint chk_claimable_since check (claimable_since is null or first_detected_at is not null), + constraint chk_claimed_at check (claimed_at is null or claimable_since is not null) +); + +create unique index daily_reward_entries_user_date_category_idx on daily_reward_entries (user_id, date_utc, category); +create index daily_reward_entries_claimable_idx on daily_reward_entries (user_id, date_utc) where claimable_since is not null and claimed_at is null; + diff --git a/academy_persistence/postgres/src/daily_rewards.rs b/academy_persistence/postgres/src/daily_rewards.rs new file mode 100644 index 00000000..41702e67 --- /dev/null +++ b/academy_persistence/postgres/src/daily_rewards.rs @@ -0,0 +1,226 @@ +use academy_di::Build; +use academy_models::{ + daily_rewards::{DailyRewardCategory, DailyRewardEntry}, + user::UserId, +}; +use academy_persistence_contracts::daily_rewards::{ + DailyRewardEntryUpsert, DailyRewardMarkClaimed, DailyRewardMarkClaimedError, + DailyRewardMarkReady, DailyRewardRepository, +}; +use academy_utils::trace_instrument; +use anyhow::anyhow; +use bb8_postgres::tokio_postgres::Row; +use chrono::{DateTime, FixedOffset, NaiveDate, Utc}; +use postgres_types::Json; +use serde_json::Value; + +use crate::PostgresTransaction; + +#[derive(Debug, Clone, Build)] +pub struct PostgresDailyRewardRepository; + +impl PostgresDailyRewardRepository { + fn map_entry(row: Row) -> anyhow::Result { + let map_ts = |value: Option>| value.map(|dt| dt.with_timezone(&Utc)); + + Ok(DailyRewardEntry { + id: row.try_get("id")?, + user_id: row.try_get::<_, uuid::Uuid>("user_id")?.into(), + date_utc: row.try_get("date_utc")?, + category: row.try_get("category")?, + coins: row.try_get("coins")?, + first_detected_at: map_ts( + row.try_get::<_, Option>>("first_detected_at")?, + ), + last_detected_at: map_ts( + row.try_get::<_, Option>>("last_detected_at")?, + ), + claimable_since: map_ts( + row.try_get::<_, Option>>("claimable_since")?, + ), + claimed_at: map_ts(row.try_get::<_, Option>>("claimed_at")?), + activity_sample: row + .try_get::<_, Option>>("activity_sample")? + .map(|json| json.0), + created_at: row + .try_get::<_, DateTime>("created_at")? + .with_timezone(&Utc), + updated_at: row + .try_get::<_, DateTime>("updated_at")? + .with_timezone(&Utc), + }) + } + + async fn get_entry( + txn: &mut PostgresTransaction, + user_id: UserId, + date_utc: NaiveDate, + category: DailyRewardCategory, + ) -> anyhow::Result> { + let row = txn + .txn() + .query_opt( + r#" +select * +from daily_reward_entries +where user_id = $1 + and date_utc = $2 + and category = $3::daily_reward_category +"#, + &[&*user_id, &date_utc, &category], + ) + .await?; + + row.map(Self::map_entry).transpose() + } +} + +impl DailyRewardRepository for PostgresDailyRewardRepository { + #[trace_instrument(skip(self, txn))] + async fn list_by_user_and_date( + &self, + txn: &mut PostgresTransaction, + user_id: UserId, + date_utc: NaiveDate, + ) -> anyhow::Result> { + let rows = txn + .txn() + .query( + r#" +select * +from daily_reward_entries +where user_id = $1 + and date_utc = $2 +order by category asc +"#, + &[&*user_id, &date_utc], + ) + .await?; + + rows.into_iter().map(Self::map_entry).collect() + } + + #[trace_instrument(skip(self, txn))] + async fn upsert_entry( + &self, + txn: &mut PostgresTransaction, + params: DailyRewardEntryUpsert, + ) -> anyhow::Result { + let row = txn + .txn() + .query_one( + r#" +insert into daily_reward_entries (id, user_id, date_utc, category, coins) +values ($1, $2, $3, $4::daily_reward_category, $5) +on conflict (user_id, date_utc, category) +do update set coins = excluded.coins, updated_at = now() +returning * +"#, + &[ + ¶ms.id, + &*params.user_id, + ¶ms.date_utc, + ¶ms.category, + ¶ms.coins, + ], + ) + .await?; + + Self::map_entry(row) + } + + #[trace_instrument(skip(self, txn))] + async fn mark_ready( + &self, + txn: &mut PostgresTransaction, + params: DailyRewardMarkReady, + ) -> anyhow::Result { + let activity_sample: Option> = params.activity_sample.as_ref().map(Json); + let row = txn + .txn() + .query_one( + r#" +update daily_reward_entries + set first_detected_at = coalesce(first_detected_at, $4::timestamptz), + last_detected_at = case + when $5::timestamptz is null then last_detected_at + when last_detected_at is null then $5::timestamptz + else greatest(last_detected_at, $5::timestamptz) + end, + claimable_since = coalesce(claimable_since, $6::timestamptz), + activity_sample = coalesce($7::jsonb, activity_sample), + updated_at = now() +where user_id = $1 + and date_utc = $2 + and category = $3::daily_reward_category +returning * +"#, + &[ + &*params.user_id, + ¶ms.date_utc, + ¶ms.category, + ¶ms.first_detected_at, + ¶ms.last_detected_at, + ¶ms.claimable_since, + &activity_sample, + ], + ) + .await?; + + Self::map_entry(row) + } + + #[trace_instrument(skip(self, txn))] + async fn mark_claimed( + &self, + txn: &mut PostgresTransaction, + params: DailyRewardMarkClaimed, + ) -> Result { + let row = txn + .txn() + .query_opt( + r#" +update daily_reward_entries + set claimed_at = $4, + updated_at = $4 + where user_id = $1 + and date_utc = $2 + and category = $3::daily_reward_category + and claimable_since is not null + and claimed_at is null +returning * +"#, + &[ + &*params.user_id, + ¶ms.date_utc, + ¶ms.category, + ¶ms.claimed_at, + ], + ) + .await + .map_err(|err| DailyRewardMarkClaimedError::Other(err.into()))?; + + if let Some(row) = row { + return Self::map_entry(row).map_err(DailyRewardMarkClaimedError::Other); + } + + let existing = Self::get_entry(txn, params.user_id, params.date_utc, params.category) + .await + .map_err(DailyRewardMarkClaimedError::Other)?; + + match existing { + None => Err(DailyRewardMarkClaimedError::NotFound), + Some(entry) => { + if entry.claimable_since.is_none() { + Err(DailyRewardMarkClaimedError::NotReady) + } else if entry.claimed_at.is_some() { + Err(DailyRewardMarkClaimedError::AlreadyClaimed) + } else { + Err(DailyRewardMarkClaimedError::Other(anyhow!( + "Failed to claim reward due to unknown row state" + ))) + } + } + } + } +} diff --git a/academy_persistence/postgres/src/lib.rs b/academy_persistence/postgres/src/lib.rs index 666a4137..3827b503 100644 --- a/academy_persistence/postgres/src/lib.rs +++ b/academy_persistence/postgres/src/lib.rs @@ -11,8 +11,8 @@ use bb8_postgres::{ }; use ouroboros::self_referencing; use tracing::trace; - pub mod coin; +pub mod daily_rewards; pub mod heart; pub mod mfa; pub mod oauth2; @@ -20,7 +20,6 @@ pub mod paypal; pub mod premium; pub mod session; pub mod user; - type PgClient = tokio_postgres::Client; type PgPooledConnection = PooledConnection<'static, PostgresConnectionManager>; type PgTransaction<'a> = tokio_postgres::Transaction<'a>; diff --git a/config.dev.toml b/config.dev.toml index f27bc748..63e9b221 100644 --- a/config.dev.toml +++ b/config.dev.toml @@ -15,6 +15,16 @@ from = "Bootstrap Academy DEV " [jwt] secret = "changeme" +[daily_rewards] +enable = true +cache_ttl = "5m" + +[daily_rewards.coins] +arrival = 20 +lecture = 20 +practice = 10 +lab = 30 + [session] access_token_ttl = "1d" diff --git a/config.toml b/config.toml index 6e08226e..d5c05764 100644 --- a/config.toml +++ b/config.toml @@ -28,6 +28,16 @@ max_lifetime = "30m" # secret = "" download_token_ttl = "10m" +[daily_rewards] +enable = true +cache_ttl = "5m" + +[daily_rewards.coins] +arrival = 20 +lecture = 20 +practice = 10 +lab = 30 + [internal] jwt_ttl = "10s" diff --git a/dump.rdb b/dump.rdb new file mode 100644 index 0000000000000000000000000000000000000000..978d8ad569cf947f8ee513b593be4c802fbf047f GIT binary patch literal 88 zcmWG?b@2=~FfcUw#aWb^l3A=b%7 literal 0 HcmV?d00001 From f4d94809c76b6952c1295bbc34c8720744602f4b Mon Sep 17 00:00:00 2001 From: Morpheus Date: Sat, 1 Nov 2025 19:31:05 +0100 Subject: [PATCH 02/13] keep challenge metadata alive --- Agents.md | 2 + .../daily_rewards/impl/src/activity.rs | 300 +++++++++++++++++- .../daily_rewards/impl/src/service.rs | 8 +- .../daily_rewards/impl/src/tests/snapshot.rs | 8 +- config.dev.toml | 6 + 5 files changed, 297 insertions(+), 27 deletions(-) create mode 100644 Agents.md diff --git a/Agents.md b/Agents.md new file mode 100644 index 00000000..573d4282 --- /dev/null +++ b/Agents.md @@ -0,0 +1,2 @@ +Your instructions are located at ../Agents.md. +Read the ENTIRE file. They are INCREDIBLY important. diff --git a/academy_core/daily_rewards/impl/src/activity.rs b/academy_core/daily_rewards/impl/src/activity.rs index 2ce64f80..839fd0cc 100644 --- a/academy_core/daily_rewards/impl/src/activity.rs +++ b/academy_core/daily_rewards/impl/src/activity.rs @@ -9,9 +9,10 @@ use anyhow::{Context, Result}; use bb8::{Pool, PooledConnection}; use bb8_postgres::PostgresConnectionManager; use chrono::{DateTime, Utc}; -use serde_json::json; -use tokio_postgres::NoTls; +use serde_json::{Map, Value}; +use tokio_postgres::{NoTls, error::SqlState}; use tracing::warn; +use uuid::Uuid; #[derive(Debug, Clone)] pub struct PostgresActivityConfig { @@ -39,6 +40,27 @@ struct ActivityPool { type PgConnection<'a> = PooledConnection<'a, PostgresConnectionManager>; +#[derive(Debug, Default)] +struct LectureMetadata { + course_title: Option, + section_id: Option, + section_title: Option, + lecture_title: Option, +} + +#[derive(Debug)] +struct SubtaskSampleInput { + task_id: String, + subtask_id: String, + subtask_type: String, + challenge_title: Option, + category_id: Option, + skill_ids: Vec, + course_id: Option, + section_id: Option, + lecture_id: Option, +} + impl ActivityPool { async fn new(config: &PostgresActivityConfig) -> Result { let manager = PostgresConnectionManager::new(config.dsn.parse()?, NoTls); @@ -127,6 +149,7 @@ impl DailyRewardActivityService for DailyRewardActivityServiceImpl { day_start, day_end, &["matching", "multiple_choice_question", "question"], + false, ) .await { @@ -139,8 +162,15 @@ impl DailyRewardActivityService for DailyRewardActivityServiceImpl { } } - match detect_subtask(&conn, user_id, day_start, day_end, &["coding_challenge"]) - .await + match detect_subtask( + &conn, + user_id, + day_start, + day_end, + &["coding_challenge"], + true, + ) + .await { Ok(Some(activity)) => snapshot.lab.detected = Some(activity), Ok(None) => {} @@ -187,6 +217,8 @@ async fn detect_lecture( return Ok(None); }; + let course_id: String = first_row.get("course_id"); + let lecture_id: String = first_row.get("lecture_id"); let last_completed = conn .query_opt( "select max(completed) as completed \ @@ -201,10 +233,8 @@ async fn detect_lecture( .unwrap_or_else(|| first_row.get::<_, DateTime>("completed")); let first_completed: DateTime = first_row.get("completed"); - let sample = json!({ - "course_id": first_row.get::<_, String>("course_id"), - "lecture_id": first_row.get::<_, String>("lecture_id"), - }); + let metadata = fetch_lecture_metadata(conn, &course_id, &lecture_id).await?; + let sample = build_lecture_sample(course_id, lecture_id, metadata); Ok(Some(DailyRewardActivity { first_detected_at: first_completed, @@ -219,12 +249,25 @@ async fn detect_subtask( day_start: DateTime, day_end: DateTime, allowed_types: &[&str], + is_lab: bool, ) -> Result> { let first_row = conn .query_opt( - "select cs.task_id, cs.ty, cus.subtask_id, cus.solved_timestamp \ + "select \ + cs.task_id, \ + cs.ty, \ + cus.subtask_id, \ + cus.solved_timestamp, \ + cc.title as challenge_title, \ + cc.category_id, \ + cc.skill_ids, \ + cct.course_id::text as course_id, \ + cct.section_id::text as section_id, \ + cct.lecture_id::text as lecture_id \ from challenges_user_subtasks cus \ join challenges_subtasks cs on cs.id = cus.subtask_id \ + left join challenges_challenges cc on cc.task_id = cs.task_id \ + left join challenges_course_tasks cct on cct.task_id = cs.task_id \ where cus.user_id = $1::uuid \ and cus.solved_timestamp >= $2 \ and cus.solved_timestamp < $3 \ @@ -258,12 +301,50 @@ async fn detect_subtask( .and_then(|row| row.get::<_, Option>>("solved_timestamp")) .unwrap_or_else(|| first_row.get::<_, DateTime>("solved_timestamp")); + let task_id: Uuid = first_row.get("task_id"); + let subtask_id: Uuid = first_row.get("subtask_id"); + let subtask_type: String = first_row.get("ty"); let first_solved: DateTime = first_row.get("solved_timestamp"); - let sample = json!({ - "task_id": first_row.get::<_, String>("task_id"), - "subtask_id": first_row.get::<_, String>("subtask_id"), - "subtask_type": first_row.get::<_, String>("ty"), - }); + let challenge_title: Option = first_row + .try_get::<_, Option>("challenge_title") + .unwrap_or(None); + let category_id: Option = first_row + .try_get::<_, Option>("category_id") + .unwrap_or(None); + let skill_ids: Vec = match first_row.try_get::<_, Vec>("skill_ids") { + Ok(ids) => ids, + Err(_) => first_row + .try_get::<_, Vec>("skill_ids") + .map(|ids| ids.into_iter().map(|id| id.to_string()).collect()) + .unwrap_or_default(), + }; + let course_id: Option = first_row + .try_get::<_, Option>("course_id") + .unwrap_or(None) + .and_then(normalize_db_string); + let section_id: Option = first_row + .try_get::<_, Option>("section_id") + .unwrap_or(None) + .and_then(normalize_db_string); + let lecture_id: Option = first_row + .try_get::<_, Option>("lecture_id") + .unwrap_or(None) + .and_then(normalize_db_string); + + let sample = build_subtask_sample( + SubtaskSampleInput { + task_id: task_id.to_string(), + subtask_id: subtask_id.to_string(), + subtask_type: subtask_type.clone(), + challenge_title, + category_id, + skill_ids, + course_id, + section_id, + lecture_id, + }, + is_lab, + ); Ok(Some(DailyRewardActivity { first_detected_at: first_solved, @@ -271,3 +352,194 @@ async fn detect_subtask( activity_sample: Some(sample), })) } + +fn build_lecture_sample( + course_id: String, + lecture_id: String, + metadata: Option, +) -> Value { + let mut sample = Map::new(); + sample.insert("course_id".into(), Value::String(course_id)); + sample.insert("lecture_id".into(), Value::String(lecture_id)); + + if let Some(metadata) = metadata { + insert_optional_string(&mut sample, "course_title", metadata.course_title); + insert_optional_string(&mut sample, "section_id", metadata.section_id.clone()); + insert_optional_string(&mut sample, "section_title", metadata.section_title); + insert_optional_string(&mut sample, "lecture_title", metadata.lecture_title); + } + + Value::Object(sample) +} + +fn build_subtask_sample(input: SubtaskSampleInput, is_lab: bool) -> Value { + let SubtaskSampleInput { + task_id, + subtask_id, + subtask_type, + challenge_title, + category_id, + skill_ids, + course_id, + section_id, + lecture_id, + } = input; + + let mut sample = Map::new(); + sample.insert("task_id".into(), Value::String(task_id.clone())); + sample.insert("subtask_id".into(), Value::String(subtask_id.clone())); + sample.insert("subtask_type".into(), Value::String(subtask_type.clone())); + + insert_optional_string(&mut sample, "course_id", course_id.clone()); + insert_optional_string(&mut sample, "section_id", section_id.clone()); + insert_optional_string(&mut sample, "lecture_id", lecture_id.clone()); + + if let Some(category_id) = category_id { + sample.insert("category_id".into(), Value::String(category_id.to_string())); + } + + if !skill_ids.is_empty() { + sample.insert( + "skill_ids".into(), + Value::Array(skill_ids.iter().cloned().map(Value::String).collect()), + ); + } + + if is_lab { + insert_optional_string(&mut sample, "lab_title", challenge_title); + sample.insert("challenge_id".into(), Value::String(task_id)); + sample.insert("coding_challenge_id".into(), Value::String(subtask_id)); + } else { + insert_optional_string(&mut sample, "task_title", challenge_title); + sample.insert("solve_id".into(), Value::String(task_id.clone())); + sample.insert( + "quizzes_from".into(), + Value::String(derive_quizzes_from( + course_id.as_deref(), + &skill_ids, + &subtask_type, + )), + ); + if subtask_type.contains("matching") { + sample.insert("matching_id".into(), Value::String(subtask_id.clone())); + } + sample.insert("query_subtask_id".into(), Value::String(subtask_id)); + } + + Value::Object(sample) +} + +async fn fetch_lecture_metadata( + conn: &PgConnection<'_>, + course_id: &str, + lecture_id: &str, +) -> Result> { + let course_uuid = match Uuid::parse_str(course_id) { + Ok(uuid) => uuid, + Err(err) => { + warn!(error = %err, %course_id, "Skipping lecture metadata; invalid course_id"); + return Ok(None); + } + }; + let lecture_uuid = match Uuid::parse_str(lecture_id) { + Ok(uuid) => uuid, + Err(err) => { + warn!(error = %err, %lecture_id, "Skipping lecture metadata; invalid lecture_id"); + return Ok(None); + } + }; + + let row = match conn + .query_opt( + "select \ + course.title as course_title, \ + section.id as section_id, \ + section.title as section_title, \ + lecture.title as lecture_title \ + from skills_course_lectures lecture \ + join skills_course_sections section \ + on section.course_id = lecture.course_id \ + and section.id = lecture.section_id \ + join skills_courses course \ + on course.id = lecture.course_id \ + where lecture.course_id = $1 \ + and lecture.id = $2 \ + limit 1", + &[&course_uuid, &lecture_uuid], + ) + .await + { + Ok(row) => row, + Err(err) => { + if is_metadata_lookup_error(&err) { + warn!(error = %err, "Skipping lecture metadata enrichment"); + return Ok(None); + } + return Err(err.into()); + } + }; + + let metadata = row.map(|row| LectureMetadata { + course_title: row + .try_get::<_, Option>("course_title") + .unwrap_or(None), + section_id: row + .try_get::<_, Option>("section_id") + .unwrap_or(None) + .map(|id| id.to_string()), + section_title: row + .try_get::<_, Option>("section_title") + .unwrap_or(None), + lecture_title: row + .try_get::<_, Option>("lecture_title") + .unwrap_or(None), + }); + + Ok(metadata) +} + +fn is_metadata_lookup_error(err: &tokio_postgres::Error) -> bool { + matches!( + err.code(), + Some( + &SqlState::UNDEFINED_TABLE + | &SqlState::UNDEFINED_FUNCTION + | &SqlState::UNDEFINED_COLUMN + | &SqlState::INVALID_SCHEMA_NAME + ) + ) +} + +fn normalize_db_string(value: String) -> Option { + let trimmed = value.trim(); + if trimmed.is_empty() { + None + } else { + Some(trimmed.to_owned()) + } +} + +fn insert_optional_string(map: &mut Map, key: &str, value: Option) { + if let Some(value) = value { + if !value.trim().is_empty() { + map.insert(key.to_owned(), Value::String(value)); + } + } +} + +fn derive_quizzes_from( + course_id: Option<&str>, + skill_ids: &[String], + subtask_type: &str, +) -> String { + if course_id.is_some() { + return "course".to_owned(); + } + if !skill_ids.is_empty() { + return "skill".to_owned(); + } + if subtask_type.contains("matching") { + return "course".to_owned(); + } + "quiz".to_owned() +} diff --git a/academy_core/daily_rewards/impl/src/service.rs b/academy_core/daily_rewards/impl/src/service.rs index a63a19fc..e7420351 100644 --- a/academy_core/daily_rewards/impl/src/service.rs +++ b/academy_core/daily_rewards/impl/src/service.rs @@ -481,10 +481,7 @@ fn map_claim_error( } } -pub(crate) fn build_snapshot( - date: NaiveDate, - refreshed: RefreshedRewards, -) -> DailyRewardsSnapshot { +pub(crate) fn build_snapshot(date: NaiveDate, refreshed: RefreshedRewards) -> DailyRewardsSnapshot { let mut rewards = Vec::new(); let mut available_total = 0; let mut claimed_total = 0; @@ -740,8 +737,7 @@ mod refresh_entries_tests { use academy_core_daily_rewards_contracts::DailyRewardActivitySnapshot; use academy_core_daily_rewards_contracts::MockDailyRewardActivityService; use academy_persistence_contracts::{ - MockDatabase, MockTransaction, - daily_rewards::MockDailyRewardRepository, + MockDatabase, MockTransaction, daily_rewards::MockDailyRewardRepository, }; use academy_shared_contracts::{id::MockIdService, time::MockTimeService}; use chrono::TimeZone; diff --git a/academy_core/daily_rewards/impl/src/tests/snapshot.rs b/academy_core/daily_rewards/impl/src/tests/snapshot.rs index be1d0c21..c6e2b17e 100644 --- a/academy_core/daily_rewards/impl/src/tests/snapshot.rs +++ b/academy_core/daily_rewards/impl/src/tests/snapshot.rs @@ -124,13 +124,7 @@ fn build_snapshot_uses_entry_coin_amounts() { ); entries.insert( DailyRewardCategory::Lab, - entry( - DailyRewardCategory::Lab, - 7, - date, - Some(ready_time), - None, - ), + entry(DailyRewardCategory::Lab, 7, date, Some(ready_time), None), ); let mut unavailability = HashMap::new(); diff --git a/config.dev.toml b/config.dev.toml index 63e9b221..362f9a0b 100644 --- a/config.dev.toml +++ b/config.dev.toml @@ -25,6 +25,12 @@ lecture = 20 practice = 10 lab = 30 +[daily_rewards.activity_sources.skills] +dsn = "postgres://academy@127.0.0.1:5432/academy-skills" + +[daily_rewards.activity_sources.challenges] +dsn = "postgres://academy@127.0.0.1:5432/academy-challenges" + [session] access_token_ttl = "1d" From 959df897c14c8c40866f347e155c22d6ca556141 Mon Sep 17 00:00:00 2001 From: Morpheus Date: Sun, 2 Nov 2025 17:55:08 +0100 Subject: [PATCH 03/13] insert recommendations --- Cargo.lock | 2 + academy/src/commands/serve.rs | 8 +- academy/src/commands/tasks/mod.rs | 51 +- academy/src/environment/mod.rs | 23 +- academy/src/environment/types.rs | 1 + academy_config/src/lib.rs | 15 + .../daily_rewards/contracts/src/lib.rs | 8 +- academy_core/daily_rewards/impl/Cargo.toml | 3 + .../daily_rewards/impl/src/activity.rs | 1542 +++++++++++++---- academy_core/daily_rewards/impl/src/lib.rs | 1 + .../daily_rewards/impl/src/service.rs | 447 ++++- .../daily_rewards/impl/src/tests/activity.rs | 255 +++ .../daily_rewards/impl/src/tests/claim.rs | 8 +- .../daily_rewards/impl/src/tests/mod.rs | 2 + .../daily_rewards/impl/src/tests/ready.rs | 212 +++ config.dev.toml | 4 + config.toml | 4 + 17 files changed, 2199 insertions(+), 387 deletions(-) create mode 100644 academy_core/daily_rewards/impl/src/tests/activity.rs create mode 100644 academy_core/daily_rewards/impl/src/tests/ready.rs diff --git a/Cargo.lock b/Cargo.lock index dc83d60d..62142bc8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -266,6 +266,7 @@ name = "academy_core_daily_rewards_impl" version = "0.0.0" dependencies = [ "academy_auth_contracts", + "academy_cache_contracts", "academy_core_coin_contracts", "academy_core_daily_rewards_contracts", "academy_di", @@ -278,6 +279,7 @@ dependencies = [ "bb8-postgres", "chrono", "mockall", + "reqwest", "serde", "serde_json", "tokio", diff --git a/academy/src/commands/serve.rs b/academy/src/commands/serve.rs index bfdc1c3b..bd252a3f 100644 --- a/academy/src/commands/serve.rs +++ b/academy/src/commands/serve.rs @@ -59,8 +59,12 @@ pub async fn serve(config: Config) -> anyhow::Result<()> { let config_provider = ConfigProvider::new(&config)?; let activity_configs = config_provider.daily_reward_activity_configs(); - let daily_reward_activity = - DailyRewardActivity::new(activity_configs.skills, activity_configs.challenges).await?; + let daily_reward_activity = DailyRewardActivity::new( + activity_configs.skills, + activity_configs.challenges, + activity_configs.skills_recommendations, + ) + .await?; let mut provider = Provider::new( config_provider, diff --git a/academy/src/commands/tasks/mod.rs b/academy/src/commands/tasks/mod.rs index 65e0340f..0f00c651 100644 --- a/academy/src/commands/tasks/mod.rs +++ b/academy/src/commands/tasks/mod.rs @@ -1,14 +1,16 @@ use academy_config::Config; use academy_core_premium_contracts::premium::PremiumService; use academy_di::Provide; +use academy_models::user::UserId; use academy_persistence_contracts::{ Database, Transaction, premium::PremiumRepository, session::SessionRepository, }; use academy_persistence_postgres::session::PostgresSessionRepository; use anyhow::Context; -use chrono::Utc; +use chrono::{NaiveDate, Utc}; use clap::Subcommand; use tracing::info; +use uuid::Uuid; use crate::{ database, @@ -21,6 +23,15 @@ pub enum TaskCommand { PruneDatabase, /// Refresh premium subscriptions. RefreshPremium, + /// Rebuild a user's daily rewards snapshot. + DailyRewardsRebuild { + /// Target user ID. + #[clap(long = "user")] + user: Uuid, + /// UTC date (YYYY-MM-DD). Defaults to today. + #[clap(long = "date")] + date: Option, + }, } impl TaskCommand { @@ -28,6 +39,9 @@ impl TaskCommand { match self { TaskCommand::PruneDatabase => prune_database(config).await, TaskCommand::RefreshPremium => refresh_premium(config).await, + TaskCommand::DailyRewardsRebuild { user, date } => { + daily_rewards_rebuild(config, user, date).await + } } } } @@ -68,3 +82,38 @@ async fn refresh_premium(config: Config) -> anyhow::Result<()> { Ok(()) } + +async fn daily_rewards_rebuild( + config: Config, + user: Uuid, + date: Option, +) -> anyhow::Result<()> { + let mut provider = Provider::from_config(&config).await?; + + let feature: types::DailyRewardFeature = provider.provide(); + + let user_id = UserId::from(user); + let target_date = date.unwrap_or_else(|| Utc::now().date_naive()); + + let snapshot = feature + .rebuild_snapshot(user_id, target_date) + .await + .context("Failed to rebuild daily rewards snapshot")?; + + let statuses: Vec<_> = snapshot + .rewards + .iter() + .map(|reward| format!("{:?}:{:?}", reward.category, reward.status)) + .collect(); + + info!( + user_id = ?user_id, + date = %target_date, + available_coins = snapshot.claim_totals.available_coins, + claimed_today = snapshot.claim_totals.claimed_today, + rewards = ?statuses, + "Rebuilt daily rewards snapshot" + ); + + Ok(()) +} diff --git a/academy/src/environment/mod.rs b/academy/src/environment/mod.rs index 67ab470d..b903c9d0 100644 --- a/academy/src/environment/mod.rs +++ b/academy/src/environment/mod.rs @@ -2,12 +2,12 @@ use std::{collections::HashMap, sync::Arc}; use academy_api_rest::{RestServerConfig, RestServerRealIpConfig}; use academy_auth_impl::AuthServiceConfig; -use academy_config::{Config, DailyRewardsPostgresConfig}; +use academy_config::{Config, DailyRewardsPostgresConfig, DailyRewardsSkillsRecommendationsConfig}; use academy_core_contact_impl::ContactFeatureConfig; use academy_core_daily_rewards_impl::{ ChallengesActivityConfig, DailyRewardActivityServiceImpl, DailyRewardCoinsConfig as CoreDailyRewardCoinsConfig, DailyRewardFeatureConfig, - SkillsActivityConfig, + SkillsActivityConfig, SkillsRecommendationConfig, }; use academy_core_finance_impl::FinanceFeatureConfig; use academy_core_health_impl::HealthFeatureConfig; @@ -37,6 +37,7 @@ pub mod types; pub struct DailyRewardActivityConfigs { pub skills: Option, pub challenges: Option, + pub skills_recommendations: Option, } provider! { @@ -115,6 +116,7 @@ impl Provider { let daily_reward_activity = DailyRewardActivityServiceImpl::new( activity_configs.skills, activity_configs.challenges, + activity_configs.skills_recommendations, ) .await .context("Failed to initialise daily reward activity service")?; @@ -309,6 +311,12 @@ impl ConfigProvider { .challenges .as_ref() .map(map_daily_rewards_source), + skills_recommendations: config + .daily_rewards + .recommendations + .skills + .as_ref() + .map(map_daily_rewards_recommendations), }; let finance_feature_config = FinanceFeatureConfig { vat_percent: config.finance.vat_percent, @@ -379,6 +387,15 @@ fn map_daily_rewards_source(cfg: &DailyRewardsPostgresConfig) -> SkillsActivityC } } +fn map_daily_rewards_recommendations( + cfg: &DailyRewardsSkillsRecommendationsConfig, +) -> SkillsRecommendationConfig { + SkillsRecommendationConfig { + base_url: cfg.base_url.clone(), + timeout: cfg.timeout.map(Into::into), + } +} + #[cfg(test)] mod tests { use academy_cache_valkey::ValkeyCache; @@ -398,7 +415,7 @@ mod tests { let cache = ValkeyCache::dummy().await; let email = EmailServiceImpl::dummy().await; - let daily_reward_activity = DailyRewardActivityServiceImpl::new(None, None) + let daily_reward_activity = DailyRewardActivityServiceImpl::new(None, None, None) .await .unwrap(); let mut provider = Provider::new( diff --git a/academy/src/environment/types.rs b/academy/src/environment/types.rs index 7edc9c8e..310801fe 100644 --- a/academy/src/environment/types.rs +++ b/academy/src/environment/types.rs @@ -242,6 +242,7 @@ pub type DailyRewardFeature = CoreDailyRewardFeatureServiceImpl< Auth, DailyRewardRepo, Coin, + Cache, DailyRewardActivity, Id, Time, diff --git a/academy_config/src/lib.rs b/academy_config/src/lib.rs index bf81ae2a..e7e63568 100644 --- a/academy_config/src/lib.rs +++ b/academy_config/src/lib.rs @@ -233,6 +233,8 @@ pub struct DailyRewardsConfig { pub cache_ttl: Option, #[serde(default)] pub activity_sources: DailyRewardsActivitySourcesConfig, + #[serde(default)] + pub recommendations: DailyRewardsRecommendationsConfig, } #[derive(Debug, Deserialize)] @@ -251,6 +253,12 @@ pub struct DailyRewardsActivitySourcesConfig { pub challenges: Option, } +#[derive(Debug, Default, Deserialize)] +pub struct DailyRewardsRecommendationsConfig { + #[serde(default)] + pub skills: Option, +} + #[derive(Debug, Deserialize)] pub struct DailyRewardsPostgresConfig { pub dsn: String, @@ -266,6 +274,13 @@ pub struct DailyRewardsPostgresConfig { pub max_lifetime: Option, } +#[derive(Debug, Deserialize)] +pub struct DailyRewardsSkillsRecommendationsConfig { + pub base_url: String, + #[serde(default)] + pub timeout: Option, +} + #[derive(Debug, Deserialize)] pub struct HeartConfig { pub max: u64, diff --git a/academy_core/daily_rewards/contracts/src/lib.rs b/academy_core/daily_rewards/contracts/src/lib.rs index 7b7631e8..11c78019 100644 --- a/academy_core/daily_rewards/contracts/src/lib.rs +++ b/academy_core/daily_rewards/contracts/src/lib.rs @@ -155,6 +155,7 @@ pub struct DailyRewardActivity { #[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)] pub struct DailyRewardActivityState { pub detected: Option, + pub pending_sample: Option, pub unavailable_reason: Option, } @@ -167,8 +168,13 @@ pub struct DailyRewardActivitySnapshot { #[cfg_attr(feature = "mock", mockall::automock)] pub trait DailyRewardActivityService: Send + Sync + 'static { - fn detect( + #[allow( + clippy::needless_lifetimes, + reason = "mockall requires explicit lifetime parameter" + )] + fn detect<'a>( &self, + token: Option<&'a AccessToken>, user_id: UserId, day_start: DateTime, day_end: DateTime, diff --git a/academy_core/daily_rewards/impl/Cargo.toml b/academy_core/daily_rewards/impl/Cargo.toml index 7c51d408..43cb47f9 100644 --- a/academy_core/daily_rewards/impl/Cargo.toml +++ b/academy_core/daily_rewards/impl/Cargo.toml @@ -11,6 +11,7 @@ workspace = true [dependencies] academy_auth_contracts.workspace = true +academy_cache_contracts.workspace = true academy_core_coin_contracts.workspace = true academy_core_daily_rewards_contracts.workspace = true academy_di.workspace = true @@ -27,9 +28,11 @@ serde_json.workspace = true tokio-postgres = { version = "0.7.15", features = ["with-chrono-0_4", "with-uuid-1", "with-serde_json-1"] } tracing.workspace = true uuid.workspace = true +reqwest.workspace = true [dev-dependencies] academy_auth_contracts = { workspace = true, features = ["mock"] } +academy_cache_contracts = { workspace = true, features = ["mock"] } academy_core_coin_contracts = { workspace = true, features = ["mock"] } academy_core_daily_rewards_contracts = { workspace = true, features = ["mock"] } academy_models.workspace = true diff --git a/academy_core/daily_rewards/impl/src/activity.rs b/academy_core/daily_rewards/impl/src/activity.rs index 839fd0cc..c9898721 100644 --- a/academy_core/daily_rewards/impl/src/activity.rs +++ b/academy_core/daily_rewards/impl/src/activity.rs @@ -2,15 +2,17 @@ use std::time::Duration; use academy_core_daily_rewards_contracts::{ DailyRewardActivity, DailyRewardActivityService, DailyRewardActivitySnapshot, - DailyRewardUnavailableReason, + DailyRewardActivityState, DailyRewardUnavailableReason, }; -use academy_models::user::UserId; -use anyhow::{Context, Result}; +use academy_models::{auth::AccessToken, user::UserId}; +use anyhow::{Context, Result, anyhow}; use bb8::{Pool, PooledConnection}; use bb8_postgres::PostgresConnectionManager; -use chrono::{DateTime, Utc}; +use chrono::{DateTime, NaiveDateTime, Utc}; +use reqwest::{Client, StatusCode, Url}; +use serde::{Deserialize, de::DeserializeOwned}; use serde_json::{Map, Value}; -use tokio_postgres::{NoTls, error::SqlState}; +use tokio_postgres::{NoTls, Row, error::SqlState}; use tracing::warn; use uuid::Uuid; @@ -28,329 +30,121 @@ pub type SkillsActivityConfig = PostgresActivityConfig; pub type ChallengesActivityConfig = PostgresActivityConfig; #[derive(Debug, Clone)] -pub struct DailyRewardActivityServiceImpl { - skills: Option, - challenges: Option, +pub struct SkillsRecommendationConfig { + pub base_url: String, + pub timeout: Option, } #[derive(Debug, Clone)] -struct ActivityPool { - pool: Pool>, +struct SkillsRecommendationClient { + client: Client, + base_url: Url, } -type PgConnection<'a> = PooledConnection<'a, PostgresConnectionManager>; - -#[derive(Debug, Default)] -struct LectureMetadata { - course_title: Option, - section_id: Option, - section_title: Option, - lecture_title: Option, -} +impl SkillsRecommendationClient { + fn new(config: &SkillsRecommendationConfig) -> Result { + let base_url = Url::parse(&config.base_url) + .context("Failed to parse skills recommendations base URL")?; -#[derive(Debug)] -struct SubtaskSampleInput { - task_id: String, - subtask_id: String, - subtask_type: String, - challenge_title: Option, - category_id: Option, - skill_ids: Vec, - course_id: Option, - section_id: Option, - lecture_id: Option, -} + let mut builder = Client::builder(); + if let Some(timeout) = config.timeout { + builder = builder.timeout(timeout); + } -impl ActivityPool { - async fn new(config: &PostgresActivityConfig) -> Result { - let manager = PostgresConnectionManager::new(config.dsn.parse()?, NoTls); - let min_idle = (config.min_connections > 0).then_some(config.min_connections); - let pool = Pool::builder() - .max_size(config.max_connections) - .min_idle(min_idle) - .connection_timeout(config.acquire_timeout) - .idle_timeout(config.idle_timeout) - .max_lifetime(config.max_lifetime) - .build(manager) - .await?; + let client = builder + .build() + .context("Failed to initialise skills recommendations HTTP client")?; - Ok(Self { pool }) + Ok(Self { client, base_url }) } - async fn connection(&self) -> Result> { - self.pool.get().await.map_err(Into::into) + async fn ext_lecture(&self, token: &AccessToken) -> Result> { + self.fetch_payload(token, "courses/next/lecture").await } -} - -impl DailyRewardActivityServiceImpl { - pub async fn new( - skills: Option, - challenges: Option, - ) -> Result { - let skills_pool = match skills { - Some(ref cfg) => Some( - ActivityPool::new(cfg) - .await - .context("Failed to initialise skills activity pool")?, - ), - None => None, - }; - - let challenges_pool = match challenges { - Some(ref cfg) => Some( - ActivityPool::new(cfg) - .await - .context("Failed to initialise challenges activity pool")?, - ), - None => None, - }; - Ok(Self { - skills: skills_pool, - challenges: challenges_pool, - }) + async fn ext_task(&self, token: &AccessToken) -> Result> { + self.fetch_payload(token, "courses/next/task").await } -} -impl DailyRewardActivityService for DailyRewardActivityServiceImpl { - async fn detect( - &self, - user_id: UserId, - day_start: DateTime, - day_end: DateTime, - ) -> Result { - let mut snapshot = DailyRewardActivitySnapshot::default(); + async fn ext_lab(&self, token: &AccessToken) -> Result> { + self.fetch_payload(token, "courses/next/lab").await + } - if let Some(skills) = &self.skills { - match skills.connection().await { - Ok(conn) => match detect_lecture(&conn, user_id, day_start, day_end).await { - Ok(Some(activity)) => snapshot.lecture.detected = Some(activity), - Ok(None) => {} - Err(err) => { - warn!(error = %err, "Failed to detect lecture completion"); - snapshot.lecture.unavailable_reason = - Some(DailyRewardUnavailableReason::Unknown); - } - }, - Err(err) => { - warn!(error = %err, "Failed to acquire skills connection"); - snapshot.lecture.unavailable_reason = - Some(DailyRewardUnavailableReason::Unknown); - } - } - } + async fn fetch_payload(&self, token: &AccessToken, path: &str) -> Result> + where + T: DeserializeOwned, + { + let url = self + .base_url + .join(path) + .context("Failed to build skills recommendation URL")?; - if let Some(challenges) = &self.challenges { - match challenges.connection().await { - Ok(conn) => { - match detect_subtask( - &conn, - user_id, - day_start, - day_end, - &["matching", "multiple_choice_question", "question"], - false, - ) - .await - { - Ok(Some(activity)) => snapshot.practice.detected = Some(activity), - Ok(None) => {} - Err(err) => { - warn!(error = %err, "Failed to detect practice completion"); - snapshot.practice.unavailable_reason = - Some(DailyRewardUnavailableReason::Unknown); - } - } + let response = self + .client + .get(url) + .bearer_auth(token.as_str()) + .send() + .await + .context("Failed to fetch skills recommendation")?; - match detect_subtask( - &conn, - user_id, - day_start, - day_end, - &["coding_challenge"], - true, - ) + match response.status() { + StatusCode::NO_CONTENT | StatusCode::NOT_FOUND => Ok(None), + _ => { + let response = response + .error_for_status() + .context("Skills recommendation request failed")?; + let payload = response + .json::() .await - { - Ok(Some(activity)) => snapshot.lab.detected = Some(activity), - Ok(None) => {} - Err(err) => { - warn!(error = %err, "Failed to detect lab completion"); - snapshot.lab.unavailable_reason = - Some(DailyRewardUnavailableReason::Unknown); - } - } - } - Err(err) => { - warn!(error = %err, "Failed to acquire challenges connection"); - snapshot.practice.unavailable_reason = - Some(DailyRewardUnavailableReason::Unknown); - snapshot.lab.unavailable_reason = Some(DailyRewardUnavailableReason::Unknown); - } + .context("Failed to deserialize skills recommendation response")?; + Ok(Some(payload)) } } - - Ok(snapshot) } } -async fn detect_lecture( - conn: &PgConnection<'_>, - user_id: UserId, - day_start: DateTime, - day_end: DateTime, -) -> Result> { - let first_row = conn - .query_opt( - "select course_id, lecture_id, completed \ - from skills_lecture_progress \ - where user_id = $1::uuid \ - and completed >= $2 \ - and completed < $3 \ - order by completed asc \ - limit 1", - &[&*user_id, &day_start, &day_end], - ) - .await?; - - let Some(first_row) = first_row else { - return Ok(None); - }; - - let course_id: String = first_row.get("course_id"); - let lecture_id: String = first_row.get("lecture_id"); - let last_completed = conn - .query_opt( - "select max(completed) as completed \ - from skills_lecture_progress \ - where user_id = $1::uuid \ - and completed >= $2 \ - and completed < $3", - &[&*user_id, &day_start, &day_end], - ) - .await? - .and_then(|row| row.get::<_, Option>>("completed")) - .unwrap_or_else(|| first_row.get::<_, DateTime>("completed")); - - let first_completed: DateTime = first_row.get("completed"); - let metadata = fetch_lecture_metadata(conn, &course_id, &lecture_id).await?; - let sample = build_lecture_sample(course_id, lecture_id, metadata); +trait TimestampColumnAccessor { + fn try_get_datetime_utc(&self, column: &str) -> Result>>; + fn try_get_naive_datetime(&self, column: &str) -> Result>; +} - Ok(Some(DailyRewardActivity { - first_detected_at: first_completed, - last_detected_at: last_completed, - activity_sample: Some(sample), - })) +struct PgTimestampRow<'a> { + row: &'a Row, } -async fn detect_subtask( - conn: &PgConnection<'_>, - user_id: UserId, - day_start: DateTime, - day_end: DateTime, - allowed_types: &[&str], - is_lab: bool, -) -> Result> { - let first_row = conn - .query_opt( - "select \ - cs.task_id, \ - cs.ty, \ - cus.subtask_id, \ - cus.solved_timestamp, \ - cc.title as challenge_title, \ - cc.category_id, \ - cc.skill_ids, \ - cct.course_id::text as course_id, \ - cct.section_id::text as section_id, \ - cct.lecture_id::text as lecture_id \ - from challenges_user_subtasks cus \ - join challenges_subtasks cs on cs.id = cus.subtask_id \ - left join challenges_challenges cc on cc.task_id = cs.task_id \ - left join challenges_course_tasks cct on cct.task_id = cs.task_id \ - where cus.user_id = $1::uuid \ - and cus.solved_timestamp >= $2 \ - and cus.solved_timestamp < $3 \ - and cs.enabled is true \ - and cs.retired is false \ - and cs.ty = any($4) \ - order by cus.solved_timestamp asc \ - limit 1", - &[&*user_id, &day_start, &day_end, &allowed_types], - ) - .await?; +impl<'a> TimestampColumnAccessor for PgTimestampRow<'a> { + fn try_get_datetime_utc(&self, column: &str) -> Result>> { + self.row + .try_get::<_, Option>>(column) + .map_err(Into::into) + } - let Some(first_row) = first_row else { - return Ok(None); - }; + fn try_get_naive_datetime(&self, column: &str) -> Result> { + self.row + .try_get::<_, Option>(column) + .map_err(Into::into) + } +} - let last_solved = conn - .query_opt( - "select max(cus.solved_timestamp) as solved_timestamp \ - from challenges_user_subtasks cus \ - join challenges_subtasks cs on cs.id = cus.subtask_id \ - where cus.user_id = $1::uuid \ - and cus.solved_timestamp >= $2 \ - and cus.solved_timestamp < $3 \ - and cs.enabled is true \ - and cs.retired is false \ - and cs.ty = any($4)", - &[&*user_id, &day_start, &day_end, &allowed_types], - ) - .await? - .and_then(|row| row.get::<_, Option>>("solved_timestamp")) - .unwrap_or_else(|| first_row.get::<_, DateTime>("solved_timestamp")); - - let task_id: Uuid = first_row.get("task_id"); - let subtask_id: Uuid = first_row.get("subtask_id"); - let subtask_type: String = first_row.get("ty"); - let first_solved: DateTime = first_row.get("solved_timestamp"); - let challenge_title: Option = first_row - .try_get::<_, Option>("challenge_title") - .unwrap_or(None); - let category_id: Option = first_row - .try_get::<_, Option>("category_id") - .unwrap_or(None); - let skill_ids: Vec = match first_row.try_get::<_, Vec>("skill_ids") { - Ok(ids) => ids, - Err(_) => first_row - .try_get::<_, Vec>("skill_ids") - .map(|ids| ids.into_iter().map(|id| id.to_string()).collect()) - .unwrap_or_default(), - }; - let course_id: Option = first_row - .try_get::<_, Option>("course_id") - .unwrap_or(None) - .and_then(normalize_db_string); - let section_id: Option = first_row - .try_get::<_, Option>("section_id") - .unwrap_or(None) - .and_then(normalize_db_string); - let lecture_id: Option = first_row - .try_get::<_, Option>("lecture_id") - .unwrap_or(None) - .and_then(normalize_db_string); - - let sample = build_subtask_sample( - SubtaskSampleInput { - task_id: task_id.to_string(), - subtask_id: subtask_id.to_string(), - subtask_type: subtask_type.clone(), - challenge_title, - category_id, - skill_ids, - course_id, - section_id, - lecture_id, +fn read_optional_timestamp(row: &R, column: &str) -> Result>> +where + R: TimestampColumnAccessor + ?Sized, +{ + match row.try_get_datetime_utc(column) { + Ok(value) => Ok(value), + Err(first_err) => match row.try_get_naive_datetime(column) { + Ok(naive) => Ok(naive.map(|ts| DateTime::from_naive_utc_and_offset(ts, Utc))), + Err(_) => Err(first_err), }, - is_lab, - ); + } +} - Ok(Some(DailyRewardActivity { - first_detected_at: first_solved, - last_detected_at: last_solved, - activity_sample: Some(sample), - })) +fn read_required_timestamp(row: &R, column: &str) -> Result> +where + R: TimestampColumnAccessor + ?Sized, +{ + read_optional_timestamp(row, column)? + .ok_or_else(|| anyhow!("column `{}` returned NULL timestamp", column)) } fn build_lecture_sample( @@ -359,14 +153,20 @@ fn build_lecture_sample( metadata: Option, ) -> Value { let mut sample = Map::new(); - sample.insert("course_id".into(), Value::String(course_id)); - sample.insert("lecture_id".into(), Value::String(lecture_id)); + sample.insert("course_id".into(), Value::String(course_id.clone())); + duplicate_string_field(&mut sample, "course_id", "courseId"); + sample.insert("lecture_id".into(), Value::String(lecture_id.clone())); + duplicate_string_field(&mut sample, "lecture_id", "lectureId"); if let Some(metadata) = metadata { insert_optional_string(&mut sample, "course_title", metadata.course_title); + duplicate_string_field(&mut sample, "course_title", "courseTitle"); insert_optional_string(&mut sample, "section_id", metadata.section_id.clone()); + duplicate_string_field(&mut sample, "section_id", "sectionId"); insert_optional_string(&mut sample, "section_title", metadata.section_title); + duplicate_string_field(&mut sample, "section_title", "sectionTitle"); insert_optional_string(&mut sample, "lecture_title", metadata.lecture_title); + duplicate_string_field(&mut sample, "lecture_title", "lectureTitle"); } Value::Object(sample) @@ -387,12 +187,18 @@ fn build_subtask_sample(input: SubtaskSampleInput, is_lab: bool) -> Value { let mut sample = Map::new(); sample.insert("task_id".into(), Value::String(task_id.clone())); + duplicate_string_field(&mut sample, "task_id", "taskId"); sample.insert("subtask_id".into(), Value::String(subtask_id.clone())); + duplicate_string_field(&mut sample, "subtask_id", "subtaskId"); sample.insert("subtask_type".into(), Value::String(subtask_type.clone())); + duplicate_string_field(&mut sample, "subtask_type", "subtaskType"); insert_optional_string(&mut sample, "course_id", course_id.clone()); + duplicate_string_field(&mut sample, "course_id", "courseId"); insert_optional_string(&mut sample, "section_id", section_id.clone()); + duplicate_string_field(&mut sample, "section_id", "sectionId"); insert_optional_string(&mut sample, "lecture_id", lecture_id.clone()); + duplicate_string_field(&mut sample, "lecture_id", "lectureId"); if let Some(category_id) = category_id { sample.insert("category_id".into(), Value::String(category_id.to_string())); @@ -407,11 +213,21 @@ fn build_subtask_sample(input: SubtaskSampleInput, is_lab: bool) -> Value { if is_lab { insert_optional_string(&mut sample, "lab_title", challenge_title); - sample.insert("challenge_id".into(), Value::String(task_id)); - sample.insert("coding_challenge_id".into(), Value::String(subtask_id)); + duplicate_string_field(&mut sample, "lab_title", "labTitle"); + sample.insert("challenge_id".into(), Value::String(task_id.clone())); + duplicate_string_field(&mut sample, "challenge_id", "challengeId"); + sample.insert( + "coding_challenge_id".into(), + Value::String(subtask_id.clone()), + ); + duplicate_string_field(&mut sample, "coding_challenge_id", "codingChallengeId"); } else { insert_optional_string(&mut sample, "task_title", challenge_title); + duplicate_string_field(&mut sample, "task_title", "taskTitle"); sample.insert("solve_id".into(), Value::String(task_id.clone())); + duplicate_string_field(&mut sample, "solve_id", "solveId"); + sample.insert("solvable_id".into(), Value::String(task_id.clone())); + duplicate_string_field(&mut sample, "solvable_id", "solvableId"); sample.insert( "quizzes_from".into(), Value::String(derive_quizzes_from( @@ -420,10 +236,13 @@ fn build_subtask_sample(input: SubtaskSampleInput, is_lab: bool) -> Value { &subtask_type, )), ); + duplicate_string_field(&mut sample, "quizzes_from", "quizzesFrom"); if subtask_type.contains("matching") { sample.insert("matching_id".into(), Value::String(subtask_id.clone())); + duplicate_string_field(&mut sample, "matching_id", "matchingId"); } - sample.insert("query_subtask_id".into(), Value::String(subtask_id)); + sample.insert("query_subtask_id".into(), Value::String(subtask_id.clone())); + duplicate_string_field(&mut sample, "query_subtask_id", "querySubTaskId"); } Value::Object(sample) @@ -434,21 +253,6 @@ async fn fetch_lecture_metadata( course_id: &str, lecture_id: &str, ) -> Result> { - let course_uuid = match Uuid::parse_str(course_id) { - Ok(uuid) => uuid, - Err(err) => { - warn!(error = %err, %course_id, "Skipping lecture metadata; invalid course_id"); - return Ok(None); - } - }; - let lecture_uuid = match Uuid::parse_str(lecture_id) { - Ok(uuid) => uuid, - Err(err) => { - warn!(error = %err, %lecture_id, "Skipping lecture metadata; invalid lecture_id"); - return Ok(None); - } - }; - let row = match conn .query_opt( "select \ @@ -465,7 +269,7 @@ async fn fetch_lecture_metadata( where lecture.course_id = $1 \ and lecture.id = $2 \ limit 1", - &[&course_uuid, &lecture_uuid], + &[&course_id, &lecture_id], ) .await { @@ -482,17 +286,25 @@ async fn fetch_lecture_metadata( let metadata = row.map(|row| LectureMetadata { course_title: row .try_get::<_, Option>("course_title") - .unwrap_or(None), + .unwrap_or(None) + .and_then(normalize_db_string), section_id: row .try_get::<_, Option>("section_id") .unwrap_or(None) - .map(|id| id.to_string()), + .map(|id| id.to_string()) + .or_else(|| { + row.try_get::<_, Option>("section_id") + .unwrap_or(None) + .and_then(normalize_db_string) + }), section_title: row .try_get::<_, Option>("section_title") - .unwrap_or(None), + .unwrap_or(None) + .and_then(normalize_db_string), lecture_title: row .try_get::<_, Option>("lecture_title") - .unwrap_or(None), + .unwrap_or(None) + .and_then(normalize_db_string), }); Ok(metadata) @@ -510,6 +322,23 @@ fn is_metadata_lookup_error(err: &tokio_postgres::Error) -> bool { ) } +fn insert_optional_string(map: &mut Map, key: &str, value: Option) { + if let Some(value) = value.filter(|value| !value.trim().is_empty()) { + map.insert(key.to_owned(), Value::String(value)); + } +} + +fn duplicate_string_field(map: &mut Map, source: &str, alias: &str) { + if map.contains_key(alias) { + return; + } + + if let Some(Value::String(existing)) = map.get(source) { + let alias_value = existing.clone(); + map.insert(alias.to_owned(), Value::String(alias_value)); + } +} + fn normalize_db_string(value: String) -> Option { let trimmed = value.trim(); if trimmed.is_empty() { @@ -519,12 +348,303 @@ fn normalize_db_string(value: String) -> Option { } } -fn insert_optional_string(map: &mut Map, key: &str, value: Option) { - if let Some(value) = value { - if !value.trim().is_empty() { - map.insert(key.to_owned(), Value::String(value)); +#[cfg(test)] +mod tests { + use super::*; + use chrono::{NaiveDate, TimeZone}; + use serde_json::Value; + use std::cell::RefCell; + + struct FakeTimestampRow { + datetime: RefCell>>>>, + naive: RefCell>>>, + } + + impl FakeTimestampRow { + fn new( + datetime: Result>>, + naive: Result>, + ) -> Self { + Self { + datetime: RefCell::new(Some(datetime)), + naive: RefCell::new(Some(naive)), + } + } + } + + impl TimestampColumnAccessor for FakeTimestampRow { + fn try_get_datetime_utc(&self, _column: &str) -> Result>> { + self.datetime + .borrow_mut() + .take() + .expect("datetime accessor should be called once") + } + + fn try_get_naive_datetime(&self, _column: &str) -> Result> { + self.naive + .borrow_mut() + .take() + .expect("naive accessor should be called once") + } + } + + #[test] + fn read_optional_timestamp_prefers_timezone_aware_value() { + let expected = Utc.with_ymd_and_hms(2025, 11, 2, 13, 0, 0).unwrap(); + let row = FakeTimestampRow::new(Ok(Some(expected)), Err(anyhow!("naive unused"))); + + let actual = read_optional_timestamp(&row, "completed").expect("timestamp read"); + + assert_eq!(actual, Some(expected)); + } + + #[test] + fn read_optional_timestamp_falls_back_to_naive_value() { + let naive = NaiveDate::from_ymd_opt(2025, 11, 2) + .unwrap() + .and_hms_opt(12, 30, 0) + .unwrap(); + let row = FakeTimestampRow::new(Err(anyhow!("type mismatch")), Ok(Some(naive))); + + let actual = read_optional_timestamp(&row, "completed").expect("timestamp read"); + + assert_eq!( + actual, + Some(DateTime::from_naive_utc_and_offset(naive, Utc)) + ); + } + + #[test] + fn read_required_timestamp_errors_on_null() { + let row = FakeTimestampRow::new(Ok(None), Ok(None)); + + let err = read_required_timestamp(&row, "completed").expect_err("null timestamp"); + + assert!( + err.to_string() + .contains("column `completed` returned NULL timestamp"), + "expected helpful error message" + ); + } + + fn row( + solved: Option>, + subtask_type: &str, + task_id: &str, + subtask_id: &str, + challenge_title: Option<&str>, + ) -> SubtaskRow { + SubtaskRow { + solved_timestamp: solved, + task_id: task_id.to_owned(), + subtask_id: subtask_id.to_owned(), + subtask_type: subtask_type.to_owned(), + challenge_title: challenge_title.map(|title| title.to_owned()), + category_id: None, + skill_ids: Vec::new(), + course_id: Some("course-1".to_owned()), + section_id: Some("section-1".to_owned()), + lecture_id: Some("lecture-1".to_owned()), } } + + #[test] + fn build_subtask_activity_returns_none_without_matching_rows() { + let solved = Utc.with_ymd_and_hms(2025, 11, 1, 9, 0, 0).unwrap(); + let rows = vec![row( + Some(solved), + "coding_challenge", + "task", + "sub", + Some("Lab"), + )]; + let day_start = Utc.with_ymd_and_hms(2025, 11, 1, 0, 0, 0).unwrap(); + let day_end = day_start + chrono::Duration::days(1); + + assert!(build_subtask_activity(&rows, &["matching"], false, day_start, day_end).is_none()); + } + + #[test] + fn build_subtask_activity_tracks_first_and_last_for_practice() { + let first = Utc.with_ymd_and_hms(2025, 11, 1, 8, 0, 0).unwrap(); + let mid = Utc.with_ymd_and_hms(2025, 11, 1, 10, 30, 0).unwrap(); + let last = Utc.with_ymd_and_hms(2025, 11, 1, 14, 15, 0).unwrap(); + + let rows = vec![ + row(Some(first), "matching", "task-1", "sub-1", Some("Match A")), + row( + Some(mid), + "coding_challenge", + "task-ignored", + "sub-ignored", + None, + ), + row( + Some(last), + "multiple_choice_question", + "task-2", + "sub-2", + Some("Quiz B"), + ), + ]; + let day_start = Utc.with_ymd_and_hms(2025, 11, 1, 0, 0, 0).unwrap(); + let day_end = day_start + chrono::Duration::days(1); + + let activity = build_subtask_activity( + &rows, + &["matching", "multiple_choice_question", "question"], + false, + day_start, + day_end, + ) + .expect("activity expected"); + + assert_eq!(activity.first_detected_at, first); + assert_eq!(activity.last_detected_at, last); + + let sample_value = activity.activity_sample.expect("practice sample expected"); + let sample = sample_value.as_object().expect("sample object"); + + assert_eq!( + sample.get("task_id").and_then(Value::as_str), + Some("task-1") + ); + assert_eq!( + sample.get("matching_id").and_then(Value::as_str), + Some("sub-1") + ); + assert_eq!( + sample.get("task_title").and_then(Value::as_str), + Some("Match A") + ); + } + + #[test] + fn build_subtask_activity_builds_lab_sample() { + let solved = Utc.with_ymd_and_hms(2025, 11, 2, 12, 0, 0).unwrap(); + let mut lab_row = row( + Some(solved), + "coding_challenge", + "lab-task", + "lab-sub", + Some("FizzBuzz"), + ); + lab_row.skill_ids = vec!["rust".to_owned()]; + let day_start = Utc.with_ymd_and_hms(2025, 11, 2, 0, 0, 0).unwrap(); + let day_end = day_start + chrono::Duration::days(1); + + let activity = + build_subtask_activity(&[lab_row], &["coding_challenge"], true, day_start, day_end) + .expect("lab activity"); + + assert_eq!(activity.first_detected_at, solved); + assert_eq!(activity.last_detected_at, solved); + + let sample_value = activity.activity_sample.expect("lab sample expected"); + let sample = sample_value.as_object().expect("sample object"); + + assert_eq!( + sample.get("coding_challenge_id").and_then(Value::as_str), + Some("lab-sub") + ); + assert_eq!( + sample.get("lab_title").and_then(Value::as_str), + Some("FizzBuzz") + ); + assert_eq!( + sample + .get("skill_ids") + .and_then(Value::as_array) + .map(|ids| ids.len()), + Some(1) + ); + } + + #[test] + fn build_subtask_activity_ignores_out_of_window_entries() { + let day_start = Utc.with_ymd_and_hms(2025, 11, 3, 0, 0, 0).unwrap(); + let day_end = day_start + chrono::Duration::days(1); + let solved = day_start - chrono::Duration::hours(1); + + let rows = vec![row( + Some(solved), + "matching", + "task-out-of-window", + "sub-out-of-window", + None, + )]; + + assert!( + build_subtask_activity(&rows, &["matching"], false, day_start, day_end).is_none(), + "entries outside the day should be ignored" + ); + } + + #[test] + fn build_subtask_activity_prefers_today_entries() { + let day_start = Utc.with_ymd_and_hms(2025, 11, 4, 0, 0, 0).unwrap(); + let day_end = day_start + chrono::Duration::days(1); + let before = day_start - chrono::Duration::hours(2); + let morning = day_start + chrono::Duration::hours(1); + let evening = day_start + chrono::Duration::hours(5); + + let rows = vec![ + row( + Some(before), + "matching", + "task-before", + "sub-before", + Some("Old Match"), + ), + row( + Some(morning), + "matching", + "task-today", + "sub-today", + Some("Today Match"), + ), + row( + Some(evening), + "matching", + "task-today-late", + "sub-today-late", + Some("Evening Match"), + ), + ]; + + let activity = build_subtask_activity(&rows, &["matching"], false, day_start, day_end) + .expect("today activity expected"); + + assert_eq!(activity.first_detected_at, morning); + assert_eq!(activity.last_detected_at, evening); + + let sample_value = activity.activity_sample.expect("practice sample expected"); + let sample = sample_value.as_object().expect("sample object"); + + assert_eq!( + sample.get("matching_id").and_then(Value::as_str), + Some("sub-today"), + ); + } + + #[test] + fn build_subtask_activity_ignores_unsolved_entries() { + let day_start = Utc.with_ymd_and_hms(2025, 11, 5, 0, 0, 0).unwrap(); + let day_end = day_start + chrono::Duration::days(1); + + let rows = vec![row( + None, + "matching", + "task-pending", + "sub-pending", + Some("Pending Match"), + )]; + + assert!( + build_subtask_activity(&rows, &["matching"], false, day_start, day_end).is_none(), + "pending subtasks should not trigger detection", + ); + } } fn derive_quizzes_from( @@ -543,3 +663,771 @@ fn derive_quizzes_from( } "quiz".to_owned() } + +#[derive(Debug, Deserialize)] +struct RecommendationCourse { + id: String, + #[serde(default)] + title: Option, + #[serde(default)] + image: Option, +} + +#[derive(Debug, Deserialize)] +struct RecommendationSection { + id: String, + #[serde(default)] + title: Option, +} + +#[derive(Debug, Deserialize)] +struct RecommendationLecture { + id: String, + #[serde(default)] + title: Option, +} + +#[derive(Debug, Deserialize)] +struct RecommendationTask { + id: String, + subtask_id: String, + subtask_type: String, +} + +#[derive(Debug, Deserialize)] +struct NextLectureRecommendation { + course: RecommendationCourse, + section: RecommendationSection, + lecture: RecommendationLecture, +} + +#[derive(Debug, Deserialize)] +struct NextTaskRecommendation { + course: RecommendationCourse, + section: RecommendationSection, + lecture: RecommendationLecture, + task: RecommendationTask, +} + +#[derive(Debug, Deserialize)] +struct NextLabRecommendation { + course: RecommendationCourse, + section: RecommendationSection, + lecture: RecommendationLecture, + task: RecommendationTask, +} + +#[derive(Debug, Clone)] +pub struct DailyRewardActivityServiceImpl { + skills: Option, + challenges: Option, + skills_recommendations: Option, +} + +#[derive(Debug, Clone)] +struct ActivityPool { + pool: Pool>, +} + +type PgConnection<'a> = PooledConnection<'a, PostgresConnectionManager>; + +#[derive(Debug, Default)] +struct LectureMetadata { + course_title: Option, + section_id: Option, + section_title: Option, + lecture_title: Option, +} + +#[derive(Debug)] +struct SubtaskSampleInput { + task_id: String, + subtask_id: String, + subtask_type: String, + challenge_title: Option, + category_id: Option, + skill_ids: Vec, + course_id: Option, + section_id: Option, + lecture_id: Option, +} + +#[derive(Debug, Clone)] +struct SubtaskRow { + solved_timestamp: Option>, + task_id: String, + subtask_id: String, + subtask_type: String, + challenge_title: Option, + category_id: Option, + skill_ids: Vec, + course_id: Option, + section_id: Option, + lecture_id: Option, +} + +#[derive(Debug, Default)] +struct ChallengeMetadata { + challenge_title: Option, + category_id: Option, + skill_ids: Vec, + course_id: Option, + section_id: Option, + lecture_id: Option, +} + +impl ActivityPool { + async fn new(config: &PostgresActivityConfig) -> Result { + let manager = PostgresConnectionManager::new(config.dsn.parse()?, NoTls); + let min_idle = (config.min_connections > 0).then_some(config.min_connections); + let pool = Pool::builder() + .max_size(config.max_connections) + .min_idle(min_idle) + .connection_timeout(config.acquire_timeout) + .idle_timeout(config.idle_timeout) + .max_lifetime(config.max_lifetime) + .build(manager) + .await?; + + Ok(Self { pool }) + } + + async fn connection(&self) -> Result> { + self.pool.get().await.map_err(Into::into) + } +} + +async fn detect_lecture( + conn: &PgConnection<'_>, + user_id: UserId, + day_start: DateTime, + day_end: DateTime, +) -> Result> { + let day_start_naive = day_start.naive_utc(); + let day_end_naive = day_end.naive_utc(); + + let first_row = conn + .query_opt( + "select course_id, lecture_id, completed \ + from skills_lecture_progress \ + where user_id::uuid = $1 \ + and completed >= $2 \ + and completed < $3 \ + order by completed asc \ + limit 1", + &[&*user_id, &day_start_naive, &day_end_naive], + ) + .await?; + + let Some(first_row) = first_row else { + return Ok(None); + }; + + let course_id: String = first_row.get("course_id"); + let lecture_id: String = first_row.get("lecture_id"); + + let first_completed = + read_required_timestamp(&PgTimestampRow { row: &first_row }, "completed")?; + let mut last_completed = first_completed; + let maybe_last = conn + .query_opt( + "select max(completed) as completed \ + from skills_lecture_progress \ + where user_id::uuid = $1 \ + and completed >= $2 \ + and completed < $3", + &[&*user_id, &day_start_naive, &day_end_naive], + ) + .await? + .map(|row| read_optional_timestamp(&PgTimestampRow { row: &row }, "completed")) + .transpose()? + .flatten(); + + if let Some(value) = maybe_last { + last_completed = value; + } + + let metadata = fetch_lecture_metadata(conn, &course_id, &lecture_id).await?; + let sample = build_lecture_sample(course_id, lecture_id, metadata); + + Ok(Some(DailyRewardActivity { + first_detected_at: first_completed, + last_detected_at: last_completed, + activity_sample: Some(sample), + })) +} + +async fn detect_subtask( + conn: &PgConnection<'_>, + user_id: UserId, + day_start: DateTime, + day_end: DateTime, + allowed_types: &[&str], + is_lab: bool, +) -> Result> { + if allowed_types.is_empty() { + return Ok(None); + } + + let allowed: Vec<&str> = allowed_types.to_vec(); + let day_start_naive = day_start.naive_utc(); + let day_end_naive = day_end.naive_utc(); + + let rows = conn + .query( + "select \ + cs.task_id, \ + cs.ty::text as subtask_type, \ + cus.subtask_id, \ + cus.solved_timestamp, \ + cc.title as challenge_title, \ + cc.category_id, \ + cc.skill_ids, \ + cct.course_id::text as course_id, \ + cct.section_id::text as section_id, \ + cct.lecture_id::text as lecture_id \ + from challenges_user_subtasks cus \ + join challenges_subtasks cs on cs.id = cus.subtask_id \ + left join challenges_challenges cc on cc.task_id = cs.task_id \ + left join challenges_course_tasks cct on cct.task_id = cs.task_id \ + where cus.user_id = $1::uuid \ + and cus.solved_timestamp >= $2 \ + and cus.solved_timestamp < $3 \ + and cs.enabled is true \ + and cs.retired is false \ + and cs.ty::text = any($4::text[]) \ + order by cus.solved_timestamp asc", + &[&*user_id, &day_start_naive, &day_end_naive, &allowed], + ) + .await?; + + let mut subtasks = Vec::with_capacity(rows.len()); + + for row in rows { + let solved_timestamp = + read_optional_timestamp(&PgTimestampRow { row: &row }, "solved_timestamp")?; + let task_id: Uuid = row.get("task_id"); + let subtask_id: Uuid = row.get("subtask_id"); + let challenge_title = row + .try_get::<_, Option>("challenge_title") + .unwrap_or(None) + .and_then(normalize_db_string); + let category_id = row + .try_get::<_, Option>("category_id") + .unwrap_or(None); + let skill_ids: Vec = match row.try_get::<_, Vec>("skill_ids") { + Ok(ids) => ids, + Err(_) => row + .try_get::<_, Vec>("skill_ids") + .map(|ids| ids.into_iter().map(|id| id.to_string()).collect()) + .unwrap_or_default(), + }; + let course_id = row + .try_get::<_, Option>("course_id") + .unwrap_or(None) + .and_then(normalize_db_string); + let section_id = row + .try_get::<_, Option>("section_id") + .unwrap_or(None) + .and_then(normalize_db_string); + let lecture_id = row + .try_get::<_, Option>("lecture_id") + .unwrap_or(None) + .and_then(normalize_db_string); + + subtasks.push(SubtaskRow { + solved_timestamp, + task_id: task_id.to_string(), + subtask_id: subtask_id.to_string(), + subtask_type: row.get("subtask_type"), + challenge_title, + category_id, + skill_ids, + course_id, + section_id, + lecture_id, + }); + } + + Ok(build_subtask_activity( + &subtasks, + allowed_types, + is_lab, + day_start, + day_end, + )) +} + +fn build_subtask_activity( + rows: &[SubtaskRow], + allowed_types: &[&str], + is_lab: bool, + day_start: DateTime, + day_end: DateTime, +) -> Option { + let mut first_detected_at: Option> = None; + let mut last_detected_at: Option> = None; + let mut sample = None; + + for row in rows { + let Some(solved_timestamp) = row.solved_timestamp else { + continue; + }; + + if solved_timestamp < day_start || solved_timestamp >= day_end { + continue; + } + + if !allowed_types + .iter() + .any(|allowed| allowed.eq_ignore_ascii_case(row.subtask_type.as_str())) + { + continue; + } + + if first_detected_at.is_none() { + first_detected_at = Some(solved_timestamp); + sample = Some(build_subtask_sample( + SubtaskSampleInput { + task_id: row.task_id.clone(), + subtask_id: row.subtask_id.clone(), + subtask_type: row.subtask_type.clone(), + challenge_title: row.challenge_title.clone(), + category_id: row.category_id, + skill_ids: row.skill_ids.clone(), + course_id: row.course_id.clone(), + section_id: row.section_id.clone(), + lecture_id: row.lecture_id.clone(), + }, + is_lab, + )); + } + + last_detected_at = Some(match last_detected_at { + Some(existing) if existing >= solved_timestamp => existing, + _ => solved_timestamp, + }); + } + + let first_detected_at = first_detected_at?; + let last_detected_at = last_detected_at.unwrap_or(first_detected_at); + + Some(DailyRewardActivity { + first_detected_at, + last_detected_at, + activity_sample: sample, + }) +} + +impl DailyRewardActivityServiceImpl { + pub async fn new( + skills: Option, + challenges: Option, + skills_recommendations: Option, + ) -> Result { + let skills_pool = match skills { + Some(ref cfg) => Some( + ActivityPool::new(cfg) + .await + .context("Failed to initialise skills activity pool")?, + ), + None => None, + }; + + let challenges_pool = match challenges { + Some(ref cfg) => Some( + ActivityPool::new(cfg) + .await + .context("Failed to initialise challenges activity pool")?, + ), + None => None, + }; + + let recommendations_client = match skills_recommendations { + Some(ref cfg) => Some( + SkillsRecommendationClient::new(cfg) + .context("Failed to initialise skills recommendations client")?, + ), + None => None, + }; + + Ok(Self { + skills: skills_pool, + challenges: challenges_pool, + skills_recommendations: recommendations_client, + }) + } +} + +impl DailyRewardActivityService for DailyRewardActivityServiceImpl { + async fn detect( + &self, + token: Option<&AccessToken>, + user_id: UserId, + day_start: DateTime, + day_end: DateTime, + ) -> Result { + let mut snapshot = DailyRewardActivitySnapshot::default(); + + if let Some(skills) = &self.skills { + match skills.connection().await { + Ok(conn) => match detect_lecture(&conn, user_id, day_start, day_end).await { + Ok(Some(activity)) => snapshot.lecture.detected = Some(activity), + Ok(None) => {} + Err(err) => { + warn!(error = ?err, "Failed to detect lecture completion"); + snapshot.lecture.unavailable_reason = + Some(DailyRewardUnavailableReason::Unknown); + } + }, + Err(err) => { + warn!(error = %err, "Failed to acquire skills connection"); + snapshot.lecture.unavailable_reason = + Some(DailyRewardUnavailableReason::Unknown); + } + } + } + + if let Some(challenges) = &self.challenges { + match challenges.connection().await { + Ok(conn) => { + match detect_subtask( + &conn, + user_id, + day_start, + day_end, + &["matching", "multiple_choice_question", "question"], + false, + ) + .await + { + Ok(Some(activity)) => snapshot.practice.detected = Some(activity), + Ok(None) => {} + Err(err) => { + warn!(error = ?err, "Failed to detect practice completion"); + snapshot.practice.unavailable_reason = + Some(DailyRewardUnavailableReason::Unknown); + } + } + + match detect_subtask( + &conn, + user_id, + day_start, + day_end, + &["coding_challenge"], + true, + ) + .await + { + Ok(Some(activity)) => snapshot.lab.detected = Some(activity), + Ok(None) => {} + Err(err) => { + warn!(error = ?err, "Failed to detect lab completion"); + snapshot.lab.unavailable_reason = + Some(DailyRewardUnavailableReason::Unknown); + } + } + } + Err(err) => { + warn!(error = %err, "Failed to acquire challenges connection"); + snapshot.practice.unavailable_reason = + Some(DailyRewardUnavailableReason::Unknown); + snapshot.lab.unavailable_reason = Some(DailyRewardUnavailableReason::Unknown); + } + } + } + + if let (Some(token), Some(client)) = (token, &self.skills_recommendations) { + match client.ext_lecture(token).await { + Ok(Some(recommendation)) => { + let sample = self.build_lecture_recommendation_sample(&recommendation); + Self::apply_recommendation(&mut snapshot.lecture, Some(sample)); + } + Ok(None) => Self::apply_recommendation(&mut snapshot.lecture, None), + Err(err) => { + warn!(error = %err, "Failed to fetch lecture recommendation"); + Self::mark_recommendation_error(&mut snapshot.lecture); + } + } + + match client.ext_task(token).await { + Ok(Some(recommendation)) => match self + .build_task_recommendation_sample(&recommendation, false) + .await + { + Ok(sample) => Self::apply_recommendation(&mut snapshot.practice, Some(sample)), + Err(err) => { + warn!(error = %err, "Failed to enrich practice recommendation"); + Self::mark_recommendation_error(&mut snapshot.practice); + } + }, + Ok(None) => Self::apply_recommendation(&mut snapshot.practice, None), + Err(err) => { + warn!(error = %err, "Failed to fetch practice recommendation"); + Self::mark_recommendation_error(&mut snapshot.practice); + } + } + + match client.ext_lab(token).await { + Ok(Some(recommendation)) => { + match self.build_lab_recommendation_sample(&recommendation).await { + Ok(sample) => Self::apply_recommendation(&mut snapshot.lab, Some(sample)), + Err(err) => { + warn!(error = %err, "Failed to enrich lab recommendation"); + Self::mark_recommendation_error(&mut snapshot.lab); + } + } + } + Ok(None) => Self::apply_recommendation(&mut snapshot.lab, None), + Err(err) => { + warn!(error = %err, "Failed to fetch lab recommendation"); + Self::mark_recommendation_error(&mut snapshot.lab); + } + } + } + + Ok(snapshot) + } +} + +impl DailyRewardActivityServiceImpl { + fn build_lecture_recommendation_sample( + &self, + recommendation: &NextLectureRecommendation, + ) -> Value { + let metadata = LectureMetadata { + course_title: recommendation.course.title.clone(), + section_id: Some(recommendation.section.id.clone()), + section_title: recommendation.section.title.clone(), + lecture_title: recommendation.lecture.title.clone(), + }; + + let mut sample = build_lecture_sample( + recommendation.course.id.clone(), + recommendation.lecture.id.clone(), + Some(metadata), + ); + + if let Value::Object(ref mut map) = sample + && let Some(image) = &recommendation.course.image + { + map.insert("course_image".into(), Value::String(image.clone())); + duplicate_string_field(map, "course_image", "courseImage"); + } + + sample + } + + async fn build_task_recommendation_sample( + &self, + recommendation: &NextTaskRecommendation, + is_lab: bool, + ) -> Result { + self.build_subtask_recommendation_sample( + &recommendation.task.id, + &recommendation.task.subtask_id, + &recommendation.task.subtask_type, + ( + &recommendation.course, + &recommendation.section, + &recommendation.lecture, + ), + is_lab, + ) + .await + } + + async fn build_lab_recommendation_sample( + &self, + recommendation: &NextLabRecommendation, + ) -> Result { + self.build_subtask_recommendation_sample( + &recommendation.task.id, + &recommendation.task.subtask_id, + &recommendation.task.subtask_type, + ( + &recommendation.course, + &recommendation.section, + &recommendation.lecture, + ), + true, + ) + .await + } + + async fn build_subtask_recommendation_sample( + &self, + task_id: &str, + subtask_id: &str, + subtask_type: &str, + context: ( + &RecommendationCourse, + &RecommendationSection, + &RecommendationLecture, + ), + is_lab: bool, + ) -> Result { + let (course, section, lecture) = context; + let metadata = self.fetch_challenge_metadata(task_id).await?; + let ChallengeMetadata { + challenge_title, + category_id, + skill_ids, + course_id, + section_id, + lecture_id, + } = metadata.unwrap_or_default(); + + let challenge_title = challenge_title.or_else(|| lecture.title.clone()); + let course_id = course_id.or_else(|| Some(course.id.clone())); + let section_id = section_id.or_else(|| Some(section.id.clone())); + let lecture_id = lecture_id.or_else(|| Some(lecture.id.clone())); + + let mut sample = build_subtask_sample( + SubtaskSampleInput { + task_id: task_id.to_owned(), + subtask_id: subtask_id.to_owned(), + subtask_type: subtask_type.to_owned(), + challenge_title, + category_id, + skill_ids, + course_id, + section_id, + lecture_id, + }, + is_lab, + ); + + if let Value::Object(ref mut map) = sample { + if let Some(image) = &course.image { + map.insert("course_image".into(), Value::String(image.clone())); + duplicate_string_field(map, "course_image", "courseImage"); + } + if let Some(title) = &course.title { + map.insert("course_title".into(), Value::String(title.clone())); + duplicate_string_field(map, "course_title", "courseTitle"); + } + if let Some(section_title) = §ion.title { + map.insert("section_title".into(), Value::String(section_title.clone())); + duplicate_string_field(map, "section_title", "sectionTitle"); + } + if let Some(lecture_title) = &lecture.title { + map.insert("lecture_title".into(), Value::String(lecture_title.clone())); + duplicate_string_field(map, "lecture_title", "lectureTitle"); + } + } + + Ok(sample) + } + + async fn fetch_challenge_metadata(&self, task_id: &str) -> Result> { + let Some(challenges) = &self.challenges else { + return Ok(None); + }; + + let task_uuid = match Uuid::parse_str(task_id) { + Ok(uuid) => uuid, + Err(err) => { + warn!(error = %err, %task_id, "Skipping challenge metadata; invalid task_id"); + return Ok(None); + } + }; + + let conn = match challenges.connection().await { + Ok(conn) => conn, + Err(err) => { + warn!( + error = %err, + "Failed to acquire challenges connection for recommendation metadata" + ); + return Ok(None); + } + }; + + let row = conn + .query_opt( + "select \ + cc.title as challenge_title, \ + cc.category_id, \ + cc.skill_ids, \ + cct.course_id::text as course_id, \ + cct.section_id::text as section_id, \ + cct.lecture_id::text as lecture_id \ + from challenges_challenges cc \ + left join challenges_course_tasks cct on cct.task_id = cc.task_id \ + where cc.task_id = $1 \ + limit 1", + &[&task_uuid], + ) + .await?; + + let Some(row) = row else { + return Ok(None); + }; + + let challenge_title = row + .try_get::<_, Option>("challenge_title") + .unwrap_or(None) + .and_then(normalize_db_string); + let category_id = row + .try_get::<_, Option>("category_id") + .unwrap_or(None); + let skill_ids: Vec = match row.try_get::<_, Vec>("skill_ids") { + Ok(ids) => ids, + Err(_) => row + .try_get::<_, Vec>("skill_ids") + .map(|ids| ids.into_iter().map(|id| id.to_string()).collect()) + .unwrap_or_default(), + }; + let course_id = row + .try_get::<_, Option>("course_id") + .unwrap_or(None) + .and_then(normalize_db_string); + let section_id = row + .try_get::<_, Option>("section_id") + .unwrap_or(None) + .and_then(normalize_db_string); + let lecture_id = row + .try_get::<_, Option>("lecture_id") + .unwrap_or(None) + .and_then(normalize_db_string); + + Ok(Some(ChallengeMetadata { + challenge_title, + category_id, + skill_ids, + course_id, + section_id, + lecture_id, + })) + } + + fn apply_recommendation(state: &mut DailyRewardActivityState, sample: Option) { + if state.detected.is_some() { + // The user already completed the activity; do not override with pending data. + return; + } + + match sample { + Some(sample) => { + state.pending_sample = Some(sample); + state.unavailable_reason = None; + } + None => { + if state.unavailable_reason.is_none() { + state.unavailable_reason = Some(DailyRewardUnavailableReason::NoRecommendation); + } + } + } + } + + fn mark_recommendation_error(state: &mut DailyRewardActivityState) { + if state.detected.is_some() { + return; + } + if state.unavailable_reason.is_none() { + state.unavailable_reason = Some(DailyRewardUnavailableReason::Unknown); + } + } +} diff --git a/academy_core/daily_rewards/impl/src/lib.rs b/academy_core/daily_rewards/impl/src/lib.rs index 7a74c65e..41698757 100644 --- a/academy_core/daily_rewards/impl/src/lib.rs +++ b/academy_core/daily_rewards/impl/src/lib.rs @@ -6,6 +6,7 @@ mod tests; pub use activity::{ ChallengesActivityConfig, DailyRewardActivityServiceImpl, SkillsActivityConfig, + SkillsRecommendationConfig, }; pub use service::{ DailyRewardCoinsConfig, DailyRewardFeatureConfig, DailyRewardFeatureServiceImpl, diff --git a/academy_core/daily_rewards/impl/src/service.rs b/academy_core/daily_rewards/impl/src/service.rs index e7420351..2c8f78e1 100644 --- a/academy_core/daily_rewards/impl/src/service.rs +++ b/academy_core/daily_rewards/impl/src/service.rs @@ -1,6 +1,7 @@ use std::{collections::HashMap, time::Duration}; use academy_auth_contracts::{AuthResultExt, AuthService}; +use academy_cache_contracts::CacheService; use academy_core_coin_contracts::coin::CoinService; use academy_core_daily_rewards_contracts::{ DailyRewardActivityService, DailyRewardActivitySnapshot, DailyRewardActivityState, @@ -57,11 +58,12 @@ pub struct DailyRewardFeatureConfig { } #[derive(Debug, Clone, Build)] -pub struct DailyRewardFeatureServiceImpl { +pub struct DailyRewardFeatureServiceImpl { db: Db, auth: Auth, repo: Repo, coin: Coin, + cache: Cache, activity: Activity, id: Id, time: Time, @@ -73,13 +75,14 @@ pub(crate) struct RefreshedRewards { pub(crate) unavailability: HashMap>, } -impl DailyRewardFeatureService - for DailyRewardFeatureServiceImpl +impl DailyRewardFeatureService + for DailyRewardFeatureServiceImpl where Db: Database, Auth: AuthService, Repo: DailyRewardRepository, Coin: CoinService, + Cache: CacheService, Activity: DailyRewardActivityService, Id: IdService, Time: TimeService, @@ -98,6 +101,28 @@ where let now = self.time.now(); let date = now.date_naive(); + let cache_ttl = self.config.cache_ttl; + let cache_key = cache_ttl.map(|_| cache_key(user_id, date)); + + let mut cached_snapshot = None; + + if let Some(cache_key) = cache_key.as_ref() { + match self.cache.get::(cache_key).await { + Ok(Some(snapshot)) => { + cached_snapshot = Some(snapshot); + } + Ok(None) => {} + Err(err) => { + warn!( + error = %err, + user_id = ?user_id, + date = %date, + "Failed to retrieve daily rewards snapshot from cache" + ); + } + } + } + let day_start = start_of_day_utc(date); let day_end = day_start + chrono::Duration::days(1); @@ -107,14 +132,49 @@ where .await .map_err(DailyRewardGetError::Other)?; - let refreshed = self - .refresh_entries(&mut txn, user_id, date, day_start, day_end) + let refreshed = match self + .refresh_entries(&mut txn, Some(token), user_id, date, day_start, day_end) .await - .map_err(DailyRewardGetError::Other)?; + { + Ok(refreshed) => refreshed, + Err(err) => { + if let Some(snapshot) = cached_snapshot { + warn!( + error = %err, + user_id = ?user_id, + date = %date, + "Failed to refresh daily rewards; returning cached snapshot" + ); + if let Err(rollback_err) = txn.rollback().await { + warn!( + error = %rollback_err, + user_id = ?user_id, + date = %date, + "Failed to rollback transaction after refresh failure" + ); + } + self.emit_view_event(user_id, &snapshot); + return Ok(DailyRewardGetResponse { snapshot }); + } + return Err(DailyRewardGetError::Other(err)); + } + }; txn.commit().await.map_err(DailyRewardGetError::Other)?; let snapshot = build_snapshot(date, refreshed); + + if let (Some(ttl), Some(cache_key)) = (cache_ttl, cache_key.as_ref()) + && let Err(err) = self.cache.set(cache_key, &snapshot, Some(ttl)).await + { + warn!( + error = %err, + user_id = ?user_id, + date = %date, + "Failed to store daily rewards snapshot in cache" + ); + } + self.emit_view_event(user_id, &snapshot); Ok(DailyRewardGetResponse { snapshot }) @@ -146,7 +206,7 @@ where .map_err(DailyRewardClaimError::Other)?; let refreshed = self - .refresh_entries(&mut txn, user_id, date, day_start, day_end) + .refresh_entries(&mut txn, Some(token), user_id, date, day_start, day_end) .await .map_err(DailyRewardClaimError::Other)?; @@ -197,6 +257,8 @@ where txn.commit().await.map_err(DailyRewardClaimError::Other)?; + self.invalidate_cache(user_id, date).await; + self.emit_claim_event(user_id, category, coins, claimed_at, &claimed_entry); Ok(DailyRewardClaimResponse { @@ -232,7 +294,7 @@ where .map_err(DailyRewardClaimAllError::Other)?; let refreshed = self - .refresh_entries(&mut txn, user_id, date, day_start, day_end) + .refresh_entries(&mut txn, Some(token), user_id, date, day_start, day_end) .await .map_err(DailyRewardClaimAllError::Other)?; @@ -331,6 +393,10 @@ where .await .map_err(DailyRewardClaimAllError::Other)?; + if !claimed_entries.is_empty() { + self.invalidate_cache(user_id, date).await; + } + for (category, coins, claimed_at, entry) in &claimed_entries { self.emit_claim_event(user_id, *category, *coins, *claimed_at, entry); } @@ -340,8 +406,15 @@ where } } -impl - DailyRewardFeatureServiceImpl +impl + DailyRewardFeatureServiceImpl +where + Db: Database, + Repo: DailyRewardRepository, + Cache: CacheService, + Activity: DailyRewardActivityService, + Id: IdService, + Time: TimeService, { fn emit_view_event(&self, user_id: UserId, snapshot: &DailyRewardsSnapshot) { let ready_categories = snapshot @@ -434,17 +507,83 @@ impl activity_sample = ?entry.activity_sample, ); } + + async fn invalidate_cache(&self, user_id: UserId, date: NaiveDate) { + if self.config.cache_ttl.is_none() { + return; + } + + let cache_key = cache_key(user_id, date); + if let Err(err) = self.cache.remove(&cache_key).await { + warn!( + error = %err, + user_id = ?user_id, + date = %date, + "Failed to remove daily rewards snapshot from cache" + ); + } + } + + pub async fn rebuild_snapshot( + &self, + user_id: UserId, + date: NaiveDate, + ) -> Result { + let cache_ttl = self.config.cache_ttl; + let cache_key = cache_ttl.map(|_| cache_key(user_id, date)); + + let day_start = start_of_day_utc(date); + let day_end = day_start + chrono::Duration::days(1); + + let mut txn = self.db.begin_transaction().await?; + let refreshed = self + .refresh_entries(&mut txn, None, user_id, date, day_start, day_end) + .await?; + txn.commit().await?; + + self.invalidate_cache(user_id, date).await; + + let snapshot = build_snapshot(date, refreshed); + + if let (Some(ttl), Some(cache_key)) = (cache_ttl, cache_key.as_ref()) { + match self.cache.set(cache_key, &snapshot, Some(ttl)).await { + Ok(()) => {} + Err(err) => { + warn!( + error = %err, + user_id = ?user_id, + date = %date, + "Failed to store rebuilt daily rewards snapshot in cache" + ); + } + } + } + + Ok(snapshot) + } } #[cfg(test)] -impl - DailyRewardFeatureServiceImpl +impl + DailyRewardFeatureServiceImpl +where + Db: Database, + Repo: DailyRewardRepository, + Cache: CacheService, + Activity: DailyRewardActivityService, + Id: IdService, + Time: TimeService, { + #[allow( + clippy::too_many_arguments, + reason = "Test helper wiring all dependencies explicitly for clarity" + )] pub(crate) fn new_for_tests( db: Db, auth: Auth, repo: Repo, coin: Coin, + cache: Cache, activity: Activity, id: Id, time: Time, @@ -455,6 +594,7 @@ impl auth, repo, coin, + cache, activity, id, time, @@ -467,6 +607,10 @@ fn start_of_day_utc(date: NaiveDate) -> DateTime { date.and_time(NaiveTime::MIN).and_utc() } +fn cache_key(user_id: UserId, date: NaiveDate) -> String { + format!("daily_rewards:{}:{}", user_id.into_inner(), date) +} + fn map_claim_error( err: DailyRewardMarkClaimedError, category: DailyRewardCategory, @@ -495,10 +639,11 @@ pub(crate) fn build_snapshot(date: NaiveDate, refreshed: RefreshedRewards) -> Da available_total += entry.coins; } - if let Some(claimed_at) = entry.claimed_at { - if claimed_at.date_naive() == date { - claimed_total += entry.coins; - } + if entry + .claimed_at + .is_some_and(|claimed_at| claimed_at.date_naive() == date) + { + claimed_total += entry.coins; } rewards.push(DailyRewardItem { @@ -540,11 +685,12 @@ fn determine_status( } } -impl - DailyRewardFeatureServiceImpl +impl + DailyRewardFeatureServiceImpl where Db: Database, Repo: DailyRewardRepository, + Cache: CacheService, Activity: DailyRewardActivityService, Id: IdService, Time: TimeService, @@ -552,6 +698,7 @@ where async fn refresh_entries( &self, txn: &mut Db::Transaction, + token: Option<&AccessToken>, user_id: UserId, date: NaiveDate, day_start: DateTime, @@ -618,14 +765,60 @@ where let activity = self .activity - .detect(user_id, day_start, day_end) + .detect(token, user_id, day_start, day_end) .await .unwrap_or_else(|err| { warn!(error = %err, "Failed to fetch activity data"); DailyRewardActivitySnapshot::default() }); - if apply_activity( + if let (true, Some(entry)) = ( + apply_activity( + txn, + user_id, + date, + DailyRewardCategory::Lecture, + &activity.lecture, + &self.repo, + &mut map, + ) + .await?, + map.get(&DailyRewardCategory::Lecture), + ) { + self.emit_category_ready_event(user_id, DailyRewardCategory::Lecture, entry); + } + if let (true, Some(entry)) = ( + apply_activity( + txn, + user_id, + date, + DailyRewardCategory::Practice, + &activity.practice, + &self.repo, + &mut map, + ) + .await?, + map.get(&DailyRewardCategory::Practice), + ) { + self.emit_category_ready_event(user_id, DailyRewardCategory::Practice, entry); + } + if let (true, Some(entry)) = ( + apply_activity( + txn, + user_id, + date, + DailyRewardCategory::Lab, + &activity.lab, + &self.repo, + &mut map, + ) + .await?, + map.get(&DailyRewardCategory::Lab), + ) { + self.emit_category_ready_event(user_id, DailyRewardCategory::Lab, entry); + } + + apply_pending_sample( txn, user_id, date, @@ -634,13 +827,8 @@ where &self.repo, &mut map, ) - .await? - { - if let Some(entry) = map.get(&DailyRewardCategory::Lecture) { - self.emit_category_ready_event(user_id, DailyRewardCategory::Lecture, entry); - } - } - if apply_activity( + .await?; + apply_pending_sample( txn, user_id, date, @@ -649,13 +837,8 @@ where &self.repo, &mut map, ) - .await? - { - if let Some(entry) = map.get(&DailyRewardCategory::Practice) { - self.emit_category_ready_event(user_id, DailyRewardCategory::Practice, entry); - } - } - if apply_activity( + .await?; + apply_pending_sample( txn, user_id, date, @@ -664,12 +847,7 @@ where &self.repo, &mut map, ) - .await? - { - if let Some(entry) = map.get(&DailyRewardCategory::Lab) { - self.emit_category_ready_event(user_id, DailyRewardCategory::Lab, entry); - } - } + .await?; let mut unavailability = HashMap::new(); unavailability.insert( @@ -728,11 +906,173 @@ where Ok(!was_ready && is_ready) } +async fn apply_pending_sample( + txn: &mut Txn, + user_id: UserId, + date: NaiveDate, + category: DailyRewardCategory, + state: &DailyRewardActivityState, + repo: &Repo, + map: &mut HashMap, +) -> Result<()> +where + Repo: DailyRewardRepository, + Txn: Transaction, +{ + if state.detected.is_some() { + return Ok(()); + } + + let Some(sample) = state.pending_sample.clone() else { + return Ok(()); + }; + + let Some(entry) = map.get(&category) else { + return Ok(()); + }; + + if entry.claimable_since.is_some() || entry.claimed_at.is_some() { + // The reward is already ready or claimed; keep the existing activity sample. + return Ok(()); + } + + let params = DailyRewardMarkReady { + user_id, + date_utc: date, + category, + first_detected_at: None, + last_detected_at: None, + claimable_since: None, + activity_sample: Some(sample), + }; + + let updated = repo.mark_ready(txn, params).await?; + map.insert(category, updated); + Ok(()) +} + +#[cfg(test)] +mod get_today_cache_tests { + use super::*; + use academy_auth_contracts::{Authentication, MockAuthService}; + use academy_cache_contracts::MockCacheService; + use academy_core_coin_contracts::coin::MockCoinService; + use academy_core_daily_rewards_contracts::{ + DailyRewardClaimTotals, DailyRewardsSnapshot, MockDailyRewardActivityService, + }; + use academy_models::{ + Sha256Hash, + auth::AccessToken, + session::{SessionId, SessionRefreshTokenHash}, + user::UserId, + }; + use academy_persistence_contracts::{ + MockDatabase, MockTransaction, daily_rewards::MockDailyRewardRepository, + }; + use academy_shared_contracts::{id::MockIdService, time::MockTimeService}; + use chrono::NaiveDate; + use mockall::predicate; + use std::future; + + #[tokio::test] + async fn returns_cached_snapshot_without_refreshing() { + let user_id = UserId::from(uuid::Uuid::new_v4()); + let date = NaiveDate::from_ymd_opt(2025, 11, 1).unwrap(); + let now = date.and_hms_opt(12, 0, 0).unwrap().and_utc(); + let token = AccessToken::new("token"); + + let snapshot = DailyRewardsSnapshot { + date_utc: date, + feature_enabled: true, + rewards: Vec::new(), + claim_totals: DailyRewardClaimTotals { + available_coins: 0, + claimed_today: 0, + }, + }; + + let mut auth = MockAuthService::new(); + auth.expect_authenticate() + .once() + .with(predicate::eq(token.clone())) + .return_once(move |_| { + Box::pin(future::ready(Ok(Authentication { + user_id, + session_id: SessionId::from(uuid::Uuid::new_v4()), + refresh_token_hash: SessionRefreshTokenHash::new(Sha256Hash::default()), + admin: false, + email_verified: true, + }))) + }); + + let cache_key = cache_key(user_id, date); + let mut cache = MockCacheService::new(); + { + let expected_snapshot = snapshot.clone(); + cache + .expect_get() + .once() + .with(predicate::eq(cache_key.clone())) + .return_once(move |_| Box::pin(future::ready(Ok(Some(expected_snapshot))))); + cache.expect_set::().never(); + } + + let db = MockDatabase::build_expect_rollback(); + + let mut repo = MockDailyRewardRepository::new(); + repo.expect_list_by_user_and_date() + .once() + .return_once(move |_, _, _| { + Box::pin(future::ready(Err(anyhow::anyhow!( + "failed to load entries" + )))) + }); + repo.expect_upsert_entry().never(); + repo.expect_mark_ready().never(); + repo.expect_mark_claimed().never(); + + let mut activity = MockDailyRewardActivityService::new(); + activity.expect_detect().never(); + + let coin = MockCoinService::::new(); + + let time = MockTimeService::new().with_now(now); + + let sut = DailyRewardFeatureServiceImpl::new_for_tests( + db, + auth, + repo, + coin, + cache, + activity, + MockIdService::new(), + time, + DailyRewardFeatureConfig { + enable: true, + coins: DailyRewardCoinsConfig { + arrival: 5, + lecture: 20, + practice: 10, + lab: 30, + }, + cache_ttl: Some(Duration::from_secs(60)), + }, + ); + + let response = sut.get_today(&token).await.unwrap(); + assert_eq!(response.snapshot.date_utc, date); + assert!(response.snapshot.rewards.is_empty()); + assert_eq!(response.snapshot.claim_totals.available_coins, 0); + assert_eq!(response.snapshot.claim_totals.claimed_today, 0); + } +} + #[cfg(test)] mod refresh_entries_tests { use super::*; use crate::DailyRewardFeatureConfig; use academy_auth_contracts::MockAuthService; + use academy_cache_contracts::MockCacheService; use academy_core_coin_contracts::coin::MockCoinService; use academy_core_daily_rewards_contracts::DailyRewardActivitySnapshot; use academy_core_daily_rewards_contracts::MockDailyRewardActivityService; @@ -797,10 +1137,10 @@ mod refresh_entries_tests { let day_end = day_start + chrono::Duration::days(1); let claimed_at = Utc.with_ymd_and_hms(2025, 11, 1, 8, 0, 0).unwrap(); - let arrival_entry = claimed_entry(user_id.clone(), date, claimed_at, 20); - let lecture_entry = entry(user_id.clone(), DailyRewardCategory::Lecture, date, 20); - let practice_entry = entry(user_id.clone(), DailyRewardCategory::Practice, date, 10); - let lab_entry = entry(user_id.clone(), DailyRewardCategory::Lab, date, 30); + let arrival_entry = claimed_entry(user_id, date, claimed_at, 20); + let lecture_entry = entry(user_id, DailyRewardCategory::Lecture, date, 20); + let practice_entry = entry(user_id, DailyRewardCategory::Practice, date, 10); + let lab_entry = entry(user_id, DailyRewardCategory::Lab, date, 30); let entries = vec![ arrival_entry.clone(), @@ -816,7 +1156,7 @@ mod refresh_entries_tests { .once() .with( predicate::always(), - predicate::eq(user_id.clone()), + predicate::eq(user_id), predicate::eq(date), ) .return_once(move |_, _, _| Box::pin(future::ready(Ok(entries)))); @@ -826,15 +1166,17 @@ mod refresh_entries_tests { let mut activity = MockDailyRewardActivityService::new(); let expected_day_start = day_start; let expected_day_end = day_end; + let expected_user = user_id; activity .expect_detect() .once() - .with( - predicate::eq(user_id.clone()), - predicate::eq(expected_day_start), - predicate::eq(expected_day_end), - ) - .return_once(|_, _, _| { + .withf(move |token, user, start, end| { + token.is_none() + && user == &expected_user + && start == &expected_day_start + && end == &expected_day_end + }) + .return_once(|_, _, _, _| { Box::pin(future::ready(Ok(DailyRewardActivitySnapshot::default()))) }); @@ -843,6 +1185,7 @@ mod refresh_entries_tests { MockAuthService::::new(), repo, MockCoinService::::new(), + MockCacheService::new(), activity, MockIdService::new(), MockTimeService::new(), @@ -861,7 +1204,7 @@ mod refresh_entries_tests { let mut txn = MockTransaction::new(); let refreshed = sut - .refresh_entries(&mut txn, user_id.clone(), date, day_start, day_end) + .refresh_entries(&mut txn, None, user_id, date, day_start, day_end) .await .unwrap(); diff --git a/academy_core/daily_rewards/impl/src/tests/activity.rs b/academy_core/daily_rewards/impl/src/tests/activity.rs new file mode 100644 index 00000000..81c47d43 --- /dev/null +++ b/academy_core/daily_rewards/impl/src/tests/activity.rs @@ -0,0 +1,255 @@ +use std::future; + +use academy_auth_contracts::{Authentication, MockAuthService}; +use academy_cache_contracts::MockCacheService; +use academy_core_coin_contracts::coin::MockCoinService; +use academy_core_daily_rewards_contracts::{ + DailyRewardActivity, DailyRewardActivitySnapshot, DailyRewardActivityState, + DailyRewardCategory, DailyRewardFeatureService, DailyRewardGetResponse, DailyRewardStatus, + MockDailyRewardActivityService, +}; +use academy_models::{ + Sha256Hash, + auth::AccessToken, + daily_rewards::DailyRewardEntry, + session::{SessionId, SessionRefreshTokenHash}, + user::UserId, +}; +use academy_persistence_contracts::{ + MockDatabase, MockTransaction, + daily_rewards::{DailyRewardMarkReady, MockDailyRewardRepository}, +}; +use academy_shared_contracts::{id::MockIdService, time::MockTimeService}; +use chrono::{DateTime, NaiveDate, TimeZone, Utc}; +use mockall::predicate; +use serde_json::json; +use uuid::Uuid; + +use crate::{DailyRewardFeatureConfig, DailyRewardFeatureServiceImpl}; + +fn make_entry( + user_id: UserId, + category: DailyRewardCategory, + date: NaiveDate, + coins: i32, + claimable_since: Option>, +) -> DailyRewardEntry { + DailyRewardEntry { + id: Uuid::new_v4(), + user_id, + date_utc: date, + category, + coins, + first_detected_at: claimable_since, + last_detected_at: claimable_since, + claimable_since, + claimed_at: None, + activity_sample: None, + created_at: Utc::now(), + updated_at: Utc::now(), + } +} + +fn mock_auth(user_id: UserId) -> MockAuthService { + let mut auth = MockAuthService::new(); + auth.expect_authenticate() + .once() + .with(predicate::eq(AccessToken::new("token"))) + .return_once(move |_| { + Box::pin(future::ready(Ok(Authentication { + user_id, + session_id: SessionId::from(Uuid::new_v4()), + refresh_token_hash: SessionRefreshTokenHash::new(Sha256Hash::default()), + admin: false, + email_verified: true, + }))) + }); + auth +} + +#[tokio::test] +async fn get_today_marks_practice_and_lab_ready_when_detected() { + let user_id = UserId::from(Uuid::new_v4()); + let now = Utc.with_ymd_and_hms(2025, 11, 4, 15, 0, 0).unwrap(); + let date = now.date_naive(); + let day_start = date.and_hms_opt(0, 0, 0).unwrap().and_utc(); + let day_end = day_start + chrono::Duration::days(1); + + let practice_entry = make_entry(user_id, DailyRewardCategory::Practice, date, 10, None); + let lab_entry = make_entry(user_id, DailyRewardCategory::Lab, date, 30, None); + + let arrival_ready_at = now - chrono::Duration::hours(3); + let arrival_entry = make_entry( + user_id, + DailyRewardCategory::Arrival, + date, + 20, + Some(arrival_ready_at), + ); + + let lecture_entry = make_entry( + user_id, + DailyRewardCategory::Lecture, + date, + 20, + Some(now - chrono::Duration::hours(1)), + ); + + let base_entries = vec![ + arrival_entry.clone(), + lecture_entry.clone(), + practice_entry.clone(), + lab_entry.clone(), + ]; + + let practice_sample = json!({ "task_id": "practice-task" }); + let lab_sample = json!({ "task_id": "lab-task" }); + + let practice_first = now - chrono::Duration::minutes(20); + let practice_last = now - chrono::Duration::minutes(5); + let lab_first = now - chrono::Duration::minutes(10); + let lab_last = now - chrono::Duration::minutes(2); + + let activity_snapshot = DailyRewardActivitySnapshot { + lecture: DailyRewardActivityState::default(), + practice: DailyRewardActivityState { + detected: Some(DailyRewardActivity { + first_detected_at: practice_first, + last_detected_at: practice_last, + activity_sample: Some(practice_sample.clone()), + }), + pending_sample: None, + unavailable_reason: None, + }, + lab: DailyRewardActivityState { + detected: Some(DailyRewardActivity { + first_detected_at: lab_first, + last_detected_at: lab_last, + activity_sample: Some(lab_sample.clone()), + }), + pending_sample: None, + unavailable_reason: None, + }, + }; + + let mut repo = MockDailyRewardRepository::new(); + { + let entries = base_entries.clone(); + repo.expect_list_by_user_and_date() + .once() + .with( + predicate::always(), + predicate::eq(user_id), + predicate::eq(date), + ) + .return_once(move |_, _, _| Box::pin(future::ready(Ok(entries)))); + } + + { + let mut updated_practice = practice_entry.clone(); + let practice_expect_sample = practice_sample.clone(); + repo.expect_mark_ready() + .with( + predicate::always(), + predicate::function(move |params: &DailyRewardMarkReady| { + params.user_id == user_id + && params.category == DailyRewardCategory::Practice + && params.date_utc == date + && params.first_detected_at == Some(practice_first) + && params.last_detected_at == Some(practice_last) + && params.claimable_since == Some(practice_first) + && params.activity_sample == Some(practice_expect_sample.clone()) + }), + ) + .return_once(move |_, params| { + updated_practice.first_detected_at = params.first_detected_at; + updated_practice.last_detected_at = params.last_detected_at; + updated_practice.claimable_since = params.claimable_since; + updated_practice.activity_sample = params.activity_sample.clone(); + Box::pin(future::ready(Ok(updated_practice))) + }); + } + + { + let mut updated_lab = lab_entry.clone(); + let lab_expect_sample = lab_sample.clone(); + repo.expect_mark_ready() + .with( + predicate::always(), + predicate::function(move |params: &DailyRewardMarkReady| { + params.user_id == user_id + && params.category == DailyRewardCategory::Lab + && params.date_utc == date + && params.first_detected_at == Some(lab_first) + && params.last_detected_at == Some(lab_last) + && params.claimable_since == Some(lab_first) + && params.activity_sample == Some(lab_expect_sample.clone()) + }), + ) + .return_once(move |_, params| { + updated_lab.first_detected_at = params.first_detected_at; + updated_lab.last_detected_at = params.last_detected_at; + updated_lab.claimable_since = params.claimable_since; + updated_lab.activity_sample = params.activity_sample.clone(); + Box::pin(future::ready(Ok(updated_lab))) + }); + } + + repo.expect_upsert_entry().never(); + repo.expect_mark_claimed().never(); + + let mut activity = MockDailyRewardActivityService::new(); + activity + .expect_detect() + .once() + .withf(move |token, user, start, end| { + token.is_some() && user == &user_id && start == &day_start && end == &day_end + }) + .return_once(move |_, _, _, _| Box::pin(future::ready(Ok(activity_snapshot)))); + + let db = MockDatabase::build(true); + let auth = mock_auth(user_id); + let coin = MockCoinService::new(); + let cache = MockCacheService::new(); + let time = MockTimeService::new().with_now(now); + + let sut = DailyRewardFeatureServiceImpl::new_for_tests( + db, + auth, + repo, + coin, + cache, + activity, + MockIdService::new(), + time, + DailyRewardFeatureConfig::default(), + ); + + let response: DailyRewardGetResponse = sut + .get_today(&AccessToken::new("token")) + .await + .expect("get_today succeeds"); + + let practice_reward = response + .snapshot + .rewards + .iter() + .find(|reward| reward.category == DailyRewardCategory::Practice) + .expect("practice reward present"); + let lab_reward = response + .snapshot + .rewards + .iter() + .find(|reward| reward.category == DailyRewardCategory::Lab) + .expect("lab reward present"); + + assert_eq!(practice_reward.status, DailyRewardStatus::Ready); + assert_eq!(lab_reward.status, DailyRewardStatus::Ready); + assert_eq!(practice_reward.claimable_since, Some(practice_first)); + assert_eq!(lab_reward.claimable_since, Some(lab_first)); + assert_eq!( + practice_reward.activity_sample, + Some(practice_sample.clone()) + ); + assert_eq!(lab_reward.activity_sample, Some(lab_sample.clone())); +} diff --git a/academy_core/daily_rewards/impl/src/tests/claim.rs b/academy_core/daily_rewards/impl/src/tests/claim.rs index d77ae8e0..5db250ec 100644 --- a/academy_core/daily_rewards/impl/src/tests/claim.rs +++ b/academy_core/daily_rewards/impl/src/tests/claim.rs @@ -1,6 +1,7 @@ use std::future; use academy_auth_contracts::{Authentication, MockAuthService}; +use academy_cache_contracts::MockCacheService; use academy_core_coin_contracts::coin::MockCoinService; use academy_core_daily_rewards_contracts::{ DailyRewardActivitySnapshot, DailyRewardClaimError, DailyRewardFeatureService, @@ -71,7 +72,10 @@ fn activity_service() -> MockDailyRewardActivityService { activity .expect_detect() .once() - .return_once(|_, _, _| Box::pin(future::ready(Ok(DailyRewardActivitySnapshot::default())))); + .withf(|token, _, _, _| token.is_some()) + .return_once(|_, _, _, _| { + Box::pin(future::ready(Ok(DailyRewardActivitySnapshot::default()))) + }); activity } @@ -167,6 +171,7 @@ async fn claim_success() { auth, repo, coin, + MockCacheService::new(), activity, MockIdService::new(), time, @@ -217,6 +222,7 @@ async fn claim_already_claimed() { auth, repo, coin, + MockCacheService::new(), activity, MockIdService::new(), time, diff --git a/academy_core/daily_rewards/impl/src/tests/mod.rs b/academy_core/daily_rewards/impl/src/tests/mod.rs index 64e18ea8..1d787d15 100644 --- a/academy_core/daily_rewards/impl/src/tests/mod.rs +++ b/academy_core/daily_rewards/impl/src/tests/mod.rs @@ -1,6 +1,8 @@ use crate::{DailyRewardCoinsConfig, DailyRewardFeatureConfig}; +pub mod activity; pub mod claim; +pub mod ready; pub mod snapshot; impl Default for DailyRewardFeatureConfig { diff --git a/academy_core/daily_rewards/impl/src/tests/ready.rs b/academy_core/daily_rewards/impl/src/tests/ready.rs new file mode 100644 index 00000000..b11823e0 --- /dev/null +++ b/academy_core/daily_rewards/impl/src/tests/ready.rs @@ -0,0 +1,212 @@ +use std::{ + collections::HashMap, + future, + sync::{Arc, Mutex}, +}; + +use academy_auth_contracts::{Authentication, MockAuthService}; +use academy_cache_contracts::MockCacheService; +use academy_core_coin_contracts::coin::MockCoinService; +use academy_core_daily_rewards_contracts::{ + DailyRewardActivity, DailyRewardActivitySnapshot, DailyRewardActivityState, + DailyRewardFeatureService, DailyRewardStatus, MockDailyRewardActivityService, +}; +use academy_models::{ + Sha256Hash, + auth::AccessToken, + daily_rewards::{DailyRewardCategory, DailyRewardEntry}, + session::{SessionId, SessionRefreshTokenHash}, + user::UserId, +}; +use academy_persistence_contracts::{ + MockDatabase, MockTransaction, + daily_rewards::{DailyRewardMarkReady, MockDailyRewardRepository}, +}; +use academy_shared_contracts::{id::MockIdService, time::MockTimeService}; +use chrono::{Duration as ChronoDuration, NaiveDate, TimeZone, Utc}; +use mockall::predicate; +use serde_json::json; +use uuid::Uuid; + +use crate::DailyRewardFeatureServiceImpl; + +fn auth_service(user_id: UserId) -> MockAuthService { + let mut auth = MockAuthService::new(); + auth.expect_authenticate() + .once() + .with(predicate::eq(AccessToken::new("token"))) + .return_once(move |_| { + Box::pin(future::ready(Ok(Authentication { + user_id, + session_id: SessionId::from(Uuid::new_v4()), + refresh_token_hash: SessionRefreshTokenHash::new(Sha256Hash::default()), + admin: false, + email_verified: true, + }))) + }); + auth +} + +fn entry( + user_id: UserId, + date: NaiveDate, + category: DailyRewardCategory, + coins: i32, + claimable_since: Option>, + claimed_at: Option>, +) -> DailyRewardEntry { + DailyRewardEntry { + id: Uuid::new_v4(), + user_id, + date_utc: date, + category, + coins, + first_detected_at: claimable_since, + last_detected_at: claimable_since, + claimable_since, + claimed_at, + activity_sample: None, + created_at: Utc::now(), + updated_at: Utc::now(), + } +} + +#[tokio::test] +async fn get_today_marks_practice_and_lab_ready() { + let user_id = UserId::from(Uuid::new_v4()); + let date = NaiveDate::from_ymd_opt(2025, 11, 2).unwrap(); + let now = Utc.with_ymd_and_hms(2025, 11, 2, 12, 0, 0).unwrap(); + let practice_ready_at = now - ChronoDuration::minutes(15); + let lab_ready_at = now - ChronoDuration::minutes(5); + + let arrival_entry = entry( + user_id, + date, + DailyRewardCategory::Arrival, + 20, + Some(now - ChronoDuration::hours(1)), + None, + ); + let lecture_entry = entry(user_id, date, DailyRewardCategory::Lecture, 20, None, None); + let practice_entry = entry(user_id, date, DailyRewardCategory::Practice, 10, None, None); + let lab_entry = entry(user_id, date, DailyRewardCategory::Lab, 30, None, None); + + let entries_map: HashMap = [ + (DailyRewardCategory::Arrival, arrival_entry), + (DailyRewardCategory::Lecture, lecture_entry), + (DailyRewardCategory::Practice, practice_entry), + (DailyRewardCategory::Lab, lab_entry), + ] + .into_iter() + .collect(); + let shared_entries = Arc::new(Mutex::new(entries_map)); + + let mut repo = MockDailyRewardRepository::new(); + let list_entries = shared_entries.clone(); + repo.expect_list_by_user_and_date() + .once() + .with( + predicate::always(), + predicate::eq(user_id), + predicate::eq(date), + ) + .return_once(move |_, _, _| { + let entries = list_entries + .lock() + .unwrap() + .values() + .cloned() + .collect::>(); + Box::pin(future::ready(Ok(entries))) + }); + + repo.expect_upsert_entry().never(); + + let mark_ready_entries = shared_entries.clone(); + repo.expect_mark_ready() + .times(2) + .returning(move |_, params: DailyRewardMarkReady| { + let mut guard = mark_ready_entries.lock().unwrap(); + let mut entry = guard.get(¶ms.category).cloned().unwrap(); + entry.first_detected_at = params.first_detected_at; + entry.last_detected_at = params.last_detected_at; + entry.claimable_since = params.claimable_since; + entry.activity_sample = params.activity_sample.clone(); + guard.insert(params.category, entry.clone()); + Box::pin(future::ready(Ok(entry))) + }); + + let mut activity = MockDailyRewardActivityService::new(); + activity + .expect_detect() + .once() + .withf(move |token, detected_user, _, _| token.is_some() && *detected_user == user_id) + .return_once(move |_, _, _, _| { + let practice_activity = DailyRewardActivity { + first_detected_at: practice_ready_at, + last_detected_at: practice_ready_at, + activity_sample: Some(json!({"taskId": "practice"})), + }; + let lab_activity = DailyRewardActivity { + first_detected_at: lab_ready_at, + last_detected_at: lab_ready_at, + activity_sample: Some(json!({"taskId": "lab"})), + }; + let mut snapshot = DailyRewardActivitySnapshot::default(); + snapshot.practice = DailyRewardActivityState { + detected: Some(practice_activity), + pending_sample: None, + unavailable_reason: None, + }; + snapshot.lab = DailyRewardActivityState { + detected: Some(lab_activity), + pending_sample: None, + unavailable_reason: None, + }; + Box::pin(future::ready(Ok(snapshot))) + }); + + let db = MockDatabase::build(true); + let auth = auth_service(user_id); + let coin = MockCoinService::new(); + let cache = MockCacheService::new(); + let ids = MockIdService::new(); + let time = MockTimeService::new().with_now(now); + + let sut = DailyRewardFeatureServiceImpl::new_for_tests( + db, + auth, + repo, + coin, + cache, + activity, + ids, + time, + Default::default(), + ); + + let response = sut + .get_today(&AccessToken::new("token")) + .await + .expect("get_today should succeed"); + + let practice_reward = response + .snapshot + .rewards + .iter() + .find(|reward| reward.category == DailyRewardCategory::Practice) + .expect("practice reward present"); + assert_eq!(practice_reward.status, DailyRewardStatus::Ready); + assert_eq!(practice_reward.claimable_since, Some(practice_ready_at)); + + let lab_reward = response + .snapshot + .rewards + .iter() + .find(|reward| reward.category == DailyRewardCategory::Lab) + .expect("lab reward present"); + assert_eq!(lab_reward.status, DailyRewardStatus::Ready); + assert_eq!(lab_reward.claimable_since, Some(lab_ready_at)); + + assert_eq!(response.snapshot.claim_totals.available_coins, 60); +} diff --git a/config.dev.toml b/config.dev.toml index 362f9a0b..5cf75b9e 100644 --- a/config.dev.toml +++ b/config.dev.toml @@ -31,6 +31,10 @@ dsn = "postgres://academy@127.0.0.1:5432/academy-skills" [daily_rewards.activity_sources.challenges] dsn = "postgres://academy@127.0.0.1:5432/academy-challenges" +[daily_rewards.recommendations.skills] +base_url = "http://127.0.0.1:8001/" +timeout = "5s" + [session] access_token_ttl = "1d" diff --git a/config.toml b/config.toml index d5c05764..03175700 100644 --- a/config.toml +++ b/config.toml @@ -38,6 +38,10 @@ lecture = 20 practice = 10 lab = 30 +[daily_rewards.recommendations.skills] +base_url = "http://127.0.0.1:8001/" +timeout = "5s" + [internal] jwt_ttl = "10s" From f4f41a814c47b7c348255dcb6f8015a4a7159397 Mon Sep 17 00:00:00 2001 From: Morpheus Date: Sun, 2 Nov 2025 18:21:27 +0100 Subject: [PATCH 04/13] insert recommendations --- .gitignore | 1731 +---------------- .idea/.gitignore | 11 - Cargo.nix | 936 ++++++++- academy_config/src/lib.rs | 5 - .../daily_rewards/impl/src/tests/ready.rs | 26 +- dump.rdb | Bin 88 -> 0 bytes 6 files changed, 880 insertions(+), 1829 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 dump.rdb diff --git a/.gitignore b/.gitignore index d620a729..3b650299 100644 --- a/.gitignore +++ b/.gitignore @@ -9,1731 +9,6 @@ repl-result-* .invoices .credit_notes .nixos-test-history -/.tmp/pgdata/base/1/112 -/.tmp/pgdata/base/1/113 -/.tmp/pgdata/base/1/174 -/.tmp/pgdata/base/1/175 -/.tmp/pgdata/base/1/548 -/.tmp/pgdata/base/1/549 -/.tmp/pgdata/base/1/826 -/.tmp/pgdata/base/1/827 -/.tmp/pgdata/base/1/828 -/.tmp/pgdata/base/1/1247 -/.tmp/pgdata/base/1/1247_fsm -/.tmp/pgdata/base/1/1247_vm -/.tmp/pgdata/base/1/1249 -/.tmp/pgdata/base/1/1249_fsm -/.tmp/pgdata/base/1/1249_vm -/.tmp/pgdata/base/1/1255 -/.tmp/pgdata/base/1/1255_fsm -/.tmp/pgdata/base/1/1255_vm -/.tmp/pgdata/base/1/1259 -/.tmp/pgdata/base/1/1259_fsm -/.tmp/pgdata/base/1/1259_vm -/.tmp/pgdata/base/1/1417 -/.tmp/pgdata/base/1/1418 -/.tmp/pgdata/base/1/2187 -/.tmp/pgdata/base/1/2224 -/.tmp/pgdata/base/1/2228 -/.tmp/pgdata/base/1/2328 -/.tmp/pgdata/base/1/2336 -/.tmp/pgdata/base/1/2337 -/.tmp/pgdata/base/1/2579 -/.tmp/pgdata/base/1/2600 -/.tmp/pgdata/base/1/2600_fsm -/.tmp/pgdata/base/1/2600_vm -/.tmp/pgdata/base/1/2601 -/.tmp/pgdata/base/1/2601_fsm -/.tmp/pgdata/base/1/2601_vm -/.tmp/pgdata/base/1/2602 -/.tmp/pgdata/base/1/2602_fsm -/.tmp/pgdata/base/1/2602_vm -/.tmp/pgdata/base/1/2603 -/.tmp/pgdata/base/1/2603_fsm -/.tmp/pgdata/base/1/2603_vm -/.tmp/pgdata/base/1/2604 -/.tmp/pgdata/base/1/2605 -/.tmp/pgdata/base/1/2605_fsm -/.tmp/pgdata/base/1/2605_vm -/.tmp/pgdata/base/1/2606 -/.tmp/pgdata/base/1/2606_fsm -/.tmp/pgdata/base/1/2606_vm -/.tmp/pgdata/base/1/2607 -/.tmp/pgdata/base/1/2607_fsm -/.tmp/pgdata/base/1/2607_vm -/.tmp/pgdata/base/1/2608 -/.tmp/pgdata/base/1/2608_fsm -/.tmp/pgdata/base/1/2608_vm -/.tmp/pgdata/base/1/2609 -/.tmp/pgdata/base/1/2609_fsm -/.tmp/pgdata/base/1/2609_vm -/.tmp/pgdata/base/1/2610 -/.tmp/pgdata/base/1/2610_fsm -/.tmp/pgdata/base/1/2610_vm -/.tmp/pgdata/base/1/2611 -/.tmp/pgdata/base/1/2612 -/.tmp/pgdata/base/1/2612_fsm -/.tmp/pgdata/base/1/2612_vm -/.tmp/pgdata/base/1/2613 -/.tmp/pgdata/base/1/2615 -/.tmp/pgdata/base/1/2615_fsm -/.tmp/pgdata/base/1/2615_vm -/.tmp/pgdata/base/1/2616 -/.tmp/pgdata/base/1/2616_fsm -/.tmp/pgdata/base/1/2616_vm -/.tmp/pgdata/base/1/2617 -/.tmp/pgdata/base/1/2617_fsm -/.tmp/pgdata/base/1/2617_vm -/.tmp/pgdata/base/1/2618 -/.tmp/pgdata/base/1/2618_fsm -/.tmp/pgdata/base/1/2618_vm -/.tmp/pgdata/base/1/2619 -/.tmp/pgdata/base/1/2619_fsm -/.tmp/pgdata/base/1/2619_vm -/.tmp/pgdata/base/1/2620 -/.tmp/pgdata/base/1/2650 -/.tmp/pgdata/base/1/2651 -/.tmp/pgdata/base/1/2652 -/.tmp/pgdata/base/1/2653 -/.tmp/pgdata/base/1/2654 -/.tmp/pgdata/base/1/2655 -/.tmp/pgdata/base/1/2656 -/.tmp/pgdata/base/1/2657 -/.tmp/pgdata/base/1/2658 -/.tmp/pgdata/base/1/2659 -/.tmp/pgdata/base/1/2660 -/.tmp/pgdata/base/1/2661 -/.tmp/pgdata/base/1/2662 -/.tmp/pgdata/base/1/2663 -/.tmp/pgdata/base/1/2664 -/.tmp/pgdata/base/1/2665 -/.tmp/pgdata/base/1/2666 -/.tmp/pgdata/base/1/2667 -/.tmp/pgdata/base/1/2668 -/.tmp/pgdata/base/1/2669 -/.tmp/pgdata/base/1/2670 -/.tmp/pgdata/base/1/2673 -/.tmp/pgdata/base/1/2674 -/.tmp/pgdata/base/1/2675 -/.tmp/pgdata/base/1/2678 -/.tmp/pgdata/base/1/2679 -/.tmp/pgdata/base/1/2680 -/.tmp/pgdata/base/1/2681 -/.tmp/pgdata/base/1/2682 -/.tmp/pgdata/base/1/2683 -/.tmp/pgdata/base/1/2684 -/.tmp/pgdata/base/1/2685 -/.tmp/pgdata/base/1/2686 -/.tmp/pgdata/base/1/2687 -/.tmp/pgdata/base/1/2688 -/.tmp/pgdata/base/1/2689 -/.tmp/pgdata/base/1/2690 -/.tmp/pgdata/base/1/2691 -/.tmp/pgdata/base/1/2692 -/.tmp/pgdata/base/1/2693 -/.tmp/pgdata/base/1/2696 -/.tmp/pgdata/base/1/2699 -/.tmp/pgdata/base/1/2701 -/.tmp/pgdata/base/1/2702 -/.tmp/pgdata/base/1/2703 -/.tmp/pgdata/base/1/2704 -/.tmp/pgdata/base/1/2753 -/.tmp/pgdata/base/1/2753_fsm -/.tmp/pgdata/base/1/2753_vm -/.tmp/pgdata/base/1/2754 -/.tmp/pgdata/base/1/2755 -/.tmp/pgdata/base/1/2756 -/.tmp/pgdata/base/1/2757 -/.tmp/pgdata/base/1/2830 -/.tmp/pgdata/base/1/2831 -/.tmp/pgdata/base/1/2832 -/.tmp/pgdata/base/1/2833 -/.tmp/pgdata/base/1/2834 -/.tmp/pgdata/base/1/2835 -/.tmp/pgdata/base/1/2836 -/.tmp/pgdata/base/1/2836_fsm -/.tmp/pgdata/base/1/2836_vm -/.tmp/pgdata/base/1/2837 -/.tmp/pgdata/base/1/2838 -/.tmp/pgdata/base/1/2838_fsm -/.tmp/pgdata/base/1/2838_vm -/.tmp/pgdata/base/1/2839 -/.tmp/pgdata/base/1/2840 -/.tmp/pgdata/base/1/2840_fsm -/.tmp/pgdata/base/1/2840_vm -/.tmp/pgdata/base/1/2841 -/.tmp/pgdata/base/1/2995 -/.tmp/pgdata/base/1/2996 -/.tmp/pgdata/base/1/3079 -/.tmp/pgdata/base/1/3079_fsm -/.tmp/pgdata/base/1/3079_vm -/.tmp/pgdata/base/1/3080 -/.tmp/pgdata/base/1/3081 -/.tmp/pgdata/base/1/3085 -/.tmp/pgdata/base/1/3118 -/.tmp/pgdata/base/1/3119 -/.tmp/pgdata/base/1/3164 -/.tmp/pgdata/base/1/3256 -/.tmp/pgdata/base/1/3257 -/.tmp/pgdata/base/1/3258 -/.tmp/pgdata/base/1/3350 -/.tmp/pgdata/base/1/3351 -/.tmp/pgdata/base/1/3379 -/.tmp/pgdata/base/1/3380 -/.tmp/pgdata/base/1/3381 -/.tmp/pgdata/base/1/3394 -/.tmp/pgdata/base/1/3394_fsm -/.tmp/pgdata/base/1/3394_vm -/.tmp/pgdata/base/1/3395 -/.tmp/pgdata/base/1/3429 -/.tmp/pgdata/base/1/3430 -/.tmp/pgdata/base/1/3431 -/.tmp/pgdata/base/1/3433 -/.tmp/pgdata/base/1/3439 -/.tmp/pgdata/base/1/3440 -/.tmp/pgdata/base/1/3455 -/.tmp/pgdata/base/1/3456 -/.tmp/pgdata/base/1/3456_fsm -/.tmp/pgdata/base/1/3456_vm -/.tmp/pgdata/base/1/3466 -/.tmp/pgdata/base/1/3467 -/.tmp/pgdata/base/1/3468 -/.tmp/pgdata/base/1/3501 -/.tmp/pgdata/base/1/3502 -/.tmp/pgdata/base/1/3503 -/.tmp/pgdata/base/1/3534 -/.tmp/pgdata/base/1/3541 -/.tmp/pgdata/base/1/3541_fsm -/.tmp/pgdata/base/1/3541_vm -/.tmp/pgdata/base/1/3542 -/.tmp/pgdata/base/1/3574 -/.tmp/pgdata/base/1/3575 -/.tmp/pgdata/base/1/3576 -/.tmp/pgdata/base/1/3596 -/.tmp/pgdata/base/1/3597 -/.tmp/pgdata/base/1/3598 -/.tmp/pgdata/base/1/3599 -/.tmp/pgdata/base/1/3600 -/.tmp/pgdata/base/1/3600_fsm -/.tmp/pgdata/base/1/3600_vm -/.tmp/pgdata/base/1/3601 -/.tmp/pgdata/base/1/3601_fsm -/.tmp/pgdata/base/1/3601_vm -/.tmp/pgdata/base/1/3602 -/.tmp/pgdata/base/1/3602_fsm -/.tmp/pgdata/base/1/3602_vm -/.tmp/pgdata/base/1/3603 -/.tmp/pgdata/base/1/3603_fsm -/.tmp/pgdata/base/1/3603_vm -/.tmp/pgdata/base/1/3604 -/.tmp/pgdata/base/1/3605 -/.tmp/pgdata/base/1/3606 -/.tmp/pgdata/base/1/3607 -/.tmp/pgdata/base/1/3608 -/.tmp/pgdata/base/1/3609 -/.tmp/pgdata/base/1/3712 -/.tmp/pgdata/base/1/3764 -/.tmp/pgdata/base/1/3764_fsm -/.tmp/pgdata/base/1/3764_vm -/.tmp/pgdata/base/1/3766 -/.tmp/pgdata/base/1/3767 -/.tmp/pgdata/base/1/3997 -/.tmp/pgdata/base/1/4143 -/.tmp/pgdata/base/1/4144 -/.tmp/pgdata/base/1/4145 -/.tmp/pgdata/base/1/4146 -/.tmp/pgdata/base/1/4147 -/.tmp/pgdata/base/1/4148 -/.tmp/pgdata/base/1/4149 -/.tmp/pgdata/base/1/4150 -/.tmp/pgdata/base/1/4151 -/.tmp/pgdata/base/1/4152 -/.tmp/pgdata/base/1/4153 -/.tmp/pgdata/base/1/4154 -/.tmp/pgdata/base/1/4155 -/.tmp/pgdata/base/1/4156 -/.tmp/pgdata/base/1/4157 -/.tmp/pgdata/base/1/4158 -/.tmp/pgdata/base/1/4159 -/.tmp/pgdata/base/1/4160 -/.tmp/pgdata/base/1/4163 -/.tmp/pgdata/base/1/4164 -/.tmp/pgdata/base/1/4165 -/.tmp/pgdata/base/1/4166 -/.tmp/pgdata/base/1/4167 -/.tmp/pgdata/base/1/4168 -/.tmp/pgdata/base/1/4169 -/.tmp/pgdata/base/1/4170 -/.tmp/pgdata/base/1/4171 -/.tmp/pgdata/base/1/4172 -/.tmp/pgdata/base/1/4173 -/.tmp/pgdata/base/1/4174 -/.tmp/pgdata/base/1/5002 -/.tmp/pgdata/base/1/6102 -/.tmp/pgdata/base/1/6104 -/.tmp/pgdata/base/1/6106 -/.tmp/pgdata/base/1/6110 -/.tmp/pgdata/base/1/6111 -/.tmp/pgdata/base/1/6112 -/.tmp/pgdata/base/1/6113 -/.tmp/pgdata/base/1/6116 -/.tmp/pgdata/base/1/6117 -/.tmp/pgdata/base/1/6175 -/.tmp/pgdata/base/1/6176 -/.tmp/pgdata/base/1/6228 -/.tmp/pgdata/base/1/6229 -/.tmp/pgdata/base/1/6237 -/.tmp/pgdata/base/1/6238 -/.tmp/pgdata/base/1/6239 -/.tmp/pgdata/base/1/6351 -/.tmp/pgdata/base/1/6352 -/.tmp/pgdata/base/1/15043 -/.tmp/pgdata/base/1/15043_fsm -/.tmp/pgdata/base/1/15043_vm -/.tmp/pgdata/base/1/15046 -/.tmp/pgdata/base/1/15047 -/.tmp/pgdata/base/1/15048 -/.tmp/pgdata/base/1/15048_fsm -/.tmp/pgdata/base/1/15048_vm -/.tmp/pgdata/base/1/15051 -/.tmp/pgdata/base/1/15052 -/.tmp/pgdata/base/1/15053 -/.tmp/pgdata/base/1/15053_fsm -/.tmp/pgdata/base/1/15053_vm -/.tmp/pgdata/base/1/15056 -/.tmp/pgdata/base/1/15057 -/.tmp/pgdata/base/1/15058 -/.tmp/pgdata/base/1/15058_fsm -/.tmp/pgdata/base/1/15058_vm -/.tmp/pgdata/base/1/15061 -/.tmp/pgdata/base/1/15062 -/.tmp/pgdata/base/1/pg_filenode.map -/.tmp/pgdata/base/1/pg_internal.init -/.tmp/pgdata/base/1/PG_VERSION -/.tmp/pgdata/base/4/112 -/.tmp/pgdata/base/4/113 -/.tmp/pgdata/base/4/174 -/.tmp/pgdata/base/4/175 -/.tmp/pgdata/base/4/548 -/.tmp/pgdata/base/4/549 -/.tmp/pgdata/base/4/826 -/.tmp/pgdata/base/4/827 -/.tmp/pgdata/base/4/828 -/.tmp/pgdata/base/4/1247 -/.tmp/pgdata/base/4/1247_fsm -/.tmp/pgdata/base/4/1247_vm -/.tmp/pgdata/base/4/1249 -/.tmp/pgdata/base/4/1249_fsm -/.tmp/pgdata/base/4/1249_vm -/.tmp/pgdata/base/4/1255 -/.tmp/pgdata/base/4/1255_fsm -/.tmp/pgdata/base/4/1255_vm -/.tmp/pgdata/base/4/1259 -/.tmp/pgdata/base/4/1259_fsm -/.tmp/pgdata/base/4/1259_vm -/.tmp/pgdata/base/4/1417 -/.tmp/pgdata/base/4/1418 -/.tmp/pgdata/base/4/2187 -/.tmp/pgdata/base/4/2224 -/.tmp/pgdata/base/4/2228 -/.tmp/pgdata/base/4/2328 -/.tmp/pgdata/base/4/2336 -/.tmp/pgdata/base/4/2337 -/.tmp/pgdata/base/4/2579 -/.tmp/pgdata/base/4/2600 -/.tmp/pgdata/base/4/2600_fsm -/.tmp/pgdata/base/4/2600_vm -/.tmp/pgdata/base/4/2601 -/.tmp/pgdata/base/4/2601_fsm -/.tmp/pgdata/base/4/2601_vm -/.tmp/pgdata/base/4/2602 -/.tmp/pgdata/base/4/2602_fsm -/.tmp/pgdata/base/4/2602_vm -/.tmp/pgdata/base/4/2603 -/.tmp/pgdata/base/4/2603_fsm -/.tmp/pgdata/base/4/2603_vm -/.tmp/pgdata/base/4/2604 -/.tmp/pgdata/base/4/2605 -/.tmp/pgdata/base/4/2605_fsm -/.tmp/pgdata/base/4/2605_vm -/.tmp/pgdata/base/4/2606 -/.tmp/pgdata/base/4/2606_fsm -/.tmp/pgdata/base/4/2606_vm -/.tmp/pgdata/base/4/2607 -/.tmp/pgdata/base/4/2607_fsm -/.tmp/pgdata/base/4/2607_vm -/.tmp/pgdata/base/4/2608 -/.tmp/pgdata/base/4/2608_fsm -/.tmp/pgdata/base/4/2608_vm -/.tmp/pgdata/base/4/2609 -/.tmp/pgdata/base/4/2609_fsm -/.tmp/pgdata/base/4/2609_vm -/.tmp/pgdata/base/4/2610 -/.tmp/pgdata/base/4/2610_fsm -/.tmp/pgdata/base/4/2610_vm -/.tmp/pgdata/base/4/2611 -/.tmp/pgdata/base/4/2612 -/.tmp/pgdata/base/4/2612_fsm -/.tmp/pgdata/base/4/2612_vm -/.tmp/pgdata/base/4/2613 -/.tmp/pgdata/base/4/2615 -/.tmp/pgdata/base/4/2615_fsm -/.tmp/pgdata/base/4/2615_vm -/.tmp/pgdata/base/4/2616 -/.tmp/pgdata/base/4/2616_fsm -/.tmp/pgdata/base/4/2616_vm -/.tmp/pgdata/base/4/2617 -/.tmp/pgdata/base/4/2617_fsm -/.tmp/pgdata/base/4/2617_vm -/.tmp/pgdata/base/4/2618 -/.tmp/pgdata/base/4/2618_fsm -/.tmp/pgdata/base/4/2618_vm -/.tmp/pgdata/base/4/2619 -/.tmp/pgdata/base/4/2619_fsm -/.tmp/pgdata/base/4/2619_vm -/.tmp/pgdata/base/4/2620 -/.tmp/pgdata/base/4/2650 -/.tmp/pgdata/base/4/2651 -/.tmp/pgdata/base/4/2652 -/.tmp/pgdata/base/4/2653 -/.tmp/pgdata/base/4/2654 -/.tmp/pgdata/base/4/2655 -/.tmp/pgdata/base/4/2656 -/.tmp/pgdata/base/4/2657 -/.tmp/pgdata/base/4/2658 -/.tmp/pgdata/base/4/2659 -/.tmp/pgdata/base/4/2660 -/.tmp/pgdata/base/4/2661 -/.tmp/pgdata/base/4/2662 -/.tmp/pgdata/base/4/2663 -/.tmp/pgdata/base/4/2664 -/.tmp/pgdata/base/4/2665 -/.tmp/pgdata/base/4/2666 -/.tmp/pgdata/base/4/2667 -/.tmp/pgdata/base/4/2668 -/.tmp/pgdata/base/4/2669 -/.tmp/pgdata/base/4/2670 -/.tmp/pgdata/base/4/2673 -/.tmp/pgdata/base/4/2674 -/.tmp/pgdata/base/4/2675 -/.tmp/pgdata/base/4/2678 -/.tmp/pgdata/base/4/2679 -/.tmp/pgdata/base/4/2680 -/.tmp/pgdata/base/4/2681 -/.tmp/pgdata/base/4/2682 -/.tmp/pgdata/base/4/2683 -/.tmp/pgdata/base/4/2684 -/.tmp/pgdata/base/4/2685 -/.tmp/pgdata/base/4/2686 -/.tmp/pgdata/base/4/2687 -/.tmp/pgdata/base/4/2688 -/.tmp/pgdata/base/4/2689 -/.tmp/pgdata/base/4/2690 -/.tmp/pgdata/base/4/2691 -/.tmp/pgdata/base/4/2692 -/.tmp/pgdata/base/4/2693 -/.tmp/pgdata/base/4/2696 -/.tmp/pgdata/base/4/2699 -/.tmp/pgdata/base/4/2701 -/.tmp/pgdata/base/4/2702 -/.tmp/pgdata/base/4/2703 -/.tmp/pgdata/base/4/2704 -/.tmp/pgdata/base/4/2753 -/.tmp/pgdata/base/4/2753_fsm -/.tmp/pgdata/base/4/2753_vm -/.tmp/pgdata/base/4/2754 -/.tmp/pgdata/base/4/2755 -/.tmp/pgdata/base/4/2756 -/.tmp/pgdata/base/4/2757 -/.tmp/pgdata/base/4/2830 -/.tmp/pgdata/base/4/2831 -/.tmp/pgdata/base/4/2832 -/.tmp/pgdata/base/4/2833 -/.tmp/pgdata/base/4/2834 -/.tmp/pgdata/base/4/2835 -/.tmp/pgdata/base/4/2836 -/.tmp/pgdata/base/4/2836_fsm -/.tmp/pgdata/base/4/2836_vm -/.tmp/pgdata/base/4/2837 -/.tmp/pgdata/base/4/2838 -/.tmp/pgdata/base/4/2838_fsm -/.tmp/pgdata/base/4/2838_vm -/.tmp/pgdata/base/4/2839 -/.tmp/pgdata/base/4/2840 -/.tmp/pgdata/base/4/2840_fsm -/.tmp/pgdata/base/4/2840_vm -/.tmp/pgdata/base/4/2841 -/.tmp/pgdata/base/4/2995 -/.tmp/pgdata/base/4/2996 -/.tmp/pgdata/base/4/3079 -/.tmp/pgdata/base/4/3079_fsm -/.tmp/pgdata/base/4/3079_vm -/.tmp/pgdata/base/4/3080 -/.tmp/pgdata/base/4/3081 -/.tmp/pgdata/base/4/3085 -/.tmp/pgdata/base/4/3118 -/.tmp/pgdata/base/4/3119 -/.tmp/pgdata/base/4/3164 -/.tmp/pgdata/base/4/3256 -/.tmp/pgdata/base/4/3257 -/.tmp/pgdata/base/4/3258 -/.tmp/pgdata/base/4/3350 -/.tmp/pgdata/base/4/3351 -/.tmp/pgdata/base/4/3379 -/.tmp/pgdata/base/4/3380 -/.tmp/pgdata/base/4/3381 -/.tmp/pgdata/base/4/3394 -/.tmp/pgdata/base/4/3394_fsm -/.tmp/pgdata/base/4/3394_vm -/.tmp/pgdata/base/4/3395 -/.tmp/pgdata/base/4/3429 -/.tmp/pgdata/base/4/3430 -/.tmp/pgdata/base/4/3431 -/.tmp/pgdata/base/4/3433 -/.tmp/pgdata/base/4/3439 -/.tmp/pgdata/base/4/3440 -/.tmp/pgdata/base/4/3455 -/.tmp/pgdata/base/4/3456 -/.tmp/pgdata/base/4/3456_fsm -/.tmp/pgdata/base/4/3456_vm -/.tmp/pgdata/base/4/3466 -/.tmp/pgdata/base/4/3467 -/.tmp/pgdata/base/4/3468 -/.tmp/pgdata/base/4/3501 -/.tmp/pgdata/base/4/3502 -/.tmp/pgdata/base/4/3503 -/.tmp/pgdata/base/4/3534 -/.tmp/pgdata/base/4/3541 -/.tmp/pgdata/base/4/3541_fsm -/.tmp/pgdata/base/4/3541_vm -/.tmp/pgdata/base/4/3542 -/.tmp/pgdata/base/4/3574 -/.tmp/pgdata/base/4/3575 -/.tmp/pgdata/base/4/3576 -/.tmp/pgdata/base/4/3596 -/.tmp/pgdata/base/4/3597 -/.tmp/pgdata/base/4/3598 -/.tmp/pgdata/base/4/3599 -/.tmp/pgdata/base/4/3600 -/.tmp/pgdata/base/4/3600_fsm -/.tmp/pgdata/base/4/3600_vm -/.tmp/pgdata/base/4/3601 -/.tmp/pgdata/base/4/3601_fsm -/.tmp/pgdata/base/4/3601_vm -/.tmp/pgdata/base/4/3602 -/.tmp/pgdata/base/4/3602_fsm -/.tmp/pgdata/base/4/3602_vm -/.tmp/pgdata/base/4/3603 -/.tmp/pgdata/base/4/3603_fsm -/.tmp/pgdata/base/4/3603_vm -/.tmp/pgdata/base/4/3604 -/.tmp/pgdata/base/4/3605 -/.tmp/pgdata/base/4/3606 -/.tmp/pgdata/base/4/3607 -/.tmp/pgdata/base/4/3608 -/.tmp/pgdata/base/4/3609 -/.tmp/pgdata/base/4/3712 -/.tmp/pgdata/base/4/3764 -/.tmp/pgdata/base/4/3764_fsm -/.tmp/pgdata/base/4/3764_vm -/.tmp/pgdata/base/4/3766 -/.tmp/pgdata/base/4/3767 -/.tmp/pgdata/base/4/3997 -/.tmp/pgdata/base/4/4143 -/.tmp/pgdata/base/4/4144 -/.tmp/pgdata/base/4/4145 -/.tmp/pgdata/base/4/4146 -/.tmp/pgdata/base/4/4147 -/.tmp/pgdata/base/4/4148 -/.tmp/pgdata/base/4/4149 -/.tmp/pgdata/base/4/4150 -/.tmp/pgdata/base/4/4151 -/.tmp/pgdata/base/4/4152 -/.tmp/pgdata/base/4/4153 -/.tmp/pgdata/base/4/4154 -/.tmp/pgdata/base/4/4155 -/.tmp/pgdata/base/4/4156 -/.tmp/pgdata/base/4/4157 -/.tmp/pgdata/base/4/4158 -/.tmp/pgdata/base/4/4159 -/.tmp/pgdata/base/4/4160 -/.tmp/pgdata/base/4/4163 -/.tmp/pgdata/base/4/4164 -/.tmp/pgdata/base/4/4165 -/.tmp/pgdata/base/4/4166 -/.tmp/pgdata/base/4/4167 -/.tmp/pgdata/base/4/4168 -/.tmp/pgdata/base/4/4169 -/.tmp/pgdata/base/4/4170 -/.tmp/pgdata/base/4/4171 -/.tmp/pgdata/base/4/4172 -/.tmp/pgdata/base/4/4173 -/.tmp/pgdata/base/4/4174 -/.tmp/pgdata/base/4/5002 -/.tmp/pgdata/base/4/6102 -/.tmp/pgdata/base/4/6104 -/.tmp/pgdata/base/4/6106 -/.tmp/pgdata/base/4/6110 -/.tmp/pgdata/base/4/6111 -/.tmp/pgdata/base/4/6112 -/.tmp/pgdata/base/4/6113 -/.tmp/pgdata/base/4/6116 -/.tmp/pgdata/base/4/6117 -/.tmp/pgdata/base/4/6175 -/.tmp/pgdata/base/4/6176 -/.tmp/pgdata/base/4/6228 -/.tmp/pgdata/base/4/6229 -/.tmp/pgdata/base/4/6237 -/.tmp/pgdata/base/4/6238 -/.tmp/pgdata/base/4/6239 -/.tmp/pgdata/base/4/6351 -/.tmp/pgdata/base/4/6352 -/.tmp/pgdata/base/4/15043 -/.tmp/pgdata/base/4/15043_fsm -/.tmp/pgdata/base/4/15043_vm -/.tmp/pgdata/base/4/15046 -/.tmp/pgdata/base/4/15047 -/.tmp/pgdata/base/4/15048 -/.tmp/pgdata/base/4/15048_fsm -/.tmp/pgdata/base/4/15048_vm -/.tmp/pgdata/base/4/15051 -/.tmp/pgdata/base/4/15052 -/.tmp/pgdata/base/4/15053 -/.tmp/pgdata/base/4/15053_fsm -/.tmp/pgdata/base/4/15053_vm -/.tmp/pgdata/base/4/15056 -/.tmp/pgdata/base/4/15057 -/.tmp/pgdata/base/4/15058 -/.tmp/pgdata/base/4/15058_fsm -/.tmp/pgdata/base/4/15058_vm -/.tmp/pgdata/base/4/15061 -/.tmp/pgdata/base/4/15062 -/.tmp/pgdata/base/4/pg_filenode.map -/.tmp/pgdata/base/4/PG_VERSION -/.tmp/pgdata/base/5/112 -/.tmp/pgdata/base/5/113 -/.tmp/pgdata/base/5/174 -/.tmp/pgdata/base/5/175 -/.tmp/pgdata/base/5/548 -/.tmp/pgdata/base/5/549 -/.tmp/pgdata/base/5/826 -/.tmp/pgdata/base/5/827 -/.tmp/pgdata/base/5/828 -/.tmp/pgdata/base/5/1247 -/.tmp/pgdata/base/5/1247_fsm -/.tmp/pgdata/base/5/1247_vm -/.tmp/pgdata/base/5/1249 -/.tmp/pgdata/base/5/1249_fsm -/.tmp/pgdata/base/5/1249_vm -/.tmp/pgdata/base/5/1255 -/.tmp/pgdata/base/5/1255_fsm -/.tmp/pgdata/base/5/1255_vm -/.tmp/pgdata/base/5/1259 -/.tmp/pgdata/base/5/1259_fsm -/.tmp/pgdata/base/5/1259_vm -/.tmp/pgdata/base/5/1417 -/.tmp/pgdata/base/5/1418 -/.tmp/pgdata/base/5/2187 -/.tmp/pgdata/base/5/2224 -/.tmp/pgdata/base/5/2228 -/.tmp/pgdata/base/5/2328 -/.tmp/pgdata/base/5/2336 -/.tmp/pgdata/base/5/2337 -/.tmp/pgdata/base/5/2579 -/.tmp/pgdata/base/5/2600 -/.tmp/pgdata/base/5/2600_fsm -/.tmp/pgdata/base/5/2600_vm -/.tmp/pgdata/base/5/2601 -/.tmp/pgdata/base/5/2601_fsm -/.tmp/pgdata/base/5/2601_vm -/.tmp/pgdata/base/5/2602 -/.tmp/pgdata/base/5/2602_fsm -/.tmp/pgdata/base/5/2602_vm -/.tmp/pgdata/base/5/2603 -/.tmp/pgdata/base/5/2603_fsm -/.tmp/pgdata/base/5/2603_vm -/.tmp/pgdata/base/5/2604 -/.tmp/pgdata/base/5/2605 -/.tmp/pgdata/base/5/2605_fsm -/.tmp/pgdata/base/5/2605_vm -/.tmp/pgdata/base/5/2606 -/.tmp/pgdata/base/5/2606_fsm -/.tmp/pgdata/base/5/2606_vm -/.tmp/pgdata/base/5/2607 -/.tmp/pgdata/base/5/2607_fsm -/.tmp/pgdata/base/5/2607_vm -/.tmp/pgdata/base/5/2608 -/.tmp/pgdata/base/5/2608_fsm -/.tmp/pgdata/base/5/2608_vm -/.tmp/pgdata/base/5/2609 -/.tmp/pgdata/base/5/2609_fsm -/.tmp/pgdata/base/5/2609_vm -/.tmp/pgdata/base/5/2610 -/.tmp/pgdata/base/5/2610_fsm -/.tmp/pgdata/base/5/2610_vm -/.tmp/pgdata/base/5/2611 -/.tmp/pgdata/base/5/2612 -/.tmp/pgdata/base/5/2612_fsm -/.tmp/pgdata/base/5/2612_vm -/.tmp/pgdata/base/5/2613 -/.tmp/pgdata/base/5/2615 -/.tmp/pgdata/base/5/2615_fsm -/.tmp/pgdata/base/5/2615_vm -/.tmp/pgdata/base/5/2616 -/.tmp/pgdata/base/5/2616_fsm -/.tmp/pgdata/base/5/2616_vm -/.tmp/pgdata/base/5/2617 -/.tmp/pgdata/base/5/2617_fsm -/.tmp/pgdata/base/5/2617_vm -/.tmp/pgdata/base/5/2618 -/.tmp/pgdata/base/5/2618_fsm -/.tmp/pgdata/base/5/2618_vm -/.tmp/pgdata/base/5/2619 -/.tmp/pgdata/base/5/2619_fsm -/.tmp/pgdata/base/5/2619_vm -/.tmp/pgdata/base/5/2620 -/.tmp/pgdata/base/5/2650 -/.tmp/pgdata/base/5/2651 -/.tmp/pgdata/base/5/2652 -/.tmp/pgdata/base/5/2653 -/.tmp/pgdata/base/5/2654 -/.tmp/pgdata/base/5/2655 -/.tmp/pgdata/base/5/2656 -/.tmp/pgdata/base/5/2657 -/.tmp/pgdata/base/5/2658 -/.tmp/pgdata/base/5/2659 -/.tmp/pgdata/base/5/2660 -/.tmp/pgdata/base/5/2661 -/.tmp/pgdata/base/5/2662 -/.tmp/pgdata/base/5/2663 -/.tmp/pgdata/base/5/2664 -/.tmp/pgdata/base/5/2665 -/.tmp/pgdata/base/5/2666 -/.tmp/pgdata/base/5/2667 -/.tmp/pgdata/base/5/2668 -/.tmp/pgdata/base/5/2669 -/.tmp/pgdata/base/5/2670 -/.tmp/pgdata/base/5/2673 -/.tmp/pgdata/base/5/2674 -/.tmp/pgdata/base/5/2675 -/.tmp/pgdata/base/5/2678 -/.tmp/pgdata/base/5/2679 -/.tmp/pgdata/base/5/2680 -/.tmp/pgdata/base/5/2681 -/.tmp/pgdata/base/5/2682 -/.tmp/pgdata/base/5/2683 -/.tmp/pgdata/base/5/2684 -/.tmp/pgdata/base/5/2685 -/.tmp/pgdata/base/5/2686 -/.tmp/pgdata/base/5/2687 -/.tmp/pgdata/base/5/2688 -/.tmp/pgdata/base/5/2689 -/.tmp/pgdata/base/5/2690 -/.tmp/pgdata/base/5/2691 -/.tmp/pgdata/base/5/2692 -/.tmp/pgdata/base/5/2693 -/.tmp/pgdata/base/5/2696 -/.tmp/pgdata/base/5/2699 -/.tmp/pgdata/base/5/2701 -/.tmp/pgdata/base/5/2702 -/.tmp/pgdata/base/5/2703 -/.tmp/pgdata/base/5/2704 -/.tmp/pgdata/base/5/2753 -/.tmp/pgdata/base/5/2753_fsm -/.tmp/pgdata/base/5/2753_vm -/.tmp/pgdata/base/5/2754 -/.tmp/pgdata/base/5/2755 -/.tmp/pgdata/base/5/2756 -/.tmp/pgdata/base/5/2757 -/.tmp/pgdata/base/5/2830 -/.tmp/pgdata/base/5/2831 -/.tmp/pgdata/base/5/2832 -/.tmp/pgdata/base/5/2833 -/.tmp/pgdata/base/5/2834 -/.tmp/pgdata/base/5/2835 -/.tmp/pgdata/base/5/2836 -/.tmp/pgdata/base/5/2836_fsm -/.tmp/pgdata/base/5/2836_vm -/.tmp/pgdata/base/5/2837 -/.tmp/pgdata/base/5/2838 -/.tmp/pgdata/base/5/2838_fsm -/.tmp/pgdata/base/5/2838_vm -/.tmp/pgdata/base/5/2839 -/.tmp/pgdata/base/5/2840 -/.tmp/pgdata/base/5/2840_fsm -/.tmp/pgdata/base/5/2840_vm -/.tmp/pgdata/base/5/2841 -/.tmp/pgdata/base/5/2995 -/.tmp/pgdata/base/5/2996 -/.tmp/pgdata/base/5/3079 -/.tmp/pgdata/base/5/3079_fsm -/.tmp/pgdata/base/5/3079_vm -/.tmp/pgdata/base/5/3080 -/.tmp/pgdata/base/5/3081 -/.tmp/pgdata/base/5/3085 -/.tmp/pgdata/base/5/3118 -/.tmp/pgdata/base/5/3119 -/.tmp/pgdata/base/5/3164 -/.tmp/pgdata/base/5/3256 -/.tmp/pgdata/base/5/3257 -/.tmp/pgdata/base/5/3258 -/.tmp/pgdata/base/5/3350 -/.tmp/pgdata/base/5/3351 -/.tmp/pgdata/base/5/3379 -/.tmp/pgdata/base/5/3380 -/.tmp/pgdata/base/5/3381 -/.tmp/pgdata/base/5/3394 -/.tmp/pgdata/base/5/3394_fsm -/.tmp/pgdata/base/5/3394_vm -/.tmp/pgdata/base/5/3395 -/.tmp/pgdata/base/5/3429 -/.tmp/pgdata/base/5/3430 -/.tmp/pgdata/base/5/3431 -/.tmp/pgdata/base/5/3433 -/.tmp/pgdata/base/5/3439 -/.tmp/pgdata/base/5/3440 -/.tmp/pgdata/base/5/3455 -/.tmp/pgdata/base/5/3456 -/.tmp/pgdata/base/5/3456_fsm -/.tmp/pgdata/base/5/3456_vm -/.tmp/pgdata/base/5/3466 -/.tmp/pgdata/base/5/3467 -/.tmp/pgdata/base/5/3468 -/.tmp/pgdata/base/5/3501 -/.tmp/pgdata/base/5/3502 -/.tmp/pgdata/base/5/3503 -/.tmp/pgdata/base/5/3534 -/.tmp/pgdata/base/5/3541 -/.tmp/pgdata/base/5/3541_fsm -/.tmp/pgdata/base/5/3541_vm -/.tmp/pgdata/base/5/3542 -/.tmp/pgdata/base/5/3574 -/.tmp/pgdata/base/5/3575 -/.tmp/pgdata/base/5/3576 -/.tmp/pgdata/base/5/3596 -/.tmp/pgdata/base/5/3597 -/.tmp/pgdata/base/5/3598 -/.tmp/pgdata/base/5/3599 -/.tmp/pgdata/base/5/3600 -/.tmp/pgdata/base/5/3600_fsm -/.tmp/pgdata/base/5/3600_vm -/.tmp/pgdata/base/5/3601 -/.tmp/pgdata/base/5/3601_fsm -/.tmp/pgdata/base/5/3601_vm -/.tmp/pgdata/base/5/3602 -/.tmp/pgdata/base/5/3602_fsm -/.tmp/pgdata/base/5/3602_vm -/.tmp/pgdata/base/5/3603 -/.tmp/pgdata/base/5/3603_fsm -/.tmp/pgdata/base/5/3603_vm -/.tmp/pgdata/base/5/3604 -/.tmp/pgdata/base/5/3605 -/.tmp/pgdata/base/5/3606 -/.tmp/pgdata/base/5/3607 -/.tmp/pgdata/base/5/3608 -/.tmp/pgdata/base/5/3609 -/.tmp/pgdata/base/5/3712 -/.tmp/pgdata/base/5/3764 -/.tmp/pgdata/base/5/3764_fsm -/.tmp/pgdata/base/5/3764_vm -/.tmp/pgdata/base/5/3766 -/.tmp/pgdata/base/5/3767 -/.tmp/pgdata/base/5/3997 -/.tmp/pgdata/base/5/4143 -/.tmp/pgdata/base/5/4144 -/.tmp/pgdata/base/5/4145 -/.tmp/pgdata/base/5/4146 -/.tmp/pgdata/base/5/4147 -/.tmp/pgdata/base/5/4148 -/.tmp/pgdata/base/5/4149 -/.tmp/pgdata/base/5/4150 -/.tmp/pgdata/base/5/4151 -/.tmp/pgdata/base/5/4152 -/.tmp/pgdata/base/5/4153 -/.tmp/pgdata/base/5/4154 -/.tmp/pgdata/base/5/4155 -/.tmp/pgdata/base/5/4156 -/.tmp/pgdata/base/5/4157 -/.tmp/pgdata/base/5/4158 -/.tmp/pgdata/base/5/4159 -/.tmp/pgdata/base/5/4160 -/.tmp/pgdata/base/5/4163 -/.tmp/pgdata/base/5/4164 -/.tmp/pgdata/base/5/4165 -/.tmp/pgdata/base/5/4166 -/.tmp/pgdata/base/5/4167 -/.tmp/pgdata/base/5/4168 -/.tmp/pgdata/base/5/4169 -/.tmp/pgdata/base/5/4170 -/.tmp/pgdata/base/5/4171 -/.tmp/pgdata/base/5/4172 -/.tmp/pgdata/base/5/4173 -/.tmp/pgdata/base/5/4174 -/.tmp/pgdata/base/5/5002 -/.tmp/pgdata/base/5/6102 -/.tmp/pgdata/base/5/6104 -/.tmp/pgdata/base/5/6106 -/.tmp/pgdata/base/5/6110 -/.tmp/pgdata/base/5/6111 -/.tmp/pgdata/base/5/6112 -/.tmp/pgdata/base/5/6113 -/.tmp/pgdata/base/5/6116 -/.tmp/pgdata/base/5/6117 -/.tmp/pgdata/base/5/6175 -/.tmp/pgdata/base/5/6176 -/.tmp/pgdata/base/5/6228 -/.tmp/pgdata/base/5/6229 -/.tmp/pgdata/base/5/6237 -/.tmp/pgdata/base/5/6238 -/.tmp/pgdata/base/5/6239 -/.tmp/pgdata/base/5/6351 -/.tmp/pgdata/base/5/6352 -/.tmp/pgdata/base/5/15043 -/.tmp/pgdata/base/5/15043_fsm -/.tmp/pgdata/base/5/15043_vm -/.tmp/pgdata/base/5/15046 -/.tmp/pgdata/base/5/15047 -/.tmp/pgdata/base/5/15048 -/.tmp/pgdata/base/5/15048_fsm -/.tmp/pgdata/base/5/15048_vm -/.tmp/pgdata/base/5/15051 -/.tmp/pgdata/base/5/15052 -/.tmp/pgdata/base/5/15053 -/.tmp/pgdata/base/5/15053_fsm -/.tmp/pgdata/base/5/15053_vm -/.tmp/pgdata/base/5/15056 -/.tmp/pgdata/base/5/15057 -/.tmp/pgdata/base/5/15058 -/.tmp/pgdata/base/5/15058_fsm -/.tmp/pgdata/base/5/15058_vm -/.tmp/pgdata/base/5/15061 -/.tmp/pgdata/base/5/15062 -/.tmp/pgdata/base/5/pg_filenode.map -/.tmp/pgdata/base/5/pg_internal.init -/.tmp/pgdata/base/5/PG_VERSION -/.tmp/pgdata/base/16389/112 -/.tmp/pgdata/base/16389/113 -/.tmp/pgdata/base/16389/174 -/.tmp/pgdata/base/16389/175 -/.tmp/pgdata/base/16389/548 -/.tmp/pgdata/base/16389/549 -/.tmp/pgdata/base/16389/826 -/.tmp/pgdata/base/16389/827 -/.tmp/pgdata/base/16389/828 -/.tmp/pgdata/base/16389/1247 -/.tmp/pgdata/base/16389/1247_fsm -/.tmp/pgdata/base/16389/1247_vm -/.tmp/pgdata/base/16389/1249 -/.tmp/pgdata/base/16389/1249_fsm -/.tmp/pgdata/base/16389/1249_vm -/.tmp/pgdata/base/16389/1255 -/.tmp/pgdata/base/16389/1255_fsm -/.tmp/pgdata/base/16389/1255_vm -/.tmp/pgdata/base/16389/1259 -/.tmp/pgdata/base/16389/1259_fsm -/.tmp/pgdata/base/16389/1259_vm -/.tmp/pgdata/base/16389/1417 -/.tmp/pgdata/base/16389/1418 -/.tmp/pgdata/base/16389/2187 -/.tmp/pgdata/base/16389/2224 -/.tmp/pgdata/base/16389/2228 -/.tmp/pgdata/base/16389/2328 -/.tmp/pgdata/base/16389/2336 -/.tmp/pgdata/base/16389/2337 -/.tmp/pgdata/base/16389/2579 -/.tmp/pgdata/base/16389/2600 -/.tmp/pgdata/base/16389/2600_fsm -/.tmp/pgdata/base/16389/2600_vm -/.tmp/pgdata/base/16389/2601 -/.tmp/pgdata/base/16389/2601_fsm -/.tmp/pgdata/base/16389/2601_vm -/.tmp/pgdata/base/16389/2602 -/.tmp/pgdata/base/16389/2602_fsm -/.tmp/pgdata/base/16389/2602_vm -/.tmp/pgdata/base/16389/2603 -/.tmp/pgdata/base/16389/2603_fsm -/.tmp/pgdata/base/16389/2603_vm -/.tmp/pgdata/base/16389/2604 -/.tmp/pgdata/base/16389/2605 -/.tmp/pgdata/base/16389/2605_fsm -/.tmp/pgdata/base/16389/2605_vm -/.tmp/pgdata/base/16389/2606 -/.tmp/pgdata/base/16389/2606_fsm -/.tmp/pgdata/base/16389/2606_vm -/.tmp/pgdata/base/16389/2607 -/.tmp/pgdata/base/16389/2607_fsm -/.tmp/pgdata/base/16389/2607_vm -/.tmp/pgdata/base/16389/2608 -/.tmp/pgdata/base/16389/2608_fsm -/.tmp/pgdata/base/16389/2608_vm -/.tmp/pgdata/base/16389/2609 -/.tmp/pgdata/base/16389/2609_fsm -/.tmp/pgdata/base/16389/2609_vm -/.tmp/pgdata/base/16389/2610 -/.tmp/pgdata/base/16389/2610_fsm -/.tmp/pgdata/base/16389/2610_vm -/.tmp/pgdata/base/16389/2611 -/.tmp/pgdata/base/16389/2612 -/.tmp/pgdata/base/16389/2612_fsm -/.tmp/pgdata/base/16389/2612_vm -/.tmp/pgdata/base/16389/2613 -/.tmp/pgdata/base/16389/2615 -/.tmp/pgdata/base/16389/2615_fsm -/.tmp/pgdata/base/16389/2615_vm -/.tmp/pgdata/base/16389/2616 -/.tmp/pgdata/base/16389/2616_fsm -/.tmp/pgdata/base/16389/2616_vm -/.tmp/pgdata/base/16389/2617 -/.tmp/pgdata/base/16389/2617_fsm -/.tmp/pgdata/base/16389/2617_vm -/.tmp/pgdata/base/16389/2618 -/.tmp/pgdata/base/16389/2618_fsm -/.tmp/pgdata/base/16389/2618_vm -/.tmp/pgdata/base/16389/2619 -/.tmp/pgdata/base/16389/2619_fsm -/.tmp/pgdata/base/16389/2619_vm -/.tmp/pgdata/base/16389/2620 -/.tmp/pgdata/base/16389/2620_fsm -/.tmp/pgdata/base/16389/2620_vm -/.tmp/pgdata/base/16389/2650 -/.tmp/pgdata/base/16389/2651 -/.tmp/pgdata/base/16389/2652 -/.tmp/pgdata/base/16389/2653 -/.tmp/pgdata/base/16389/2654 -/.tmp/pgdata/base/16389/2655 -/.tmp/pgdata/base/16389/2656 -/.tmp/pgdata/base/16389/2657 -/.tmp/pgdata/base/16389/2658 -/.tmp/pgdata/base/16389/2659 -/.tmp/pgdata/base/16389/2660 -/.tmp/pgdata/base/16389/2661 -/.tmp/pgdata/base/16389/2662 -/.tmp/pgdata/base/16389/2663 -/.tmp/pgdata/base/16389/2664 -/.tmp/pgdata/base/16389/2665 -/.tmp/pgdata/base/16389/2666 -/.tmp/pgdata/base/16389/2667 -/.tmp/pgdata/base/16389/2668 -/.tmp/pgdata/base/16389/2669 -/.tmp/pgdata/base/16389/2670 -/.tmp/pgdata/base/16389/2673 -/.tmp/pgdata/base/16389/2674 -/.tmp/pgdata/base/16389/2675 -/.tmp/pgdata/base/16389/2678 -/.tmp/pgdata/base/16389/2679 -/.tmp/pgdata/base/16389/2680 -/.tmp/pgdata/base/16389/2681 -/.tmp/pgdata/base/16389/2682 -/.tmp/pgdata/base/16389/2683 -/.tmp/pgdata/base/16389/2684 -/.tmp/pgdata/base/16389/2685 -/.tmp/pgdata/base/16389/2686 -/.tmp/pgdata/base/16389/2687 -/.tmp/pgdata/base/16389/2688 -/.tmp/pgdata/base/16389/2689 -/.tmp/pgdata/base/16389/2690 -/.tmp/pgdata/base/16389/2691 -/.tmp/pgdata/base/16389/2692 -/.tmp/pgdata/base/16389/2693 -/.tmp/pgdata/base/16389/2696 -/.tmp/pgdata/base/16389/2699 -/.tmp/pgdata/base/16389/2701 -/.tmp/pgdata/base/16389/2702 -/.tmp/pgdata/base/16389/2703 -/.tmp/pgdata/base/16389/2704 -/.tmp/pgdata/base/16389/2753 -/.tmp/pgdata/base/16389/2753_fsm -/.tmp/pgdata/base/16389/2753_vm -/.tmp/pgdata/base/16389/2754 -/.tmp/pgdata/base/16389/2755 -/.tmp/pgdata/base/16389/2756 -/.tmp/pgdata/base/16389/2757 -/.tmp/pgdata/base/16389/2830 -/.tmp/pgdata/base/16389/2831 -/.tmp/pgdata/base/16389/2832 -/.tmp/pgdata/base/16389/2833 -/.tmp/pgdata/base/16389/2834 -/.tmp/pgdata/base/16389/2835 -/.tmp/pgdata/base/16389/2836 -/.tmp/pgdata/base/16389/2836_fsm -/.tmp/pgdata/base/16389/2836_vm -/.tmp/pgdata/base/16389/2837 -/.tmp/pgdata/base/16389/2838 -/.tmp/pgdata/base/16389/2838_fsm -/.tmp/pgdata/base/16389/2838_vm -/.tmp/pgdata/base/16389/2839 -/.tmp/pgdata/base/16389/2840 -/.tmp/pgdata/base/16389/2840_fsm -/.tmp/pgdata/base/16389/2840_vm -/.tmp/pgdata/base/16389/2841 -/.tmp/pgdata/base/16389/2995 -/.tmp/pgdata/base/16389/2996 -/.tmp/pgdata/base/16389/3079 -/.tmp/pgdata/base/16389/3079_fsm -/.tmp/pgdata/base/16389/3079_vm -/.tmp/pgdata/base/16389/3080 -/.tmp/pgdata/base/16389/3081 -/.tmp/pgdata/base/16389/3085 -/.tmp/pgdata/base/16389/3118 -/.tmp/pgdata/base/16389/3119 -/.tmp/pgdata/base/16389/3164 -/.tmp/pgdata/base/16389/3256 -/.tmp/pgdata/base/16389/3257 -/.tmp/pgdata/base/16389/3258 -/.tmp/pgdata/base/16389/3350 -/.tmp/pgdata/base/16389/3351 -/.tmp/pgdata/base/16389/3379 -/.tmp/pgdata/base/16389/3380 -/.tmp/pgdata/base/16389/3381 -/.tmp/pgdata/base/16389/3394 -/.tmp/pgdata/base/16389/3394_fsm -/.tmp/pgdata/base/16389/3394_vm -/.tmp/pgdata/base/16389/3395 -/.tmp/pgdata/base/16389/3429 -/.tmp/pgdata/base/16389/3430 -/.tmp/pgdata/base/16389/3431 -/.tmp/pgdata/base/16389/3433 -/.tmp/pgdata/base/16389/3439 -/.tmp/pgdata/base/16389/3440 -/.tmp/pgdata/base/16389/3455 -/.tmp/pgdata/base/16389/3456 -/.tmp/pgdata/base/16389/3456_fsm -/.tmp/pgdata/base/16389/3456_vm -/.tmp/pgdata/base/16389/3466 -/.tmp/pgdata/base/16389/3467 -/.tmp/pgdata/base/16389/3468 -/.tmp/pgdata/base/16389/3501 -/.tmp/pgdata/base/16389/3502 -/.tmp/pgdata/base/16389/3503 -/.tmp/pgdata/base/16389/3534 -/.tmp/pgdata/base/16389/3541 -/.tmp/pgdata/base/16389/3541_fsm -/.tmp/pgdata/base/16389/3541_vm -/.tmp/pgdata/base/16389/3542 -/.tmp/pgdata/base/16389/3574 -/.tmp/pgdata/base/16389/3575 -/.tmp/pgdata/base/16389/3576 -/.tmp/pgdata/base/16389/3596 -/.tmp/pgdata/base/16389/3597 -/.tmp/pgdata/base/16389/3598 -/.tmp/pgdata/base/16389/3599 -/.tmp/pgdata/base/16389/3600 -/.tmp/pgdata/base/16389/3600_fsm -/.tmp/pgdata/base/16389/3600_vm -/.tmp/pgdata/base/16389/3601 -/.tmp/pgdata/base/16389/3601_fsm -/.tmp/pgdata/base/16389/3601_vm -/.tmp/pgdata/base/16389/3602 -/.tmp/pgdata/base/16389/3602_fsm -/.tmp/pgdata/base/16389/3602_vm -/.tmp/pgdata/base/16389/3603 -/.tmp/pgdata/base/16389/3603_fsm -/.tmp/pgdata/base/16389/3603_vm -/.tmp/pgdata/base/16389/3604 -/.tmp/pgdata/base/16389/3605 -/.tmp/pgdata/base/16389/3606 -/.tmp/pgdata/base/16389/3607 -/.tmp/pgdata/base/16389/3608 -/.tmp/pgdata/base/16389/3609 -/.tmp/pgdata/base/16389/3712 -/.tmp/pgdata/base/16389/3764 -/.tmp/pgdata/base/16389/3764_fsm -/.tmp/pgdata/base/16389/3764_vm -/.tmp/pgdata/base/16389/3766 -/.tmp/pgdata/base/16389/3767 -/.tmp/pgdata/base/16389/3997 -/.tmp/pgdata/base/16389/4143 -/.tmp/pgdata/base/16389/4144 -/.tmp/pgdata/base/16389/4145 -/.tmp/pgdata/base/16389/4146 -/.tmp/pgdata/base/16389/4147 -/.tmp/pgdata/base/16389/4148 -/.tmp/pgdata/base/16389/4149 -/.tmp/pgdata/base/16389/4150 -/.tmp/pgdata/base/16389/4151 -/.tmp/pgdata/base/16389/4152 -/.tmp/pgdata/base/16389/4153 -/.tmp/pgdata/base/16389/4154 -/.tmp/pgdata/base/16389/4155 -/.tmp/pgdata/base/16389/4156 -/.tmp/pgdata/base/16389/4157 -/.tmp/pgdata/base/16389/4158 -/.tmp/pgdata/base/16389/4159 -/.tmp/pgdata/base/16389/4160 -/.tmp/pgdata/base/16389/4163 -/.tmp/pgdata/base/16389/4164 -/.tmp/pgdata/base/16389/4165 -/.tmp/pgdata/base/16389/4166 -/.tmp/pgdata/base/16389/4167 -/.tmp/pgdata/base/16389/4168 -/.tmp/pgdata/base/16389/4169 -/.tmp/pgdata/base/16389/4170 -/.tmp/pgdata/base/16389/4171 -/.tmp/pgdata/base/16389/4172 -/.tmp/pgdata/base/16389/4173 -/.tmp/pgdata/base/16389/4174 -/.tmp/pgdata/base/16389/5002 -/.tmp/pgdata/base/16389/6102 -/.tmp/pgdata/base/16389/6104 -/.tmp/pgdata/base/16389/6106 -/.tmp/pgdata/base/16389/6110 -/.tmp/pgdata/base/16389/6111 -/.tmp/pgdata/base/16389/6112 -/.tmp/pgdata/base/16389/6113 -/.tmp/pgdata/base/16389/6116 -/.tmp/pgdata/base/16389/6117 -/.tmp/pgdata/base/16389/6175 -/.tmp/pgdata/base/16389/6176 -/.tmp/pgdata/base/16389/6228 -/.tmp/pgdata/base/16389/6229 -/.tmp/pgdata/base/16389/6237 -/.tmp/pgdata/base/16389/6238 -/.tmp/pgdata/base/16389/6239 -/.tmp/pgdata/base/16389/6351 -/.tmp/pgdata/base/16389/6352 -/.tmp/pgdata/base/16389/15043 -/.tmp/pgdata/base/16389/15043_fsm -/.tmp/pgdata/base/16389/15043_vm -/.tmp/pgdata/base/16389/15046 -/.tmp/pgdata/base/16389/15047 -/.tmp/pgdata/base/16389/15048 -/.tmp/pgdata/base/16389/15048_fsm -/.tmp/pgdata/base/16389/15048_vm -/.tmp/pgdata/base/16389/15051 -/.tmp/pgdata/base/16389/15052 -/.tmp/pgdata/base/16389/15053 -/.tmp/pgdata/base/16389/15053_fsm -/.tmp/pgdata/base/16389/15053_vm -/.tmp/pgdata/base/16389/15056 -/.tmp/pgdata/base/16389/15057 -/.tmp/pgdata/base/16389/15058 -/.tmp/pgdata/base/16389/15058_fsm -/.tmp/pgdata/base/16389/15058_vm -/.tmp/pgdata/base/16389/15061 -/.tmp/pgdata/base/16389/15062 -/.tmp/pgdata/base/16389/16735 -/.tmp/pgdata/base/16389/16739 -/.tmp/pgdata/base/16389/16740 -/.tmp/pgdata/base/16389/16741 -/.tmp/pgdata/base/16389/16743 -/.tmp/pgdata/base/16389/16753 -/.tmp/pgdata/base/16389/16754 -/.tmp/pgdata/base/16389/16755 -/.tmp/pgdata/base/16389/16757 -/.tmp/pgdata/base/16389/16758 -/.tmp/pgdata/base/16389/16759 -/.tmp/pgdata/base/16389/16766 -/.tmp/pgdata/base/16389/16767 -/.tmp/pgdata/base/16389/16768 -/.tmp/pgdata/base/16389/16780 -/.tmp/pgdata/base/16389/16785 -/.tmp/pgdata/base/16389/16786 -/.tmp/pgdata/base/16389/16787 -/.tmp/pgdata/base/16389/16794 -/.tmp/pgdata/base/16389/16801 -/.tmp/pgdata/base/16389/16802 -/.tmp/pgdata/base/16389/16803 -/.tmp/pgdata/base/16389/16810 -/.tmp/pgdata/base/16389/16815 -/.tmp/pgdata/base/16389/16816 -/.tmp/pgdata/base/16389/16817 -/.tmp/pgdata/base/16389/16824 -/.tmp/pgdata/base/16389/16831 -/.tmp/pgdata/base/16389/16833 -/.tmp/pgdata/base/16389/16840 -/.tmp/pgdata/base/16389/16845 -/.tmp/pgdata/base/16389/16846 -/.tmp/pgdata/base/16389/16847 -/.tmp/pgdata/base/16389/16859 -/.tmp/pgdata/base/16389/16864 -/.tmp/pgdata/base/16389/16865 -/.tmp/pgdata/base/16389/16866 -/.tmp/pgdata/base/16389/16877 -/.tmp/pgdata/base/16389/16886 -/.tmp/pgdata/base/16389/16887 -/.tmp/pgdata/base/16389/16888 -/.tmp/pgdata/base/16389/16895 -/.tmp/pgdata/base/16389/16900 -/.tmp/pgdata/base/16389/16904 -/.tmp/pgdata/base/16389/16905 -/.tmp/pgdata/base/16389/16906 -/.tmp/pgdata/base/16389/16918 -/.tmp/pgdata/base/16389/16926 -/.tmp/pgdata/base/16389/16933 -/.tmp/pgdata/base/16389/16943 -/.tmp/pgdata/base/16389/16944 -/.tmp/pgdata/base/16389/16945 -/.tmp/pgdata/base/16389/16947 -/.tmp/pgdata/base/16389/16954 -/.tmp/pgdata/base/16389/16955 -/.tmp/pgdata/base/16389/16963 -/.tmp/pgdata/base/16389/16964 -/.tmp/pgdata/base/16389/16965 -/.tmp/pgdata/base/16389/16972 -/.tmp/pgdata/base/16389/16973 -/.tmp/pgdata/base/16389/16978 -/.tmp/pgdata/base/16389/16980 -/.tmp/pgdata/base/16389/16987 -/.tmp/pgdata/base/16389/16994 -/.tmp/pgdata/base/16389/17001 -/.tmp/pgdata/base/16389/17008 -/.tmp/pgdata/base/16389/17034 -/.tmp/pgdata/base/16389/17037 -/.tmp/pgdata/base/16389/17053 -/.tmp/pgdata/base/16389/17053_fsm -/.tmp/pgdata/base/16389/17053_vm -/.tmp/pgdata/base/16389/17068 -/.tmp/pgdata/base/16389/17069 -/.tmp/pgdata/base/16389/17070 -/.tmp/pgdata/base/16389/17077 -/.tmp/pgdata/base/16389/17078 -/.tmp/pgdata/base/16389/pg_filenode.map -/.tmp/pgdata/base/16389/pg_internal.init -/.tmp/pgdata/base/16389/PG_VERSION -/.tmp/pgdata/base/17081/112 -/.tmp/pgdata/base/17081/113 -/.tmp/pgdata/base/17081/174 -/.tmp/pgdata/base/17081/175 -/.tmp/pgdata/base/17081/548 -/.tmp/pgdata/base/17081/549 -/.tmp/pgdata/base/17081/826 -/.tmp/pgdata/base/17081/827 -/.tmp/pgdata/base/17081/828 -/.tmp/pgdata/base/17081/1247 -/.tmp/pgdata/base/17081/1247_fsm -/.tmp/pgdata/base/17081/1247_vm -/.tmp/pgdata/base/17081/1249 -/.tmp/pgdata/base/17081/1249_fsm -/.tmp/pgdata/base/17081/1249_vm -/.tmp/pgdata/base/17081/1255 -/.tmp/pgdata/base/17081/1255_fsm -/.tmp/pgdata/base/17081/1255_vm -/.tmp/pgdata/base/17081/1259 -/.tmp/pgdata/base/17081/1259_fsm -/.tmp/pgdata/base/17081/1259_vm -/.tmp/pgdata/base/17081/1417 -/.tmp/pgdata/base/17081/1418 -/.tmp/pgdata/base/17081/2187 -/.tmp/pgdata/base/17081/2224 -/.tmp/pgdata/base/17081/2228 -/.tmp/pgdata/base/17081/2328 -/.tmp/pgdata/base/17081/2336 -/.tmp/pgdata/base/17081/2337 -/.tmp/pgdata/base/17081/2579 -/.tmp/pgdata/base/17081/2600 -/.tmp/pgdata/base/17081/2600_fsm -/.tmp/pgdata/base/17081/2600_vm -/.tmp/pgdata/base/17081/2601 -/.tmp/pgdata/base/17081/2601_fsm -/.tmp/pgdata/base/17081/2601_vm -/.tmp/pgdata/base/17081/2602 -/.tmp/pgdata/base/17081/2602_fsm -/.tmp/pgdata/base/17081/2602_vm -/.tmp/pgdata/base/17081/2603 -/.tmp/pgdata/base/17081/2603_fsm -/.tmp/pgdata/base/17081/2603_vm -/.tmp/pgdata/base/17081/2604 -/.tmp/pgdata/base/17081/2605 -/.tmp/pgdata/base/17081/2605_fsm -/.tmp/pgdata/base/17081/2605_vm -/.tmp/pgdata/base/17081/2606 -/.tmp/pgdata/base/17081/2606_fsm -/.tmp/pgdata/base/17081/2606_vm -/.tmp/pgdata/base/17081/2607 -/.tmp/pgdata/base/17081/2607_fsm -/.tmp/pgdata/base/17081/2607_vm -/.tmp/pgdata/base/17081/2608 -/.tmp/pgdata/base/17081/2608_fsm -/.tmp/pgdata/base/17081/2608_vm -/.tmp/pgdata/base/17081/2609 -/.tmp/pgdata/base/17081/2609_fsm -/.tmp/pgdata/base/17081/2609_vm -/.tmp/pgdata/base/17081/2610 -/.tmp/pgdata/base/17081/2610_fsm -/.tmp/pgdata/base/17081/2610_vm -/.tmp/pgdata/base/17081/2611 -/.tmp/pgdata/base/17081/2612 -/.tmp/pgdata/base/17081/2612_fsm -/.tmp/pgdata/base/17081/2612_vm -/.tmp/pgdata/base/17081/2613 -/.tmp/pgdata/base/17081/2615 -/.tmp/pgdata/base/17081/2615_fsm -/.tmp/pgdata/base/17081/2615_vm -/.tmp/pgdata/base/17081/2616 -/.tmp/pgdata/base/17081/2616_fsm -/.tmp/pgdata/base/17081/2616_vm -/.tmp/pgdata/base/17081/2617 -/.tmp/pgdata/base/17081/2617_fsm -/.tmp/pgdata/base/17081/2617_vm -/.tmp/pgdata/base/17081/2618 -/.tmp/pgdata/base/17081/2618_fsm -/.tmp/pgdata/base/17081/2618_vm -/.tmp/pgdata/base/17081/2619 -/.tmp/pgdata/base/17081/2619_fsm -/.tmp/pgdata/base/17081/2619_vm -/.tmp/pgdata/base/17081/2620 -/.tmp/pgdata/base/17081/2620_fsm -/.tmp/pgdata/base/17081/2650 -/.tmp/pgdata/base/17081/2651 -/.tmp/pgdata/base/17081/2652 -/.tmp/pgdata/base/17081/2653 -/.tmp/pgdata/base/17081/2654 -/.tmp/pgdata/base/17081/2655 -/.tmp/pgdata/base/17081/2656 -/.tmp/pgdata/base/17081/2657 -/.tmp/pgdata/base/17081/2658 -/.tmp/pgdata/base/17081/2659 -/.tmp/pgdata/base/17081/2660 -/.tmp/pgdata/base/17081/2661 -/.tmp/pgdata/base/17081/2662 -/.tmp/pgdata/base/17081/2663 -/.tmp/pgdata/base/17081/2664 -/.tmp/pgdata/base/17081/2665 -/.tmp/pgdata/base/17081/2666 -/.tmp/pgdata/base/17081/2667 -/.tmp/pgdata/base/17081/2668 -/.tmp/pgdata/base/17081/2669 -/.tmp/pgdata/base/17081/2670 -/.tmp/pgdata/base/17081/2673 -/.tmp/pgdata/base/17081/2674 -/.tmp/pgdata/base/17081/2675 -/.tmp/pgdata/base/17081/2678 -/.tmp/pgdata/base/17081/2679 -/.tmp/pgdata/base/17081/2680 -/.tmp/pgdata/base/17081/2681 -/.tmp/pgdata/base/17081/2682 -/.tmp/pgdata/base/17081/2683 -/.tmp/pgdata/base/17081/2684 -/.tmp/pgdata/base/17081/2685 -/.tmp/pgdata/base/17081/2686 -/.tmp/pgdata/base/17081/2687 -/.tmp/pgdata/base/17081/2688 -/.tmp/pgdata/base/17081/2689 -/.tmp/pgdata/base/17081/2690 -/.tmp/pgdata/base/17081/2691 -/.tmp/pgdata/base/17081/2692 -/.tmp/pgdata/base/17081/2693 -/.tmp/pgdata/base/17081/2696 -/.tmp/pgdata/base/17081/2699 -/.tmp/pgdata/base/17081/2701 -/.tmp/pgdata/base/17081/2702 -/.tmp/pgdata/base/17081/2703 -/.tmp/pgdata/base/17081/2704 -/.tmp/pgdata/base/17081/2753 -/.tmp/pgdata/base/17081/2753_fsm -/.tmp/pgdata/base/17081/2753_vm -/.tmp/pgdata/base/17081/2754 -/.tmp/pgdata/base/17081/2755 -/.tmp/pgdata/base/17081/2756 -/.tmp/pgdata/base/17081/2757 -/.tmp/pgdata/base/17081/2830 -/.tmp/pgdata/base/17081/2831 -/.tmp/pgdata/base/17081/2832 -/.tmp/pgdata/base/17081/2833 -/.tmp/pgdata/base/17081/2834 -/.tmp/pgdata/base/17081/2835 -/.tmp/pgdata/base/17081/2836 -/.tmp/pgdata/base/17081/2836_fsm -/.tmp/pgdata/base/17081/2836_vm -/.tmp/pgdata/base/17081/2837 -/.tmp/pgdata/base/17081/2838 -/.tmp/pgdata/base/17081/2838_fsm -/.tmp/pgdata/base/17081/2838_vm -/.tmp/pgdata/base/17081/2839 -/.tmp/pgdata/base/17081/2840 -/.tmp/pgdata/base/17081/2840_fsm -/.tmp/pgdata/base/17081/2840_vm -/.tmp/pgdata/base/17081/2841 -/.tmp/pgdata/base/17081/2995 -/.tmp/pgdata/base/17081/2996 -/.tmp/pgdata/base/17081/3079 -/.tmp/pgdata/base/17081/3079_fsm -/.tmp/pgdata/base/17081/3079_vm -/.tmp/pgdata/base/17081/3080 -/.tmp/pgdata/base/17081/3081 -/.tmp/pgdata/base/17081/3085 -/.tmp/pgdata/base/17081/3118 -/.tmp/pgdata/base/17081/3119 -/.tmp/pgdata/base/17081/3164 -/.tmp/pgdata/base/17081/3256 -/.tmp/pgdata/base/17081/3257 -/.tmp/pgdata/base/17081/3258 -/.tmp/pgdata/base/17081/3350 -/.tmp/pgdata/base/17081/3351 -/.tmp/pgdata/base/17081/3379 -/.tmp/pgdata/base/17081/3380 -/.tmp/pgdata/base/17081/3381 -/.tmp/pgdata/base/17081/3394 -/.tmp/pgdata/base/17081/3394_fsm -/.tmp/pgdata/base/17081/3394_vm -/.tmp/pgdata/base/17081/3395 -/.tmp/pgdata/base/17081/3429 -/.tmp/pgdata/base/17081/3430 -/.tmp/pgdata/base/17081/3431 -/.tmp/pgdata/base/17081/3433 -/.tmp/pgdata/base/17081/3439 -/.tmp/pgdata/base/17081/3440 -/.tmp/pgdata/base/17081/3455 -/.tmp/pgdata/base/17081/3456 -/.tmp/pgdata/base/17081/3456_fsm -/.tmp/pgdata/base/17081/3456_vm -/.tmp/pgdata/base/17081/3466 -/.tmp/pgdata/base/17081/3467 -/.tmp/pgdata/base/17081/3468 -/.tmp/pgdata/base/17081/3501 -/.tmp/pgdata/base/17081/3502 -/.tmp/pgdata/base/17081/3503 -/.tmp/pgdata/base/17081/3534 -/.tmp/pgdata/base/17081/3541 -/.tmp/pgdata/base/17081/3541_fsm -/.tmp/pgdata/base/17081/3541_vm -/.tmp/pgdata/base/17081/3542 -/.tmp/pgdata/base/17081/3574 -/.tmp/pgdata/base/17081/3575 -/.tmp/pgdata/base/17081/3576 -/.tmp/pgdata/base/17081/3596 -/.tmp/pgdata/base/17081/3597 -/.tmp/pgdata/base/17081/3598 -/.tmp/pgdata/base/17081/3599 -/.tmp/pgdata/base/17081/3600 -/.tmp/pgdata/base/17081/3600_fsm -/.tmp/pgdata/base/17081/3600_vm -/.tmp/pgdata/base/17081/3601 -/.tmp/pgdata/base/17081/3601_fsm -/.tmp/pgdata/base/17081/3601_vm -/.tmp/pgdata/base/17081/3602 -/.tmp/pgdata/base/17081/3602_fsm -/.tmp/pgdata/base/17081/3602_vm -/.tmp/pgdata/base/17081/3603 -/.tmp/pgdata/base/17081/3603_fsm -/.tmp/pgdata/base/17081/3603_vm -/.tmp/pgdata/base/17081/3604 -/.tmp/pgdata/base/17081/3605 -/.tmp/pgdata/base/17081/3606 -/.tmp/pgdata/base/17081/3607 -/.tmp/pgdata/base/17081/3608 -/.tmp/pgdata/base/17081/3609 -/.tmp/pgdata/base/17081/3712 -/.tmp/pgdata/base/17081/3764 -/.tmp/pgdata/base/17081/3764_fsm -/.tmp/pgdata/base/17081/3764_vm -/.tmp/pgdata/base/17081/3766 -/.tmp/pgdata/base/17081/3767 -/.tmp/pgdata/base/17081/3997 -/.tmp/pgdata/base/17081/4143 -/.tmp/pgdata/base/17081/4144 -/.tmp/pgdata/base/17081/4145 -/.tmp/pgdata/base/17081/4146 -/.tmp/pgdata/base/17081/4147 -/.tmp/pgdata/base/17081/4148 -/.tmp/pgdata/base/17081/4149 -/.tmp/pgdata/base/17081/4150 -/.tmp/pgdata/base/17081/4151 -/.tmp/pgdata/base/17081/4152 -/.tmp/pgdata/base/17081/4153 -/.tmp/pgdata/base/17081/4154 -/.tmp/pgdata/base/17081/4155 -/.tmp/pgdata/base/17081/4156 -/.tmp/pgdata/base/17081/4157 -/.tmp/pgdata/base/17081/4158 -/.tmp/pgdata/base/17081/4159 -/.tmp/pgdata/base/17081/4160 -/.tmp/pgdata/base/17081/4163 -/.tmp/pgdata/base/17081/4164 -/.tmp/pgdata/base/17081/4165 -/.tmp/pgdata/base/17081/4166 -/.tmp/pgdata/base/17081/4167 -/.tmp/pgdata/base/17081/4168 -/.tmp/pgdata/base/17081/4169 -/.tmp/pgdata/base/17081/4170 -/.tmp/pgdata/base/17081/4171 -/.tmp/pgdata/base/17081/4172 -/.tmp/pgdata/base/17081/4173 -/.tmp/pgdata/base/17081/4174 -/.tmp/pgdata/base/17081/5002 -/.tmp/pgdata/base/17081/6102 -/.tmp/pgdata/base/17081/6104 -/.tmp/pgdata/base/17081/6106 -/.tmp/pgdata/base/17081/6110 -/.tmp/pgdata/base/17081/6111 -/.tmp/pgdata/base/17081/6112 -/.tmp/pgdata/base/17081/6113 -/.tmp/pgdata/base/17081/6116 -/.tmp/pgdata/base/17081/6117 -/.tmp/pgdata/base/17081/6175 -/.tmp/pgdata/base/17081/6176 -/.tmp/pgdata/base/17081/6228 -/.tmp/pgdata/base/17081/6229 -/.tmp/pgdata/base/17081/6237 -/.tmp/pgdata/base/17081/6238 -/.tmp/pgdata/base/17081/6239 -/.tmp/pgdata/base/17081/6351 -/.tmp/pgdata/base/17081/6352 -/.tmp/pgdata/base/17081/15043 -/.tmp/pgdata/base/17081/15043_fsm -/.tmp/pgdata/base/17081/15043_vm -/.tmp/pgdata/base/17081/15046 -/.tmp/pgdata/base/17081/15047 -/.tmp/pgdata/base/17081/15048 -/.tmp/pgdata/base/17081/15048_fsm -/.tmp/pgdata/base/17081/15048_vm -/.tmp/pgdata/base/17081/15051 -/.tmp/pgdata/base/17081/15052 -/.tmp/pgdata/base/17081/15053 -/.tmp/pgdata/base/17081/15053_fsm -/.tmp/pgdata/base/17081/15053_vm -/.tmp/pgdata/base/17081/15056 -/.tmp/pgdata/base/17081/15057 -/.tmp/pgdata/base/17081/15058 -/.tmp/pgdata/base/17081/15058_fsm -/.tmp/pgdata/base/17081/15058_vm -/.tmp/pgdata/base/17081/15061 -/.tmp/pgdata/base/17081/15062 -/.tmp/pgdata/base/17081/17082 -/.tmp/pgdata/base/17081/17087 -/.tmp/pgdata/base/17081/17088 -/.tmp/pgdata/base/17081/17089 -/.tmp/pgdata/base/17081/17091 -/.tmp/pgdata/base/17081/17097 -/.tmp/pgdata/base/17081/17098 -/.tmp/pgdata/base/17081/17099 -/.tmp/pgdata/base/17081/17101 -/.tmp/pgdata/base/17081/17109 -/.tmp/pgdata/base/17081/17110 -/.tmp/pgdata/base/17081/17111 -/.tmp/pgdata/base/17081/17113 -/.tmp/pgdata/base/17081/17118 -/.tmp/pgdata/base/17081/17130 -/.tmp/pgdata/base/17081/17137 -/.tmp/pgdata/base/17081/17138 -/.tmp/pgdata/base/17081/17139 -/.tmp/pgdata/base/17081/17146 -/.tmp/pgdata/base/17081/17155 -/.tmp/pgdata/base/17081/17162 -/.tmp/pgdata/base/17081/17169 -/.tmp/pgdata/base/17081/17170 -/.tmp/pgdata/base/17081/17171 -/.tmp/pgdata/base/17081/17178 -/.tmp/pgdata/base/17081/17185 -/.tmp/pgdata/base/17081/17186 -/.tmp/pgdata/base/17081/17187 -/.tmp/pgdata/base/17081/17194 -/.tmp/pgdata/base/17081/17201 -/.tmp/pgdata/base/17081/17202 -/.tmp/pgdata/base/17081/17203 -/.tmp/pgdata/base/17081/17210 -/.tmp/pgdata/base/17081/17218 -/.tmp/pgdata/base/17081/17226 -/.tmp/pgdata/base/17081/17227 -/.tmp/pgdata/base/17081/17255 -/.tmp/pgdata/base/17081/17264 -/.tmp/pgdata/base/17081/17265 -/.tmp/pgdata/base/17081/17266 -/.tmp/pgdata/base/17081/17273 -/.tmp/pgdata/base/17081/17278 -/.tmp/pgdata/base/17081/17279 -/.tmp/pgdata/base/17081/17280 -/.tmp/pgdata/base/17081/17293 -/.tmp/pgdata/base/17081/17299 -/.tmp/pgdata/base/17081/17323 -/.tmp/pgdata/base/17081/17332 -/.tmp/pgdata/base/17081/17333 -/.tmp/pgdata/base/17081/17334 -/.tmp/pgdata/base/17081/17351 -/.tmp/pgdata/base/17081/17358 -/.tmp/pgdata/base/17081/17363 -/.tmp/pgdata/base/17081/17373 -/.tmp/pgdata/base/17081/17374 -/.tmp/pgdata/base/17081/17375 -/.tmp/pgdata/base/17081/17382 -/.tmp/pgdata/base/17081/17390 -/.tmp/pgdata/base/17081/17408 -/.tmp/pgdata/base/17081/17415 -/.tmp/pgdata/base/17081/17416 -/.tmp/pgdata/base/17081/17417 -/.tmp/pgdata/base/17081/17424 -/.tmp/pgdata/base/17081/17432 -/.tmp/pgdata/base/17081/17454 -/.tmp/pgdata/base/17081/17455 -/.tmp/pgdata/base/17081/pg_filenode.map -/.tmp/pgdata/base/17081/pg_internal.init -/.tmp/pgdata/base/17081/PG_VERSION -/.tmp/pgdata/global/1213 -/.tmp/pgdata/global/1213_fsm -/.tmp/pgdata/global/1213_vm -/.tmp/pgdata/global/1214 -/.tmp/pgdata/global/1232 -/.tmp/pgdata/global/1233 -/.tmp/pgdata/global/1260 -/.tmp/pgdata/global/1260_fsm -/.tmp/pgdata/global/1260_vm -/.tmp/pgdata/global/1261 -/.tmp/pgdata/global/1261_fsm -/.tmp/pgdata/global/1261_vm -/.tmp/pgdata/global/1262 -/.tmp/pgdata/global/1262_fsm -/.tmp/pgdata/global/1262_vm -/.tmp/pgdata/global/2396 -/.tmp/pgdata/global/2396_fsm -/.tmp/pgdata/global/2396_vm -/.tmp/pgdata/global/2397 -/.tmp/pgdata/global/2671 -/.tmp/pgdata/global/2672 -/.tmp/pgdata/global/2676 -/.tmp/pgdata/global/2677 -/.tmp/pgdata/global/2694 -/.tmp/pgdata/global/2695 -/.tmp/pgdata/global/2697 -/.tmp/pgdata/global/2698 -/.tmp/pgdata/global/2846 -/.tmp/pgdata/global/2847 -/.tmp/pgdata/global/2964 -/.tmp/pgdata/global/2965 -/.tmp/pgdata/global/2966 -/.tmp/pgdata/global/2967 -/.tmp/pgdata/global/3592 -/.tmp/pgdata/global/3593 -/.tmp/pgdata/global/4060 -/.tmp/pgdata/global/4061 -/.tmp/pgdata/global/4177 -/.tmp/pgdata/global/4178 -/.tmp/pgdata/global/4183 -/.tmp/pgdata/global/4184 -/.tmp/pgdata/global/4185 -/.tmp/pgdata/global/4186 -/.tmp/pgdata/global/6000 -/.tmp/pgdata/global/6001 -/.tmp/pgdata/global/6002 -/.tmp/pgdata/global/6100 -/.tmp/pgdata/global/6114 -/.tmp/pgdata/global/6115 -/.tmp/pgdata/global/6243 -/.tmp/pgdata/global/6244 -/.tmp/pgdata/global/6245 -/.tmp/pgdata/global/6246 -/.tmp/pgdata/global/6247 -/.tmp/pgdata/global/6302 -/.tmp/pgdata/global/6303 -/.tmp/pgdata/global/config_exec_params -/.tmp/pgdata/global/pg_control -/.tmp/pgdata/global/pg_filenode.map -/.tmp/pgdata/global/pg_internal.init -/.tmp/pgdata/pg_logical/replorigin_checkpoint -/.tmp/pgdata/pg_multixact/members/0000 -/.tmp/pgdata/pg_multixact/offsets/0000 -/.tmp/pgdata/pg_subtrans/0000 -/.tmp/pgdata/pg_wal/000000010000000000000001 -/.tmp/pgdata/pg_wal/000000010000000000000002 -/.tmp/pgdata/pg_xact/0000 -/.tmp/pgdata/pg_hba.conf -/.tmp/pgdata/pg_ident.conf -/.tmp/pgdata/PG_VERSION -/.tmp/pgdata/postgresql.auto.conf -/.tmp/pgdata/postgresql.conf -/.tmp/pgdata/postmaster.opts -/.tmp/pgdata/postmaster.pid -/.tmp/config.override.toml -/.tmp/daily_rewards_manual.ps1 -/.tmp/pg.log -/.tmp/run_daily_rewards_test.ps1 -/.tmp/server.log +/.tmp/ +.idea/ +dump.rdb diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index b12f7b93..00000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -/backend.iml -/modules.xml -/vcs.xml diff --git a/Cargo.nix b/Cargo.nix index 79512924..c477018e 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -177,6 +177,26 @@ rec { # File a bug if you depend on any for non-debug work! debug = internal.debugCrate { inherit packageId; }; }; + "academy_core_daily_rewards_contracts" = rec { + packageId = "academy_core_daily_rewards_contracts"; + build = internal.buildRustCrateWithFeatures { + packageId = "academy_core_daily_rewards_contracts"; + }; + + # Debug support which might change between releases. + # File a bug if you depend on any for non-debug work! + debug = internal.debugCrate { inherit packageId; }; + }; + "academy_core_daily_rewards_impl" = rec { + packageId = "academy_core_daily_rewards_impl"; + build = internal.buildRustCrateWithFeatures { + packageId = "academy_core_daily_rewards_impl"; + }; + + # Debug support which might change between releases. + # File a bug if you depend on any for non-debug work! + debug = internal.debugCrate { inherit packageId; }; + }; "academy_core_finance_contracts" = rec { packageId = "academy_core_finance_contracts"; build = internal.buildRustCrateWithFeatures { @@ -600,11 +620,12 @@ rec { crateBin = [ { name = "academy"; - path = "src/main.rs"; + path = "src\\main.rs"; requiredFeatures = [ ]; } ]; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_api_rest"; @@ -642,6 +663,10 @@ rec { name = "academy_core_contact_impl"; packageId = "academy_core_contact_impl"; } + { + name = "academy_core_daily_rewards_impl"; + packageId = "academy_core_daily_rewards_impl"; + } { name = "academy_core_finance_contracts"; packageId = "academy_core_finance_contracts"; @@ -861,7 +886,8 @@ rec { crateName = "academy_api_rest"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_api/rest; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_api\rest; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_assets"; @@ -883,6 +909,10 @@ rec { name = "academy_core_contact_contracts"; packageId = "academy_core_contact_contracts"; } + { + name = "academy_core_daily_rewards_contracts"; + packageId = "academy_core_daily_rewards_contracts"; + } { name = "academy_core_finance_contracts"; packageId = "academy_core_finance_contracts"; @@ -964,6 +994,12 @@ rec { packageId = "base64 0.22.1"; usesDefaultFeatures = false; } + { + name = "chrono"; + packageId = "chrono"; + usesDefaultFeatures = false; + features = [ "serde" "clock" ]; + } { name = "futures"; packageId = "futures"; @@ -984,7 +1020,7 @@ rec { name = "schemars"; packageId = "schemars"; usesDefaultFeatures = false; - features = [ "derive" "preserve_order" "uuid1" "url2" ]; + features = [ "chrono04" "derive" "preserve_order" "uuid1" "url2" ]; } { name = "serde"; @@ -1042,14 +1078,16 @@ rec { crateName = "academy_assets"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_assets; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_assets; }; + libPath = "src\\lib.rs"; }; "academy_auth_contracts" = rec { crateName = "academy_auth_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_auth/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_auth\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_models"; @@ -1082,7 +1120,8 @@ rec { crateName = "academy_auth_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_auth/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_auth\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -1179,7 +1218,8 @@ rec { crateName = "academy_cache_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_cache/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_cache\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "anyhow"; @@ -1209,7 +1249,8 @@ rec { crateName = "academy_cache_valkey"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_cache/valkey; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_cache\valkey; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_cache_contracts"; @@ -1282,7 +1323,8 @@ rec { crateName = "academy_config"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_config; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_config; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_assets"; @@ -1342,7 +1384,8 @@ rec { crateName = "academy_core_coin_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/coin/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\coin\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_models"; @@ -1375,7 +1418,8 @@ rec { crateName = "academy_core_coin_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/coin/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\coin\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -1445,7 +1489,8 @@ rec { crateName = "academy_core_config_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/config/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\config\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "mockall"; @@ -1463,7 +1508,8 @@ rec { crateName = "academy_core_config_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/config/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\config\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_core_config_contracts"; @@ -1501,7 +1547,8 @@ rec { crateName = "academy_core_contact_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/contact/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\contact\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_models"; @@ -1534,7 +1581,8 @@ rec { crateName = "academy_core_contact_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/contact/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\contact\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_core_contact_contracts"; @@ -1597,12 +1645,228 @@ rec { } ]; + }; + "academy_core_daily_rewards_contracts" = rec { + crateName = "academy_core_daily_rewards_contracts"; + version = "0.0.0"; + edition = "2024"; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\daily_rewards\contracts; }; + libPath = "src\\lib.rs"; + dependencies = [ + { + name = "academy_models"; + packageId = "academy_models"; + } + { + name = "anyhow"; + packageId = "anyhow"; + usesDefaultFeatures = false; + features = [ "std" ]; + } + { + name = "chrono"; + packageId = "chrono"; + usesDefaultFeatures = false; + features = [ "serde" "clock" ]; + } + { + name = "mockall"; + packageId = "mockall"; + optional = true; + usesDefaultFeatures = false; + } + { + name = "schemars"; + packageId = "schemars"; + usesDefaultFeatures = false; + features = [ "chrono04" "derive" "preserve_order" "uuid1" "url2" ]; + } + { + name = "serde"; + packageId = "serde"; + usesDefaultFeatures = false; + features = [ "derive" "std" ]; + } + { + name = "serde_json"; + packageId = "serde_json"; + usesDefaultFeatures = false; + features = [ "std" ]; + } + { + name = "thiserror"; + packageId = "thiserror 2.0.17"; + usesDefaultFeatures = false; + } + ]; + features = { + "mock" = [ "dep:mockall" ]; + }; + resolvedDefaultFeatures = [ "mock" ]; + }; + "academy_core_daily_rewards_impl" = rec { + crateName = "academy_core_daily_rewards_impl"; + version = "0.0.0"; + edition = "2024"; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\daily_rewards\impl; }; + libPath = "src\\lib.rs"; + dependencies = [ + { + name = "academy_auth_contracts"; + packageId = "academy_auth_contracts"; + } + { + name = "academy_cache_contracts"; + packageId = "academy_cache_contracts"; + } + { + name = "academy_core_coin_contracts"; + packageId = "academy_core_coin_contracts"; + } + { + name = "academy_core_daily_rewards_contracts"; + packageId = "academy_core_daily_rewards_contracts"; + } + { + name = "academy_di"; + packageId = "academy_di"; + } + { + name = "academy_models"; + packageId = "academy_models"; + } + { + name = "academy_persistence_contracts"; + packageId = "academy_persistence_contracts"; + } + { + name = "academy_shared_contracts"; + packageId = "academy_shared_contracts"; + } + { + name = "academy_utils"; + packageId = "academy_utils"; + } + { + name = "anyhow"; + packageId = "anyhow"; + usesDefaultFeatures = false; + features = [ "std" ]; + } + { + name = "bb8"; + packageId = "bb8"; + usesDefaultFeatures = false; + } + { + name = "bb8-postgres"; + packageId = "bb8-postgres"; + usesDefaultFeatures = false; + features = [ "with-chrono-0_4" "with-uuid-1" "with-serde_json-1" ]; + } + { + name = "chrono"; + packageId = "chrono"; + usesDefaultFeatures = false; + features = [ "serde" "clock" ]; + } + { + name = "reqwest"; + packageId = "reqwest"; + usesDefaultFeatures = false; + features = [ "http2" "rustls-tls" "json" ]; + } + { + name = "serde"; + packageId = "serde"; + usesDefaultFeatures = false; + features = [ "derive" "std" ]; + } + { + name = "serde_json"; + packageId = "serde_json"; + usesDefaultFeatures = false; + features = [ "std" ]; + } + { + name = "tokio-postgres"; + packageId = "tokio-postgres"; + features = [ "with-chrono-0_4" "with-uuid-1" "with-serde_json-1" ]; + } + { + name = "tracing"; + packageId = "tracing"; + usesDefaultFeatures = false; + features = [ "attributes" ]; + } + { + name = "uuid"; + packageId = "uuid"; + usesDefaultFeatures = false; + features = [ "v4" "v7" "serde" ]; + } + ]; + devDependencies = [ + { + name = "academy_auth_contracts"; + packageId = "academy_auth_contracts"; + features = [ "mock" ]; + } + { + name = "academy_cache_contracts"; + packageId = "academy_cache_contracts"; + features = [ "mock" ]; + } + { + name = "academy_core_coin_contracts"; + packageId = "academy_core_coin_contracts"; + features = [ "mock" ]; + } + { + name = "academy_core_daily_rewards_contracts"; + packageId = "academy_core_daily_rewards_contracts"; + features = [ "mock" ]; + } + { + name = "academy_models"; + packageId = "academy_models"; + } + { + name = "academy_persistence_contracts"; + packageId = "academy_persistence_contracts"; + features = [ "mock" ]; + } + { + name = "academy_shared_contracts"; + packageId = "academy_shared_contracts"; + features = [ "mock" ]; + } + { + name = "mockall"; + packageId = "mockall"; + usesDefaultFeatures = false; + } + { + name = "serde_json"; + packageId = "serde_json"; + usesDefaultFeatures = false; + features = [ "std" ]; + } + { + name = "tokio"; + packageId = "tokio"; + usesDefaultFeatures = false; + features = [ "rt-multi-thread" "macros" "sync" "fs" "process" ]; + } + ]; + }; "academy_core_finance_contracts" = rec { crateName = "academy_core_finance_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/finance/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\finance\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_models"; @@ -1641,7 +1905,8 @@ rec { crateName = "academy_core_finance_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/finance/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\finance\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -1758,14 +2023,16 @@ rec { crateName = "academy_core_health_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/health/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\health\contracts; }; + libPath = "src\\lib.rs"; }; "academy_core_health_impl" = rec { crateName = "academy_core_health_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/health/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\health\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_cache_contracts"; @@ -1820,7 +2087,8 @@ rec { crateName = "academy_core_heart_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/heart/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\heart\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_models"; @@ -1853,7 +2121,8 @@ rec { crateName = "academy_core_heart_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/heart/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\heart\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -1949,7 +2218,8 @@ rec { crateName = "academy_core_internal_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/internal/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\internal\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -1986,7 +2256,8 @@ rec { crateName = "academy_core_internal_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/internal/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\internal\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2095,7 +2366,8 @@ rec { crateName = "academy_core_mfa_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/mfa/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\mfa\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_models"; @@ -2128,7 +2400,8 @@ rec { crateName = "academy_core_mfa_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/mfa/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\mfa\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2209,7 +2482,8 @@ rec { crateName = "academy_core_oauth2_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/oauth2/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\oauth2\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_models"; @@ -2242,7 +2516,8 @@ rec { crateName = "academy_core_oauth2_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/oauth2/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\oauth2\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2350,7 +2625,8 @@ rec { crateName = "academy_core_paypal_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/paypal/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\paypal\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_models"; @@ -2383,7 +2659,8 @@ rec { crateName = "academy_core_paypal_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/paypal/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\paypal\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2520,7 +2797,8 @@ rec { crateName = "academy_core_premium_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/premium/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\premium\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_models"; @@ -2553,7 +2831,8 @@ rec { crateName = "academy_core_premium_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/premium/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\premium\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2649,7 +2928,8 @@ rec { crateName = "academy_core_session_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/session/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\session\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_models"; @@ -2682,7 +2962,8 @@ rec { crateName = "academy_core_session_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/session/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\session\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2796,7 +3077,8 @@ rec { crateName = "academy_core_user_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/user/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\user\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_models"; @@ -2843,7 +3125,8 @@ rec { crateName = "academy_core_user_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/user/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\user\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2994,7 +3277,8 @@ rec { crateName = "academy_demo"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_demo; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_demo; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_models"; @@ -3046,7 +3330,8 @@ rec { crateName = "academy_di"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_di; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_di; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_di_derive"; @@ -3059,8 +3344,9 @@ rec { crateName = "academy_di_derive"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_di_derive; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_di_derive; }; procMacro = true; + libPath = "src\\lib.rs"; dependencies = [ { name = "darling"; @@ -3087,7 +3373,8 @@ rec { crateName = "academy_email_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_email/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_email\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_models"; @@ -3119,7 +3406,8 @@ rec { crateName = "academy_email_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_email/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_email\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_assets"; @@ -3202,7 +3490,8 @@ rec { crateName = "academy_extern_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_extern/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_extern\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_models"; @@ -3235,7 +3524,8 @@ rec { crateName = "academy_extern_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_extern/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_extern\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -3325,7 +3615,8 @@ rec { crateName = "academy_models"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_models; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_models; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_utils"; @@ -3361,6 +3652,12 @@ rec { usesDefaultFeatures = false; features = [ "std" "regex" "serde" "schemars08" ]; } + { + name = "postgres-types"; + packageId = "postgres-types"; + usesDefaultFeatures = false; + features = [ "derive" ]; + } { name = "regex"; packageId = "regex"; @@ -3370,7 +3667,7 @@ rec { name = "schemars"; packageId = "schemars"; usesDefaultFeatures = false; - features = [ "derive" "preserve_order" "uuid1" "url2" ]; + features = [ "chrono04" "derive" "preserve_order" "uuid1" "url2" ]; } { name = "serde"; @@ -3378,6 +3675,12 @@ rec { usesDefaultFeatures = false; features = [ "derive" "std" ]; } + { + name = "serde_json"; + packageId = "serde_json"; + usesDefaultFeatures = false; + features = [ "std" ]; + } { name = "thiserror"; packageId = "thiserror 2.0.17"; @@ -3396,21 +3699,14 @@ rec { features = [ "v4" "v7" "serde" ]; } ]; - devDependencies = [ - { - name = "serde_json"; - packageId = "serde_json"; - usesDefaultFeatures = false; - features = [ "std" ]; - } - ]; }; "academy_persistence_contracts" = rec { crateName = "academy_persistence_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_persistence/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_persistence\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_models"; @@ -3440,11 +3736,23 @@ rec { optional = true; usesDefaultFeatures = false; } + { + name = "serde_json"; + packageId = "serde_json"; + usesDefaultFeatures = false; + features = [ "std" ]; + } { name = "thiserror"; packageId = "thiserror 2.0.17"; usesDefaultFeatures = false; } + { + name = "uuid"; + packageId = "uuid"; + usesDefaultFeatures = false; + features = [ "v4" "v7" "serde" ]; + } ]; features = { "mock" = [ "dep:mockall" ]; @@ -3455,7 +3763,8 @@ rec { crateName = "academy_persistence_postgres"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_persistence/postgres; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_persistence\postgres; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_di"; @@ -3488,7 +3797,7 @@ rec { name = "bb8-postgres"; packageId = "bb8-postgres"; usesDefaultFeatures = false; - features = [ "with-chrono-0_4" "with-uuid-1" ]; + features = [ "with-chrono-0_4" "with-uuid-1" "with-serde_json-1" ]; } { name = "chrono"; @@ -3511,6 +3820,24 @@ rec { packageId = "ouroboros"; usesDefaultFeatures = false; } + { + name = "postgres-types"; + packageId = "postgres-types"; + usesDefaultFeatures = false; + features = [ "derive" "with-serde_json-1" "with-chrono-0_4" "with-uuid-1" ]; + } + { + name = "serde_json"; + packageId = "serde_json"; + usesDefaultFeatures = false; + features = [ "std" ]; + } + { + name = "tokio-postgres"; + packageId = "tokio-postgres"; + usesDefaultFeatures = false; + features = [ "with-chrono-0_4" "with-uuid-1" "with-serde_json-1" ]; + } { name = "tracing"; packageId = "tracing"; @@ -3557,11 +3884,11 @@ rec { crateBin = [ { name = "academy-render-daemon"; - path = "src/main.rs"; + path = "src\\main.rs"; requiredFeatures = [ ]; } ]; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_render_daemon; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_render_daemon; }; dependencies = [ { name = "academy_utils"; @@ -3620,7 +3947,8 @@ rec { crateName = "academy_shared_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_shared/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_shared\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_models"; @@ -3671,7 +3999,8 @@ rec { crateName = "academy_shared_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_shared/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_shared\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_cache_contracts"; @@ -3809,7 +4138,8 @@ rec { crateName = "academy_templates_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_templates/contracts; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_templates\contracts; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_assets"; @@ -3864,7 +4194,8 @@ rec { crateName = "academy_templates_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_templates/impl; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_templates\impl; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_assets"; @@ -3916,11 +4247,12 @@ rec { crateBin = [ { name = "academy-testing"; - path = "src/main.rs"; + path = "src\\main.rs"; requiredFeatures = [ ]; } ]; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_testing; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_testing; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_utils"; @@ -4010,7 +4342,8 @@ rec { crateName = "academy_utils"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_utils; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_utils; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "academy_utils_derive"; @@ -4043,8 +4376,9 @@ rec { crateName = "academy_utils_derive"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_utils_derive; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_utils_derive; }; procMacro = true; + libPath = "src\\lib.rs"; dependencies = [ { name = "proc-macro2"; @@ -4073,6 +4407,7 @@ rec { edition = "2018"; crateBin = []; sha256 = "0jwb96gv17vdr29hbzi0ha5q6jkpgjyn7rjlg5nis65k41rk0p8v"; + libPath = "src\\lib.rs"; dependencies = [ { name = "gimli"; @@ -4102,6 +4437,7 @@ rec { version = "2.0.1"; edition = "2021"; sha256 = "1ymy18s9hs7ya1pjc9864l30wk8p2qfqdi7mhhcc5nfakxbij09j"; + libPath = "src\\lib.rs"; authors = [ "Jonas Schievink " "oyvindln " @@ -4117,6 +4453,7 @@ rec { version = "0.7.8"; edition = "2018"; sha256 = "1y9014qsy6gs9xld4ch7a6xi9bpki8vaciawxq4p75d8qvh7f549"; + libPath = "src\\lib.rs"; authors = [ "Tom Kaitchuck " ]; @@ -4153,6 +4490,7 @@ rec { version = "0.8.12"; edition = "2018"; sha256 = "0xbsp9rlm5ki017c0w6ay8kjwinwm8knjncci95mii30rmwz25as"; + libPath = "src\\lib.rs"; authors = [ "Tom Kaitchuck " ]; @@ -4197,6 +4535,7 @@ rec { edition = "2021"; sha256 = "05mrpkvdgp5d20y2p989f187ry9diliijgwrs254fs9s1m1x6q4f"; libName = "aho_corasick"; + libPath = "src\\lib.rs"; authors = [ "Andrew Gallant " ]; @@ -4221,6 +4560,7 @@ rec { version = "0.15.1"; edition = "2021"; sha256 = "18p3n7dihh4ys1rp16yf7vxlla91s2as2009ik2m9zndi1qk2rk9"; + libPath = "src\\lib.rs"; authors = [ "tamasfe" ]; @@ -4323,6 +4663,7 @@ rec { version = "0.1.3"; edition = "2018"; sha256 = "1z8548zdjlm4ps1k0d7x68lfdyji02crwcc9rw3q3bb106f643r5"; + libPath = "src\\lib.rs"; authors = [ "avitex " ]; @@ -4340,6 +4681,7 @@ rec { edition = "2018"; sha256 = "08zrzs022xwndihvzdn78yqarv2b9696y67i6h78nla3ww87jgb8"; libName = "allocator_api2"; + libPath = "src\\lib.rs"; authors = [ "Zakarum " ]; @@ -4355,6 +4697,7 @@ rec { version = "0.1.5"; edition = "2018"; sha256 = "04b3wrz12837j7mdczqd95b732gw5q7q66cv4yn4646lvccp57l1"; + libPath = "src\\lib.rs"; authors = [ "Nicolas Silva " ]; @@ -4371,6 +4714,7 @@ rec { version = "0.6.21"; edition = "2021"; sha256 = "0jjgixms4qjj58dzr846h2s29p8w7ynwr9b9x6246m1pwy0v5ma3"; + libPath = "src\\lib.rs"; dependencies = [ { name = "anstyle"; @@ -4416,6 +4760,7 @@ rec { version = "1.0.13"; edition = "2021"; sha256 = "0y2ynjqajpny6q0amvfzzgw0gfw3l47z85km4gvx87vg02lcr4ji"; + libPath = "src\\lib.rs"; features = { "default" = [ "std" ]; }; @@ -4427,6 +4772,7 @@ rec { edition = "2021"; sha256 = "1hhmkkfr95d462b3zf6yl2vfzdqfy5726ya572wwg8ha9y148xjf"; libName = "anstyle_parse"; + libPath = "src\\lib.rs"; dependencies = [ { name = "utf8parse"; @@ -4447,6 +4793,7 @@ rec { edition = "2021"; sha256 = "1qir6d6fl5a4y2gmmw9a5w93ckwx6xn51aryd83p26zn6ihiy8wy"; libName = "anstyle_query"; + libPath = "src\\lib.rs"; dependencies = [ { name = "windows-sys"; @@ -4463,6 +4810,7 @@ rec { edition = "2021"; sha256 = "0ajz9wsf46a2l3pds7v62xbhq2cffj7wrilamkx2z8r28m0k61iy"; libName = "anstyle_wincon"; + libPath = "src\\lib.rs"; dependencies = [ { name = "anstyle"; @@ -4487,6 +4835,7 @@ rec { version = "1.0.100"; edition = "2018"; sha256 = "0qbfmw4hhv2ampza1csyvf1jqjs2dgrj29cv3h3sh623c6qvcgm2"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -4501,6 +4850,7 @@ rec { version = "0.5.3"; edition = "2021"; sha256 = "0wn0kk97k49wxidfigmz1pdqmygqzi4h6w72ib7cpq765s4i0diw"; + libPath = "src\\lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -4548,6 +4898,7 @@ rec { version = "0.7.6"; edition = "2018"; sha256 = "0l1fz4ccgv6pm609rif37sl5nv5k6lbzi7kkppgzqzh1vwix20kw"; + libPath = "src\\lib.rs"; authors = [ "bluss" ]; @@ -4566,6 +4917,7 @@ rec { sha256 = "1fsxxmz3rzx1prn1h3rs7kyjhkap60i7xvi0ldapkvbb14nssdch"; procMacro = true; libName = "async_trait"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -4593,6 +4945,7 @@ rec { edition = "2018"; sha256 = "1h5av1lw56m0jf0fd3bchxq8a30xv0b4wv8s4zkp4s0i7mfvs18m"; libName = "atomic_waker"; + libPath = "src\\lib.rs"; authors = [ "Stjepan Glavina " "Contributors to futures-rs" @@ -4606,6 +4959,7 @@ rec { version = "1.5.0"; edition = "2015"; sha256 = "1s77f98id9l4af4alklmzq46f21c980v13z2r1pcxx6bqgw0d1n0"; + libPath = "src\\lib.rs"; authors = [ "Josh Stone " ]; @@ -4616,6 +4970,7 @@ rec { version = "0.8.6"; edition = "2021"; sha256 = "0w9qyxcp77gwswc9sz3pf2rzpm4jycpxvd70yh8i60sjccrys64a"; + libPath = "src\\lib.rs"; dependencies = [ { name = "axum-core"; @@ -4787,6 +5142,7 @@ rec { edition = "2021"; sha256 = "08pa4752h96pai7j5avr2hnq35xh7qgv6vl57y1zhhnikkhnqi2r"; libName = "axum_core"; + libPath = "src\\lib.rs"; dependencies = [ { name = "bytes"; @@ -4847,6 +5203,7 @@ rec { edition = "2021"; sha256 = "15mb28f49y4g434ry9c7gnamh3ac0130mvsncz3h4q8cyhczyqwr"; libName = "axum_extra"; + libPath = "src\\lib.rs"; dependencies = [ { name = "axum"; @@ -4945,6 +5302,7 @@ rec { version = "0.3.76"; edition = "2021"; sha256 = "1mibx75x4jf6wz7qjifynld3hpw3vq6sy3d3c9y5s88sg59ihlxv"; + libPath = "src\\lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -5002,6 +5360,7 @@ rec { version = "0.5.1"; edition = "2015"; sha256 = "0xp0a3xml25xw2bp5pyac2nld7vmmfjl02qynnyfn6aznfggwb82"; + libPath = "src\\lib.rs"; authors = [ "Andreas Ots " "Tim Dumol " @@ -5014,6 +5373,7 @@ rec { version = "0.13.1"; edition = "2018"; sha256 = "1s494mqmzjb766fy1kqlccgfg2sdcjb6hzbvzqv2jw65fdi5h6wy"; + libPath = "src\\lib.rs"; authors = [ "Alice Maz " "Marshall Pierce " @@ -5028,6 +5388,7 @@ rec { version = "0.22.1"; edition = "2018"; sha256 = "1imqzgh7bxcikp5vx3shqvw9j09g9ly0xr0jma0q66i52r7jbcvj"; + libPath = "src\\lib.rs"; authors = [ "Marshall Pierce " ]; @@ -5042,6 +5403,7 @@ rec { version = "1.8.0"; edition = "2024"; sha256 = "1fj4vc6ghy3j1120r7dwn4xw90crfy46b448g5pm9w6an13qn92m"; + libPath = "src\\lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -5055,6 +5417,7 @@ rec { version = "0.9.0"; edition = "2021"; sha256 = "1ralsazlyyj7gsmqc73p6kpqz76g4al6np2p8693sx123a78nb91"; + libPath = "src\\lib.rs"; dependencies = [ { name = "futures-util"; @@ -5092,6 +5455,7 @@ rec { edition = "2021"; sha256 = "175a6r01q0mjcpsnsr92viq1l9vk91j7dyiascl8vy6hgiaycw75"; libName = "bb8_postgres"; + libPath = "src\\lib.rs"; dependencies = [ { name = "bb8"; @@ -5125,7 +5489,7 @@ rec { "with-uuid-0_8" = [ "tokio-postgres/with-uuid-0_8" ]; "with-uuid-1" = [ "tokio-postgres/with-uuid-1" ]; }; - resolvedDefaultFeatures = [ "with-chrono-0_4" "with-uuid-1" ]; + resolvedDefaultFeatures = [ "with-chrono-0_4" "with-serde_json-1" "with-uuid-1" ]; }; "bb8-redis" = rec { crateName = "bb8-redis"; @@ -5133,6 +5497,7 @@ rec { edition = "2021"; sha256 = "1abxld7w80931hyvq1z3wlan7nkpcwdx5qz3h6la3vp1ymm96hsi"; libName = "bb8_redis"; + libPath = "src\\lib.rs"; dependencies = [ { name = "bb8"; @@ -5152,6 +5517,7 @@ rec { version = "2.10.0"; edition = "2021"; sha256 = "1lqxwc3625lcjrjm5vygban9v8a6dlxisp1aqylibiaw52si4bl1"; + libPath = "src\\lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -5168,6 +5534,7 @@ rec { version = "1.0.1"; edition = "2021"; sha256 = "173ydyj2q5vwj88k6xgjnfsshs4x9wbvjjv7sm0h36r34hn87hhv"; + libPath = "src\\lib.rs"; dependencies = [ { name = "funty"; @@ -5200,6 +5567,7 @@ rec { version = "0.10.6"; edition = "2018"; sha256 = "1zlf7w7gql12v61d9jcbbswa3dw8qxsjglylsiljp9f9b3a2ll26"; + libPath = "src\\lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -5230,6 +5598,7 @@ rec { edition = "2018"; sha256 = "0w9sa2ypmrsqqvc20nhwr75wbb5cjr4kkyhpjm1z1lv2kdicfy1h"; libName = "block_buffer"; + libPath = "src\\lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -5247,6 +5616,7 @@ rec { edition = "2018"; crateBin = []; sha256 = "1kikljm5yr3l9qsw5xvdccragxj4445s4s3fqsgy6hmmipwld1md"; + libPath = "src\\lib.rs"; authors = [ "Near Inc " ]; @@ -5283,6 +5653,7 @@ rec { sha256 = "1hwsznww7d01bh1fzpndzmcpyp00xpl2y9bg70i3z0zmqb0d7lgx"; procMacro = true; libName = "borsh_derive"; + libPath = "src\\lib.rs"; authors = [ "Near Inc " ]; @@ -5325,6 +5696,7 @@ rec { version = "1.12.1"; edition = "2021"; sha256 = "1arc1v7h5l86vd6z76z3xykjzldqd5icldn7j9d3p7z6x0d4w133"; + libPath = "src\\lib.rs"; authors = [ "Andrew Gallant " ]; @@ -5355,6 +5727,7 @@ rec { version = "3.19.0"; edition = "2021"; sha256 = "0hsdndvcpqbjb85ghrhska2qxvp9i75q2vb70hma9fxqawdy9ia6"; + libPath = "src\\lib.rs"; authors = [ "Nick Fitzgerald " ]; @@ -5370,6 +5743,7 @@ rec { version = "0.6.12"; edition = "2021"; sha256 = "1hmipv4yyxgbamcbw5r65wagv9khs033v9483s9kri9sw9ycbk93"; + libPath = "src\\lib.rs"; authors = [ "David Koloski " ]; @@ -5405,6 +5779,7 @@ rec { edition = "2021"; sha256 = "0ng6230brd0hvqpbgcx83inn74mdv3abwn95x515bndwkz90dd1x"; procMacro = true; + libPath = "src\\lib.rs"; authors = [ "David Koloski " ]; @@ -5432,6 +5807,7 @@ rec { version = "1.5.0"; edition = "2021"; sha256 = "0jzncxyf404mwqdbspihyzpkndfgda450l0893pz5xj685cg5l0z"; + libPath = "src\\lib.rs"; authors = [ "Andrew Gallant " ]; @@ -5445,6 +5821,7 @@ rec { version = "1.10.1"; edition = "2018"; sha256 = "0smd4wi2yrhp5pmq571yiaqx84bjqlm1ixqhnvfwzzc6pqkn26yp"; + libPath = "src\\lib.rs"; authors = [ "Carl Lerche " "Sean McArthur " @@ -5461,6 +5838,7 @@ rec { version = "1.2.43"; edition = "2018"; sha256 = "1hpg1f1srgd5bfivvln1s3kcajdxpqvjsvd8m4y4nmap8pwv17kk"; + libPath = "src\\lib.rs"; authors = [ "Alex Crichton " ]; @@ -5484,6 +5862,7 @@ rec { edition = "2018"; sha256 = "008q28ajc546z5p2hcwdnckmg0hia7rnx52fni04bwqkzyrghc4k"; libName = "cfg_if"; + libPath = "src\\lib.rs"; authors = [ "Alex Crichton " ]; @@ -5497,6 +5876,7 @@ rec { version = "0.2.1"; edition = "2018"; sha256 = "092pxdc1dbgjb6qvh83gk56rkic2n2ybm4yvy76cgynmzi3zwfk1"; + libPath = "src\\lib.rs"; authors = [ "Zicklag " ]; @@ -5507,6 +5887,7 @@ rec { version = "0.4.42"; edition = "2021"; sha256 = "1lp8iz9js9jwxw0sj8yi59v54lgvwdvm49b9wch77f25sfym4l0l"; + libPath = "src\\lib.rs"; dependencies = [ { name = "iana-time-zone"; @@ -5574,6 +5955,7 @@ rec { edition = "2021"; sha256 = "1fvicqrlmdsjkrgxr7bxfd62i9w2qi2b6iv4w85av5syvqlqnsck"; libName = "chrono_tz"; + libPath = "src\\lib.rs"; dependencies = [ { name = "chrono"; @@ -5615,6 +5997,7 @@ rec { edition = "2021"; sha256 = "1c8ixwwwsn9kgs1dr5mz963p0fgw9j9p7fzb3w2c7y8xhkp8l20c"; libName = "chrono_tz_build"; + libPath = "src\\lib.rs"; dependencies = [ { name = "parse-zoneinfo"; @@ -5643,6 +6026,7 @@ rec { version = "0.9.3"; edition = "2018"; sha256 = "1jcnafc8rjfs1al08gqzyn0kpbaizgdwrd0ajqafspd18ikxdswf"; + libPath = "src\\lib.rs"; authors = [ "Joshua Barretto " ]; @@ -5670,6 +6054,7 @@ rec { edition = "2021"; crateBin = []; sha256 = "1xg5fa4lcl2pmdhlns1qzw5dpz1yz6hxk6x6j7qra0hf2whxf9jc"; + libPath = "src\\lib.rs"; dependencies = [ { name = "clap_builder"; @@ -5711,6 +6096,7 @@ rec { version = "4.5.51"; edition = "2021"; sha256 = "06h10byk8dl8b4nypil6aad9kshgfrjyji5ybb8bz0gngc65z0vm"; + libPath = "src\\lib.rs"; dependencies = [ { name = "anstream"; @@ -5750,6 +6136,7 @@ rec { version = "4.5.59"; edition = "2021"; sha256 = "0g64s6ws3kkzh74fxwp7r8qlvb1q1nscsk6nrsb1cqylvix4hj13"; + libPath = "src\\lib.rs"; dependencies = [ { name = "clap"; @@ -5795,6 +6182,7 @@ rec { edition = "2021"; sha256 = "0wbngw649138v3jwx8pm5x9sq0qsml3sh0sfzyrdxcpamy3m82ra"; procMacro = true; + libPath = "src\\lib.rs"; dependencies = [ { name = "heck"; @@ -5826,13 +6214,15 @@ rec { version = "0.7.6"; edition = "2021"; sha256 = "13cxw9m2rqvplgazgkq2awms0rgf34myc19bz6gywfngi762imx1"; + libPath = "src\\lib.rs"; }; "clorinde" = rec { crateName = "clorinde"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_persistence/postgres/clorinde; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_persistence\postgres\clorinde; }; + libPath = "src\\lib.rs"; dependencies = [ { name = "chrono"; @@ -5878,6 +6268,7 @@ rec { version = "1.0.4"; edition = "2021"; sha256 = "0x8ymkz1xr77rcj1cfanhf416pc4v681gmkc9dzb3jqja7f62nxh"; + libPath = "src\\lib.rs"; }; "combine" = rec { @@ -5885,6 +6276,7 @@ rec { version = "4.6.7"; edition = "2018"; sha256 = "1z8rh8wp59gf8k23ar010phgs0wgf5i8cx4fg01gwcnzfn5k0nms"; + libPath = "src\\lib.rs"; authors = [ "Markus Westerlind " ]; @@ -5964,6 +6356,7 @@ rec { version = "0.15.18"; edition = "2018"; sha256 = "060rrj5fl3n1vfrng4r8dbzqay5mnvripm1fngwp80q88j9m83hq"; + libPath = "src\\lib.rs"; dependencies = [ { name = "pathdiff"; @@ -6012,6 +6405,7 @@ rec { version = "0.16.1"; edition = "2021"; sha256 = "1x4x6vfi1s55nbr4i77b9r87s213h46lq396sij9fkmidqx78c5l"; + libPath = "src\\lib.rs"; dependencies = [ { name = "encode_unicode"; @@ -6053,6 +6447,7 @@ rec { version = "0.3.1"; edition = "2021"; sha256 = "19nwwczii762pwlsm7bpizgjg8hkg1kqi32b2g4rglijklsbhx3w"; + libPath = "src\\lib.rs"; authors = [ "Cesar Eduardo Barros " ]; @@ -6064,6 +6459,7 @@ rec { version = "0.6.0"; edition = "2018"; sha256 = "1jn1pq6fp3rri88zyw6jlhwwgf6qiyc08d6gjv0qypgkl862n67c"; + libPath = "src\\lib.rs"; authors = [ "Rutrum " ]; @@ -6084,6 +6480,7 @@ rec { edition = "2018"; sha256 = "12w8j73lazxmr1z0h98hf3z623kl8ms7g07jch7n4p8f9nwlhdkp"; libName = "core_foundation_sys"; + libPath = "src\\lib.rs"; authors = [ "The Servo Project Developers" ]; @@ -6097,6 +6494,7 @@ rec { version = "0.2.17"; edition = "2018"; sha256 = "10023dnnaghhdl70xcds12fsx2b966sxbxjq5sxs49mvxqw5ivar"; + libPath = "src\\lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -6134,6 +6532,7 @@ rec { edition = "2021"; sha256 = "0l9f1saqp1gn5qy0rxvkmz4m6n7fc0b3dbm6q1r5pmgpnyvi3lcx"; libName = "crossbeam_deque"; + libPath = "src\\lib.rs"; dependencies = [ { name = "crossbeam-epoch"; @@ -6158,6 +6557,7 @@ rec { edition = "2021"; sha256 = "03j2np8llwf376m3fxqx859mgp9f83hj1w34153c7a9c7i5ar0jv"; libName = "crossbeam_epoch"; + libPath = "src\\lib.rs"; dependencies = [ { name = "crossbeam-utils"; @@ -6180,6 +6580,7 @@ rec { edition = "2021"; sha256 = "0a3aa2bmc8q35fb67432w16wvi54sfmb69rk9h5bhd18vw0c99fh"; libName = "crossbeam_utils"; + libPath = "src\\lib.rs"; features = { "default" = [ "std" ]; "loom" = [ "dep:loom" ]; @@ -6192,6 +6593,7 @@ rec { edition = "2018"; sha256 = "1cvby95a6xg7kxdz5ln3rl9xh66nz66w46mm3g56ri1z5x815yqv"; libName = "crypto_common"; + libPath = "src\\lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -6217,6 +6619,7 @@ rec { version = "0.21.3"; edition = "2021"; sha256 = "1h281ah78pz05450r71h3gwm2n24hy8yngbz58g426l4j1q37pww"; + libPath = "src\\lib.rs"; authors = [ "Ted Driggs " ]; @@ -6243,6 +6646,7 @@ rec { version = "0.21.3"; edition = "2021"; sha256 = "193ya45qgac0a4siwghk0bl8im8h89p3cald7kw8ag3yrmg1jiqj"; + libPath = "src\\lib.rs"; authors = [ "Ted Driggs " ]; @@ -6287,6 +6691,7 @@ rec { edition = "2021"; sha256 = "10ac85n4lnx3rmf5rw8lijl2c0sbl6ghcpgfmzh0s26ihbghi0yk"; procMacro = true; + libPath = "src\\lib.rs"; authors = [ "Ted Driggs " ]; @@ -6311,6 +6716,7 @@ rec { version = "0.8.0"; edition = "2018"; sha256 = "13f15dfvn07fa7087pmacixqqv0lmj4hv93biw4ldr48ypk55xdy"; + libPath = "src\\lib.rs"; authors = [ "Sentry " ]; @@ -6335,6 +6741,7 @@ rec { version = "0.5.5"; edition = "2021"; sha256 = "11z5939gv2klp1r1lgrp4w5fnlkj18jqqf0h9zxmia3vkrjwpv7c"; + libPath = "src\\lib.rs"; authors = [ "Jacob Pratt " ]; @@ -6363,6 +6770,7 @@ rec { version = "1.6.2"; edition = "2021"; sha256 = "013biy7hhy59jcbry4dqn2pf4qhaw083ksn8xxiw373wjc37imdb"; + libPath = "src\\lib.rs"; authors = [ "Kornel Lesinski " "Amit Chowdhury " @@ -6377,6 +6785,7 @@ rec { version = "0.1.13"; edition = "2015"; sha256 = "1j0nzjxci2zqx63hdcihkp0a4dkdmzxd7my4m7zk6cjyfy34j9an"; + libPath = "src\\lib.rs"; authors = [ "Utkarsh Kukreti " ]; @@ -6387,6 +6796,7 @@ rec { version = "0.10.7"; edition = "2018"; sha256 = "14p2n6ih29x81akj097lvz7wi9b6b9hvls0lwrv7b6xwyy0s5ncy"; + libPath = "src\\lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -6428,6 +6838,7 @@ rec { edition = "2021"; sha256 = "1q0alair462j21iiqwrr21iabkfnb13d6x5w95lkdg21q2xrqdlp"; procMacro = true; + libPath = "src\\lib.rs"; authors = [ "Jane Lusby " ]; @@ -6454,6 +6865,7 @@ rec { version = "0.11.0"; edition = "2018"; sha256 = "1wa78ahlc57wmqyq2ncr80l7plrkgz57xsg7kfzgpcnqac8gld8l"; + libPath = "src\\lib.rs"; authors = [ "Felix Köpge " ]; @@ -6468,6 +6880,7 @@ rec { edition = "2018"; sha256 = "0m956cxcg8v2n8kmz6xs5zl13k2fak3zkapzfzzp7pxih6hix26h"; libName = "dyn_clone"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -6479,6 +6892,7 @@ rec { edition = "2021"; sha256 = "1dkhcqmhgc25m437fzxhkvhd135yc4xd9pzpsc77i7lv9m8fd64j"; libName = "email_encoding"; + libPath = "src\\lib.rs"; dependencies = [ { name = "base64"; @@ -6502,6 +6916,7 @@ rec { version = "0.2.9"; edition = "2018"; sha256 = "0jf4v3npa524c7npy7w3jl0a6gng26f51a4bgzs3jqna12dz2yg0"; + libPath = "src\\lib.rs"; authors = [ "Simon Johnston " ]; @@ -6516,6 +6931,7 @@ rec { version = "1.0.0"; edition = "2021"; sha256 = "1h5j7j7byi289by63s3w4a8b3g6l5ccdrws7a67nn07vdxj77ail"; + libPath = "src\\lib.rs"; authors = [ "Torbjørn Birch Moltu " ]; @@ -6530,6 +6946,7 @@ rec { version = "1.0.2"; edition = "2015"; sha256 = "03swzqznragy8n0x31lqc78g2af054jwivp7lkrbrc0khz74lyl7"; + libPath = "src\\lib.rs"; }; "errno" = rec { @@ -6537,6 +6954,7 @@ rec { version = "0.3.14"; edition = "2018"; sha256 = "1szgccmh8vgryqyadg8xd58mnwwicf39zmin3bsn63df2wbbgjir"; + libPath = "src\\lib.rs"; authors = [ "Chris Wong " "Dan Gohman " @@ -6579,6 +6997,7 @@ rec { edition = "2018"; sha256 = "1xq759lsr8gqss7hva42azn3whgrbrs2sd9xpn92c5ickxm1fhs4"; libName = "fallible_iterator"; + libPath = "src\\lib.rs"; authors = [ "Steven Fackler " ]; @@ -6592,6 +7011,7 @@ rec { version = "2.3.0"; edition = "2018"; sha256 = "1ghiahsw1jd68df895cy5h3gzwk30hndidn3b682zmshpgmrx41p"; + libPath = "src\\lib.rs"; authors = [ "Stjepan Glavina " ]; @@ -6609,6 +7029,7 @@ rec { edition = "2018"; sha256 = "09x1sfinrz86bkm6i2d85lpsfnxn0w797g5zisv1nwhaz1w1h1aj"; libName = "find_msvc_tools"; + libPath = "src\\lib.rs"; }; "findshlibs" = rec { @@ -6616,6 +7037,7 @@ rec { version = "0.10.2"; edition = "2018"; sha256 = "0r3zy2r12rxzwqgz53830bk38r6b7rl8kq2br9n81q7ps2ffbfa0"; + libPath = "src\\lib.rs"; dependencies = [ { name = "lazy_static"; @@ -6660,6 +7082,7 @@ rec { version = "1.2.2"; edition = "2018"; sha256 = "1kqzb2qn608rxl3dws04zahcklpplkd5r1vpabwga5l50d2v4k6b"; + libPath = "src\\lib.rs"; authors = [ "The rust-url developers" ]; @@ -6682,6 +7105,7 @@ rec { version = "2.0.1"; edition = "2018"; sha256 = "06g69s9w3hmdnjp5b60ph15v367278mgxy1shijrllarc2pnrp98"; + libPath = "src\\lib.rs"; authors = [ "Armin Ronacher " ]; @@ -6694,6 +7118,7 @@ rec { version = "2.0.0"; edition = "2018"; sha256 = "177w048bm0046qlzvp33ag3ghqkqw4ncpzcm5lq36gxf2lla7mg6"; + libPath = "src\\lib.rs"; authors = [ "myrrlyn " ]; @@ -6706,6 +7131,7 @@ rec { version = "0.3.31"; edition = "2018"; sha256 = "0xh8ddbkm9jy8kc5gbvjp9a4b6rqqxvc8471yb2qaz5wm2qhgg35"; + libPath = "src\\lib.rs"; dependencies = [ { name = "futures-channel"; @@ -6768,6 +7194,7 @@ rec { edition = "2018"; sha256 = "040vpqpqlbk099razq8lyn74m0f161zd0rp36hciqrwcg2zibzrd"; libName = "futures_channel"; + libPath = "src\\lib.rs"; dependencies = [ { name = "futures-core"; @@ -6796,6 +7223,7 @@ rec { edition = "2018"; sha256 = "0gk6yrxgi5ihfanm2y431jadrll00n5ifhnpx090c2f2q1cr1wh5"; libName = "futures_core"; + libPath = "src\\lib.rs"; features = { "default" = [ "std" ]; "portable-atomic" = [ "dep:portable-atomic" ]; @@ -6809,6 +7237,7 @@ rec { edition = "2018"; sha256 = "17vcci6mdfzx4gbk0wx64chr2f13wwwpvyf3xd5fb1gmjzcx2a0y"; libName = "futures_executor"; + libPath = "src\\lib.rs"; dependencies = [ { name = "futures-core"; @@ -6840,6 +7269,7 @@ rec { edition = "2018"; sha256 = "1ikmw1yfbgvsychmsihdkwa8a1knank2d9a8dk01mbjar9w1np4y"; libName = "futures_io"; + libPath = "src\\lib.rs"; features = { "default" = [ "std" ]; }; @@ -6852,6 +7282,7 @@ rec { sha256 = "0l1n7kqzwwmgiznn0ywdc5i24z72zvh9q1dwps54mimppi7f6bhn"; procMacro = true; libName = "futures_macro"; + libPath = "src\\lib.rs"; dependencies = [ { name = "proc-macro2"; @@ -6875,6 +7306,7 @@ rec { edition = "2018"; sha256 = "1xyly6naq6aqm52d5rh236snm08kw8zadydwqz8bip70s6vzlxg5"; libName = "futures_sink"; + libPath = "src\\lib.rs"; features = { "default" = [ "std" ]; "std" = [ "alloc" ]; @@ -6887,6 +7319,7 @@ rec { edition = "2018"; sha256 = "124rv4n90f5xwfsm9qw6y99755y021cmi5dhzh253s920z77s3zr"; libName = "futures_task"; + libPath = "src\\lib.rs"; features = { "default" = [ "std" ]; "std" = [ "alloc" ]; @@ -6899,6 +7332,7 @@ rec { edition = "2018"; sha256 = "10aa1ar8bgkgbr4wzxlidkqkcxf77gffyj8j7768h831pcaq784z"; libName = "futures_util"; + libPath = "src\\lib.rs"; dependencies = [ { name = "futures-channel"; @@ -6985,6 +7419,7 @@ rec { edition = "2015"; sha256 = "1wpdn5ngpqkkyyibbg7wa4cfg0y8zjc57spaia2h47jkk0qp9djb"; libName = "generic_array"; + libPath = "src\\lib.rs"; authors = [ "Bartłomiej Kamiński " "Aaron Trent " @@ -7012,6 +7447,7 @@ rec { version = "0.2.16"; edition = "2018"; sha256 = "14l5aaia20cc6cc08xdlhrzmfcylmrnprwnna20lqf746pqzjprk"; + libPath = "src\\lib.rs"; authors = [ "The Rand Project Developers" ]; @@ -7061,6 +7497,7 @@ rec { version = "0.3.4"; edition = "2021"; sha256 = "1zbpvpicry9lrbjmkd4msgj3ihff1q92i334chk7pzf46xffz7c9"; + libPath = "src\\lib.rs"; authors = [ "The Rand Project Developers" ]; @@ -7154,6 +7591,7 @@ rec { version = "0.32.3"; edition = "2018"; sha256 = "1iqk5xznimn5bfa8jy4h7pa1dv3c624hzgd2dkz8mpgkiswvjag6"; + libPath = "src\\lib.rs"; features = { "default" = [ "read-all" "write" ]; "endian-reader" = [ "read" "dep:stable_deref_trait" ]; @@ -7171,6 +7609,7 @@ rec { version = "0.4.18"; edition = "2024"; sha256 = "1qsp3wg0mgxzmshcgymdlpivqlc1bihm6133pl6dx2x4af8w3psj"; + libPath = "src\\lib.rs"; authors = [ "Andrew Gallant " ]; @@ -7217,6 +7656,7 @@ rec { version = "0.9.1"; edition = "2021"; sha256 = "0mz7bsa66p2rrgnz3l94ac4kbklh7mq8j30iizyxjy4qyvmn1xqb"; + libPath = "src\\lib.rs"; authors = [ "Gilad Naaman " ]; @@ -7241,6 +7681,7 @@ rec { version = "0.4.12"; edition = "2021"; sha256 = "11hk5mpid8757z6n3v18jwb62ikffrgzjlrgpzqvkqdlzjfbdh7k"; + libPath = "src\\lib.rs"; authors = [ "Carl Lerche " "Sean McArthur " @@ -7313,6 +7754,7 @@ rec { version = "0.12.3"; edition = "2021"; sha256 = "1268ka4750pyg2pbgsr43f0289l5zah4arir2k4igx5a8c6fg7la"; + libPath = "src\\lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -7343,6 +7785,7 @@ rec { version = "0.14.5"; edition = "2021"; sha256 = "1wa1vy1xs3mp11bn3z9dv0jricgr6a2j0zkf1g19yz3vw4il89z5"; + libPath = "src\\lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -7382,6 +7825,7 @@ rec { version = "0.16.0"; edition = "2021"; sha256 = "13blh9j2yv77a6ni236ixiwdzbc1sh2bc4bdpaz7y859yv2bs6al"; + libPath = "src\\lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -7403,6 +7847,7 @@ rec { version = "0.4.1"; edition = "2018"; sha256 = "1sr4zygaq1b2f0k7b5l8vx5vp05wvd82w7vpavgvr52xvdd4scdk"; + libPath = "src\\lib.rs"; authors = [ "Sean McArthur " ]; @@ -7445,6 +7890,7 @@ rec { edition = "2015"; sha256 = "1r1w80i2bhmyh8s5mjr2dz6baqlrm6cak6yvzm4jq96lacjs5d2l"; libName = "headers_core"; + libPath = "src\\lib.rs"; authors = [ "Sean McArthur " ]; @@ -7461,6 +7907,7 @@ rec { version = "0.4.1"; edition = "2018"; sha256 = "1a7mqsnycv5z4z5vnv1k34548jzmc0ajic7c1j8jsaspnhw5ql4m"; + libPath = "src\\lib.rs"; authors = [ "Without Boats " ]; @@ -7475,6 +7922,7 @@ rec { version = "0.5.0"; edition = "2021"; sha256 = "1sjmpsdl8czyh9ywl3qcsfsq9a307dg4ni2vnlwgnzzqhc4y0113"; + libPath = "src\\lib.rs"; }; "hex" = rec { @@ -7482,6 +7930,7 @@ rec { version = "0.4.3"; edition = "2018"; sha256 = "0w1a4davm1lgzpamwnba907aysmlrnygbqmfis2mqjx5m552a93z"; + libPath = "src\\lib.rs"; authors = [ "KokaKiwi " ]; @@ -7497,6 +7946,7 @@ rec { version = "0.12.1"; edition = "2018"; sha256 = "0pmbr069sfg76z7wsssfk5ddcqd9ncp79fyz6zcm6yn115yc6jbc"; + libPath = "src\\lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -7524,6 +7974,7 @@ rec { version = "0.4.1"; edition = "2021"; sha256 = "0rbxryl68bwv8hkjdjd8f37kdb10fncgsqrqksv64qy7s4y20vx5"; + libPath = "src\\lib.rs"; dependencies = [ { name = "cfg-if"; @@ -7549,6 +8000,7 @@ rec { version = "1.3.1"; edition = "2018"; sha256 = "0r95i5h7dr1xadp1ac9453w0s62s27hzkam356nyx2d9mqqmva7l"; + libPath = "src\\lib.rs"; authors = [ "Alex Crichton " "Carl Lerche " @@ -7579,6 +8031,7 @@ rec { edition = "2018"; sha256 = "111ir5k2b9ihz5nr9cz7cwm7fnydca7dx4hc7vr16scfzghxrzhy"; libName = "http_body"; + libPath = "src\\lib.rs"; authors = [ "Carl Lerche " "Lucio Franco " @@ -7602,6 +8055,7 @@ rec { edition = "2018"; sha256 = "0jm6jv4gxsnlsi1kzdyffjrj8cfr3zninnxpw73mvkxy4qzdj8dh"; libName = "http_body_util"; + libPath = "src\\lib.rs"; authors = [ "Carl Lerche " "Lucio Franco " @@ -7641,6 +8095,7 @@ rec { version = "1.10.1"; edition = "2018"; sha256 = "11ycd554bw2dkgw0q61xsa7a4jn1wb1xbfacmf3dbwsikvkkvgvd"; + libPath = "src\\lib.rs"; authors = [ "Sean McArthur " ]; @@ -7654,6 +8109,7 @@ rec { version = "1.0.3"; edition = "2021"; sha256 = "1aa9rd2sac0zhjqh24c9xvir96g188zldkx0hr6dnnlx5904cfyz"; + libPath = "src\\lib.rs"; authors = [ "Pyfisch " ]; @@ -7664,6 +8120,7 @@ rec { version = "2.1.3"; edition = "2021"; sha256 = "1msxd1akb3dydsa8qs461sds9krwnn31szvqgaq93p4x0ad1rdbc"; + libPath = "src\\lib.rs"; authors = [ "Leopold Arkham " ]; @@ -7681,6 +8138,7 @@ rec { version = "1.7.0"; edition = "2021"; sha256 = "07n59pxzlq621z611cbpvh7p4h9h15v0r7m5wgxygpx02d5aafpb"; + libPath = "src\\lib.rs"; authors = [ "Sean McArthur " ]; @@ -7792,6 +8250,7 @@ rec { edition = "2021"; sha256 = "0n6g8998szbzhnvcs1b7ibn745grxiqmlpg53xz206v826v3xjg3"; libName = "hyper_rustls"; + libPath = "src\\lib.rs"; dependencies = [ { name = "http"; @@ -7880,6 +8339,7 @@ rec { edition = "2021"; sha256 = "1a5fcnz0alrg4lx9xf6ja66ihaab58jnm5msnky804wg39cras9w"; libName = "hyper_util"; + libPath = "src\\lib.rs"; authors = [ "Sean McArthur " ]; @@ -8009,6 +8469,7 @@ rec { edition = "2021"; sha256 = "1yz980fmhaq9bdkasz35z63az37ci6kzzfhya83kgdqba61pzr9k"; libName = "iana_time_zone"; + libPath = "src\\lib.rs"; authors = [ "Andrew Straw " "René Kijewski " @@ -8061,6 +8522,7 @@ rec { edition = "2018"; sha256 = "17r6jmj31chn7xs9698r122mapq85mfnv98bb4pg6spm0si2f67k"; libName = "iana_time_zone_haiku"; + libPath = "src\\lib.rs"; authors = [ "René Kijewski " ]; @@ -8077,6 +8539,7 @@ rec { version = "2.0.0"; edition = "2021"; sha256 = "0izfgypv1hsxlz1h8fc2aak641iyvkak16aaz5b4aqg3s3sp4010"; + libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8122,6 +8585,7 @@ rec { version = "2.0.0"; edition = "2021"; sha256 = "02phv7vwhyx6vmaqgwkh2p4kc2kciykv2px6g4h8glxfrh02gphc"; + libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8167,6 +8631,7 @@ rec { version = "2.0.0"; edition = "2021"; sha256 = "0ybrnfnxx4sf09gsrxri8p48qifn54il6n3dq2xxgx4dw7l80s23"; + libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8226,6 +8691,7 @@ rec { version = "2.0.0"; edition = "2021"; sha256 = "1lvjpzxndyhhjyzd1f6vi961gvzhj244nribfpdqxjdgjdl0s880"; + libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8236,6 +8702,7 @@ rec { version = "2.0.1"; edition = "2021"; sha256 = "0az349pjg8f18lrjbdmxcpg676a7iz2ibc09d2wfz57b3sf62v01"; + libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8301,6 +8768,7 @@ rec { version = "2.0.1"; edition = "2021"; sha256 = "0cnn3fkq6k88w7p86w7hsd1254s4sl783rpz4p6hlccq74a5k119"; + libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8311,6 +8779,7 @@ rec { version = "2.0.0"; edition = "2021"; sha256 = "1bz5v02gxv1i06yhdhs2kbwxkw3ny9r2vvj9j288fhazgfi0vj03"; + libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8384,6 +8853,7 @@ rec { version = "1.0.1"; edition = "2015"; sha256 = "0fac21q6pwns8gh1hz3nbq15j8fi441ncl6w4vlnd1cmc55kiq5r"; + libPath = "src\\lib.rs"; authors = [ "Ted Driggs " ]; @@ -8394,6 +8864,7 @@ rec { version = "1.1.0"; edition = "2018"; sha256 = "1pp4n7hppm480zcx411dsv9wfibai00wbpgnjj4qj0xa7kr7a21v"; + libPath = "src\\lib.rs"; authors = [ "The rust-url developers" ]; @@ -8424,6 +8895,7 @@ rec { version = "1.2.1"; edition = "2021"; sha256 = "0i0339pxig6mv786nkqcxnwqa87v4m94b2653f6k3aj0jmhfkjis"; + libPath = "src\\lib.rs"; authors = [ "The rust-url developers" ]; @@ -8449,6 +8921,7 @@ rec { version = "0.4.24"; edition = "2024"; sha256 = "00q41xq3wri74kpjmxb60mpkpj81n4pfa0wdqby2lhv4jipnwxw1"; + libPath = "src\\lib.rs"; authors = [ "Andrew Gallant " ]; @@ -8497,6 +8970,7 @@ rec { version = "2.12.0"; edition = "2021"; sha256 = "17xs7cqf9nzv8iw8yzpvpjh43lcf9492i8a3xfia2ad9lp9ah5v7"; + libPath = "src\\lib.rs"; dependencies = [ { name = "equivalent"; @@ -8546,6 +9020,7 @@ rec { version = "0.18.2"; edition = "2021"; sha256 = "0rcbiqkvv4mr7lz783lys97z6alir0g29rsrkvajmdnzl35xzrmd"; + libPath = "src\\lib.rs"; dependencies = [ { name = "console"; @@ -8590,6 +9065,7 @@ rec { version = "2.11.0"; edition = "2018"; sha256 = "0c5i9sfi2asai28m8xp48k5gvwkqrg5ffpi767py6mzsrswv17s6"; + libPath = "src\\lib.rs"; authors = [ "Kris Price " ]; @@ -8609,6 +9085,7 @@ rec { edition = "2021"; sha256 = "1cl0wfq97wq4s1p4dl0ix5cfgsc5fn7l22ljgw9ab9x1qglypifv"; libName = "iri_string"; + libPath = "src\\lib.rs"; authors = [ "YOSHIOKA Takuma " ]; @@ -8641,6 +9118,7 @@ rec { version = "1.0.5"; edition = "2021"; sha256 = "1i78ss45h94nwabbn6ki64a91djlli8zdwwbh56jj9kvhssbiaxs"; + libPath = "src\\lib.rs"; authors = [ "Nick Fitzgerald " ]; @@ -8659,6 +9137,7 @@ rec { version = "1.70.2"; edition = "2021"; sha256 = "15anlc47sbz0jfs9q8fhwf0h3vs2w4imc030shdnq54sny5i7jx6"; + libPath = "src\\lib.rs"; features = { }; resolvedDefaultFeatures = [ "default" ]; @@ -8668,6 +9147,7 @@ rec { version = "1.0.15"; edition = "2018"; sha256 = "0b4fj9kz54dr3wam0vprjwgygvycyw8r0qwg7vp19ly8b2w16psa"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -8681,6 +9161,7 @@ rec { edition = "2021"; sha256 = "01ckbf16iwh7qj92fax9zh8vf2y9sk60cli6999cn7a1jxx96j7c"; libName = "js_sys"; + libPath = "src\\lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -8707,6 +9188,7 @@ rec { version = "0.16.0"; edition = "2018"; sha256 = "0pq13h0r58n7qi0ml7d54x4i3871rjg49p1zvf29fzgyfxgjh132"; + libPath = "src\\lib.rs"; authors = [ "Michael Yang " ]; @@ -8751,6 +9233,7 @@ rec { version = "0.3.0"; edition = "2021"; sha256 = "0k7kc8jy5qxflg80r12zvpc34ir1h98i3xz9y0chnri3yjrdnjyf"; + libPath = "src\\lib.rs"; authors = [ "Serhii Potapov " ]; @@ -8768,6 +9251,7 @@ rec { edition = "2021"; sha256 = "13982c6nrvym7kk2g151cjcxnbx5l9nn0vrxmifz8cnbbpf4sfx1"; procMacro = true; + libPath = "src\\lib.rs"; authors = [ "Serhii Potapov " ]; @@ -8797,6 +9281,7 @@ rec { version = "1.5.0"; edition = "2015"; sha256 = "1zk6dqqni0193xg6iijh7i3i44sryglwgvx20spdvwk3r6sbrlmv"; + libPath = "src\\lib.rs"; authors = [ "Marvin Löbel " ]; @@ -8810,6 +9295,7 @@ rec { version = "0.11.19"; edition = "2021"; sha256 = "0zzg5wk25ymgrvljp9ln7agvi26k85q15jsj1ykb5y0qi07f24wy"; + libPath = "src\\lib.rs"; authors = [ "Alexis Mousset " "Paolo Barbolini " @@ -8994,6 +9480,7 @@ rec { version = "0.2.177"; edition = "2021"; sha256 = "0xjrn69cywaii1iq2lib201bhlvan7czmrm604h5qcm28yps4x18"; + libPath = "src\\lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -9010,6 +9497,7 @@ rec { version = "0.2.15"; edition = "2021"; sha256 = "1plpzf0p829viazdj57yw5dhmlr8ywf3apayxc2f2bq5a6mvryzr"; + libPath = "src\\lib.rs"; authors = [ "Jorge Aparicio " ]; @@ -9024,6 +9512,7 @@ rec { version = "0.1.10"; edition = "2021"; sha256 = "1jswil4ai90s4rh91fg8580x8nikni1zl3wnch4h01nvidqpwvs1"; + libPath = "src\\lib.rs"; authors = [ "4lDO2 <4lDO2@protonmail.com>" ]; @@ -9056,6 +9545,7 @@ rec { edition = "2021"; sha256 = "0fghx0nn8nvbz5yzgizfcwd6ap2pislp68j8c1bwyr6sacxkq7fz"; libName = "linux_raw_sys"; + libPath = "src\\lib.rs"; authors = [ "Dan Gohman " ]; @@ -9071,6 +9561,7 @@ rec { version = "0.8.0"; edition = "2021"; sha256 = "0mlrlskwwhirxk3wsz9psh6nxcy491n0dh8zl02qgj0jzpssw7i4"; + libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -9088,6 +9579,7 @@ rec { version = "0.4.14"; edition = "2021"; sha256 = "0rg9mhx7vdpajfxvdjmgmlyrn20ligzqvn8ifmaz7dc79gkrjhr2"; + libPath = "src\\lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -9110,6 +9602,7 @@ rec { version = "0.4.28"; edition = "2021"; sha256 = "0cklpzrpxafbaq1nyxarhnmcw9z3xcjrad3ch55mmr58xw2ha21l"; + libPath = "src\\lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -9133,6 +9626,7 @@ rec { edition = "2021"; sha256 = "0m2139k466qj3bnpk66bwivgcx3z88qkxvlzk70vd65jq373jaqi"; libName = "lru_slab"; + libPath = "src\\lib.rs"; authors = [ "Benjamin Saunders " ]; @@ -9143,6 +9637,7 @@ rec { version = "0.2.0"; edition = "2018"; sha256 = "1sasssspdj2vwcwmbq3ra18d3qniapkimfcbr47zmx6750m5llni"; + libPath = "src\\lib.rs"; authors = [ "Eliza Weisman " ]; @@ -9163,6 +9658,7 @@ rec { version = "0.8.4"; edition = "2021"; sha256 = "1hzl48fwq1cn5dvshfly6vzkzqhfihya65zpj7nz7lfx82mgzqa7"; + libPath = "src\\lib.rs"; authors = [ "Ibraheem Ahmed " ]; @@ -9176,6 +9672,7 @@ rec { edition = "2018"; sha256 = "1kvq5rnpm4fzwmyv5nmnxygdhhb2369888a06gdc9pxyrzh7x7nq"; libName = "md5"; + libPath = "src\\lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -9210,6 +9707,7 @@ rec { version = "2.7.6"; edition = "2021"; sha256 = "0wy29kf6pb4fbhfksjbs05jy2f32r2f3r1ga6qkmpz31k79h0azm"; + libPath = "src\\lib.rs"; authors = [ "Andrew Gallant " "bluss" @@ -9229,6 +9727,7 @@ rec { version = "0.3.17"; edition = "2015"; sha256 = "16hkibgvb9klh0w0jk5crr5xv90l3wlf77ggymzjmvl1818vnxv8"; + libPath = "src\\lib.rs"; authors = [ "Sean McArthur " ]; @@ -9239,6 +9738,7 @@ rec { version = "0.8.9"; edition = "2021"; sha256 = "05k3pdg8bjjzayq3rf0qhpirq9k37pxnasfn4arbs17phqn6m9qz"; + libPath = "src\\lib.rs"; authors = [ "Frommi " "oyvindln " @@ -9266,6 +9766,7 @@ rec { version = "1.1.0"; edition = "2021"; sha256 = "0wr816q3jrjwiajvw807lgi540i9s6r78a5fx4ycz3nwhq03pn39"; + libPath = "src\\lib.rs"; authors = [ "Carl Lerche " "Thomas de Zeeuw " @@ -9311,6 +9812,7 @@ rec { version = "0.13.1"; edition = "2021"; sha256 = "1lir70dd9cnsjlf20gi3i51ha9n7mlrkx74bx5gfszlcdk6bz9ir"; + libPath = "src\\lib.rs"; authors = [ "Alan Somers " ]; @@ -9351,6 +9853,7 @@ rec { edition = "2021"; sha256 = "1608qajqrz23xbvv81alc6wm4l24as1bsqg4shdh3sggq8231ji5"; procMacro = true; + libPath = "src\\lib.rs"; authors = [ "Alan Somers " ]; @@ -9382,6 +9885,7 @@ rec { version = "8.0.0"; edition = "2021"; sha256 = "01cl5xng9d0gxf26h39m0l8lprgpa00fcc75ps1yzgbib1vn35yz"; + libPath = "src\\lib.rs"; authors = [ "contact@geoffroycouprie.com" ]; @@ -9404,6 +9908,7 @@ rec { edition = "2021"; sha256 = "1ra088d885lbd21q1bxgpqdlk1zlndblmarn948jz2a40xsbjmvr"; libName = "nu_ansi_term"; + libPath = "src\\lib.rs"; authors = [ "ogham@bsago.me" "Ryan Scheel (Havvy) " @@ -9432,6 +9937,7 @@ rec { edition = "2021"; sha256 = "1f903zd33i6hkjpsgwhqwi2wffnvkxbn6rv4mkgcjcqi7xr4zr55"; libName = "num_bigint"; + libPath = "src\\lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -9465,6 +9971,7 @@ rec { edition = "2021"; sha256 = "1ndiyg82q73783jq18isi71a7mjh56wxrk52rlvyx0mi5z9ibmai"; libName = "num_conv"; + libPath = "src\\lib.rs"; authors = [ "Jacob Pratt " ]; @@ -9476,6 +9983,7 @@ rec { edition = "2018"; sha256 = "13w5g54a9184cqlbsq80rnxw4jj4s0d8wv75jsq5r2lms8gncsbr"; libName = "num_integer"; + libPath = "src\\lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -9499,6 +10007,7 @@ rec { edition = "2021"; sha256 = "0h984rhdkkqd4ny9cif7y2azl3xdfb7768hb9irhpsch4q3gq787"; libName = "num_traits"; + libPath = "src\\lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -9519,6 +10028,7 @@ rec { version = "0.6.2"; edition = "2024"; sha256 = "1ddvp7zr8cp0gn5ys3cc9mmhj5jnbj3jnwmz66npvil801w7ln3h"; + libPath = "src\\lib.rs"; authors = [ "Serhii Potapov " ]; @@ -9546,6 +10056,7 @@ rec { edition = "2024"; sha256 = "015lfhl96z7hv8myfvsx972w8l0b508wzmvr0s7xvvgsfnwk928l"; procMacro = true; + libPath = "src\\lib.rs"; authors = [ "Serhii Potapov " ]; @@ -9597,6 +10108,7 @@ rec { version = "5.0.0"; edition = "2021"; sha256 = "0zfn67m93qfh9gyxxx1hj6yprk9dkr3hm1mi4ni23pqlj3kikqji"; + libPath = "src\\lib.rs"; authors = [ "Alex Crichton " "Florin Lipan " @@ -9676,6 +10188,7 @@ rec { version = "0.37.3"; edition = "2018"; sha256 = "1zikiy9xhk6lfx1dn2gn2pxbnfpmlkn0byd7ib1n720x0cgj0xpz"; + libPath = "src\\lib.rs"; dependencies = [ { name = "memchr"; @@ -9709,6 +10222,7 @@ rec { version = "1.21.3"; edition = "2021"; sha256 = "0b9x77lb9f1j6nqgf5aka4s2qj0nly176bpbrv6f9iakk5ff3xa2"; + libPath = "src\\lib.rs"; authors = [ "Aleksey Kladov " ]; @@ -9728,6 +10242,7 @@ rec { version = "1.70.2"; edition = "2021"; sha256 = "1zmla628f0sk3fhjdjqzgxhalr2xrfna958s632z65bjsfv8ljrq"; + libPath = "src\\lib.rs"; features = { }; resolvedDefaultFeatures = [ "default" ]; @@ -9737,6 +10252,7 @@ rec { version = "3.12.0"; edition = "2018"; sha256 = "1hzzmxj8z69q5l1hzlnqnaa56ip9kvmghp8k750w6hwdvrgsrqfh"; + libPath = "src\\lib.rs"; authors = [ "Jan Schulte " "Stanislav Tkach " @@ -9775,6 +10291,7 @@ rec { version = "0.18.5"; edition = "2018"; sha256 = "0ndy8hvp24gs7yxw9wj81hs5rb36wxmpw4i38ylrfjy4p46ha3qy"; + libPath = "src\\lib.rs"; authors = [ "Josh " ]; @@ -9803,6 +10320,7 @@ rec { edition = "2018"; sha256 = "1l343ss6hlh0abbwjk6zah6mdlyhh1v1imflv3v86c6lsfyjhw1w"; procMacro = true; + libPath = "src\\lib.rs"; authors = [ "Josh " ]; @@ -9837,6 +10355,7 @@ rec { version = "0.12.5"; edition = "2021"; sha256 = "06jsqh9aqmc94j2rlm8gpccilqm6bskbd67zf6ypfc0f4m9p91ck"; + libPath = "src\\lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -9864,6 +10383,7 @@ rec { version = "0.9.12"; edition = "2021"; sha256 = "1hb4rggy70fwa1w9nb0svbyflzdc69h047482v2z3sx2hmcnh896"; + libPath = "src\\lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -9904,6 +10424,7 @@ rec { edition = "2021"; sha256 = "093cs8slbd6kyfi6h12isz0mnaayf5ha8szri1xrbqj4inqhaahz"; libName = "parse_zoneinfo"; + libPath = "src\\lib.rs"; dependencies = [ { name = "regex"; @@ -9920,6 +10441,7 @@ rec { edition = "2021"; sha256 = "0ri1mim11zk0a9s40zdi288dfqvmdiryc7lw8vl46b59ifa08vrl"; libName = "password_hash"; + libPath = "src\\lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -9955,6 +10477,7 @@ rec { edition = "2018"; sha256 = "02pxffpdqkapy292harq6asfjvadgp1s005fip9ljfsn9fvxgh2p"; procMacro = true; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -9965,6 +10488,7 @@ rec { version = "0.2.3"; edition = "2018"; sha256 = "1lrqp4ip05df8dzldq6gb2c1sq2gs54gly8lcnv3rhav1qhwx56z"; + libPath = "src\\lib.rs"; authors = [ "Manish Goregaokar " ]; @@ -9978,6 +10502,7 @@ rec { edition = "2018"; sha256 = "083jv1ai930azvawz2khv7w73xh8mnylk7i578cifndjn5y64kwv"; libName = "percent_encoding"; + libPath = "src\\lib.rs"; authors = [ "The rust-url developers" ]; @@ -9992,6 +10517,7 @@ rec { version = "2.8.3"; edition = "2021"; sha256 = "1x3xc1s5vhwswmmr51i60kfbcnp1zgdblsxbqd8dxvs0l0hpb7lq"; + libPath = "src\\lib.rs"; authors = [ "Dragoș Tiselice " ]; @@ -10022,6 +10548,7 @@ rec { edition = "2021"; sha256 = "1pp2g39k2vjdyzr89k8zx5y7pp3np4iv635jpyxzmfhd0fisjz8q"; procMacro = true; + libPath = "src\\lib.rs"; authors = [ "Dragoș Tiselice " ]; @@ -10050,6 +10577,7 @@ rec { version = "2.8.3"; edition = "2021"; sha256 = "0hr80m5xzzrhzjvnmbawk72cxvn0ssc5j216gblynmspizch3d29"; + libPath = "src\\lib.rs"; authors = [ "Dragoș Tiselice " ]; @@ -10089,6 +10617,7 @@ rec { version = "2.8.3"; edition = "2021"; sha256 = "0nh6w1mv8hx0p1jli8s12j2w62ia2apsbyl69nf07yg9zqn7mwkj"; + libPath = "src\\lib.rs"; authors = [ "Dragoș Tiselice " ]; @@ -10115,6 +10644,7 @@ rec { version = "0.11.3"; edition = "2021"; sha256 = "0y6hxp1d48rx2434wgi5g8j1pr8s5jja29ha2b65435fh057imhz"; + libPath = "src\\lib.rs"; authors = [ "Steven Fackler " ]; @@ -10140,6 +10670,7 @@ rec { version = "0.13.1"; edition = "2021"; sha256 = "1pzswx5gdglgjgp4azyzwyr4gh031r0kcnpqq6jblga72z3jsmn1"; + libPath = "src\\lib.rs"; authors = [ "Steven Fackler " ]; @@ -10172,6 +10703,7 @@ rec { version = "0.11.3"; edition = "2021"; sha256 = "0si1n6zr93kzjs3wah04ikw8z6npsr39jw4dam8yi9czg2609y5f"; + libPath = "src\\lib.rs"; authors = [ "Steven Fackler " ]; @@ -10193,6 +10725,7 @@ rec { edition = "2021"; crateBin = []; sha256 = "0gc4np7s91ynrgw73s2i7iakhb4lzdv1gcyx7yhlc0n214a2701w"; + libPath = "src\\lib.rs"; authors = [ "Steven Fackler " ]; @@ -10218,6 +10751,7 @@ rec { version = "0.11.3"; edition = "2021"; sha256 = "1rallyvh28jqd9i916gk5gk2igdmzlgvv5q0l3xbf3m6y8pbrsk7"; + libPath = "src\\lib.rs"; authors = [ "Steven Fackler " ]; @@ -10239,6 +10773,7 @@ rec { version = "0.13.1"; edition = "2021"; sha256 = "0rpjchnswm0x5l4mz9xqfpw0j4w68sjvyqrdrv13h7lqqmmyyzz5"; + libPath = "src\\lib.rs"; authors = [ "Steven Fackler " ]; @@ -10261,6 +10796,7 @@ rec { edition = "2018"; sha256 = "16wzc7z7dfkf9bmjin22f5282783f6mdksnr0nv0j5ym5f9gyg1v"; libName = "pin_project_lite"; + libPath = "src\\lib.rs"; }; "pin-utils" = rec { @@ -10269,6 +10805,7 @@ rec { edition = "2018"; sha256 = "117ir7vslsl2z1a7qzhws4pd01cg2d3338c47swjyvqv2n60v1wb"; libName = "pin_utils"; + libPath = "src\\lib.rs"; authors = [ "Josef Brandl " ]; @@ -10279,6 +10816,7 @@ rec { version = "1.8.0"; edition = "2021"; sha256 = "01qyv51ljbvhjbg8mva5c802b3dzrr95y6nd23wjh52xbjhvw3kl"; + libPath = "src\\lib.rs"; authors = [ "Ed Barnard " ]; @@ -10319,6 +10857,7 @@ rec { edition = "2018"; sha256 = "10s4cx9y3jvw0idip09ar52s2kymq8rq9a668f793shn1ar6fhpq"; libName = "portable_atomic"; + libPath = "src\\lib.rs"; features = { "critical-section" = [ "dep:critical-section" ]; "default" = [ "fallback" ]; @@ -10331,6 +10870,7 @@ rec { version = "0.19.12"; edition = "2021"; sha256 = "0xmimkn7scd1kwri94hf2iani9wd6whig3053fv0vnkc3k78xi77"; + libPath = "src\\lib.rs"; authors = [ "Steven Fackler " ]; @@ -10392,6 +10932,7 @@ rec { sha256 = "1rna7k5zxsk5sv4lkx2hwydal9bckrpi9pj91srd2w2377srdpsn"; procMacro = true; libName = "postgres_derive"; + libPath = "src\\lib.rs"; authors = [ "Steven Fackler " ]; @@ -10421,6 +10962,7 @@ rec { edition = "2021"; sha256 = "1m6g7zzcdj4pgw2gs3anh57ylzbabpynq9s8h23fn5mrar86bvzv"; libName = "postgres_protocol"; + libPath = "src\\lib.rs"; authors = [ "Steven Fackler " ]; @@ -10478,6 +11020,7 @@ rec { edition = "2021"; sha256 = "15bh03mqaclmv9jhzvrb3xdrgr1q0c6ardmfbg9ns1apq2vhaipg"; libName = "postgres_types"; + libPath = "src\\lib.rs"; authors = [ "Steven Fackler " ]; @@ -10507,6 +11050,18 @@ rec { name = "postgres-protocol"; packageId = "postgres-protocol"; } + { + name = "serde_core"; + packageId = "serde_core"; + rename = "serde-1"; + optional = true; + } + { + name = "serde_json"; + packageId = "serde_json"; + rename = "serde_json-1"; + optional = true; + } { name = "uuid"; packageId = "uuid"; @@ -10558,13 +11113,14 @@ rec { "with-uuid-0_8" = [ "uuid-08" ]; "with-uuid-1" = [ "uuid-1" ]; }; - resolvedDefaultFeatures = [ "chrono-04" "derive" "postgres-derive" "uuid-1" "with-chrono-0_4" "with-uuid-1" ]; + resolvedDefaultFeatures = [ "chrono-04" "derive" "postgres-derive" "serde-1" "serde_json-1" "uuid-1" "with-chrono-0_4" "with-serde_json-1" "with-uuid-1" ]; }; "potential_utf" = rec { crateName = "potential_utf"; version = "0.1.3"; edition = "2021"; sha256 = "12mhwvhpvvim6xqp6ifgkh1sniv9j2cmid6axn10fnjvpsnikpw4"; + libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -10590,6 +11146,7 @@ rec { version = "0.2.0"; edition = "2021"; sha256 = "14ckj2xdpkhv3h6l5sdmb9f1d57z8hbfpdldjc2vl5givq2y77j3"; + libPath = "src\\lib.rs"; authors = [ "Jacob Pratt " ]; @@ -10605,6 +11162,7 @@ rec { edition = "2021"; sha256 = "1abxx6qz5qnd43br1dd9b2savpihzjza8gb4fbzdql1gxp2f7sl5"; libName = "ppv_lite86"; + libPath = "src\\lib.rs"; authors = [ "The CryptoCorrosion Contributors" ]; @@ -10625,6 +11183,7 @@ rec { version = "3.1.3"; edition = "2021"; sha256 = "0wrm57acvagx0xmh5xffx5xspsr2kbggm698x0vks132fpjrxld5"; + libPath = "src\\lib.rs"; authors = [ "Nick Stevens " ]; @@ -10652,6 +11211,7 @@ rec { edition = "2021"; sha256 = "1yjz144yn3imq2r4mh7k9h0r8wv4yyjjj57bs0zwkscz24mlczkj"; libName = "predicates_core"; + libPath = "src\\lib.rs"; authors = [ "Nick Stevens " ]; @@ -10663,6 +11223,7 @@ rec { edition = "2021"; sha256 = "0p223d9y02ywwxs3yl68kziswz4da4vabz67jfhp7yqx71njvpbj"; libName = "predicates_tree"; + libPath = "src\\lib.rs"; authors = [ "Nick Stevens " ]; @@ -10683,6 +11244,7 @@ rec { version = "1.4.1"; edition = "2018"; sha256 = "0v8iq35ca4rw3rza5is3wjxwsf88303ivys07anc5yviybi31q9s"; + libPath = "src\\lib.rs"; authors = [ "Colin Kiegel " "Florent Fayolle " @@ -10709,6 +11271,7 @@ rec { edition = "2021"; sha256 = "10v9qi51n4phn1lrj5r94kjq7yhci9jrkqnn6wpan05yjsgb3711"; libName = "proc_macro_crate"; + libPath = "src\\lib.rs"; authors = [ "Bastian Köcher " ]; @@ -10728,6 +11291,7 @@ rec { edition = "2021"; sha256 = "1s29bz20xl2qk5ffs2mbdqknaj43ri673dz86axdbf47xz25psay"; libName = "proc_macro2"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " "Alex Crichton " @@ -10749,6 +11313,7 @@ rec { edition = "2018"; sha256 = "1j48ipc80pykvhx6yhndfa774s58ax1h6sm6mlhf09ls76f6l1mg"; libName = "proc_macro2_diagnostics"; + libPath = "src\\lib.rs"; authors = [ "Sergio Benitez " ]; @@ -10789,6 +11354,7 @@ rec { version = "0.1.27"; edition = "2021"; sha256 = "075v7pcl538avywd81irir8v05isr368pccggm4lidskhhlcsvz6"; + libPath = "src\\lib.rs"; authors = [ "Simonas Kazlauskas " ]; @@ -10805,6 +11371,7 @@ rec { version = "0.1.4"; edition = "2018"; sha256 = "1wd4wy0wxrcays4f1gy8gwcmxg7mskmivcv40p0hidh6xbvwqf07"; + libPath = "src\\lib.rs"; authors = [ "David Koloski " ]; @@ -10825,6 +11392,7 @@ rec { edition = "2018"; sha256 = "1b69cav9wn67cixshizii0q5mlbl0lihx706vcrzm259zkdlbf0n"; procMacro = true; + libPath = "src\\lib.rs"; authors = [ "David Koloski " ]; @@ -10851,6 +11419,7 @@ rec { edition = "2021"; sha256 = "12bvsbnnmlnq9xg9in3h3080ag3sisafgpcn7lqyzhkz93kk58j2"; libName = "quick_xml"; + libPath = "src\\lib.rs"; dependencies = [ { name = "memchr"; @@ -10875,6 +11444,7 @@ rec { version = "0.11.9"; edition = "2021"; sha256 = "086gzj666dr3slmlynkvxlndy28hahgl361d6bf93hk3i6ahmqmr"; + libPath = "src\\lib.rs"; dependencies = [ { name = "bytes"; @@ -10977,6 +11547,7 @@ rec { edition = "2021"; sha256 = "0cca3mgja9p4w66f6sl1kfhj8rdf4mwsg1jxzssh9g63n14np47i"; libName = "quinn_proto"; + libPath = "src\\lib.rs"; dependencies = [ { name = "bytes"; @@ -11074,6 +11645,7 @@ rec { edition = "2021"; sha256 = "1gacawr17a2zkyri0r3m0lc9spzmxbq1by3ilyb8v2mdvjhcdpmd"; libName = "quinn_udp"; + libPath = "src\\lib.rs"; dependencies = [ { name = "libc"; @@ -11122,6 +11694,7 @@ rec { version = "1.0.41"; edition = "2018"; sha256 = "1lg108nb57lwbqlnpsii89cchk6i8pkcvrv88xh1p7a9gdz7c9ff"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -11143,6 +11716,7 @@ rec { version = "0.5.1"; edition = "2018"; sha256 = "0wvwq6w6rdsx1yxzr7ckspff0qk0q9252dzmxrd4c0kv97c9n334"; + libPath = "src\\lib.rs"; authors = [ "Kartikaya Gupta " ]; @@ -11157,6 +11731,7 @@ rec { edition = "2018"; sha256 = "03sbfm3g7myvzyylff6qaxk4z6fy76yv860yy66jiswc2m6b7kb9"; libName = "r_efi"; + libPath = "src\\lib.rs"; features = { "core" = [ "dep:core" ]; "examples" = [ "native" ]; @@ -11168,6 +11743,7 @@ rec { version = "0.7.0"; edition = "2018"; sha256 = "02cxfi3ky3c4yhyqx9axqwhyaca804ws46nn4gc1imbk94nzycyw"; + libPath = "src\\lib.rs"; authors = [ "Nika Layzell " "myrrlyn " @@ -11179,6 +11755,7 @@ rec { version = "0.8.5"; edition = "2018"; sha256 = "013l6931nn7gkc23jz5mm3qdhf93jjf0fg64nz2lp4i51qd8vbrl"; + libPath = "src\\lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11223,6 +11800,7 @@ rec { version = "0.9.2"; edition = "2021"; sha256 = "1lah73ainvrgl7brcxx0pwhpnqa3sm3qaj672034jz8i0q7pgckd"; + libPath = "src\\lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11256,6 +11834,7 @@ rec { version = "0.3.1"; edition = "2018"; sha256 = "123x2adin558xbhvqb8w4f6syjsdkmqff8cxwhmjacpsl1ihmhg6"; + libPath = "src\\lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11286,6 +11865,7 @@ rec { version = "0.9.0"; edition = "2021"; sha256 = "1jr5ygix7r60pz0s1cv3ms1f6pd1i9pcdmnxzzhjc3zn3mgjn0nk"; + libPath = "src\\lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11323,6 +11903,7 @@ rec { version = "0.6.4"; edition = "2018"; sha256 = "0b4j2v4cb5krak1pv6kakv4sz6xcwbrmy2zckc32hsigbrwy82zc"; + libPath = "src\\lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11347,6 +11928,7 @@ rec { version = "0.9.3"; edition = "2021"; sha256 = "0f3xhf16yks5ic6kmgxcpv1ngdhp48mmfy4ag82i1wnwh8ws3ncr"; + libPath = "src\\lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11370,6 +11952,7 @@ rec { version = "0.32.7"; edition = "2021"; sha256 = "0i7grxrnqwa201r4kgcg4476x75drhmi2ifak3ks7dpszrkwfk01"; + libPath = "src\\lib.rs"; dependencies = [ { name = "bytes"; @@ -11486,6 +12069,7 @@ rec { edition = "2021"; sha256 = "0b9n38zsxylql36vybw18if68yc9jczxmbyzdwyhb9sifmag4azd"; libName = "syscall"; + libPath = "src\\lib.rs"; authors = [ "Jeremy Soller " ]; @@ -11508,6 +12092,7 @@ rec { edition = "2021"; sha256 = "0zdzc34qjva9xxgs889z5iz787g81hznk12zbk4g2xkgwq530m7k"; libName = "ref_cast"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -11526,6 +12111,7 @@ rec { sha256 = "1nkhn1fklmn342z5c4mzfzlxddv3x8yhxwwk02cj06djvh36065p"; procMacro = true; libName = "ref_cast_impl"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -11550,6 +12136,7 @@ rec { version = "1.12.2"; edition = "2021"; sha256 = "1m14zkg6xmkb0q5ah3y39cmggclsjdr1wpxfa4kf5wvm3wcw0fw4"; + libPath = "src\\lib.rs"; authors = [ "The Rust Project Developers" "Andrew Gallant " @@ -11609,6 +12196,7 @@ rec { edition = "2021"; sha256 = "070z0j23pjfidqz0z89id1fca4p572wxpcr20a0qsv68bbrclxjj"; libName = "regex_automata"; + libPath = "src\\lib.rs"; authors = [ "The Rust Project Developers" "Andrew Gallant " @@ -11670,6 +12258,7 @@ rec { edition = "2021"; sha256 = "0n7ggnpk0r32rzgnycy5xrc1yp2kq19m6pz98ch3c6dkaxw9hbbs"; libName = "regex_syntax"; + libPath = "src\\lib.rs"; authors = [ "The Rust Project Developers" "Andrew Gallant " @@ -11686,6 +12275,7 @@ rec { version = "0.4.2"; edition = "2018"; sha256 = "0z4rrkycva0lcw0hxq479h4amxj9syn5vq4vb2qid5v2ylj3izki"; + libPath = "src\\lib.rs"; authors = [ "David Koloski " ]; @@ -11711,6 +12301,7 @@ rec { version = "0.12.24"; edition = "2021"; sha256 = "0vx3f2n6hfnv81y66v5wayrqh6jlzz4gakky88m0hywz1d0lc2cx"; + libPath = "src\\lib.rs"; authors = [ "Sean McArthur " ]; @@ -11996,6 +12587,7 @@ rec { edition = "2021"; links = "ring_core_0_17_14_"; sha256 = "1dw32gv19ccq4hsx3ribhpdzri1vnrlcfqb2vj41xn4l49n9ws54"; + libPath = "src\\lib.rs"; dependencies = [ { name = "cfg-if"; @@ -12056,6 +12648,7 @@ rec { version = "0.7.45"; edition = "2021"; sha256 = "16vp6m4sq41smhvym8ijy4id1hr3vm4na7wy4bc63qdrhmiws24h"; + libPath = "src\\lib.rs"; authors = [ "David Koloski " ]; @@ -12145,6 +12738,7 @@ rec { edition = "2021"; sha256 = "1h1jwmyivx7g88d41gzcjrqnax98m9algjd49hx0laqab4kisgah"; procMacro = true; + libPath = "src\\lib.rs"; authors = [ "David Koloski " ]; @@ -12171,6 +12765,7 @@ rec { version = "0.8.14"; edition = "2021"; sha256 = "1i1l6dhv7vws5vp0ikakj44fk597xi59g3j6ng1q55x3dz0xg3i2"; + libPath = "src\\lib.rs"; authors = [ "Evgeny Safronov " ]; @@ -12202,6 +12797,7 @@ rec { edition = "2021"; sha256 = "1nylmh7w2vpa1bwrnx1jfp2l4yz6i5qrmpic5zll166gfyj9kraj"; libName = "rmp_serde"; + libPath = "src\\lib.rs"; authors = [ "Evgeny Safronov " ]; @@ -12233,6 +12829,7 @@ rec { version = "1.39.0"; edition = "2021"; sha256 = "10i20blk3gma74qjl29c58dx4ma3cnbls9qjcy2bvac72x0gxbrm"; + libPath = "src\\lib.rs"; authors = [ "Paul Mason " ]; @@ -12351,6 +12948,7 @@ rec { edition = "2021"; sha256 = "18v9227aybig2rvr47817sx0kgpgw248f51dvhjbwgj1iys0r35f"; procMacro = true; + libPath = "src\\lib.rs"; authors = [ "Paul Mason " ]; @@ -12374,6 +12972,7 @@ rec { edition = "2015"; sha256 = "1kja3nb0yhlm4j2p1hl8d7sjmn2g9fa1s4pj0qma5kj2lcndkxsn"; libName = "rustc_demangle"; + libPath = "src\\lib.rs"; authors = [ "Alex Crichton " ]; @@ -12388,6 +12987,7 @@ rec { edition = "2021"; sha256 = "03gz5lvd9ghcwsal022cgkq67dmimcgdjghfb5yb5d352ga06xrm"; libName = "rustc_hash"; + libPath = "src\\lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -12402,6 +13002,7 @@ rec { version = "0.4.1"; edition = "2018"; sha256 = "14lvdsmr5si5qbqzrajgb6vfn69k0sfygrvfvr2mps26xwi3mjyg"; + libPath = "src\\lib.rs"; dependencies = [ { name = "semver"; @@ -12415,6 +13016,7 @@ rec { version = "1.1.2"; edition = "2021"; sha256 = "0gpz343xfzx16x82s1x336n0kr49j02cvhgxdvaq86jmqnigh5fd"; + libPath = "src\\lib.rs"; authors = [ "Dan Gohman " "Jakub Konka " @@ -12522,6 +13124,7 @@ rec { version = "0.23.34"; edition = "2021"; sha256 = "19vzmdybp5rlgr0bjb4fykp28w2d6fkqq150aamqykrbxvlqd5ba"; + libPath = "src\\lib.rs"; dependencies = [ { name = "log"; @@ -12592,6 +13195,7 @@ rec { edition = "2018"; sha256 = "0l3f3mrfkgdjrava7ibwzgwc4h3dljw3pdkbsi9rkwz3zvji9qyw"; libName = "rustls_pemfile"; + libPath = "src\\lib.rs"; dependencies = [ { name = "rustls-pki-types"; @@ -12611,6 +13215,7 @@ rec { edition = "2021"; sha256 = "0yawbdpix8jif6s8zj1p2hbyb7y3bj66fhx0y7hyf4qh4964m6i2"; libName = "rustls_pki_types"; + libPath = "src\\lib.rs"; dependencies = [ { name = "web-time"; @@ -12639,6 +13244,7 @@ rec { edition = "2021"; sha256 = "1gqlsd0yqiqch97g0wbsnbmyrp75j6nbzfpf8dmhxa78j50ky2z1"; libName = "webpki"; + libPath = "src\\lib.rs"; dependencies = [ { name = "ring"; @@ -12674,7 +13280,8 @@ rec { edition = "2018"; sha256 = "0vfl70jhv72scd9rfqgr2n11m5i9l1acnk684m2w83w0zbqdx75k"; procMacro = true; - build = "build/build.rs"; + build = "build\\build.rs"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -12685,6 +13292,7 @@ rec { version = "1.0.20"; edition = "2018"; sha256 = "07s855l8sb333h6bpn24pka5sp7hjk2w667xy6a0khkf6sqv5lr8"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -12698,6 +13306,7 @@ rec { edition = "2018"; sha256 = "00h5j1w87dmhnvbv9l8bic3y7xxsnjmssvifw2ayvgx9mb1ivz4k"; libName = "same_file"; + libPath = "src\\lib.rs"; authors = [ "Andrew Gallant " ]; @@ -12715,10 +13324,18 @@ rec { version = "0.9.0"; edition = "2021"; sha256 = "0pqncln5hqbzbl2r3yayyr4a82jjf93h2cfxrn0xamvx77wr3lac"; + libPath = "src\\lib.rs"; authors = [ "Graham Esau " ]; dependencies = [ + { + name = "chrono"; + packageId = "chrono"; + rename = "chrono04"; + optional = true; + usesDefaultFeatures = false; + } { name = "dyn-clone"; packageId = "dyn-clone"; @@ -12767,6 +13384,13 @@ rec { } ]; devDependencies = [ + { + name = "chrono"; + packageId = "chrono"; + rename = "chrono04"; + usesDefaultFeatures = false; + features = [ "serde" ]; + } { name = "indexmap"; packageId = "indexmap"; @@ -12814,7 +13438,7 @@ rec { "url2" = [ "dep:url2" ]; "uuid1" = [ "dep:uuid1" ]; }; - resolvedDefaultFeatures = [ "default" "derive" "indexmap2" "preserve_order" "schemars_derive" "std" "url2" "uuid1" ]; + resolvedDefaultFeatures = [ "chrono04" "default" "derive" "indexmap2" "preserve_order" "schemars_derive" "std" "url2" "uuid1" ]; }; "schemars_derive" = rec { crateName = "schemars_derive"; @@ -12822,6 +13446,7 @@ rec { edition = "2021"; sha256 = "1ziqhh5c2yw0q8n4fxsfgl0c544avkvq3dq8iq5jzly6fx6dj5jh"; procMacro = true; + libPath = "src\\lib.rs"; authors = [ "Graham Esau " ]; @@ -12851,6 +13476,7 @@ rec { version = "1.2.0"; edition = "2015"; sha256 = "0jcz9sd47zlsgcnm1hdw0664krxwb5gczlif4qngj2aif8vky54l"; + libPath = "src\\lib.rs"; authors = [ "bluss" ]; @@ -12863,6 +13489,7 @@ rec { version = "4.1.0"; edition = "2015"; sha256 = "0sxsb64np6bvnppjz5hg4rqpnkczhsl8w8kf2a5lr1c08xppn40w"; + libPath = "src\\lib.rs"; authors = [ "ticki " "Tom Almeida " @@ -12876,6 +13503,7 @@ rec { version = "1.0.27"; edition = "2018"; sha256 = "1qmi3akfrnqc2hfkdgcxhld5bv961wbk8my3ascv5068mc5fnryp"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -12890,6 +13518,7 @@ rec { version = "0.45.0"; edition = "2021"; sha256 = "083fbmszf1b4bp8ax4v9qharx878mc9vzs45i2917z51x0jmxf28"; + libPath = "src\\lib.rs"; authors = [ "Sentry " ]; @@ -13015,6 +13644,7 @@ rec { edition = "2021"; sha256 = "1s0k2mmw9cirb4n3r144pjjga0nw6171cs2s0sd483rv44127lfg"; libName = "sentry_anyhow"; + libPath = "src\\lib.rs"; authors = [ "Sentry " ]; @@ -13043,6 +13673,7 @@ rec { edition = "2021"; sha256 = "1q3s0wwnhdgvls64n6lfw1spvdr4g1fqv9a62zggcdmmb94kl9gk"; libName = "sentry_backtrace"; + libPath = "src\\lib.rs"; authors = [ "Sentry " ]; @@ -13070,6 +13701,7 @@ rec { edition = "2021"; sha256 = "0029h4zxkgpwl1xfn12vd7i3anpdyl86lrh7ijw6cvl352kq2zq2"; libName = "sentry_contexts"; + libPath = "src\\lib.rs"; authors = [ "Sentry " ]; @@ -13111,6 +13743,7 @@ rec { edition = "2021"; sha256 = "19c4p8ddwkp20wmwvfjj5dajw5lw23a2vgz9vf79db3iisf75dnk"; libName = "sentry_core"; + libPath = "src\\lib.rs"; authors = [ "Sentry " ]; @@ -13153,6 +13786,7 @@ rec { edition = "2021"; sha256 = "0k6h6crspbq5p3n7j6i4ms659rg2jajp7bx1zcmr26gv3nfbb1fw"; libName = "sentry_debug_images"; + libPath = "src\\lib.rs"; authors = [ "Sentry " ]; @@ -13174,6 +13808,7 @@ rec { edition = "2021"; sha256 = "0h1dii4cxnbi8g35p9bi08falgz22v2s5v3yq7q7mygq0hglgh0s"; libName = "sentry_panic"; + libPath = "src\\lib.rs"; authors = [ "Sentry " ]; @@ -13196,6 +13831,7 @@ rec { edition = "2021"; sha256 = "00zbfjcll5frvpbvc8nzyibc1lg439azidw1rhni84x6cq47i3s2"; libName = "sentry_tracing"; + libPath = "src\\lib.rs"; authors = [ "Sentry " ]; @@ -13244,6 +13880,7 @@ rec { edition = "2021"; sha256 = "1hdfmmswd16k4zbwg12z8j6lhxihmbqx11l86nf6ambvjv8x269c"; libName = "sentry_types"; + libPath = "src\\lib.rs"; authors = [ "Sentry " ]; @@ -13300,6 +13937,7 @@ rec { version = "1.0.228"; edition = "2021"; sha256 = "17mf4hhjxv5m90g42wmlbc61hdhlm6j9hwfkpcnd72rpgzm993ls"; + libPath = "src\\lib.rs"; authors = [ "Erick Tryzelaar " "David Tolnay " @@ -13333,6 +13971,7 @@ rec { version = "1.0.228"; edition = "2021"; sha256 = "1bb7id2xwx8izq50098s5j2sqrrvk31jbbrjqygyan6ask3qbls1"; + libPath = "src\\lib.rs"; authors = [ "Erick Tryzelaar " "David Tolnay " @@ -13361,6 +14000,7 @@ rec { edition = "2021"; sha256 = "0y8xm7fvmr2kjcd029g9fijpndh8csv5m20g4bd76w8qschg4h6m"; procMacro = true; + libPath = "src\\lib.rs"; authors = [ "Erick Tryzelaar " "David Tolnay " @@ -13424,6 +14064,7 @@ rec { version = "1.0.145"; edition = "2021"; sha256 = "1767y6kxjf7gwpbv8bkhgwc50nhg46mqwm9gy9n122f7v1k6yaj0"; + libPath = "src\\lib.rs"; authors = [ "Erick Tryzelaar " "David Tolnay " @@ -13480,6 +14121,7 @@ rec { version = "0.1.20"; edition = "2021"; sha256 = "0mxls44p2ycmnxh03zpnlxxygq42w61ws7ir7r0ba6rp5s1gza8h"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -13514,6 +14156,7 @@ rec { version = "0.14.0"; edition = "2018"; sha256 = "19ha3lk8mdhzjavm09my9c8j96c554nlig5lsvvbvb08q3npnhcb"; + libPath = "src\\lib.rs"; authors = [ "Sam Scott " ]; @@ -13563,6 +14206,7 @@ rec { version = "1.0.3"; edition = "2021"; sha256 = "14j32cqcs6jjdl1c111lz6s0hr913dnmy2kpfd75k2761ym4ahz2"; + libPath = "src\\lib.rs"; dependencies = [ { name = "serde_core"; @@ -13584,6 +14228,7 @@ rec { version = "0.7.1"; edition = "2018"; sha256 = "1zgklbdaysj3230xivihs30qi5vkhigg323a9m62k8jwf4a1qjfk"; + libPath = "src\\lib.rs"; authors = [ "Anthony Ramine " ]; @@ -13612,6 +14257,7 @@ rec { version = "0.10.6"; edition = "2018"; sha256 = "1fnnxlfg08xhkmwf2ahv634as30l1i3xhlhkvxflmasi5nd85gz3"; + libPath = "src\\lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -13651,6 +14297,7 @@ rec { version = "0.10.9"; edition = "2018"; sha256 = "10xjj843v31ghsksd9sl9y12qfc48157j1xpb8v1ml39jy0psl57"; + libPath = "src\\lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -13692,6 +14339,7 @@ rec { edition = "2018"; sha256 = "1xipjr4nqsgw34k7a2cgj9zaasl2ds6jwn89886kww93d32a637l"; libName = "sharded_slab"; + libPath = "src\\lib.rs"; authors = [ "Eliza Weisman " ]; @@ -13710,6 +14358,7 @@ rec { version = "1.3.0"; edition = "2015"; sha256 = "0r1y6bv26c1scpxvhg2cabimrmwgbp4p3wy6syj9n0c4s3q2znhg"; + libPath = "src\\lib.rs"; authors = [ "comex " "Fenhl " @@ -13729,6 +14378,7 @@ rec { edition = "2015"; sha256 = "12y2v1ms5z111fymaw1v8k93m5chnkp21h0jknrydkj8zydp395j"; libName = "signal_hook_registry"; + libPath = "src\\lib.rs"; authors = [ "Michal 'vorner' Vaner " "Masaki Hara " @@ -13746,6 +14396,7 @@ rec { version = "0.1.5"; edition = "2018"; sha256 = "0vmpf7xaa0dnaikib5jlx6y4dxd3hxqz6l830qb079g7wcsgxag3"; + libPath = "src\\lib.rs"; authors = [ "Hans Kratz " ]; @@ -13759,6 +14410,7 @@ rec { version = "1.0.1"; edition = "2018"; sha256 = "17f35782ma3fn6sh21c027kjmd227xyrx06ffi8gw4xzv9yry6an"; + libPath = "src\\lib.rs"; authors = [ "Frank Denis " ]; @@ -13776,6 +14428,7 @@ rec { version = "0.4.11"; edition = "2018"; sha256 = "12bm4s88rblq02jjbi1dw31984w61y2ldn13ifk5gsqgy97f8aks"; + libPath = "src\\lib.rs"; authors = [ "Carl Lerche " ]; @@ -13789,7 +14442,8 @@ rec { crateName = "slug"; version = "0.1.6"; edition = "2021"; - sha256 = "0977cyp88xrwbpmqwzafkvv8vm9i0gdb5zjskb6f6pg45vvq0al8";type = [ "cdylib" "rlib" ]; + sha256 = "0977cyp88xrwbpmqwzafkvv8vm9i0gdb5zjskb6f6pg45vvq0al8"; + libPath = "src\\lib.rs";type = [ "cdylib" "rlib" ]; authors = [ "Steven Allen " ]; @@ -13811,6 +14465,7 @@ rec { version = "1.15.1"; edition = "2018"; sha256 = "00xxdxxpgyq5vjnpljvkmy99xij5rxgh913ii1v16kzynnivgcb7"; + libPath = "src\\lib.rs"; authors = [ "The Servo Project Developers" ]; @@ -13831,6 +14486,7 @@ rec { version = "0.6.1"; edition = "2021"; sha256 = "109qn0kjhqi5zds84qyqi5wn72g8azjhmf4b04fkgkrkd48rw4hp"; + libPath = "src\\lib.rs"; authors = [ "Alex Crichton " "Thomas de Zeeuw " @@ -13857,6 +14513,7 @@ rec { version = "1.2.1"; edition = "2015"; sha256 = "15h5h73ppqyhdhx6ywxfj88azmrpml9gl6zp3pwy2malqa6vxqkc"; + libPath = "src\\lib.rs"; authors = [ "Robert Grosse " ]; @@ -13871,6 +14528,7 @@ rec { version = "0.1.22"; edition = "2021"; sha256 = "0nbfvmqw9bsawv9g0k4bqilxkl7cszrb5dpfxnjcxbranjgv5y71"; + libPath = "src\\lib.rs"; authors = [ "Alex Crichton " "Simonas Kazlauskas " @@ -13914,6 +14572,7 @@ rec { version = "1.1.0"; edition = "2015"; sha256 = "0gsl6xmw10gvn3zs1rv99laj5ig7ylffnh71f9l34js4nr4r7sx2"; + libPath = "src\\lib.rs"; authors = [ "Nikolai Vazquez" ]; @@ -13925,6 +14584,7 @@ rec { version = "0.1.5"; edition = "2015"; sha256 = "1cb3jis4h2b767csk272zw92lc6jzfzvh8d6m1cd86yqjb9z6kbv"; + libPath = "src\\lib.rs"; authors = [ "Steven Fackler " ]; @@ -13949,6 +14609,7 @@ rec { version = "0.11.1"; edition = "2015"; sha256 = "0kzvqlw8hxqb7y598w1s0hxlnmi84sg5vsipp3yg5na5d1rvba3x"; + libPath = "src\\lib.rs"; authors = [ "Danny Guo " "maxbachmann " @@ -13960,6 +14621,7 @@ rec { version = "2.6.1"; edition = "2018"; sha256 = "14ijxaymghbl1p0wql9cib5zlwiina7kall6w7g89csprkgbvhhk"; + libPath = "src\\lib.rs"; authors = [ "Isis Lovecruft " "Henry de Valence " @@ -13973,6 +14635,7 @@ rec { version = "1.0.109"; edition = "2018"; sha256 = "0ds2if4600bd59wsv7jjgfkayfzy3hnazs394kz6zdkmna8l3dkj"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -14007,6 +14670,7 @@ rec { version = "2.0.108"; edition = "2021"; sha256 = "05z908svb0yw5wzrlv27l2i8j1d8l16hd5r8bjh809146myr2n6s"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -14040,6 +14704,7 @@ rec { version = "1.0.2"; edition = "2021"; sha256 = "0qvjyasd6w18mjg5xlaq5jgy84jsjfsvmnn12c13gypxbv75dwhb"; + libPath = "src\\lib.rs"; authors = [ "Actyx AG " ]; @@ -14062,6 +14727,7 @@ rec { version = "0.13.2"; edition = "2018"; sha256 = "1lh9lx3r3jb18f8sbj29am5hm9jymvbwh6jb1izsnnxgvgrp12kj"; + libPath = "src\\lib.rs"; authors = [ "Nika Layzell " ]; @@ -14094,6 +14760,7 @@ rec { version = "1.0.1"; edition = "2015"; sha256 = "0sc3gl4nldqpvyhqi3bbd0l9k7fngrcl4zs47n314nqqk4bpx4sm"; + libPath = "src\\lib.rs"; authors = [ "Elliott Linder " "myrrlyn " @@ -14105,6 +14772,7 @@ rec { version = "3.23.0"; edition = "2021"; sha256 = "05igl2gml6z6i2va1bv49f9f1wb3f752c2i63lvlb9s2vxxwfc9d"; + libPath = "src\\lib.rs"; authors = [ "Steven Allen " "The Rust Project Developers" @@ -14145,6 +14813,7 @@ rec { version = "1.20.0"; edition = "2018"; sha256 = "1vnj9imw2h9szkd1izsrhwrc9jvazvdsp84x65wg2rg88ldqb7db"; + libPath = "src\\lib.rs"; authors = [ "Vincent Prouillet " ]; @@ -14234,6 +14903,7 @@ rec { version = "0.5.1"; edition = "2021"; sha256 = "10s610ax6nb70yi7xfmwcb6d3wi9sj5isd0m63gy2pizr2zgwl4g"; + libPath = "src\\lib.rs"; }; "thiserror 1.0.69" = rec { @@ -14241,6 +14911,7 @@ rec { version = "1.0.69"; edition = "2021"; sha256 = "0lizjay08agcr5hs9yfzzj6axs53a2rgx070a1dsi3jpkcrzbamn"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -14257,6 +14928,7 @@ rec { version = "2.0.17"; edition = "2021"; sha256 = "1j2gixhm2c3s6g96vd0b01v0i0qz1101vfmw0032mdqj1z58fdgn"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -14278,6 +14950,7 @@ rec { sha256 = "1h84fmn2nai41cxbhk6pqf46bxqq1b344v8yz089w1chzi76rvjg"; procMacro = true; libName = "thiserror_impl"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -14304,6 +14977,7 @@ rec { sha256 = "04y92yjwg1a4piwk9nayzjfs07sps8c4vq9jnsfq9qvxrn75rw9z"; procMacro = true; libName = "thiserror_impl"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -14328,6 +15002,7 @@ rec { version = "1.1.9"; edition = "2021"; sha256 = "1191jvl8d63agnq06pcnarivf63qzgpws5xa33hgc92gjjj4c0pn"; + libPath = "src\\lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -14345,6 +15020,7 @@ rec { version = "0.3.44"; edition = "2021"; sha256 = "179awlwb36zly3nmz5h9awai1h4pbf1d83g2pmvlw4v1pgixkrwi"; + libPath = "src\\lib.rs"; authors = [ "Jacob Pratt " "Time contributors" @@ -14427,6 +15103,7 @@ rec { edition = "2021"; sha256 = "0sqwhg7n47gbffyr0zhipqcnskxgcgzz1ix8wirqs2rg3my8x1j0"; libName = "time_core"; + libPath = "src\\lib.rs"; authors = [ "Jacob Pratt " "Time contributors" @@ -14440,6 +15117,7 @@ rec { sha256 = "1wzb6hnl35856f58cx259q7ijc4c7yis0qsnydvw5n8jbw9b1krh"; procMacro = true; libName = "time_macros"; + libPath = "src\\lib.rs"; authors = [ "Jacob Pratt " "Time contributors" @@ -14463,6 +15141,7 @@ rec { version = "0.8.1"; edition = "2021"; sha256 = "12sc6h3hnn6x78iycm5v6wrs2xhxph0ydm43yyn7gdfw8l8nsksx"; + libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -14493,6 +15172,7 @@ rec { version = "1.10.0"; edition = "2018"; sha256 = "1yhk0qdqyiaa4v2j9h8pzax5gxgwpz4da0lcphfil6g6pk1zv9dz"; + libPath = "src\\lib.rs"; authors = [ "Lokathor " ]; @@ -14522,6 +15202,7 @@ rec { version = "0.1.1"; edition = "2018"; sha256 = "081gag86208sc3y6sdkshgw3vysm5d34p431dzw0bshz66ncng0z"; + libPath = "src\\lib.rs"; authors = [ "Soveu " ]; @@ -14532,6 +15213,7 @@ rec { version = "1.48.0"; edition = "2021"; sha256 = "0244qva5pksy8gam6llf7bd6wbk2vkab9lx26yyf08dix810wdpz"; + libPath = "src\\lib.rs"; authors = [ "Tokio Contributors " ]; @@ -14649,6 +15331,7 @@ rec { sha256 = "19czvgliginbzyhhfbmj77wazqn2y8g27y2nirfajdlm41bphh5g"; procMacro = true; libName = "tokio_macros"; + libPath = "src\\lib.rs"; authors = [ "Tokio Contributors " ]; @@ -14675,6 +15358,7 @@ rec { edition = "2021"; sha256 = "17kc1zr0j7dsqvkb1lxvvn77w92qiqv0jd0p52v09zickdnxch1b"; libName = "tokio_postgres"; + libPath = "src\\lib.rs"; authors = [ "Steven Fackler " ]; @@ -14796,7 +15480,7 @@ rec { "with-uuid-0_8" = [ "postgres-types/with-uuid-0_8" ]; "with-uuid-1" = [ "postgres-types/with-uuid-1" ]; }; - resolvedDefaultFeatures = [ "default" "runtime" "with-chrono-0_4" "with-uuid-1" ]; + resolvedDefaultFeatures = [ "default" "runtime" "with-chrono-0_4" "with-serde_json-1" "with-uuid-1" ]; }; "tokio-rustls" = rec { crateName = "tokio-rustls"; @@ -14804,6 +15488,7 @@ rec { edition = "2021"; sha256 = "0qggwknz9w4bbsv1z158hlnpkm97j3w8v31586jipn99byaala8p"; libName = "tokio_rustls"; + libPath = "src\\lib.rs"; dependencies = [ { name = "rustls"; @@ -14842,6 +15527,7 @@ rec { edition = "2021"; sha256 = "1r9wdrg1k5hna3m0kc8kcb8jdb6n52g7vnw93kw2xxw4cyc7qc0l"; libName = "tokio_util"; + libPath = "src\\lib.rs"; authors = [ "Tokio Contributors " ]; @@ -14897,6 +15583,7 @@ rec { version = "0.9.8"; edition = "2021"; sha256 = "1n569s0dgdmqjy21wf85df7kx3vb1zgin3pc2rvy4j8lnqgqpp7h"; + libPath = "src\\lib.rs"; dependencies = [ { name = "serde_core"; @@ -14948,6 +15635,7 @@ rec { version = "0.7.3"; edition = "2021"; sha256 = "0cs5f8y4rdsmmwipjclmq97lrwppjy2qa3vja4f9d5xwxcwvdkgj"; + libPath = "src\\lib.rs"; dependencies = [ { name = "serde_core"; @@ -14969,6 +15657,7 @@ rec { version = "0.23.7"; edition = "2021"; sha256 = "13cgp4y6prad1lh18bbg64zkq48hafq7xzs4fb0hwpcv1mnyz1b4"; + libPath = "src\\lib.rs"; dependencies = [ { name = "indexmap"; @@ -15004,6 +15693,7 @@ rec { version = "1.0.4"; edition = "2021"; sha256 = "03l0750d1cyliij9vac4afpp1syh1a6yhbbalnslpnsvsdlf5jy0"; + libPath = "src\\lib.rs"; dependencies = [ { name = "winnow"; @@ -15025,6 +15715,7 @@ rec { edition = "2021"; sha256 = "0wmz0ri3d9ml04wrd5qk5a6xq70g8zlzc2g9k61gi3pm10hka97i"; libName = "totp_rs"; + libPath = "src\\lib.rs"; authors = [ "Cleo Rebert " ]; @@ -15067,6 +15758,7 @@ rec { version = "0.5.2"; edition = "2018"; sha256 = "1ybmd59nm4abl9bsvy6rx31m4zvzp5rja2slzpn712y9b68ssffh"; + libPath = "src\\lib.rs"; authors = [ "Tower Maintainers " ]; @@ -15158,6 +15850,7 @@ rec { edition = "2018"; sha256 = "1wh51y4rf03f91c6rvli6nwzsarx7097yx6sqlm75ag27pbjzj5d"; libName = "tower_http"; + libPath = "src\\lib.rs"; authors = [ "Tower Maintainers " ]; @@ -15279,6 +15972,7 @@ rec { edition = "2018"; sha256 = "03kq92fdzxin51w8iqix06dcfgydyvx7yr6izjq0p626v9n2l70j"; libName = "tower_layer"; + libPath = "src\\lib.rs"; authors = [ "Tower Maintainers " ]; @@ -15290,6 +15984,7 @@ rec { edition = "2018"; sha256 = "1hzfkvkci33ra94xjx64vv3pp0sq346w06fpkcdwjcid7zhvdycd"; libName = "tower_service"; + libPath = "src\\lib.rs"; authors = [ "Tower Maintainers " ]; @@ -15300,6 +15995,7 @@ rec { version = "0.1.41"; edition = "2018"; sha256 = "1l5xrzyjfyayrwhvhldfnwdyligi1mpqm8mzbi2m1d6y6p2hlkkq"; + libPath = "src\\lib.rs"; authors = [ "Eliza Weisman " "Tokio Contributors " @@ -15338,6 +16034,7 @@ rec { sha256 = "00v9bhfgfg3v101nmmy7s3vdwadb7ngc8c1iw6wai9vj9sv3lf41"; procMacro = true; libName = "tracing_attributes"; + libPath = "src\\lib.rs"; authors = [ "Tokio Contributors " "Eliza Weisman " @@ -15368,6 +16065,7 @@ rec { edition = "2018"; sha256 = "0y3nc4mpnr79rzkrcylv5f5bnjjp19lsxwis9l4kzs97ya0jbldr"; libName = "tracing_core"; + libPath = "src\\lib.rs"; authors = [ "Tokio Contributors " ]; @@ -15399,6 +16097,7 @@ rec { edition = "2018"; sha256 = "1m9447bxq7236avgl6n5yb2aqwplrghm61dgipw03mh7ad7s2m10"; libName = "tracing_subscriber"; + libPath = "src\\lib.rs"; authors = [ "Eliza Weisman " "David Barsky " @@ -15490,6 +16189,7 @@ rec { edition = "2015"; sha256 = "0jqijrrvm1pyq34zn1jmy2vihd4jcrjlvsh4alkjahhssjnsn8g4"; libName = "try_lock"; + libPath = "src\\lib.rs"; authors = [ "Sean McArthur " ]; @@ -15500,6 +16200,7 @@ rec { version = "1.19.0"; edition = "2018"; sha256 = "1fw2mpbn2vmqan56j1b3fbpcdg80mz26fm53fs16bq5xcq84hban"; + libPath = "src\\lib.rs"; authors = [ "Paho Lurie-Gregg " "Andre Bogus " @@ -15515,6 +16216,7 @@ rec { edition = "2021"; sha256 = "0wc9p07sqwz320848i52nvyjvpsxkx3kv5bfbmm6s35809fdk5i8"; libName = "ucd_trie"; + libPath = "src\\lib.rs"; authors = [ "Andrew Gallant " ]; @@ -15528,6 +16230,7 @@ rec { version = "0.1.1"; edition = "2015"; sha256 = "1j1xd1rryml4j1hf07kahva9d5ym8m9jz9z20hfdpr1jrbq8jbxp"; + libPath = "src\\lib.rs"; authors = [ "Ignacio Corderi " ]; @@ -15545,6 +16248,7 @@ rec { edition = "2018"; sha256 = "08g21dn3wwix3ycfl0vrbahn0835nv2q3swm8wms0vwvgm07mid8"; libName = "unic_char_property"; + libPath = "src\\lib.rs"; authors = [ "The UNIC Project Developers" ]; @@ -15562,6 +16266,7 @@ rec { edition = "2018"; sha256 = "1g0z7iwvjhqspi6194zsff8vy6i3921hpqcrp3v1813hbwnh5603"; libName = "unic_char_range"; + libPath = "src\\lib.rs"; authors = [ "The UNIC Project Developers" ]; @@ -15577,6 +16282,7 @@ rec { edition = "2018"; sha256 = "1g1mm954m0zr497dl4kx3vr09yaly290zs33bbl4wrbaba1gzmw0"; libName = "unic_common"; + libPath = "src\\lib.rs"; authors = [ "The UNIC Project Developers" ]; @@ -15590,6 +16296,7 @@ rec { edition = "2018"; sha256 = "08wgz2q6vrdvmbd23kf9pbg8cyzm5q8hq9spc4blzy2ppqk5vvg4"; libName = "unic_segment"; + libPath = "src\\lib.rs"; authors = [ "The UNIC Project Developers" ]; @@ -15607,6 +16314,7 @@ rec { edition = "2018"; sha256 = "0027lczcg0r401g6fnzm2bq9fxhgxvri1nlryhhv8192lqic2y90"; libName = "unic_ucd_segment"; + libPath = "src\\lib.rs"; authors = [ "The UNIC Project Developers" ]; @@ -15632,6 +16340,7 @@ rec { edition = "2018"; sha256 = "1i5hnzpfnxkp4ijfk8kvhpvj84bij575ybqx1b6hyigy6wi2zgcn"; libName = "unic_ucd_version"; + libPath = "src\\lib.rs"; authors = [ "The UNIC Project Developers" ]; @@ -15649,6 +16358,7 @@ rec { edition = "2018"; sha256 = "1xcxwbsqa24b8vfchhzyyzgj0l6bn51ib5v8j6krha0m77dva72w"; libName = "unicode_bidi"; + libPath = "src\\lib.rs"; authors = [ "The Servo Project Developers" ]; @@ -15669,6 +16379,7 @@ rec { edition = "2018"; sha256 = "01lafj17xwizrlvn006zz8ip99hqisf77kjk0a8flfmpmrsynbj6"; libName = "unicode_ident"; + libPath = "src\\lib.rs"; authors = [ "David Tolnay " ]; @@ -15680,6 +16391,7 @@ rec { edition = "2018"; sha256 = "0mnrk809z3ix1wspcqy97ld5wxdb31f3xz6nsvg5qcv289ycjcsh"; libName = "unicode_normalization"; + libPath = "src\\lib.rs"; authors = [ "kwantam " "Manish Goregaokar " @@ -15702,6 +16414,7 @@ rec { edition = "2021"; sha256 = "1l3mbgzwz8g14xcs09p4ww3hjkjcf0i1ih13nsg72bhj8n5jl3z7"; libName = "unicode_properties"; + libPath = "src\\lib.rs"; authors = [ "Charles Lew " "Manish Goregaokar " @@ -15717,6 +16430,7 @@ rec { edition = "2018"; sha256 = "14qla2jfx74yyb9ds3d2mpwpa4l4lzb9z57c6d2ba511458z5k7n"; libName = "unicode_segmentation"; + libPath = "src\\lib.rs"; authors = [ "kwantam " "Manish Goregaokar " @@ -15730,6 +16444,7 @@ rec { edition = "2021"; sha256 = "0m7jjzlcccw716dy9423xxh0clys8pfpllc5smvfxrzdf66h9b5l"; libName = "unicode_width"; + libPath = "src\\lib.rs"; authors = [ "kwantam " "Manish Goregaokar " @@ -15748,6 +16463,7 @@ rec { edition = "2018"; sha256 = "05rq0asf2f1q5vrcv4bwf0c3y6q20asqkiqpr8wqyrfxyb7h4d1j"; libName = "unit_prefix"; + libPath = "src\\lib.rs"; authors = [ "Fabio Valentini " "Benjamin Sago " @@ -15762,6 +16478,7 @@ rec { version = "0.9.0"; edition = "2018"; sha256 = "1ha7ib98vkc538x0z60gfn0fc5whqdd85mb87dvisdcaifi6vjwf"; + libPath = "src\\lib.rs"; authors = [ "Brian Smith " ]; @@ -15772,6 +16489,7 @@ rec { version = "3.1.2"; edition = "2018"; sha256 = "0dv5yhcl3g96vax2b8xinks28kzbkf78d35lx71kyjlay4ji1flr"; + libPath = "src\\lib.rs"; authors = [ "Martin Algesten " "Jacob Hoffman-Andrews " @@ -15860,6 +16578,7 @@ rec { edition = "2021"; sha256 = "1lpm7075y1bkg1snc678sxmwhk75n3flhq1l6hhncdc324f57d30"; libName = "ureq_proto"; + libPath = "src\\lib.rs"; authors = [ "Martin Algesten " ]; @@ -15896,6 +16615,7 @@ rec { version = "2.5.7"; edition = "2018"; sha256 = "0nzghdv0kcksyvri0npxbjzyx2ihprks5k590y77bld355m17g08"; + libPath = "src\\lib.rs"; authors = [ "The rust-url developers" ]; @@ -15945,6 +16665,7 @@ rec { version = "2.1.3"; edition = "2021"; sha256 = "1nj99jp37k47n0hvaz5fvz7z6jd0sb4ppvfy3nphr1zbnyixpy6s"; + libPath = "src\\lib.rs"; authors = [ "Kornel " "Bertram Truong " @@ -15957,6 +16678,7 @@ rec { edition = "2015"; sha256 = "1a9ns3fvgird0snjkd3wbdhwd3zdpc2h5gpyybrfr6ra5pkqxk09"; libName = "utf8"; + libPath = "src\\lib.rs"; authors = [ "Simon Sapin " ]; @@ -15967,6 +16689,7 @@ rec { version = "1.0.4"; edition = "2021"; sha256 = "1gmna9flnj8dbyd8ba17zigrp9c4c3zclngf5lnb5yvz1ri41hdn"; + libPath = "src\\lib.rs"; authors = [ "Henri Sivonen " ]; @@ -15977,6 +16700,7 @@ rec { version = "0.2.2"; edition = "2018"; sha256 = "088807qwjq46azicqwbhlmzwrbkz7l4hpw43sdkdyyk524vdxaq6"; + libPath = "src\\lib.rs"; authors = [ "Joe Wilm " "Christian Duerr " @@ -15990,6 +16714,7 @@ rec { version = "1.18.1"; edition = "2018"; sha256 = "18kh01qmfayn4psap52x8xdjkzw2q8bcbpnhhxjs05dr22mbi1rg"; + libPath = "src\\lib.rs"; authors = [ "Ashley Mannix" "Dylan DPC" @@ -16064,6 +16789,7 @@ rec { version = "0.1.1"; edition = "2021"; sha256 = "0r9srp55v7g27s5bg7a2m095fzckrcdca5maih6dy9bay6fflwxs"; + libPath = "src\\lib.rs"; features = { "default" = [ "std" ]; "derive" = [ "valuable-derive" ]; @@ -16077,6 +16803,7 @@ rec { version = "0.9.5"; edition = "2015"; sha256 = "0nhhi4i5x89gm911azqbn7avs9mdacw2i3vcz3cnmz3mv4rqz4hb"; + libPath = "src\\lib.rs"; authors = [ "Sergio Benitez " ]; @@ -16087,6 +16814,7 @@ rec { version = "2.5.0"; edition = "2018"; sha256 = "0jsy7a710qv8gld5957ybrnc07gavppp963gs32xk4ag8130jy99"; + libPath = "src\\lib.rs"; authors = [ "Andrew Gallant " ]; @@ -16108,6 +16836,7 @@ rec { version = "0.3.1"; edition = "2018"; sha256 = "03hbfrnvqqdchb5kgxyavb9jabwza0dmh2vw5kg0dq8rxl57d9xz"; + libPath = "src\\lib.rs"; authors = [ "Sean McArthur " ]; @@ -16124,6 +16853,7 @@ rec { version = "0.11.1+wasi-snapshot-preview1"; edition = "2018"; sha256 = "0jx49r7nbkbhyfrfyhz0bm4817yrnxgd3jiwwwfv0zl439jyrwyc"; + libPath = "src\\lib.rs"; authors = [ "The Cranelift Project Developers" ]; @@ -16140,6 +16870,7 @@ rec { version = "1.0.1+wasi-0.2.4"; edition = "2021"; sha256 = "1rsqmpspwy0zja82xx7kbkbg9fv34a4a2if3sbd76dy64a244qh5"; + libPath = "src\\lib.rs"; dependencies = [ { name = "wit-bindgen"; @@ -16160,6 +16891,7 @@ rec { version = "0.1.0"; edition = "2018"; sha256 = "0nw5h9nmcl4fyf4j5d4mfdjfgvwi1cakpi349wc4zrr59wxxinmq"; + libPath = "src\\lib.rs"; }; "wasm-bindgen" = rec { @@ -16168,6 +16900,7 @@ rec { edition = "2021"; sha256 = "0b8f4l6pqm0bz0lj5xgwmchb6977n71vmh7srd0axwg93b011nn1"; libName = "wasm_bindgen"; + libPath = "src\\lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -16219,6 +16952,7 @@ rec { edition = "2021"; sha256 = "069vnhhn2j4w2gwd8rch6g8d3iwkrgi45fas6i3qm7glcrd9l737"; libName = "wasm_bindgen_backend"; + libPath = "src\\lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -16259,6 +16993,7 @@ rec { edition = "2021"; sha256 = "0p5c10vfd7p7c607x3cgyfw9h77z1k33d6zzw2x77k3qwi0qs0vy"; libName = "wasm_bindgen_futures"; + libPath = "src\\lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -16305,6 +17040,7 @@ rec { sha256 = "06d1m5bg272h6jabq0snm7c50fifjz6r20f5hqlmz7y5wivh99kw"; procMacro = true; libName = "wasm_bindgen_macro"; + libPath = "src\\lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -16328,6 +17064,7 @@ rec { edition = "2021"; sha256 = "1mr18kx7ima1pmsqlkk982q4a0vf3r8s1x6901jb59sd1prd41wz"; libName = "wasm_bindgen_macro_support"; + libPath = "src\\lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -16365,6 +17102,7 @@ rec { links = "wasm_bindgen"; sha256 = "1la1xj9v3gmawnlyi7lc3mb3xi447r6frb98hi2fb9m1nb47vmms"; libName = "wasm_bindgen_shared"; + libPath = "src\\lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -16382,6 +17120,7 @@ rec { edition = "2021"; sha256 = "0871ifd79ni9813sp5amk7wb3avznkijlsly2ap4r9r4m4bw8rwk"; libName = "web_sys"; + libPath = "src\\lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -16867,6 +17606,7 @@ rec { edition = "2021"; sha256 = "1fx05yqx83dhx628wb70fyy10yjfq1jpl20qfqhdkymi13rq0ras"; libName = "web_time"; + libPath = "src\\lib.rs"; dependencies = [ { name = "js-sys"; @@ -16890,6 +17630,7 @@ rec { edition = "2021"; sha256 = "1f49w0s7f3fgczvjri179wh2a9g8jpkmdi5bi5l8p7ylsb031c9j"; libName = "webpki_roots"; + libPath = "src\\lib.rs"; dependencies = [ { name = "rustls-pki-types"; @@ -16905,6 +17646,7 @@ rec { version = "1.6.1"; edition = "2018"; sha256 = "0zg9sz669vhqyxysn4lymnianj29jxs2vl6k2lqcl0kp0yslsjjx"; + libPath = "src\\lib.rs"; dependencies = [ { name = "libredox"; @@ -16936,6 +17678,7 @@ rec { version = "0.3.9"; edition = "2015"; sha256 = "06gl025x418lchw1wxj64ycr7gha83m44cjr5sarhynd9xkrm0sw"; + libPath = "src\\lib.rs"; authors = [ "Peter Atashian " ]; @@ -16962,6 +17705,7 @@ rec { edition = "2015"; sha256 = "1dmpa6mvcvzz16zg6d5vrfy4bxgg541wxrcip7cnshi06v38ffxc"; libName = "winapi_i686_pc_windows_gnu"; + libPath = "src\\lib.rs"; authors = [ "Peter Atashian " ]; @@ -16973,6 +17717,7 @@ rec { edition = "2021"; sha256 = "08hdl7mkll7pz8whg869h58c1r9y7in0w0pk8fm24qc77k0b39y2"; libName = "winapi_util"; + libPath = "src\\lib.rs"; authors = [ "Andrew Gallant " ]; @@ -16992,6 +17737,7 @@ rec { edition = "2015"; sha256 = "0gqq64czqb64kskjryj8isp62m2sgvx25yyj3kpc2myh85w24bki"; libName = "winapi_x86_64_pc_windows_gnu"; + libPath = "src\\lib.rs"; authors = [ "Peter Atashian " ]; @@ -17003,6 +17749,7 @@ rec { edition = "2021"; sha256 = "1swxpv1a8qvn3bkxv8cn663238h2jccq35ff3nsj61jdsca3ms5q"; libName = "windows_core"; + libPath = "src\\lib.rs"; dependencies = [ { name = "windows-implement"; @@ -17043,6 +17790,7 @@ rec { sha256 = "1psxhmklzcf3wjs4b8qb42qb6znvc142cb5pa74rsyxm1822wgh5"; procMacro = true; libName = "windows_implement"; + libPath = "src\\lib.rs"; dependencies = [ { name = "proc-macro2"; @@ -17070,6 +17818,7 @@ rec { sha256 = "0n73cwrn4247d0axrk7gjp08p34x1723483jxjxjdfkh4m56qc9z"; procMacro = true; libName = "windows_interface"; + libPath = "src\\lib.rs"; dependencies = [ { name = "proc-macro2"; @@ -17096,6 +17845,7 @@ rec { edition = "2021"; sha256 = "12kr1p46dbhpijr4zbwr2spfgq8i8c5x55mvvfmyl96m01cx4sjy"; libName = "windows_link"; + libPath = "src\\lib.rs"; authors = [ "Microsoft" ]; @@ -17107,6 +17857,7 @@ rec { edition = "2021"; sha256 = "1rag186yfr3xx7piv5rg8b6im2dwcf8zldiflvb22xbzwli5507h"; libName = "windows_link"; + libPath = "src\\lib.rs"; }; "windows-result" = rec { @@ -17115,6 +17866,7 @@ rec { edition = "2021"; sha256 = "1d9yhmrmmfqh56zlj751s5wfm9a2aa7az9rd7nn5027nxa4zm0bp"; libName = "windows_result"; + libPath = "src\\lib.rs"; dependencies = [ { name = "windows-link"; @@ -17133,6 +17885,7 @@ rec { edition = "2021"; sha256 = "14bhng9jqv4fyl7lqjz3az7vzh8pw0w4am49fsqgcz67d67x0dvq"; libName = "windows_strings"; + libPath = "src\\lib.rs"; dependencies = [ { name = "windows-link"; @@ -17151,6 +17904,7 @@ rec { edition = "2021"; sha256 = "0gd3v4ji88490zgb6b5mq5zgbvwv7zx1ibn8v3x83rwcdbryaar8"; libName = "windows_sys"; + libPath = "src\\lib.rs"; authors = [ "Microsoft" ]; @@ -17399,6 +18153,7 @@ rec { edition = "2021"; sha256 = "0fw5672ziw8b3zpmnbp9pdv1famk74f1l9fcbc3zsrzdg56vqf0y"; libName = "windows_sys"; + libPath = "src\\lib.rs"; authors = [ "Microsoft" ]; @@ -17658,6 +18413,7 @@ rec { edition = "2021"; sha256 = "1jrbc615ihqnhjhxplr2kw7rasrskv9wj3lr80hgfd42sbj01xgj"; libName = "windows_sys"; + libPath = "src\\lib.rs"; authors = [ "Microsoft" ]; @@ -17923,6 +18679,7 @@ rec { edition = "2021"; sha256 = "1z7k3y9b6b5h52kid57lvmvm05362zv1v8w0gc7xyv5xphlp44xf"; libName = "windows_sys"; + libPath = "src\\lib.rs"; dependencies = [ { name = "windows-link"; @@ -18185,6 +18942,7 @@ rec { edition = "2021"; sha256 = "0wwrx625nwlfp7k93r2rra568gad1mwd888h1jwnl0vfg5r4ywlv"; libName = "windows_targets"; + libPath = "src\\lib.rs"; authors = [ "Microsoft" ]; @@ -18238,6 +18996,7 @@ rec { edition = "2021"; sha256 = "1wv9j2gv3l6wj3gkw5j1kr6ymb5q6dfc42yvydjhv3mqa7szjia9"; libName = "windows_targets"; + libPath = "src\\lib.rs"; dependencies = [ { name = "windows-link"; @@ -18293,6 +19052,7 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "1lrcq38cr2arvmz19v32qaggvj8bh1640mdm9c2fr877h0hn591j"; + libPath = "src\\lib.rs"; authors = [ "Microsoft" ]; @@ -18303,6 +19063,7 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "0lqvdm510mka9w26vmga7hbkmrw9glzc90l4gya5qbxlm1pl3n59"; + libPath = "src\\lib.rs"; }; "windows_aarch64_msvc 0.52.6" = rec { @@ -18310,6 +19071,7 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "0sfl0nysnz32yyfh773hpi49b1q700ah6y7sacmjbqjjn5xjmv09"; + libPath = "src\\lib.rs"; authors = [ "Microsoft" ]; @@ -18320,6 +19082,7 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "01jh2adlwx043rji888b22whx4bm8alrk3khjpik5xn20kl85mxr"; + libPath = "src\\lib.rs"; }; "windows_i686_gnu 0.52.6" = rec { @@ -18327,6 +19090,7 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "02zspglbykh1jh9pi7gn8g1f97jh1rrccni9ivmrfbl0mgamm6wf"; + libPath = "src\\lib.rs"; authors = [ "Microsoft" ]; @@ -18337,6 +19101,7 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "18wkcm82ldyg4figcsidzwbg1pqd49jpm98crfz0j7nqd6h6s3ln"; + libPath = "src\\lib.rs"; }; "windows_i686_gnullvm 0.52.6" = rec { @@ -18344,6 +19109,7 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "0rpdx1537mw6slcpqa0rm3qixmsb79nbhqy5fsm3q2q9ik9m5vhf"; + libPath = "src\\lib.rs"; authors = [ "Microsoft" ]; @@ -18354,6 +19120,7 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "030qaxqc4salz6l4immfb6sykc6gmhyir9wzn2w8mxj8038mjwzs"; + libPath = "src\\lib.rs"; }; "windows_i686_msvc 0.52.6" = rec { @@ -18361,6 +19128,7 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "0rkcqmp4zzmfvrrrx01260q3xkpzi6fzi2x2pgdcdry50ny4h294"; + libPath = "src\\lib.rs"; authors = [ "Microsoft" ]; @@ -18371,6 +19139,7 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "1hi6scw3mn2pbdl30ji5i4y8vvspb9b66l98kkz350pig58wfyhy"; + libPath = "src\\lib.rs"; }; "windows_x86_64_gnu 0.52.6" = rec { @@ -18378,6 +19147,7 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "0y0sifqcb56a56mvn7xjgs8g43p33mfqkd8wj1yhrgxzma05qyhl"; + libPath = "src\\lib.rs"; authors = [ "Microsoft" ]; @@ -18388,6 +19158,7 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "16d4yiysmfdlsrghndr97y57gh3kljkwhfdbcs05m1jasz6l4f4w"; + libPath = "src\\lib.rs"; }; "windows_x86_64_gnullvm 0.52.6" = rec { @@ -18395,6 +19166,7 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "03gda7zjx1qh8k9nnlgb7m3w3s1xkysg55hkd1wjch8pqhyv5m94"; + libPath = "src\\lib.rs"; authors = [ "Microsoft" ]; @@ -18405,6 +19177,7 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "1qbspgv4g3q0vygkg8rnql5c6z3caqv38japiynyivh75ng1gyhg"; + libPath = "src\\lib.rs"; }; "windows_x86_64_msvc 0.52.6" = rec { @@ -18412,6 +19185,7 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "1v7rb5cibyzx8vak29pdrk8nx9hycsjs4w0jgms08qk49jl6v7sq"; + libPath = "src\\lib.rs"; authors = [ "Microsoft" ]; @@ -18422,6 +19196,7 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "0l6npq76vlq4ksn4bwsncpr8508mk0gmznm6wnhjg95d19gzzfyn"; + libPath = "src\\lib.rs"; }; "winnow" = rec { @@ -18429,6 +19204,7 @@ rec { version = "0.7.13"; edition = "2021"; sha256 = "1krrjc1wj2vx0r57m9nwnlc1zrhga3fq41d8w9hysvvqb5mj7811"; + libPath = "src\\lib.rs"; dependencies = [ { name = "memchr"; @@ -18452,6 +19228,7 @@ rec { edition = "2021"; sha256 = "0ngysw50gp2wrrfxbwgp6dhw1g6sckknsn3wm7l00vaf7n48aypi"; libName = "wit_bindgen"; + libPath = "src\\lib.rs"; authors = [ "Alex Crichton " ]; @@ -18468,6 +19245,7 @@ rec { version = "0.6.1"; edition = "2021"; sha256 = "1fx29zncvbrqzgz7li88vzdm8zvgwgwy2r9bnjqxya09pfwi0bza"; + libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -18480,6 +19258,7 @@ rec { version = "0.5.1"; edition = "2018"; sha256 = "1vdrfy7i2bznnzjdl9vvrzljvs4s3qm8bnlgqwln6a941gy61wq5"; + libPath = "src\\lib.rs"; authors = [ "myrrlyn " ]; @@ -18502,6 +19281,7 @@ rec { version = "1.0.1"; edition = "2021"; sha256 = "0jdh55jyv0dpd38ij4qh60zglbw9aa8wafqai6m0wa7xaxk3mrfg"; + libPath = "src\\lib.rs"; authors = [ "Sergio Benitez " ]; @@ -18520,6 +19300,7 @@ rec { version = "0.8.0"; edition = "2021"; sha256 = "1k4mfr48vgi7wh066y11b7v1ilakghlnlhw9snzz8vi2p00vnhaz"; + libPath = "src\\lib.rs"; authors = [ "Manish Goregaokar " ]; @@ -18571,6 +19352,7 @@ rec { sha256 = "1dha5jrjz9jaq8kmxq1aag86b98zbnm9lyjrihy5sv716sbkrniq"; procMacro = true; libName = "yoke_derive"; + libPath = "src\\lib.rs"; authors = [ "Manish Goregaokar " ]; @@ -18600,6 +19382,7 @@ rec { version = "0.8.27"; edition = "2021"; sha256 = "0b1870gf2zzlckca69v2k4mqwmf8yh2li37qldnzvvd3by58g508"; + libPath = "src\\lib.rs"; authors = [ "Joshua Liebow-Feeser " "Jack Wrenn " @@ -18638,6 +19421,7 @@ rec { sha256 = "0c9qrylm2p55dvaplxsl24ma48add9qk4y0d6kjbkllaqvcvill8"; procMacro = true; libName = "zerocopy_derive"; + libPath = "src\\lib.rs"; authors = [ "Joshua Liebow-Feeser " "Jack Wrenn " @@ -18664,6 +19448,7 @@ rec { version = "0.1.6"; edition = "2021"; sha256 = "19dyky67zkjichsb7ykhv0aqws3q0jfvzww76l66c19y6gh45k2h"; + libPath = "src\\lib.rs"; authors = [ "Manish Goregaokar " ]; @@ -18688,6 +19473,7 @@ rec { sha256 = "00l5niw7c1b0lf1vhvajpjmcnbdp2vn96jg4nmkhq2db0rp5s7np"; procMacro = true; libName = "zerofrom_derive"; + libPath = "src\\lib.rs"; authors = [ "Manish Goregaokar " ]; @@ -18717,6 +19503,7 @@ rec { version = "1.8.2"; edition = "2021"; sha256 = "1l48zxgcv34d7kjskr610zqsm6j2b4fcr2vfh9jm9j1jgvk58wdr"; + libPath = "src\\lib.rs"; authors = [ "The RustCrypto Project Developers" ]; @@ -18734,6 +19521,7 @@ rec { version = "0.2.2"; edition = "2021"; sha256 = "15gmka7vw5k0d24s0vxgymr2j6zn2iwl12wpmpnpjgsqg3abpw1n"; + libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -18772,6 +19560,7 @@ rec { version = "0.11.4"; edition = "2021"; sha256 = "0fz7j1ns8d86m2fqg2a4bzi5gnh5892bxv4kcr9apwc6a3ajpap7"; + libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -18818,6 +19607,7 @@ rec { sha256 = "13zms8hj7vzpfswypwggyfr4ckmyc7v3di49pmj8r1qcz9z275jv"; procMacro = true; libName = "zerovec_derive"; + libPath = "src\\lib.rs"; authors = [ "Manish Goregaokar " ]; diff --git a/academy_config/src/lib.rs b/academy_config/src/lib.rs index e7e63568..cde41935 100644 --- a/academy_config/src/lib.rs +++ b/academy_config/src/lib.rs @@ -361,11 +361,6 @@ mod tests { "email.smtp_url = \"\"", "email.from = \"Test \"", "jwt.secret = \"\"", - "daily_rewards.enable = false", - "daily_rewards.coins.arrival = 20", - "daily_rewards.coins.lecture = 20", - "daily_rewards.coins.practice = 10", - "daily_rewards.coins.lab = 30", "contact.email = \"test@example.com\"", "recaptcha.sitekey = \"\"", "recaptcha.secret = \"\"", diff --git a/academy_core/daily_rewards/impl/src/tests/ready.rs b/academy_core/daily_rewards/impl/src/tests/ready.rs index b11823e0..3ef1ae84 100644 --- a/academy_core/daily_rewards/impl/src/tests/ready.rs +++ b/academy_core/daily_rewards/impl/src/tests/ready.rs @@ -102,7 +102,7 @@ async fn get_today_marks_practice_and_lab_ready() { let shared_entries = Arc::new(Mutex::new(entries_map)); let mut repo = MockDailyRewardRepository::new(); - let list_entries = shared_entries.clone(); + let list_entries = Arc::clone(&shared_entries); repo.expect_list_by_user_and_date() .once() .with( @@ -122,7 +122,7 @@ async fn get_today_marks_practice_and_lab_ready() { repo.expect_upsert_entry().never(); - let mark_ready_entries = shared_entries.clone(); + let mark_ready_entries = Arc::clone(&shared_entries); repo.expect_mark_ready() .times(2) .returning(move |_, params: DailyRewardMarkReady| { @@ -152,16 +152,18 @@ async fn get_today_marks_practice_and_lab_ready() { last_detected_at: lab_ready_at, activity_sample: Some(json!({"taskId": "lab"})), }; - let mut snapshot = DailyRewardActivitySnapshot::default(); - snapshot.practice = DailyRewardActivityState { - detected: Some(practice_activity), - pending_sample: None, - unavailable_reason: None, - }; - snapshot.lab = DailyRewardActivityState { - detected: Some(lab_activity), - pending_sample: None, - unavailable_reason: None, + let snapshot = DailyRewardActivitySnapshot { + practice: DailyRewardActivityState { + detected: Some(practice_activity), + pending_sample: None, + unavailable_reason: None, + }, + lab: DailyRewardActivityState { + detected: Some(lab_activity), + pending_sample: None, + unavailable_reason: None, + }, + ..Default::default() }; Box::pin(future::ready(Ok(snapshot))) }); diff --git a/dump.rdb b/dump.rdb deleted file mode 100644 index 978d8ad569cf947f8ee513b593be4c802fbf047f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88 zcmWG?b@2=~FfcUw#aWb^l3A=b%7 From 440ada74aea07ccbbc661da5992dec0ddbffc56a Mon Sep 17 00:00:00 2001 From: Morpheus Date: Sun, 2 Nov 2025 18:50:59 +0100 Subject: [PATCH 05/13] insert recommendations --- Cargo.nix | 458 ++++++++------------- Cargo.toml | 8 +- academy_core/daily_rewards/impl/Cargo.toml | 6 +- academy_persistence/postgres/Cargo.toml | 12 +- 4 files changed, 183 insertions(+), 301 deletions(-) diff --git a/Cargo.nix b/Cargo.nix index c477018e..5493afc4 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -4531,9 +4531,9 @@ rec { }; "aho-corasick" = rec { crateName = "aho-corasick"; - version = "1.1.3"; + version = "1.1.4"; edition = "2021"; - sha256 = "05mrpkvdgp5d20y2p989f187ry9diliijgwrs254fs9s1m1x6q4f"; + sha256 = "00a32wb2h07im3skkikc495jvncf62jl6s96vwc7bhi70h9imlyx"; libName = "aho_corasick"; libPath = "src\\lib.rs"; authors = [ @@ -4845,6 +4845,30 @@ rec { }; resolvedDefaultFeatures = [ "default" "std" ]; }; + "ar_archive_writer" = rec { + crateName = "ar_archive_writer"; + version = "0.2.0"; + edition = "2021"; + sha256 = "16ikh370y20xivq73hjzq9dz6zw4pysnkkx0mpbykrbg9f4nkhph"; + libPath = "src\\lib.rs"; + dependencies = [ + { + name = "object"; + packageId = "object 0.32.2"; + usesDefaultFeatures = false; + features = [ "std" "read" ]; + } + ]; + devDependencies = [ + { + name = "object"; + packageId = "object 0.32.2"; + usesDefaultFeatures = false; + features = [ "write" "xcoff" ]; + } + ]; + + }; "argon2" = rec { crateName = "argon2"; version = "0.5.3"; @@ -5331,7 +5355,7 @@ rec { } { name = "object"; - packageId = "object"; + packageId = "object 0.37.3"; usesDefaultFeatures = false; target = { target, features }: (!((target."windows" or false) && ("msvc" == target."env" or null) && (!("uwp" == target."vendor" or null)))); features = [ "read_core" "elf" "macho" "pe" "xcoff" "unaligned" "archive" ]; @@ -6133,9 +6157,9 @@ rec { }; "clap_complete" = rec { crateName = "clap_complete"; - version = "4.5.59"; + version = "4.5.60"; edition = "2021"; - sha256 = "0g64s6ws3kkzh74fxwp7r8qlvb1q1nscsk6nrsb1cqylvix4hj13"; + sha256 = "0wfrf9rfz8qhb07716i2hmhh1jgai8lmlfx3vy8l4nlwfdbjhq4f"; libPath = "src\\lib.rs"; dependencies = [ { @@ -8536,9 +8560,9 @@ rec { }; "icu_collections" = rec { crateName = "icu_collections"; - version = "2.0.0"; + version = "2.1.1"; edition = "2021"; - sha256 = "0izfgypv1hsxlz1h8fc2aak641iyvkak16aaz5b4aqg3s3sp4010"; + sha256 = "0hsblchsdl64q21qwrs4hvc2672jrf466zivbj1bwyv606bn8ssc"; libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" @@ -8575,16 +8599,16 @@ rec { } ]; features = { - "alloc" = [ "zerovec/alloc" ]; + "alloc" = [ "serde?/alloc" "zerovec/alloc" ]; "databake" = [ "dep:databake" "zerovec/databake" ]; "serde" = [ "dep:serde" "zerovec/serde" "potential_utf/serde" "alloc" ]; }; }; "icu_locale_core" = rec { crateName = "icu_locale_core"; - version = "2.0.0"; + version = "2.1.1"; edition = "2021"; - sha256 = "02phv7vwhyx6vmaqgwkh2p4kc2kciykv2px6g4h8glxfrh02gphc"; + sha256 = "1djvdc2f5ylmp1ymzv4gcnmq1s4hqfim9nxlcm173lsd01hpifpd"; libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" @@ -8599,13 +8623,11 @@ rec { name = "litemap"; packageId = "litemap"; usesDefaultFeatures = false; - features = [ "alloc" ]; } { name = "tinystr"; packageId = "tinystr"; usesDefaultFeatures = false; - features = [ "alloc" ]; } { name = "writeable"; @@ -8620,27 +8642,23 @@ rec { } ]; features = { + "alloc" = [ "litemap/alloc" "tinystr/alloc" "writeable/alloc" "serde?/alloc" ]; "databake" = [ "dep:databake" "alloc" ]; - "serde" = [ "dep:serde" "tinystr/serde" "alloc" ]; + "serde" = [ "dep:serde" "tinystr/serde" ]; "zerovec" = [ "dep:zerovec" "tinystr/zerovec" ]; }; resolvedDefaultFeatures = [ "zerovec" ]; }; "icu_normalizer" = rec { crateName = "icu_normalizer"; - version = "2.0.0"; + version = "2.1.1"; edition = "2021"; - sha256 = "0ybrnfnxx4sf09gsrxri8p48qifn54il6n3dq2xxgx4dw7l80s23"; + sha256 = "16dmn5596la2qm0r3vih0bzjfi0vx9a20yqjha6r1y3vnql8hv2z"; libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" ]; dependencies = [ - { - name = "displaydoc"; - packageId = "displaydoc"; - usesDefaultFeatures = false; - } { name = "icu_collections"; packageId = "icu_collections"; @@ -8680,17 +8698,16 @@ rec { "default" = [ "compiled_data" "utf8_iter" "utf16_iter" ]; "icu_properties" = [ "dep:icu_properties" ]; "serde" = [ "dep:serde" "icu_collections/serde" "zerovec/serde" "icu_properties?/serde" "icu_provider/serde" ]; - "utf16_iter" = [ "dep:utf16_iter" "write16" ]; + "utf16_iter" = [ "dep:utf16_iter" "dep:write16" ]; "utf8_iter" = [ "dep:utf8_iter" ]; - "write16" = [ "dep:write16" ]; }; resolvedDefaultFeatures = [ "compiled_data" ]; }; "icu_normalizer_data" = rec { crateName = "icu_normalizer_data"; - version = "2.0.0"; + version = "2.1.1"; edition = "2021"; - sha256 = "1lvjpzxndyhhjyzd1f6vi961gvzhj244nribfpdqxjdgjdl0s880"; + sha256 = "02jnzizg6q75m41l6c13xc7nkc5q8yr1b728dcgfhpzw076wrvbs"; libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" @@ -8699,19 +8716,14 @@ rec { }; "icu_properties" = rec { crateName = "icu_properties"; - version = "2.0.1"; + version = "2.1.1"; edition = "2021"; - sha256 = "0az349pjg8f18lrjbdmxcpg676a7iz2ibc09d2wfz57b3sf62v01"; + sha256 = "16gvnnxr1xry6vn5275a1s0z0c8scp7gdkzqla6hqv3nawqwsgz9"; libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" ]; dependencies = [ - { - name = "displaydoc"; - packageId = "displaydoc"; - usesDefaultFeatures = false; - } { name = "icu_collections"; packageId = "icu_collections"; @@ -8734,12 +8746,6 @@ rec { packageId = "icu_provider"; usesDefaultFeatures = false; } - { - name = "potential_utf"; - packageId = "potential_utf"; - usesDefaultFeatures = false; - features = [ "zerovec" ]; - } { name = "zerotrie"; packageId = "zerotrie"; @@ -8754,20 +8760,20 @@ rec { } ]; features = { - "alloc" = [ "zerovec/alloc" "icu_collections/alloc" ]; + "alloc" = [ "zerovec/alloc" "icu_collections/alloc" "serde?/alloc" ]; "compiled_data" = [ "dep:icu_properties_data" "icu_provider/baked" ]; - "datagen" = [ "serde" "dep:databake" "potential_utf/databake" "zerovec/databake" "icu_collections/databake" "icu_locale_core/databake" "zerotrie/databake" "icu_provider/export" ]; + "datagen" = [ "serde" "dep:databake" "zerovec/databake" "icu_collections/databake" "icu_locale_core/databake" "zerotrie/databake" "icu_provider/export" ]; "default" = [ "compiled_data" ]; - "serde" = [ "dep:serde" "icu_locale_core/serde" "potential_utf/serde" "zerovec/serde" "icu_collections/serde" "icu_provider/serde" "zerotrie/serde" ]; + "serde" = [ "dep:serde" "icu_locale_core/serde" "zerovec/serde" "icu_collections/serde" "icu_provider/serde" "zerotrie/serde" ]; "unicode_bidi" = [ "dep:unicode-bidi" ]; }; resolvedDefaultFeatures = [ "compiled_data" ]; }; "icu_properties_data" = rec { crateName = "icu_properties_data"; - version = "2.0.1"; + version = "2.1.1"; edition = "2021"; - sha256 = "0cnn3fkq6k88w7p86w7hsd1254s4sl783rpz4p6hlccq74a5k119"; + sha256 = "16a80p8j371jkl10x26rh9gw6d1gyl7limpc008my15v8wv5p102"; libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" @@ -8776,9 +8782,9 @@ rec { }; "icu_provider" = rec { crateName = "icu_provider"; - version = "2.0.0"; + version = "2.1.1"; edition = "2021"; - sha256 = "1bz5v02gxv1i06yhdhs2kbwxkw3ny9r2vvj9j288fhazgfi0vj03"; + sha256 = "0576b7dizgyhpfa74kacv86y4g1p7v5ffd6c56kf1q82rvq2r5l5"; libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" @@ -8794,32 +8800,23 @@ rec { packageId = "icu_locale_core"; usesDefaultFeatures = false; } - { - name = "stable_deref_trait"; - packageId = "stable_deref_trait"; - usesDefaultFeatures = false; - } - { - name = "tinystr"; - packageId = "tinystr"; - usesDefaultFeatures = false; - } { name = "writeable"; packageId = "writeable"; + optional = true; usesDefaultFeatures = false; } { name = "yoke"; packageId = "yoke"; usesDefaultFeatures = false; - features = [ "alloc" "derive" ]; + features = [ "derive" ]; } { name = "zerofrom"; packageId = "zerofrom"; usesDefaultFeatures = false; - features = [ "alloc" "derive" ]; + features = [ "derive" ]; } { name = "zerotrie"; @@ -8835,8 +8832,8 @@ rec { } ]; features = { - "alloc" = [ "icu_locale_core/alloc" "zerovec/alloc" "zerotrie/alloc" ]; - "baked" = [ "zerotrie" ]; + "alloc" = [ "icu_locale_core/alloc" "serde?/alloc" "yoke/alloc" "zerofrom/alloc" "zerovec/alloc" "zerotrie?/alloc" "dep:stable_deref_trait" "dep:writeable" ]; + "baked" = [ "dep:zerotrie" "dep:writeable" ]; "deserialize_bincode_1" = [ "serde" "dep:bincode" "std" ]; "deserialize_json" = [ "serde" "dep:serde_json" ]; "deserialize_postcard_1" = [ "serde" "dep:postcard" ]; @@ -8844,9 +8841,8 @@ rec { "logging" = [ "dep:log" ]; "serde" = [ "dep:serde" "yoke/serde" ]; "std" = [ "alloc" ]; - "zerotrie" = [ "dep:zerotrie" ]; }; - resolvedDefaultFeatures = [ "baked" "zerotrie" ]; + resolvedDefaultFeatures = [ "baked" ]; }; "ident_case" = rec { crateName = "ident_case"; @@ -9157,9 +9153,9 @@ rec { }; "js-sys" = rec { crateName = "js-sys"; - version = "0.3.81"; + version = "0.3.82"; edition = "2021"; - sha256 = "01ckbf16iwh7qj92fax9zh8vf2y9sk60cli6999cn7a1jxx96j7c"; + sha256 = "0rcfkz7r28r01a8m6n2q13aglm44q5g6gzsw5nmjmninrk4fw4dh"; libName = "js_sys"; libPath = "src\\lib.rs"; authors = [ @@ -9558,9 +9554,9 @@ rec { }; "litemap" = rec { crateName = "litemap"; - version = "0.8.0"; + version = "0.8.1"; edition = "2021"; - sha256 = "0mlrlskwwhirxk3wsz9psh6nxcy491n0dh8zl02qgj0jzpssw7i4"; + sha256 = "0xsy8pfp9s802rsj1bq2ys2kbk1g36w5dr3gkfip7gphb5x60wv3"; libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" @@ -9568,11 +9564,10 @@ rec { features = { "databake" = [ "dep:databake" ]; "default" = [ "alloc" ]; - "serde" = [ "dep:serde" "alloc" ]; + "serde" = [ "dep:serde_core" "alloc" ]; "testing" = [ "alloc" ]; "yoke" = [ "dep:yoke" ]; }; - resolvedDefaultFeatures = [ "alloc" ]; }; "lock_api" = rec { crateName = "lock_api"; @@ -10183,7 +10178,40 @@ rec { }; resolvedDefaultFeatures = [ "reqwest" "rustls-tls" ]; }; - "object" = rec { + "object 0.32.2" = rec { + crateName = "object"; + version = "0.32.2"; + edition = "2018"; + sha256 = "0hc4cjwyngiy6k51hlzrlsxgv5z25vv7c2cp0ky1lckfic0259m6"; + libPath = "src\\lib.rs"; + dependencies = [ + { + name = "memchr"; + packageId = "memchr"; + usesDefaultFeatures = false; + } + ]; + features = { + "all" = [ "read" "write" "std" "compression" "wasm" ]; + "alloc" = [ "dep:alloc" ]; + "compiler_builtins" = [ "dep:compiler_builtins" ]; + "compression" = [ "dep:flate2" "dep:ruzstd" "std" ]; + "core" = [ "dep:core" ]; + "default" = [ "read" "compression" ]; + "doc" = [ "read_core" "write_std" "std" "compression" "archive" "coff" "elf" "macho" "pe" "wasm" "xcoff" ]; + "pe" = [ "coff" ]; + "read" = [ "read_core" "archive" "coff" "elf" "macho" "pe" "xcoff" "unaligned" ]; + "rustc-dep-of-std" = [ "core" "compiler_builtins" "alloc" "memchr/rustc-dep-of-std" ]; + "std" = [ "memchr/std" ]; + "unstable-all" = [ "all" "unstable" ]; + "wasm" = [ "dep:wasmparser" ]; + "write" = [ "write_std" "coff" "elf" "macho" "pe" "xcoff" ]; + "write_core" = [ "dep:crc32fast" "dep:indexmap" "dep:hashbrown" ]; + "write_std" = [ "write_core" "std" "indexmap?/std" "crc32fast?/std" ]; + }; + resolvedDefaultFeatures = [ "archive" "coff" "elf" "macho" "pe" "read" "read_core" "std" "unaligned" "xcoff" ]; + }; + "object 0.37.3" = rec { crateName = "object"; version = "0.37.3"; edition = "2018"; @@ -11117,9 +11145,9 @@ rec { }; "potential_utf" = rec { crateName = "potential_utf"; - version = "0.1.3"; + version = "0.1.4"; edition = "2021"; - sha256 = "12mhwvhpvvim6xqp6ifgkh1sniv9j2cmid6axn10fnjvpsnikpw4"; + sha256 = "0xxg0pkfpq299wvwln409z4fk80rbv55phh3f1jhjajy5x1ljfdp"; libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" @@ -11133,10 +11161,11 @@ rec { } ]; features = { - "alloc" = [ "serde?/alloc" "zerovec?/alloc" ]; + "alloc" = [ "serde_core?/alloc" "writeable/alloc" "zerovec?/alloc" ]; "databake" = [ "dep:databake" ]; - "serde" = [ "dep:serde" ]; - "writeable" = [ "dep:writeable" "alloc" ]; + "default" = [ "alloc" ]; + "serde" = [ "dep:serde_core" ]; + "writeable" = [ "dep:writeable" ]; "zerovec" = [ "dep:zerovec" ]; }; resolvedDefaultFeatures = [ "zerovec" ]; @@ -11351,14 +11380,18 @@ rec { }; "psm" = rec { crateName = "psm"; - version = "0.1.27"; + version = "0.1.28"; edition = "2021"; - sha256 = "075v7pcl538avywd81irir8v05isr368pccggm4lidskhhlcsvz6"; + sha256 = "00ad2j9vbsy79civwnc86wylgibpfckjzi8vhp1gvnmpqgnjy7yi"; libPath = "src\\lib.rs"; authors = [ "Simonas Kazlauskas " ]; buildDependencies = [ + { + name = "ar_archive_writer"; + packageId = "ar_archive_writer"; + } { name = "cc"; packageId = "cc"; @@ -13211,9 +13244,9 @@ rec { }; "rustls-pki-types" = rec { crateName = "rustls-pki-types"; - version = "1.12.0"; + version = "1.13.0"; edition = "2021"; - sha256 = "0yawbdpix8jif6s8zj1p2hbyb7y3bj66fhx0y7hyf4qh4964m6i2"; + sha256 = "0yjzsnpv1sjbnfxbbmrnyimd23jip48nav6l9hr1rjd06vcjl64l"; libName = "rustls_pki_types"; libPath = "src\\lib.rs"; dependencies = [ @@ -13240,9 +13273,9 @@ rec { }; "rustls-webpki" = rec { crateName = "rustls-webpki"; - version = "0.103.7"; + version = "0.103.8"; edition = "2021"; - sha256 = "1gqlsd0yqiqch97g0wbsnbmyrp75j6nbzfpf8dmhxa78j50ky2z1"; + sha256 = "0lpymb84bi5d2pm017n39nbiaa5cd046hgz06ir29ql6a8pzmz9g"; libName = "webpki"; libPath = "src\\lib.rs"; dependencies = [ @@ -14521,7 +14554,6 @@ rec { "default" = [ "std" ]; "std" = [ "alloc" ]; }; - resolvedDefaultFeatures = [ "alloc" ]; }; "stacker" = rec { crateName = "stacker"; @@ -14810,9 +14842,9 @@ rec { }; "tera" = rec { crateName = "tera"; - version = "1.20.0"; + version = "1.20.1"; edition = "2018"; - sha256 = "1vnj9imw2h9szkd1izsrhwrc9jvazvdsp84x65wg2rg88ldqb7db"; + sha256 = "08k743nwb2mykpbwnipa1k3v8b1igg39pmdc7ggk4b8z5354n078"; libPath = "src\\lib.rs"; authors = [ "Vincent Prouillet " @@ -14879,8 +14911,8 @@ rec { optional = true; } { - name = "unic-segment"; - packageId = "unic-segment"; + name = "unicode-segmentation"; + packageId = "unicode-segmentation"; } ]; features = { @@ -15138,9 +15170,9 @@ rec { }; "tinystr" = rec { crateName = "tinystr"; - version = "0.8.1"; + version = "0.8.2"; edition = "2021"; - sha256 = "12sc6h3hnn6x78iycm5v6wrs2xhxph0ydm43yyn7gdfw8l8nsksx"; + sha256 = "0sa8z88axdsf088hgw5p4xcyi6g3w3sgbb6qdp81bph9bk2fkls2"; libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" @@ -15159,13 +15191,13 @@ rec { } ]; features = { - "alloc" = [ "zerovec?/alloc" ]; + "alloc" = [ "serde_core?/alloc" "zerovec?/alloc" ]; "databake" = [ "dep:databake" ]; "default" = [ "alloc" ]; - "serde" = [ "dep:serde" ]; + "serde" = [ "dep:serde_core" ]; "zerovec" = [ "dep:zerovec" ]; }; - resolvedDefaultFeatures = [ "alloc" "zerovec" ]; + resolvedDefaultFeatures = [ "zerovec" ]; }; "tinyvec" = rec { crateName = "tinyvec"; @@ -16241,116 +16273,6 @@ rec { } ]; - }; - "unic-char-property" = rec { - crateName = "unic-char-property"; - version = "0.9.0"; - edition = "2018"; - sha256 = "08g21dn3wwix3ycfl0vrbahn0835nv2q3swm8wms0vwvgm07mid8"; - libName = "unic_char_property"; - libPath = "src\\lib.rs"; - authors = [ - "The UNIC Project Developers" - ]; - dependencies = [ - { - name = "unic-char-range"; - packageId = "unic-char-range"; - } - ]; - - }; - "unic-char-range" = rec { - crateName = "unic-char-range"; - version = "0.9.0"; - edition = "2018"; - sha256 = "1g0z7iwvjhqspi6194zsff8vy6i3921hpqcrp3v1813hbwnh5603"; - libName = "unic_char_range"; - libPath = "src\\lib.rs"; - authors = [ - "The UNIC Project Developers" - ]; - features = { - "rayon" = [ "dep:rayon" ]; - "unstable" = [ "exact-size-is-empty" "fused" "trusted-len" ]; - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "unic-common" = rec { - crateName = "unic-common"; - version = "0.9.0"; - edition = "2018"; - sha256 = "1g1mm954m0zr497dl4kx3vr09yaly290zs33bbl4wrbaba1gzmw0"; - libName = "unic_common"; - libPath = "src\\lib.rs"; - authors = [ - "The UNIC Project Developers" - ]; - features = { - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "unic-segment" = rec { - crateName = "unic-segment"; - version = "0.9.0"; - edition = "2018"; - sha256 = "08wgz2q6vrdvmbd23kf9pbg8cyzm5q8hq9spc4blzy2ppqk5vvg4"; - libName = "unic_segment"; - libPath = "src\\lib.rs"; - authors = [ - "The UNIC Project Developers" - ]; - dependencies = [ - { - name = "unic-ucd-segment"; - packageId = "unic-ucd-segment"; - } - ]; - - }; - "unic-ucd-segment" = rec { - crateName = "unic-ucd-segment"; - version = "0.9.0"; - edition = "2018"; - sha256 = "0027lczcg0r401g6fnzm2bq9fxhgxvri1nlryhhv8192lqic2y90"; - libName = "unic_ucd_segment"; - libPath = "src\\lib.rs"; - authors = [ - "The UNIC Project Developers" - ]; - dependencies = [ - { - name = "unic-char-property"; - packageId = "unic-char-property"; - } - { - name = "unic-char-range"; - packageId = "unic-char-range"; - } - { - name = "unic-ucd-version"; - packageId = "unic-ucd-version"; - } - ]; - - }; - "unic-ucd-version" = rec { - crateName = "unic-ucd-version"; - version = "0.9.0"; - edition = "2018"; - sha256 = "1i5hnzpfnxkp4ijfk8kvhpvj84bij575ybqx1b6hyigy6wi2zgcn"; - libName = "unic_ucd_version"; - libPath = "src\\lib.rs"; - authors = [ - "The UNIC Project Developers" - ]; - dependencies = [ - { - name = "unic-common"; - packageId = "unic-common"; - } - ]; - }; "unicode-bidi" = rec { crateName = "unicode-bidi"; @@ -16375,9 +16297,9 @@ rec { }; "unicode-ident" = rec { crateName = "unicode-ident"; - version = "1.0.20"; + version = "1.0.22"; edition = "2018"; - sha256 = "01lafj17xwizrlvn006zz8ip99hqisf77kjk0a8flfmpmrsynbj6"; + sha256 = "1x8xrz17vqi6qmkkcqr8cyf0an76ig7390j9cnqnk47zyv2gf4lk"; libName = "unicode_ident"; libPath = "src\\lib.rs"; authors = [ @@ -16896,9 +16818,9 @@ rec { }; "wasm-bindgen" = rec { crateName = "wasm-bindgen"; - version = "0.2.104"; + version = "0.2.105"; edition = "2021"; - sha256 = "0b8f4l6pqm0bz0lj5xgwmchb6977n71vmh7srd0axwg93b011nn1"; + sha256 = "0q7aqnjwl9dn5sql46nbhzz63v3q0mdp3rsv7zcvn7s1zhypk5fs"; libName = "wasm_bindgen"; libPath = "src\\lib.rs"; authors = [ @@ -16946,52 +16868,11 @@ rec { }; resolvedDefaultFeatures = [ "default" "msrv" "std" ]; }; - "wasm-bindgen-backend" = rec { - crateName = "wasm-bindgen-backend"; - version = "0.2.104"; - edition = "2021"; - sha256 = "069vnhhn2j4w2gwd8rch6g8d3iwkrgi45fas6i3qm7glcrd9l737"; - libName = "wasm_bindgen_backend"; - libPath = "src\\lib.rs"; - authors = [ - "The wasm-bindgen Developers" - ]; - dependencies = [ - { - name = "bumpalo"; - packageId = "bumpalo"; - } - { - name = "log"; - packageId = "log"; - } - { - name = "proc-macro2"; - packageId = "proc-macro2"; - } - { - name = "quote"; - packageId = "quote"; - } - { - name = "syn"; - packageId = "syn 2.0.108"; - features = [ "full" ]; - } - { - name = "wasm-bindgen-shared"; - packageId = "wasm-bindgen-shared"; - } - ]; - features = { - "extra-traits" = [ "syn/extra-traits" ]; - }; - }; "wasm-bindgen-futures" = rec { crateName = "wasm-bindgen-futures"; - version = "0.4.54"; + version = "0.4.55"; edition = "2021"; - sha256 = "0p5c10vfd7p7c607x3cgyfw9h77z1k33d6zzw2x77k3qwi0qs0vy"; + sha256 = "186l2nhznpbxcl2475dlm1pd7dfk5lqnz8frgk67qpkddh88h7sm"; libName = "wasm_bindgen_futures"; libPath = "src\\lib.rs"; authors = [ @@ -17035,9 +16916,9 @@ rec { }; "wasm-bindgen-macro" = rec { crateName = "wasm-bindgen-macro"; - version = "0.2.104"; + version = "0.2.105"; edition = "2021"; - sha256 = "06d1m5bg272h6jabq0snm7c50fifjz6r20f5hqlmz7y5wivh99kw"; + sha256 = "1hjrmfnnjcksmf4kizsb78a0apr6ym73iwlhhszsf14ya0s469h4"; procMacro = true; libName = "wasm_bindgen_macro"; libPath = "src\\lib.rs"; @@ -17060,15 +16941,19 @@ rec { }; "wasm-bindgen-macro-support" = rec { crateName = "wasm-bindgen-macro-support"; - version = "0.2.104"; + version = "0.2.105"; edition = "2021"; - sha256 = "1mr18kx7ima1pmsqlkk982q4a0vf3r8s1x6901jb59sd1prd41wz"; + sha256 = "1g3ydkp5js5qg56a30w9v090v5byslay2lidjiifa8pkv4ww62s2"; libName = "wasm_bindgen_macro_support"; libPath = "src\\lib.rs"; authors = [ "The wasm-bindgen Developers" ]; dependencies = [ + { + name = "bumpalo"; + packageId = "bumpalo"; + } { name = "proc-macro2"; packageId = "proc-macro2"; @@ -17082,10 +16967,6 @@ rec { packageId = "syn 2.0.108"; features = [ "visit" "visit-mut" "full" ]; } - { - name = "wasm-bindgen-backend"; - packageId = "wasm-bindgen-backend"; - } { name = "wasm-bindgen-shared"; packageId = "wasm-bindgen-shared"; @@ -17097,10 +16978,10 @@ rec { }; "wasm-bindgen-shared" = rec { crateName = "wasm-bindgen-shared"; - version = "0.2.104"; + version = "0.2.105"; edition = "2021"; links = "wasm_bindgen"; - sha256 = "1la1xj9v3gmawnlyi7lc3mb3xi447r6frb98hi2fb9m1nb47vmms"; + sha256 = "0xmgnvf5m91lw6avjxha1v76bm27g2q5jw7c4lyb7g44ijiiiwkn"; libName = "wasm_bindgen_shared"; libPath = "src\\lib.rs"; authors = [ @@ -17116,9 +16997,9 @@ rec { }; "web-sys" = rec { crateName = "web-sys"; - version = "0.3.81"; + version = "0.3.82"; edition = "2021"; - sha256 = "0871ifd79ni9813sp5amk7wb3avznkijlsly2ap4r9r4m4bw8rwk"; + sha256 = "18d9k5f92czaj27zmw20nzcnax5rdcx68r3s3ypg8irss309a7rs"; libName = "web_sys"; libPath = "src\\lib.rs"; authors = [ @@ -17182,6 +17063,8 @@ rec { "CompositionEvent" = [ "Event" "UiEvent" ]; "ConstantSourceNode" = [ "AudioNode" "AudioScheduledSourceNode" "EventTarget" ]; "ConvolverNode" = [ "AudioNode" "EventTarget" ]; + "CookieChangeEvent" = [ "Event" ]; + "CookieStore" = [ "EventTarget" ]; "CssAnimation" = [ "Animation" "EventTarget" ]; "CssConditionRule" = [ "CssGroupingRule" "CssRule" ]; "CssCounterStyleRule" = [ "CssRule" ]; @@ -17218,6 +17101,7 @@ rec { "Element" = [ "EventTarget" "Node" ]; "ErrorEvent" = [ "Event" ]; "EventSource" = [ "EventTarget" ]; + "ExtendableCookieChangeEvent" = [ "Event" "ExtendableEvent" ]; "ExtendableEvent" = [ "Event" ]; "ExtendableMessageEvent" = [ "Event" "ExtendableEvent" ]; "FetchEvent" = [ "Event" "ExtendableEvent" ]; @@ -19242,14 +19126,15 @@ rec { }; "writeable" = rec { crateName = "writeable"; - version = "0.6.1"; + version = "0.6.2"; edition = "2021"; - sha256 = "1fx29zncvbrqzgz7li88vzdm8zvgwgwy2r9bnjqxya09pfwi0bza"; + sha256 = "1fg08y97n6vk7l0rnjggw3xyrii6dcqg54wqaxldrlk98zdy1pcy"; libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" ]; features = { + "default" = [ "alloc" ]; "either" = [ "dep:either" ]; }; }; @@ -19297,20 +19182,14 @@ rec { }; "yoke" = rec { crateName = "yoke"; - version = "0.8.0"; + version = "0.8.1"; edition = "2021"; - sha256 = "1k4mfr48vgi7wh066y11b7v1ilakghlnlhw9snzz8vi2p00vnhaz"; + sha256 = "0m29dm0bf5iakxgma0bj6dbmc3b8qi9b1vaw9sa76kdqmz3fbmkj"; libPath = "src\\lib.rs"; authors = [ "Manish Goregaokar " ]; dependencies = [ - { - name = "serde"; - packageId = "serde"; - optional = true; - usesDefaultFeatures = false; - } { name = "stable_deref_trait"; packageId = "stable_deref_trait"; @@ -19329,27 +19208,19 @@ rec { usesDefaultFeatures = false; } ]; - devDependencies = [ - { - name = "serde"; - packageId = "serde"; - usesDefaultFeatures = false; - } - ]; features = { - "alloc" = [ "stable_deref_trait/alloc" "serde?/alloc" "zerofrom/alloc" ]; + "alloc" = [ "stable_deref_trait/alloc" "zerofrom/alloc" ]; "default" = [ "alloc" "zerofrom" ]; "derive" = [ "dep:yoke-derive" "zerofrom/derive" ]; - "serde" = [ "dep:serde" ]; "zerofrom" = [ "dep:zerofrom" ]; }; - resolvedDefaultFeatures = [ "alloc" "derive" "zerofrom" ]; + resolvedDefaultFeatures = [ "derive" "zerofrom" ]; }; "yoke-derive" = rec { crateName = "yoke-derive"; - version = "0.8.0"; + version = "0.8.1"; edition = "2021"; - sha256 = "1dha5jrjz9jaq8kmxq1aag86b98zbnm9lyjrihy5sv716sbkrniq"; + sha256 = "0pbyja133jnng4mrhimzdq4a0y26421g734ybgz8wsgbfhl0andn"; procMacro = true; libName = "yoke_derive"; libPath = "src\\lib.rs"; @@ -19464,7 +19335,7 @@ rec { "default" = [ "alloc" ]; "derive" = [ "dep:zerofrom-derive" ]; }; - resolvedDefaultFeatures = [ "alloc" "derive" ]; + resolvedDefaultFeatures = [ "derive" ]; }; "zerofrom-derive" = rec { crateName = "zerofrom-derive"; @@ -19518,9 +19389,9 @@ rec { }; "zerotrie" = rec { crateName = "zerotrie"; - version = "0.2.2"; + version = "0.2.3"; edition = "2021"; - sha256 = "15gmka7vw5k0d24s0vxgymr2j6zn2iwl12wpmpnpjgsqg3abpw1n"; + sha256 = "0lbqznlqazmrwwzslw0ci7p3pqxykrbfhq29npj0gmb2amxc2n9a"; libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" @@ -19548,7 +19419,7 @@ rec { features = { "databake" = [ "dep:databake" "zerovec?/databake" ]; "litemap" = [ "dep:litemap" "alloc" ]; - "serde" = [ "dep:serde" "dep:litemap" "alloc" "litemap/serde" "zerovec?/serde" ]; + "serde" = [ "dep:serde_core" "dep:litemap" "alloc" "litemap/serde" "zerovec?/serde" ]; "yoke" = [ "dep:yoke" ]; "zerofrom" = [ "dep:zerofrom" ]; "zerovec" = [ "dep:zerovec" ]; @@ -19557,9 +19428,9 @@ rec { }; "zerovec" = rec { crateName = "zerovec"; - version = "0.11.4"; + version = "0.11.5"; edition = "2021"; - sha256 = "0fz7j1ns8d86m2fqg2a4bzi5gnh5892bxv4kcr9apwc6a3ajpap7"; + sha256 = "00m0p47k2g9mkv505hky5xh3r6ps7v8qc0dy4pspg542jj972a3c"; libPath = "src\\lib.rs"; authors = [ "The ICU4X Project Developers" @@ -19583,28 +19454,21 @@ rec { usesDefaultFeatures = false; } ]; - devDependencies = [ - { - name = "yoke"; - packageId = "yoke"; - usesDefaultFeatures = false; - features = [ "derive" ]; - } - ]; features = { + "alloc" = [ "serde?/alloc" ]; "databake" = [ "dep:databake" ]; "derive" = [ "dep:zerovec-derive" ]; "hashmap" = [ "dep:twox-hash" "alloc" ]; - "serde" = [ "dep:serde" "alloc" ]; + "serde" = [ "dep:serde" ]; "yoke" = [ "dep:yoke" ]; }; - resolvedDefaultFeatures = [ "alloc" "derive" "yoke" ]; + resolvedDefaultFeatures = [ "derive" "yoke" ]; }; "zerovec-derive" = rec { crateName = "zerovec-derive"; - version = "0.11.1"; + version = "0.11.2"; edition = "2021"; - sha256 = "13zms8hj7vzpfswypwggyfr4ckmyc7v3di49pmj8r1qcz9z275jv"; + sha256 = "1wsig4h5j7a1scd5hrlnragnazjny9qjc44hancb6p6a76ay7p7a"; procMacro = true; libName = "zerovec_derive"; libPath = "src\\lib.rs"; diff --git a/Cargo.toml b/Cargo.toml index 98fcfe77..c7ca9161 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -141,7 +141,13 @@ regex = { version = "1.12.2", default-features = false } reqwest = { version = "0.12.24", default-features = false, features = ["http2", "rustls-tls", "json"] } rust_decimal = { version = "1.39.0", default-features = false, features = ["std", "serde-str"] } rust_decimal_macros = { version = "1.39.0", default-features = false } -schemars = { version = "0.9.0", default-features = false, features = ["chrono04", "derive", "preserve_order", "uuid1", "url2"] } +schemars = { version = "0.9.0", default-features = false, features = [ + "chrono04", + "derive", + "preserve_order", + "uuid1", + "url2", +] } serde = { version = "1.0.228", default-features = false, features = ["derive", "std"] } serde_json = { version = "1.0.145", default-features = false, features = ["std"] } sha2 = { version = "0.10.9", default-features = false } diff --git a/academy_core/daily_rewards/impl/Cargo.toml b/academy_core/daily_rewards/impl/Cargo.toml index 43cb47f9..a2f07da0 100644 --- a/academy_core/daily_rewards/impl/Cargo.toml +++ b/academy_core/daily_rewards/impl/Cargo.toml @@ -21,7 +21,11 @@ academy_shared_contracts.workspace = true academy_utils.workspace = true anyhow.workspace = true bb8 = { version = "0.9.0", default-features = false } -bb8-postgres = { version = "0.9.0", default-features = false, features = ["with-chrono-0_4", "with-uuid-1", "with-serde_json-1"] } +bb8-postgres = { version = "0.9.0", default-features = false, features = [ + "with-chrono-0_4", + "with-uuid-1", + "with-serde_json-1", +] } chrono.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/academy_persistence/postgres/Cargo.toml b/academy_persistence/postgres/Cargo.toml index f5776ec9..0f5b2afa 100644 --- a/academy_persistence/postgres/Cargo.toml +++ b/academy_persistence/postgres/Cargo.toml @@ -19,7 +19,11 @@ academy_persistence_contracts.workspace = true academy_utils.workspace = true anyhow.workspace = true bb8 = { version = "0.9.0", default-features = false } -bb8-postgres = { version = "0.9.0", default-features = false, features = ["with-chrono-0_4", "with-uuid-1", "with-serde_json-1"] } +bb8-postgres = { version = "0.9.0", default-features = false, features = [ + "with-chrono-0_4", + "with-uuid-1", + "with-serde_json-1", +] } chrono.workspace = true clorinde.path = "./clorinde" futures.workspace = true @@ -27,7 +31,11 @@ ouroboros = { version = "0.18.5", default-features = false } serde_json.workspace = true tracing.workspace = true uuid.workspace = true -tokio-postgres = { version = "0.7.15", default-features = false, features = ["with-chrono-0_4", "with-uuid-1", "with-serde_json-1"] } +tokio-postgres = { version = "0.7.15", default-features = false, features = [ + "with-chrono-0_4", + "with-uuid-1", + "with-serde_json-1", +] } postgres-types = { workspace = true, features = ["with-serde_json-1", "with-chrono-0_4", "with-uuid-1"] } [dev-dependencies] From ad3a4ff4251438fa9ed749b0222cc096264093dd Mon Sep 17 00:00:00 2001 From: Morpheus Date: Sun, 2 Nov 2025 19:01:34 +0100 Subject: [PATCH 06/13] insert recommendations --- Cargo.nix | 1082 ++++++++++++++++++++++++++--------------------------- 1 file changed, 541 insertions(+), 541 deletions(-) diff --git a/Cargo.nix b/Cargo.nix index 5493afc4..7edc6357 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -620,12 +620,12 @@ rec { crateBin = [ { name = "academy"; - path = "src\\main.rs"; + path = "src/main.rs"; requiredFeatures = [ ]; } ]; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_api_rest"; @@ -886,8 +886,8 @@ rec { crateName = "academy_api_rest"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_api\rest; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_api/rest; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_assets"; @@ -1078,16 +1078,16 @@ rec { crateName = "academy_assets"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_assets; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_assets; }; + libPath = "src/lib.rs"; }; "academy_auth_contracts" = rec { crateName = "academy_auth_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_auth\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_auth/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -1120,8 +1120,8 @@ rec { crateName = "academy_auth_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_auth\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_auth/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -1218,8 +1218,8 @@ rec { crateName = "academy_cache_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_cache\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_cache/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "anyhow"; @@ -1249,8 +1249,8 @@ rec { crateName = "academy_cache_valkey"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_cache\valkey; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_cache/valkey; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_cache_contracts"; @@ -1323,8 +1323,8 @@ rec { crateName = "academy_config"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_config; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_config; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_assets"; @@ -1384,8 +1384,8 @@ rec { crateName = "academy_core_coin_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\coin\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/coin/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -1418,8 +1418,8 @@ rec { crateName = "academy_core_coin_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\coin\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/coin/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -1489,8 +1489,8 @@ rec { crateName = "academy_core_config_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\config\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/config/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "mockall"; @@ -1508,8 +1508,8 @@ rec { crateName = "academy_core_config_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\config\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/config/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_core_config_contracts"; @@ -1547,8 +1547,8 @@ rec { crateName = "academy_core_contact_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\contact\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/contact/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -1581,8 +1581,8 @@ rec { crateName = "academy_core_contact_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\contact\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/contact/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_core_contact_contracts"; @@ -1650,8 +1650,8 @@ rec { crateName = "academy_core_daily_rewards_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\daily_rewards\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/daily_rewards/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -1708,8 +1708,8 @@ rec { crateName = "academy_core_daily_rewards_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\daily_rewards\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/daily_rewards/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -1865,8 +1865,8 @@ rec { crateName = "academy_core_finance_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\finance\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/finance/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -1905,8 +1905,8 @@ rec { crateName = "academy_core_finance_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\finance\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/finance/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2023,16 +2023,16 @@ rec { crateName = "academy_core_health_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\health\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/health/contracts; }; + libPath = "src/lib.rs"; }; "academy_core_health_impl" = rec { crateName = "academy_core_health_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\health\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/health/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_cache_contracts"; @@ -2087,8 +2087,8 @@ rec { crateName = "academy_core_heart_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\heart\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/heart/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -2121,8 +2121,8 @@ rec { crateName = "academy_core_heart_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\heart\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/heart/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2218,8 +2218,8 @@ rec { crateName = "academy_core_internal_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\internal\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/internal/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2256,8 +2256,8 @@ rec { crateName = "academy_core_internal_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\internal\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/internal/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2366,8 +2366,8 @@ rec { crateName = "academy_core_mfa_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\mfa\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/mfa/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -2400,8 +2400,8 @@ rec { crateName = "academy_core_mfa_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\mfa\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/mfa/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2482,8 +2482,8 @@ rec { crateName = "academy_core_oauth2_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\oauth2\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/oauth2/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -2516,8 +2516,8 @@ rec { crateName = "academy_core_oauth2_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\oauth2\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/oauth2/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2625,8 +2625,8 @@ rec { crateName = "academy_core_paypal_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\paypal\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/paypal/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -2659,8 +2659,8 @@ rec { crateName = "academy_core_paypal_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\paypal\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/paypal/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2797,8 +2797,8 @@ rec { crateName = "academy_core_premium_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\premium\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/premium/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -2831,8 +2831,8 @@ rec { crateName = "academy_core_premium_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\premium\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/premium/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2928,8 +2928,8 @@ rec { crateName = "academy_core_session_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\session\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/session/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -2962,8 +2962,8 @@ rec { crateName = "academy_core_session_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\session\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/session/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -3077,8 +3077,8 @@ rec { crateName = "academy_core_user_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\user\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/user/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -3125,8 +3125,8 @@ rec { crateName = "academy_core_user_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_core\user\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/user/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -3277,8 +3277,8 @@ rec { crateName = "academy_demo"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_demo; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_demo; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -3330,8 +3330,8 @@ rec { crateName = "academy_di"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_di; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_di; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_di_derive"; @@ -3344,9 +3344,9 @@ rec { crateName = "academy_di_derive"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_di_derive; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_di_derive; }; procMacro = true; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "darling"; @@ -3373,8 +3373,8 @@ rec { crateName = "academy_email_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_email\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_email/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -3406,8 +3406,8 @@ rec { crateName = "academy_email_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_email\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_email/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_assets"; @@ -3490,8 +3490,8 @@ rec { crateName = "academy_extern_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_extern\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_extern/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -3524,8 +3524,8 @@ rec { crateName = "academy_extern_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_extern\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_extern/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -3615,8 +3615,8 @@ rec { crateName = "academy_models"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_models; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_models; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_utils"; @@ -3705,8 +3705,8 @@ rec { crateName = "academy_persistence_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_persistence\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_persistence/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -3763,8 +3763,8 @@ rec { crateName = "academy_persistence_postgres"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_persistence\postgres; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_persistence/postgres; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_di"; @@ -3884,11 +3884,11 @@ rec { crateBin = [ { name = "academy-render-daemon"; - path = "src\\main.rs"; + path = "src/main.rs"; requiredFeatures = [ ]; } ]; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_render_daemon; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_render_daemon; }; dependencies = [ { name = "academy_utils"; @@ -3947,8 +3947,8 @@ rec { crateName = "academy_shared_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_shared\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_shared/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -3999,8 +3999,8 @@ rec { crateName = "academy_shared_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_shared\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_shared/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_cache_contracts"; @@ -4138,8 +4138,8 @@ rec { crateName = "academy_templates_contracts"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_templates\contracts; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_templates/contracts; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_assets"; @@ -4194,8 +4194,8 @@ rec { crateName = "academy_templates_impl"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_templates\impl; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_templates/impl; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_assets"; @@ -4247,12 +4247,12 @@ rec { crateBin = [ { name = "academy-testing"; - path = "src\\main.rs"; + path = "src/main.rs"; requiredFeatures = [ ]; } ]; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_testing; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_testing; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_utils"; @@ -4342,8 +4342,8 @@ rec { crateName = "academy_utils"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_utils; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_utils; }; + libPath = "src/lib.rs"; dependencies = [ { name = "academy_utils_derive"; @@ -4376,9 +4376,9 @@ rec { crateName = "academy_utils_derive"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_utils_derive; }; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_utils_derive; }; procMacro = true; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "proc-macro2"; @@ -4407,7 +4407,7 @@ rec { edition = "2018"; crateBin = []; sha256 = "0jwb96gv17vdr29hbzi0ha5q6jkpgjyn7rjlg5nis65k41rk0p8v"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "gimli"; @@ -4437,7 +4437,7 @@ rec { version = "2.0.1"; edition = "2021"; sha256 = "1ymy18s9hs7ya1pjc9864l30wk8p2qfqdi7mhhcc5nfakxbij09j"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Jonas Schievink " "oyvindln " @@ -4453,7 +4453,7 @@ rec { version = "0.7.8"; edition = "2018"; sha256 = "1y9014qsy6gs9xld4ch7a6xi9bpki8vaciawxq4p75d8qvh7f549"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Tom Kaitchuck " ]; @@ -4490,7 +4490,7 @@ rec { version = "0.8.12"; edition = "2018"; sha256 = "0xbsp9rlm5ki017c0w6ay8kjwinwm8knjncci95mii30rmwz25as"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Tom Kaitchuck " ]; @@ -4535,7 +4535,7 @@ rec { edition = "2021"; sha256 = "00a32wb2h07im3skkikc495jvncf62jl6s96vwc7bhi70h9imlyx"; libName = "aho_corasick"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -4560,7 +4560,7 @@ rec { version = "0.15.1"; edition = "2021"; sha256 = "18p3n7dihh4ys1rp16yf7vxlla91s2as2009ik2m9zndi1qk2rk9"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "tamasfe" ]; @@ -4663,7 +4663,7 @@ rec { version = "0.1.3"; edition = "2018"; sha256 = "1z8548zdjlm4ps1k0d7x68lfdyji02crwcc9rw3q3bb106f643r5"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "avitex " ]; @@ -4681,7 +4681,7 @@ rec { edition = "2018"; sha256 = "08zrzs022xwndihvzdn78yqarv2b9696y67i6h78nla3ww87jgb8"; libName = "allocator_api2"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Zakarum " ]; @@ -4697,7 +4697,7 @@ rec { version = "0.1.5"; edition = "2018"; sha256 = "04b3wrz12837j7mdczqd95b732gw5q7q66cv4yn4646lvccp57l1"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Nicolas Silva " ]; @@ -4714,7 +4714,7 @@ rec { version = "0.6.21"; edition = "2021"; sha256 = "0jjgixms4qjj58dzr846h2s29p8w7ynwr9b9x6246m1pwy0v5ma3"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "anstyle"; @@ -4760,7 +4760,7 @@ rec { version = "1.0.13"; edition = "2021"; sha256 = "0y2ynjqajpny6q0amvfzzgw0gfw3l47z85km4gvx87vg02lcr4ji"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; features = { "default" = [ "std" ]; }; @@ -4772,7 +4772,7 @@ rec { edition = "2021"; sha256 = "1hhmkkfr95d462b3zf6yl2vfzdqfy5726ya572wwg8ha9y148xjf"; libName = "anstyle_parse"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "utf8parse"; @@ -4793,7 +4793,7 @@ rec { edition = "2021"; sha256 = "1qir6d6fl5a4y2gmmw9a5w93ckwx6xn51aryd83p26zn6ihiy8wy"; libName = "anstyle_query"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "windows-sys"; @@ -4810,7 +4810,7 @@ rec { edition = "2021"; sha256 = "0ajz9wsf46a2l3pds7v62xbhq2cffj7wrilamkx2z8r28m0k61iy"; libName = "anstyle_wincon"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "anstyle"; @@ -4835,7 +4835,7 @@ rec { version = "1.0.100"; edition = "2018"; sha256 = "0qbfmw4hhv2ampza1csyvf1jqjs2dgrj29cv3h3sh623c6qvcgm2"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -4850,7 +4850,7 @@ rec { version = "0.2.0"; edition = "2021"; sha256 = "16ikh370y20xivq73hjzq9dz6zw4pysnkkx0mpbykrbg9f4nkhph"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "object"; @@ -4874,7 +4874,7 @@ rec { version = "0.5.3"; edition = "2021"; sha256 = "0wn0kk97k49wxidfigmz1pdqmygqzi4h6w72ib7cpq765s4i0diw"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -4922,7 +4922,7 @@ rec { version = "0.7.6"; edition = "2018"; sha256 = "0l1fz4ccgv6pm609rif37sl5nv5k6lbzi7kkppgzqzh1vwix20kw"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "bluss" ]; @@ -4941,7 +4941,7 @@ rec { sha256 = "1fsxxmz3rzx1prn1h3rs7kyjhkap60i7xvi0ldapkvbb14nssdch"; procMacro = true; libName = "async_trait"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -4969,7 +4969,7 @@ rec { edition = "2018"; sha256 = "1h5av1lw56m0jf0fd3bchxq8a30xv0b4wv8s4zkp4s0i7mfvs18m"; libName = "atomic_waker"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Stjepan Glavina " "Contributors to futures-rs" @@ -4983,7 +4983,7 @@ rec { version = "1.5.0"; edition = "2015"; sha256 = "1s77f98id9l4af4alklmzq46f21c980v13z2r1pcxx6bqgw0d1n0"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Josh Stone " ]; @@ -4994,7 +4994,7 @@ rec { version = "0.8.6"; edition = "2021"; sha256 = "0w9qyxcp77gwswc9sz3pf2rzpm4jycpxvd70yh8i60sjccrys64a"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "axum-core"; @@ -5166,7 +5166,7 @@ rec { edition = "2021"; sha256 = "08pa4752h96pai7j5avr2hnq35xh7qgv6vl57y1zhhnikkhnqi2r"; libName = "axum_core"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "bytes"; @@ -5227,7 +5227,7 @@ rec { edition = "2021"; sha256 = "15mb28f49y4g434ry9c7gnamh3ac0130mvsncz3h4q8cyhczyqwr"; libName = "axum_extra"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "axum"; @@ -5326,7 +5326,7 @@ rec { version = "0.3.76"; edition = "2021"; sha256 = "1mibx75x4jf6wz7qjifynld3hpw3vq6sy3d3c9y5s88sg59ihlxv"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -5384,7 +5384,7 @@ rec { version = "0.5.1"; edition = "2015"; sha256 = "0xp0a3xml25xw2bp5pyac2nld7vmmfjl02qynnyfn6aznfggwb82"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Andreas Ots " "Tim Dumol " @@ -5397,7 +5397,7 @@ rec { version = "0.13.1"; edition = "2018"; sha256 = "1s494mqmzjb766fy1kqlccgfg2sdcjb6hzbvzqv2jw65fdi5h6wy"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Alice Maz " "Marshall Pierce " @@ -5412,7 +5412,7 @@ rec { version = "0.22.1"; edition = "2018"; sha256 = "1imqzgh7bxcikp5vx3shqvw9j09g9ly0xr0jma0q66i52r7jbcvj"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Marshall Pierce " ]; @@ -5427,7 +5427,7 @@ rec { version = "1.8.0"; edition = "2024"; sha256 = "1fj4vc6ghy3j1120r7dwn4xw90crfy46b448g5pm9w6an13qn92m"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -5441,7 +5441,7 @@ rec { version = "0.9.0"; edition = "2021"; sha256 = "1ralsazlyyj7gsmqc73p6kpqz76g4al6np2p8693sx123a78nb91"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "futures-util"; @@ -5479,7 +5479,7 @@ rec { edition = "2021"; sha256 = "175a6r01q0mjcpsnsr92viq1l9vk91j7dyiascl8vy6hgiaycw75"; libName = "bb8_postgres"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "bb8"; @@ -5521,7 +5521,7 @@ rec { edition = "2021"; sha256 = "1abxld7w80931hyvq1z3wlan7nkpcwdx5qz3h6la3vp1ymm96hsi"; libName = "bb8_redis"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "bb8"; @@ -5541,7 +5541,7 @@ rec { version = "2.10.0"; edition = "2021"; sha256 = "1lqxwc3625lcjrjm5vygban9v8a6dlxisp1aqylibiaw52si4bl1"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -5558,7 +5558,7 @@ rec { version = "1.0.1"; edition = "2021"; sha256 = "173ydyj2q5vwj88k6xgjnfsshs4x9wbvjjv7sm0h36r34hn87hhv"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "funty"; @@ -5591,7 +5591,7 @@ rec { version = "0.10.6"; edition = "2018"; sha256 = "1zlf7w7gql12v61d9jcbbswa3dw8qxsjglylsiljp9f9b3a2ll26"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -5622,7 +5622,7 @@ rec { edition = "2018"; sha256 = "0w9sa2ypmrsqqvc20nhwr75wbb5cjr4kkyhpjm1z1lv2kdicfy1h"; libName = "block_buffer"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -5640,7 +5640,7 @@ rec { edition = "2018"; crateBin = []; sha256 = "1kikljm5yr3l9qsw5xvdccragxj4445s4s3fqsgy6hmmipwld1md"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Near Inc " ]; @@ -5677,7 +5677,7 @@ rec { sha256 = "1hwsznww7d01bh1fzpndzmcpyp00xpl2y9bg70i3z0zmqb0d7lgx"; procMacro = true; libName = "borsh_derive"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Near Inc " ]; @@ -5720,7 +5720,7 @@ rec { version = "1.12.1"; edition = "2021"; sha256 = "1arc1v7h5l86vd6z76z3xykjzldqd5icldn7j9d3p7z6x0d4w133"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -5751,7 +5751,7 @@ rec { version = "3.19.0"; edition = "2021"; sha256 = "0hsdndvcpqbjb85ghrhska2qxvp9i75q2vb70hma9fxqawdy9ia6"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Nick Fitzgerald " ]; @@ -5767,7 +5767,7 @@ rec { version = "0.6.12"; edition = "2021"; sha256 = "1hmipv4yyxgbamcbw5r65wagv9khs033v9483s9kri9sw9ycbk93"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Koloski " ]; @@ -5803,7 +5803,7 @@ rec { edition = "2021"; sha256 = "0ng6230brd0hvqpbgcx83inn74mdv3abwn95x515bndwkz90dd1x"; procMacro = true; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Koloski " ]; @@ -5831,7 +5831,7 @@ rec { version = "1.5.0"; edition = "2021"; sha256 = "0jzncxyf404mwqdbspihyzpkndfgda450l0893pz5xj685cg5l0z"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -5845,7 +5845,7 @@ rec { version = "1.10.1"; edition = "2018"; sha256 = "0smd4wi2yrhp5pmq571yiaqx84bjqlm1ixqhnvfwzzc6pqkn26yp"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Carl Lerche " "Sean McArthur " @@ -5862,7 +5862,7 @@ rec { version = "1.2.43"; edition = "2018"; sha256 = "1hpg1f1srgd5bfivvln1s3kcajdxpqvjsvd8m4y4nmap8pwv17kk"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Alex Crichton " ]; @@ -5886,7 +5886,7 @@ rec { edition = "2018"; sha256 = "008q28ajc546z5p2hcwdnckmg0hia7rnx52fni04bwqkzyrghc4k"; libName = "cfg_if"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Alex Crichton " ]; @@ -5900,7 +5900,7 @@ rec { version = "0.2.1"; edition = "2018"; sha256 = "092pxdc1dbgjb6qvh83gk56rkic2n2ybm4yvy76cgynmzi3zwfk1"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Zicklag " ]; @@ -5911,7 +5911,7 @@ rec { version = "0.4.42"; edition = "2021"; sha256 = "1lp8iz9js9jwxw0sj8yi59v54lgvwdvm49b9wch77f25sfym4l0l"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "iana-time-zone"; @@ -5979,7 +5979,7 @@ rec { edition = "2021"; sha256 = "1fvicqrlmdsjkrgxr7bxfd62i9w2qi2b6iv4w85av5syvqlqnsck"; libName = "chrono_tz"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "chrono"; @@ -6021,7 +6021,7 @@ rec { edition = "2021"; sha256 = "1c8ixwwwsn9kgs1dr5mz963p0fgw9j9p7fzb3w2c7y8xhkp8l20c"; libName = "chrono_tz_build"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "parse-zoneinfo"; @@ -6050,7 +6050,7 @@ rec { version = "0.9.3"; edition = "2018"; sha256 = "1jcnafc8rjfs1al08gqzyn0kpbaizgdwrd0ajqafspd18ikxdswf"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Joshua Barretto " ]; @@ -6078,7 +6078,7 @@ rec { edition = "2021"; crateBin = []; sha256 = "1xg5fa4lcl2pmdhlns1qzw5dpz1yz6hxk6x6j7qra0hf2whxf9jc"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "clap_builder"; @@ -6120,7 +6120,7 @@ rec { version = "4.5.51"; edition = "2021"; sha256 = "06h10byk8dl8b4nypil6aad9kshgfrjyji5ybb8bz0gngc65z0vm"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "anstream"; @@ -6160,7 +6160,7 @@ rec { version = "4.5.60"; edition = "2021"; sha256 = "0wfrf9rfz8qhb07716i2hmhh1jgai8lmlfx3vy8l4nlwfdbjhq4f"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "clap"; @@ -6206,7 +6206,7 @@ rec { edition = "2021"; sha256 = "0wbngw649138v3jwx8pm5x9sq0qsml3sh0sfzyrdxcpamy3m82ra"; procMacro = true; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "heck"; @@ -6238,15 +6238,15 @@ rec { version = "0.7.6"; edition = "2021"; sha256 = "13cxw9m2rqvplgazgkq2awms0rgf34myc19bz6gywfngi762imx1"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; }; "clorinde" = rec { crateName = "clorinde"; version = "0.0.0"; edition = "2024"; - src = lib.cleanSourceWith { filter = sourceFilter; src = C:\Users\cmoe4\Documents\Projects\BootstrapAcademy\backend\academy_persistence\postgres\clorinde; }; - libPath = "src\\lib.rs"; + src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_persistence/postgres/clorinde; }; + libPath = "src/lib.rs"; dependencies = [ { name = "chrono"; @@ -6292,7 +6292,7 @@ rec { version = "1.0.4"; edition = "2021"; sha256 = "0x8ymkz1xr77rcj1cfanhf416pc4v681gmkc9dzb3jqja7f62nxh"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; }; "combine" = rec { @@ -6300,7 +6300,7 @@ rec { version = "4.6.7"; edition = "2018"; sha256 = "1z8rh8wp59gf8k23ar010phgs0wgf5i8cx4fg01gwcnzfn5k0nms"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Markus Westerlind " ]; @@ -6380,7 +6380,7 @@ rec { version = "0.15.18"; edition = "2018"; sha256 = "060rrj5fl3n1vfrng4r8dbzqay5mnvripm1fngwp80q88j9m83hq"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "pathdiff"; @@ -6429,7 +6429,7 @@ rec { version = "0.16.1"; edition = "2021"; sha256 = "1x4x6vfi1s55nbr4i77b9r87s213h46lq396sij9fkmidqx78c5l"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "encode_unicode"; @@ -6471,7 +6471,7 @@ rec { version = "0.3.1"; edition = "2021"; sha256 = "19nwwczii762pwlsm7bpizgjg8hkg1kqi32b2g4rglijklsbhx3w"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Cesar Eduardo Barros " ]; @@ -6483,7 +6483,7 @@ rec { version = "0.6.0"; edition = "2018"; sha256 = "1jn1pq6fp3rri88zyw6jlhwwgf6qiyc08d6gjv0qypgkl862n67c"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Rutrum " ]; @@ -6504,7 +6504,7 @@ rec { edition = "2018"; sha256 = "12w8j73lazxmr1z0h98hf3z623kl8ms7g07jch7n4p8f9nwlhdkp"; libName = "core_foundation_sys"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Servo Project Developers" ]; @@ -6518,7 +6518,7 @@ rec { version = "0.2.17"; edition = "2018"; sha256 = "10023dnnaghhdl70xcds12fsx2b966sxbxjq5sxs49mvxqw5ivar"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -6556,7 +6556,7 @@ rec { edition = "2021"; sha256 = "0l9f1saqp1gn5qy0rxvkmz4m6n7fc0b3dbm6q1r5pmgpnyvi3lcx"; libName = "crossbeam_deque"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "crossbeam-epoch"; @@ -6581,7 +6581,7 @@ rec { edition = "2021"; sha256 = "03j2np8llwf376m3fxqx859mgp9f83hj1w34153c7a9c7i5ar0jv"; libName = "crossbeam_epoch"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "crossbeam-utils"; @@ -6604,7 +6604,7 @@ rec { edition = "2021"; sha256 = "0a3aa2bmc8q35fb67432w16wvi54sfmb69rk9h5bhd18vw0c99fh"; libName = "crossbeam_utils"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; features = { "default" = [ "std" ]; "loom" = [ "dep:loom" ]; @@ -6617,7 +6617,7 @@ rec { edition = "2018"; sha256 = "1cvby95a6xg7kxdz5ln3rl9xh66nz66w46mm3g56ri1z5x815yqv"; libName = "crypto_common"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -6643,7 +6643,7 @@ rec { version = "0.21.3"; edition = "2021"; sha256 = "1h281ah78pz05450r71h3gwm2n24hy8yngbz58g426l4j1q37pww"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Ted Driggs " ]; @@ -6670,7 +6670,7 @@ rec { version = "0.21.3"; edition = "2021"; sha256 = "193ya45qgac0a4siwghk0bl8im8h89p3cald7kw8ag3yrmg1jiqj"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Ted Driggs " ]; @@ -6715,7 +6715,7 @@ rec { edition = "2021"; sha256 = "10ac85n4lnx3rmf5rw8lijl2c0sbl6ghcpgfmzh0s26ihbghi0yk"; procMacro = true; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Ted Driggs " ]; @@ -6740,7 +6740,7 @@ rec { version = "0.8.0"; edition = "2018"; sha256 = "13f15dfvn07fa7087pmacixqqv0lmj4hv93biw4ldr48ypk55xdy"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -6765,7 +6765,7 @@ rec { version = "0.5.5"; edition = "2021"; sha256 = "11z5939gv2klp1r1lgrp4w5fnlkj18jqqf0h9zxmia3vkrjwpv7c"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Jacob Pratt " ]; @@ -6794,7 +6794,7 @@ rec { version = "1.6.2"; edition = "2021"; sha256 = "013biy7hhy59jcbry4dqn2pf4qhaw083ksn8xxiw373wjc37imdb"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Kornel Lesinski " "Amit Chowdhury " @@ -6809,7 +6809,7 @@ rec { version = "0.1.13"; edition = "2015"; sha256 = "1j0nzjxci2zqx63hdcihkp0a4dkdmzxd7my4m7zk6cjyfy34j9an"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Utkarsh Kukreti " ]; @@ -6820,7 +6820,7 @@ rec { version = "0.10.7"; edition = "2018"; sha256 = "14p2n6ih29x81akj097lvz7wi9b6b9hvls0lwrv7b6xwyy0s5ncy"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -6862,7 +6862,7 @@ rec { edition = "2021"; sha256 = "1q0alair462j21iiqwrr21iabkfnb13d6x5w95lkdg21q2xrqdlp"; procMacro = true; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Jane Lusby " ]; @@ -6889,7 +6889,7 @@ rec { version = "0.11.0"; edition = "2018"; sha256 = "1wa78ahlc57wmqyq2ncr80l7plrkgz57xsg7kfzgpcnqac8gld8l"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Felix Köpge " ]; @@ -6904,7 +6904,7 @@ rec { edition = "2018"; sha256 = "0m956cxcg8v2n8kmz6xs5zl13k2fak3zkapzfzzp7pxih6hix26h"; libName = "dyn_clone"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -6916,7 +6916,7 @@ rec { edition = "2021"; sha256 = "1dkhcqmhgc25m437fzxhkvhd135yc4xd9pzpsc77i7lv9m8fd64j"; libName = "email_encoding"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "base64"; @@ -6940,7 +6940,7 @@ rec { version = "0.2.9"; edition = "2018"; sha256 = "0jf4v3npa524c7npy7w3jl0a6gng26f51a4bgzs3jqna12dz2yg0"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Simon Johnston " ]; @@ -6955,7 +6955,7 @@ rec { version = "1.0.0"; edition = "2021"; sha256 = "1h5j7j7byi289by63s3w4a8b3g6l5ccdrws7a67nn07vdxj77ail"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Torbjørn Birch Moltu " ]; @@ -6970,7 +6970,7 @@ rec { version = "1.0.2"; edition = "2015"; sha256 = "03swzqznragy8n0x31lqc78g2af054jwivp7lkrbrc0khz74lyl7"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; }; "errno" = rec { @@ -6978,7 +6978,7 @@ rec { version = "0.3.14"; edition = "2018"; sha256 = "1szgccmh8vgryqyadg8xd58mnwwicf39zmin3bsn63df2wbbgjir"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Chris Wong " "Dan Gohman " @@ -7021,7 +7021,7 @@ rec { edition = "2018"; sha256 = "1xq759lsr8gqss7hva42azn3whgrbrs2sd9xpn92c5ickxm1fhs4"; libName = "fallible_iterator"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -7035,7 +7035,7 @@ rec { version = "2.3.0"; edition = "2018"; sha256 = "1ghiahsw1jd68df895cy5h3gzwk30hndidn3b682zmshpgmrx41p"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Stjepan Glavina " ]; @@ -7053,7 +7053,7 @@ rec { edition = "2018"; sha256 = "09x1sfinrz86bkm6i2d85lpsfnxn0w797g5zisv1nwhaz1w1h1aj"; libName = "find_msvc_tools"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; }; "findshlibs" = rec { @@ -7061,7 +7061,7 @@ rec { version = "0.10.2"; edition = "2018"; sha256 = "0r3zy2r12rxzwqgz53830bk38r6b7rl8kq2br9n81q7ps2ffbfa0"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "lazy_static"; @@ -7106,7 +7106,7 @@ rec { version = "1.2.2"; edition = "2018"; sha256 = "1kqzb2qn608rxl3dws04zahcklpplkd5r1vpabwga5l50d2v4k6b"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The rust-url developers" ]; @@ -7129,7 +7129,7 @@ rec { version = "2.0.1"; edition = "2018"; sha256 = "06g69s9w3hmdnjp5b60ph15v367278mgxy1shijrllarc2pnrp98"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Armin Ronacher " ]; @@ -7142,7 +7142,7 @@ rec { version = "2.0.0"; edition = "2018"; sha256 = "177w048bm0046qlzvp33ag3ghqkqw4ncpzcm5lq36gxf2lla7mg6"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "myrrlyn " ]; @@ -7155,7 +7155,7 @@ rec { version = "0.3.31"; edition = "2018"; sha256 = "0xh8ddbkm9jy8kc5gbvjp9a4b6rqqxvc8471yb2qaz5wm2qhgg35"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "futures-channel"; @@ -7218,7 +7218,7 @@ rec { edition = "2018"; sha256 = "040vpqpqlbk099razq8lyn74m0f161zd0rp36hciqrwcg2zibzrd"; libName = "futures_channel"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "futures-core"; @@ -7247,7 +7247,7 @@ rec { edition = "2018"; sha256 = "0gk6yrxgi5ihfanm2y431jadrll00n5ifhnpx090c2f2q1cr1wh5"; libName = "futures_core"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; features = { "default" = [ "std" ]; "portable-atomic" = [ "dep:portable-atomic" ]; @@ -7261,7 +7261,7 @@ rec { edition = "2018"; sha256 = "17vcci6mdfzx4gbk0wx64chr2f13wwwpvyf3xd5fb1gmjzcx2a0y"; libName = "futures_executor"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "futures-core"; @@ -7293,7 +7293,7 @@ rec { edition = "2018"; sha256 = "1ikmw1yfbgvsychmsihdkwa8a1knank2d9a8dk01mbjar9w1np4y"; libName = "futures_io"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; features = { "default" = [ "std" ]; }; @@ -7306,7 +7306,7 @@ rec { sha256 = "0l1n7kqzwwmgiznn0ywdc5i24z72zvh9q1dwps54mimppi7f6bhn"; procMacro = true; libName = "futures_macro"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "proc-macro2"; @@ -7330,7 +7330,7 @@ rec { edition = "2018"; sha256 = "1xyly6naq6aqm52d5rh236snm08kw8zadydwqz8bip70s6vzlxg5"; libName = "futures_sink"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; features = { "default" = [ "std" ]; "std" = [ "alloc" ]; @@ -7343,7 +7343,7 @@ rec { edition = "2018"; sha256 = "124rv4n90f5xwfsm9qw6y99755y021cmi5dhzh253s920z77s3zr"; libName = "futures_task"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; features = { "default" = [ "std" ]; "std" = [ "alloc" ]; @@ -7356,7 +7356,7 @@ rec { edition = "2018"; sha256 = "10aa1ar8bgkgbr4wzxlidkqkcxf77gffyj8j7768h831pcaq784z"; libName = "futures_util"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "futures-channel"; @@ -7443,7 +7443,7 @@ rec { edition = "2015"; sha256 = "1wpdn5ngpqkkyyibbg7wa4cfg0y8zjc57spaia2h47jkk0qp9djb"; libName = "generic_array"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Bartłomiej Kamiński " "Aaron Trent " @@ -7471,7 +7471,7 @@ rec { version = "0.2.16"; edition = "2018"; sha256 = "14l5aaia20cc6cc08xdlhrzmfcylmrnprwnna20lqf746pqzjprk"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rand Project Developers" ]; @@ -7521,7 +7521,7 @@ rec { version = "0.3.4"; edition = "2021"; sha256 = "1zbpvpicry9lrbjmkd4msgj3ihff1q92i334chk7pzf46xffz7c9"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rand Project Developers" ]; @@ -7615,7 +7615,7 @@ rec { version = "0.32.3"; edition = "2018"; sha256 = "1iqk5xznimn5bfa8jy4h7pa1dv3c624hzgd2dkz8mpgkiswvjag6"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; features = { "default" = [ "read-all" "write" ]; "endian-reader" = [ "read" "dep:stable_deref_trait" ]; @@ -7633,7 +7633,7 @@ rec { version = "0.4.18"; edition = "2024"; sha256 = "1qsp3wg0mgxzmshcgymdlpivqlc1bihm6133pl6dx2x4af8w3psj"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -7680,7 +7680,7 @@ rec { version = "0.9.1"; edition = "2021"; sha256 = "0mz7bsa66p2rrgnz3l94ac4kbklh7mq8j30iizyxjy4qyvmn1xqb"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Gilad Naaman " ]; @@ -7705,7 +7705,7 @@ rec { version = "0.4.12"; edition = "2021"; sha256 = "11hk5mpid8757z6n3v18jwb62ikffrgzjlrgpzqvkqdlzjfbdh7k"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Carl Lerche " "Sean McArthur " @@ -7778,7 +7778,7 @@ rec { version = "0.12.3"; edition = "2021"; sha256 = "1268ka4750pyg2pbgsr43f0289l5zah4arir2k4igx5a8c6fg7la"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -7809,7 +7809,7 @@ rec { version = "0.14.5"; edition = "2021"; sha256 = "1wa1vy1xs3mp11bn3z9dv0jricgr6a2j0zkf1g19yz3vw4il89z5"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -7849,7 +7849,7 @@ rec { version = "0.16.0"; edition = "2021"; sha256 = "13blh9j2yv77a6ni236ixiwdzbc1sh2bc4bdpaz7y859yv2bs6al"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -7871,7 +7871,7 @@ rec { version = "0.4.1"; edition = "2018"; sha256 = "1sr4zygaq1b2f0k7b5l8vx5vp05wvd82w7vpavgvr52xvdd4scdk"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -7914,7 +7914,7 @@ rec { edition = "2015"; sha256 = "1r1w80i2bhmyh8s5mjr2dz6baqlrm6cak6yvzm4jq96lacjs5d2l"; libName = "headers_core"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -7931,7 +7931,7 @@ rec { version = "0.4.1"; edition = "2018"; sha256 = "1a7mqsnycv5z4z5vnv1k34548jzmc0ajic7c1j8jsaspnhw5ql4m"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Without Boats " ]; @@ -7946,7 +7946,7 @@ rec { version = "0.5.0"; edition = "2021"; sha256 = "1sjmpsdl8czyh9ywl3qcsfsq9a307dg4ni2vnlwgnzzqhc4y0113"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; }; "hex" = rec { @@ -7954,7 +7954,7 @@ rec { version = "0.4.3"; edition = "2018"; sha256 = "0w1a4davm1lgzpamwnba907aysmlrnygbqmfis2mqjx5m552a93z"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "KokaKiwi " ]; @@ -7970,7 +7970,7 @@ rec { version = "0.12.1"; edition = "2018"; sha256 = "0pmbr069sfg76z7wsssfk5ddcqd9ncp79fyz6zcm6yn115yc6jbc"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -7998,7 +7998,7 @@ rec { version = "0.4.1"; edition = "2021"; sha256 = "0rbxryl68bwv8hkjdjd8f37kdb10fncgsqrqksv64qy7s4y20vx5"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "cfg-if"; @@ -8024,7 +8024,7 @@ rec { version = "1.3.1"; edition = "2018"; sha256 = "0r95i5h7dr1xadp1ac9453w0s62s27hzkam356nyx2d9mqqmva7l"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Alex Crichton " "Carl Lerche " @@ -8055,7 +8055,7 @@ rec { edition = "2018"; sha256 = "111ir5k2b9ihz5nr9cz7cwm7fnydca7dx4hc7vr16scfzghxrzhy"; libName = "http_body"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Carl Lerche " "Lucio Franco " @@ -8079,7 +8079,7 @@ rec { edition = "2018"; sha256 = "0jm6jv4gxsnlsi1kzdyffjrj8cfr3zninnxpw73mvkxy4qzdj8dh"; libName = "http_body_util"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Carl Lerche " "Lucio Franco " @@ -8119,7 +8119,7 @@ rec { version = "1.10.1"; edition = "2018"; sha256 = "11ycd554bw2dkgw0q61xsa7a4jn1wb1xbfacmf3dbwsikvkkvgvd"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -8133,7 +8133,7 @@ rec { version = "1.0.3"; edition = "2021"; sha256 = "1aa9rd2sac0zhjqh24c9xvir96g188zldkx0hr6dnnlx5904cfyz"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Pyfisch " ]; @@ -8144,7 +8144,7 @@ rec { version = "2.1.3"; edition = "2021"; sha256 = "1msxd1akb3dydsa8qs461sds9krwnn31szvqgaq93p4x0ad1rdbc"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Leopold Arkham " ]; @@ -8162,7 +8162,7 @@ rec { version = "1.7.0"; edition = "2021"; sha256 = "07n59pxzlq621z611cbpvh7p4h9h15v0r7m5wgxygpx02d5aafpb"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -8274,7 +8274,7 @@ rec { edition = "2021"; sha256 = "0n6g8998szbzhnvcs1b7ibn745grxiqmlpg53xz206v826v3xjg3"; libName = "hyper_rustls"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "http"; @@ -8363,7 +8363,7 @@ rec { edition = "2021"; sha256 = "1a5fcnz0alrg4lx9xf6ja66ihaab58jnm5msnky804wg39cras9w"; libName = "hyper_util"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -8493,7 +8493,7 @@ rec { edition = "2021"; sha256 = "1yz980fmhaq9bdkasz35z63az37ci6kzzfhya83kgdqba61pzr9k"; libName = "iana_time_zone"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Andrew Straw " "René Kijewski " @@ -8546,7 +8546,7 @@ rec { edition = "2018"; sha256 = "17r6jmj31chn7xs9698r122mapq85mfnv98bb4pg6spm0si2f67k"; libName = "iana_time_zone_haiku"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "René Kijewski " ]; @@ -8563,7 +8563,7 @@ rec { version = "2.1.1"; edition = "2021"; sha256 = "0hsblchsdl64q21qwrs4hvc2672jrf466zivbj1bwyv606bn8ssc"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8609,7 +8609,7 @@ rec { version = "2.1.1"; edition = "2021"; sha256 = "1djvdc2f5ylmp1ymzv4gcnmq1s4hqfim9nxlcm173lsd01hpifpd"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8654,7 +8654,7 @@ rec { version = "2.1.1"; edition = "2021"; sha256 = "16dmn5596la2qm0r3vih0bzjfi0vx9a20yqjha6r1y3vnql8hv2z"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8708,7 +8708,7 @@ rec { version = "2.1.1"; edition = "2021"; sha256 = "02jnzizg6q75m41l6c13xc7nkc5q8yr1b728dcgfhpzw076wrvbs"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8719,7 +8719,7 @@ rec { version = "2.1.1"; edition = "2021"; sha256 = "16gvnnxr1xry6vn5275a1s0z0c8scp7gdkzqla6hqv3nawqwsgz9"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8774,7 +8774,7 @@ rec { version = "2.1.1"; edition = "2021"; sha256 = "16a80p8j371jkl10x26rh9gw6d1gyl7limpc008my15v8wv5p102"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8785,7 +8785,7 @@ rec { version = "2.1.1"; edition = "2021"; sha256 = "0576b7dizgyhpfa74kacv86y4g1p7v5ffd6c56kf1q82rvq2r5l5"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8849,7 +8849,7 @@ rec { version = "1.0.1"; edition = "2015"; sha256 = "0fac21q6pwns8gh1hz3nbq15j8fi441ncl6w4vlnd1cmc55kiq5r"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Ted Driggs " ]; @@ -8860,7 +8860,7 @@ rec { version = "1.1.0"; edition = "2018"; sha256 = "1pp4n7hppm480zcx411dsv9wfibai00wbpgnjj4qj0xa7kr7a21v"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The rust-url developers" ]; @@ -8891,7 +8891,7 @@ rec { version = "1.2.1"; edition = "2021"; sha256 = "0i0339pxig6mv786nkqcxnwqa87v4m94b2653f6k3aj0jmhfkjis"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The rust-url developers" ]; @@ -8917,7 +8917,7 @@ rec { version = "0.4.24"; edition = "2024"; sha256 = "00q41xq3wri74kpjmxb60mpkpj81n4pfa0wdqby2lhv4jipnwxw1"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -8966,7 +8966,7 @@ rec { version = "2.12.0"; edition = "2021"; sha256 = "17xs7cqf9nzv8iw8yzpvpjh43lcf9492i8a3xfia2ad9lp9ah5v7"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "equivalent"; @@ -9016,7 +9016,7 @@ rec { version = "0.18.2"; edition = "2021"; sha256 = "0rcbiqkvv4mr7lz783lys97z6alir0g29rsrkvajmdnzl35xzrmd"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "console"; @@ -9061,7 +9061,7 @@ rec { version = "2.11.0"; edition = "2018"; sha256 = "0c5i9sfi2asai28m8xp48k5gvwkqrg5ffpi767py6mzsrswv17s6"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Kris Price " ]; @@ -9081,7 +9081,7 @@ rec { edition = "2021"; sha256 = "1cl0wfq97wq4s1p4dl0ix5cfgsc5fn7l22ljgw9ab9x1qglypifv"; libName = "iri_string"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "YOSHIOKA Takuma " ]; @@ -9114,7 +9114,7 @@ rec { version = "1.0.5"; edition = "2021"; sha256 = "1i78ss45h94nwabbn6ki64a91djlli8zdwwbh56jj9kvhssbiaxs"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Nick Fitzgerald " ]; @@ -9133,7 +9133,7 @@ rec { version = "1.70.2"; edition = "2021"; sha256 = "15anlc47sbz0jfs9q8fhwf0h3vs2w4imc030shdnq54sny5i7jx6"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; features = { }; resolvedDefaultFeatures = [ "default" ]; @@ -9143,7 +9143,7 @@ rec { version = "1.0.15"; edition = "2018"; sha256 = "0b4fj9kz54dr3wam0vprjwgygvycyw8r0qwg7vp19ly8b2w16psa"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -9157,7 +9157,7 @@ rec { edition = "2021"; sha256 = "0rcfkz7r28r01a8m6n2q13aglm44q5g6gzsw5nmjmninrk4fw4dh"; libName = "js_sys"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -9184,7 +9184,7 @@ rec { version = "0.16.0"; edition = "2018"; sha256 = "0pq13h0r58n7qi0ml7d54x4i3871rjg49p1zvf29fzgyfxgjh132"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Michael Yang " ]; @@ -9229,7 +9229,7 @@ rec { version = "0.3.0"; edition = "2021"; sha256 = "0k7kc8jy5qxflg80r12zvpc34ir1h98i3xz9y0chnri3yjrdnjyf"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Serhii Potapov " ]; @@ -9247,7 +9247,7 @@ rec { edition = "2021"; sha256 = "13982c6nrvym7kk2g151cjcxnbx5l9nn0vrxmifz8cnbbpf4sfx1"; procMacro = true; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Serhii Potapov " ]; @@ -9277,7 +9277,7 @@ rec { version = "1.5.0"; edition = "2015"; sha256 = "1zk6dqqni0193xg6iijh7i3i44sryglwgvx20spdvwk3r6sbrlmv"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Marvin Löbel " ]; @@ -9291,7 +9291,7 @@ rec { version = "0.11.19"; edition = "2021"; sha256 = "0zzg5wk25ymgrvljp9ln7agvi26k85q15jsj1ykb5y0qi07f24wy"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Alexis Mousset " "Paolo Barbolini " @@ -9476,7 +9476,7 @@ rec { version = "0.2.177"; edition = "2021"; sha256 = "0xjrn69cywaii1iq2lib201bhlvan7czmrm604h5qcm28yps4x18"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -9493,7 +9493,7 @@ rec { version = "0.2.15"; edition = "2021"; sha256 = "1plpzf0p829viazdj57yw5dhmlr8ywf3apayxc2f2bq5a6mvryzr"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Jorge Aparicio " ]; @@ -9508,7 +9508,7 @@ rec { version = "0.1.10"; edition = "2021"; sha256 = "1jswil4ai90s4rh91fg8580x8nikni1zl3wnch4h01nvidqpwvs1"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "4lDO2 <4lDO2@protonmail.com>" ]; @@ -9541,7 +9541,7 @@ rec { edition = "2021"; sha256 = "0fghx0nn8nvbz5yzgizfcwd6ap2pislp68j8c1bwyr6sacxkq7fz"; libName = "linux_raw_sys"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Dan Gohman " ]; @@ -9557,7 +9557,7 @@ rec { version = "0.8.1"; edition = "2021"; sha256 = "0xsy8pfp9s802rsj1bq2ys2kbk1g36w5dr3gkfip7gphb5x60wv3"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -9574,7 +9574,7 @@ rec { version = "0.4.14"; edition = "2021"; sha256 = "0rg9mhx7vdpajfxvdjmgmlyrn20ligzqvn8ifmaz7dc79gkrjhr2"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -9597,7 +9597,7 @@ rec { version = "0.4.28"; edition = "2021"; sha256 = "0cklpzrpxafbaq1nyxarhnmcw9z3xcjrad3ch55mmr58xw2ha21l"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -9621,7 +9621,7 @@ rec { edition = "2021"; sha256 = "0m2139k466qj3bnpk66bwivgcx3z88qkxvlzk70vd65jq373jaqi"; libName = "lru_slab"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Benjamin Saunders " ]; @@ -9632,7 +9632,7 @@ rec { version = "0.2.0"; edition = "2018"; sha256 = "1sasssspdj2vwcwmbq3ra18d3qniapkimfcbr47zmx6750m5llni"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Eliza Weisman " ]; @@ -9653,7 +9653,7 @@ rec { version = "0.8.4"; edition = "2021"; sha256 = "1hzl48fwq1cn5dvshfly6vzkzqhfihya65zpj7nz7lfx82mgzqa7"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Ibraheem Ahmed " ]; @@ -9667,7 +9667,7 @@ rec { edition = "2018"; sha256 = "1kvq5rnpm4fzwmyv5nmnxygdhhb2369888a06gdc9pxyrzh7x7nq"; libName = "md5"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -9702,7 +9702,7 @@ rec { version = "2.7.6"; edition = "2021"; sha256 = "0wy29kf6pb4fbhfksjbs05jy2f32r2f3r1ga6qkmpz31k79h0azm"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Andrew Gallant " "bluss" @@ -9722,7 +9722,7 @@ rec { version = "0.3.17"; edition = "2015"; sha256 = "16hkibgvb9klh0w0jk5crr5xv90l3wlf77ggymzjmvl1818vnxv8"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -9733,7 +9733,7 @@ rec { version = "0.8.9"; edition = "2021"; sha256 = "05k3pdg8bjjzayq3rf0qhpirq9k37pxnasfn4arbs17phqn6m9qz"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Frommi " "oyvindln " @@ -9761,7 +9761,7 @@ rec { version = "1.1.0"; edition = "2021"; sha256 = "0wr816q3jrjwiajvw807lgi540i9s6r78a5fx4ycz3nwhq03pn39"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Carl Lerche " "Thomas de Zeeuw " @@ -9807,7 +9807,7 @@ rec { version = "0.13.1"; edition = "2021"; sha256 = "1lir70dd9cnsjlf20gi3i51ha9n7mlrkx74bx5gfszlcdk6bz9ir"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Alan Somers " ]; @@ -9848,7 +9848,7 @@ rec { edition = "2021"; sha256 = "1608qajqrz23xbvv81alc6wm4l24as1bsqg4shdh3sggq8231ji5"; procMacro = true; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Alan Somers " ]; @@ -9880,7 +9880,7 @@ rec { version = "8.0.0"; edition = "2021"; sha256 = "01cl5xng9d0gxf26h39m0l8lprgpa00fcc75ps1yzgbib1vn35yz"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "contact@geoffroycouprie.com" ]; @@ -9903,7 +9903,7 @@ rec { edition = "2021"; sha256 = "1ra088d885lbd21q1bxgpqdlk1zlndblmarn948jz2a40xsbjmvr"; libName = "nu_ansi_term"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "ogham@bsago.me" "Ryan Scheel (Havvy) " @@ -9932,7 +9932,7 @@ rec { edition = "2021"; sha256 = "1f903zd33i6hkjpsgwhqwi2wffnvkxbn6rv4mkgcjcqi7xr4zr55"; libName = "num_bigint"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -9966,7 +9966,7 @@ rec { edition = "2021"; sha256 = "1ndiyg82q73783jq18isi71a7mjh56wxrk52rlvyx0mi5z9ibmai"; libName = "num_conv"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Jacob Pratt " ]; @@ -9978,7 +9978,7 @@ rec { edition = "2018"; sha256 = "13w5g54a9184cqlbsq80rnxw4jj4s0d8wv75jsq5r2lms8gncsbr"; libName = "num_integer"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -10002,7 +10002,7 @@ rec { edition = "2021"; sha256 = "0h984rhdkkqd4ny9cif7y2azl3xdfb7768hb9irhpsch4q3gq787"; libName = "num_traits"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -10023,7 +10023,7 @@ rec { version = "0.6.2"; edition = "2024"; sha256 = "1ddvp7zr8cp0gn5ys3cc9mmhj5jnbj3jnwmz66npvil801w7ln3h"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Serhii Potapov " ]; @@ -10051,7 +10051,7 @@ rec { edition = "2024"; sha256 = "015lfhl96z7hv8myfvsx972w8l0b508wzmvr0s7xvvgsfnwk928l"; procMacro = true; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Serhii Potapov " ]; @@ -10103,7 +10103,7 @@ rec { version = "5.0.0"; edition = "2021"; sha256 = "0zfn67m93qfh9gyxxx1hj6yprk9dkr3hm1mi4ni23pqlj3kikqji"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Alex Crichton " "Florin Lipan " @@ -10183,7 +10183,7 @@ rec { version = "0.32.2"; edition = "2018"; sha256 = "0hc4cjwyngiy6k51hlzrlsxgv5z25vv7c2cp0ky1lckfic0259m6"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "memchr"; @@ -10216,7 +10216,7 @@ rec { version = "0.37.3"; edition = "2018"; sha256 = "1zikiy9xhk6lfx1dn2gn2pxbnfpmlkn0byd7ib1n720x0cgj0xpz"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "memchr"; @@ -10250,7 +10250,7 @@ rec { version = "1.21.3"; edition = "2021"; sha256 = "0b9x77lb9f1j6nqgf5aka4s2qj0nly176bpbrv6f9iakk5ff3xa2"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Aleksey Kladov " ]; @@ -10270,7 +10270,7 @@ rec { version = "1.70.2"; edition = "2021"; sha256 = "1zmla628f0sk3fhjdjqzgxhalr2xrfna958s632z65bjsfv8ljrq"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; features = { }; resolvedDefaultFeatures = [ "default" ]; @@ -10280,7 +10280,7 @@ rec { version = "3.12.0"; edition = "2018"; sha256 = "1hzzmxj8z69q5l1hzlnqnaa56ip9kvmghp8k750w6hwdvrgsrqfh"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Jan Schulte " "Stanislav Tkach " @@ -10319,7 +10319,7 @@ rec { version = "0.18.5"; edition = "2018"; sha256 = "0ndy8hvp24gs7yxw9wj81hs5rb36wxmpw4i38ylrfjy4p46ha3qy"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Josh " ]; @@ -10348,7 +10348,7 @@ rec { edition = "2018"; sha256 = "1l343ss6hlh0abbwjk6zah6mdlyhh1v1imflv3v86c6lsfyjhw1w"; procMacro = true; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Josh " ]; @@ -10383,7 +10383,7 @@ rec { version = "0.12.5"; edition = "2021"; sha256 = "06jsqh9aqmc94j2rlm8gpccilqm6bskbd67zf6ypfc0f4m9p91ck"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -10411,7 +10411,7 @@ rec { version = "0.9.12"; edition = "2021"; sha256 = "1hb4rggy70fwa1w9nb0svbyflzdc69h047482v2z3sx2hmcnh896"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -10452,7 +10452,7 @@ rec { edition = "2021"; sha256 = "093cs8slbd6kyfi6h12isz0mnaayf5ha8szri1xrbqj4inqhaahz"; libName = "parse_zoneinfo"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "regex"; @@ -10469,7 +10469,7 @@ rec { edition = "2021"; sha256 = "0ri1mim11zk0a9s40zdi288dfqvmdiryc7lw8vl46b59ifa08vrl"; libName = "password_hash"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -10505,7 +10505,7 @@ rec { edition = "2018"; sha256 = "02pxffpdqkapy292harq6asfjvadgp1s005fip9ljfsn9fvxgh2p"; procMacro = true; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -10516,7 +10516,7 @@ rec { version = "0.2.3"; edition = "2018"; sha256 = "1lrqp4ip05df8dzldq6gb2c1sq2gs54gly8lcnv3rhav1qhwx56z"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Manish Goregaokar " ]; @@ -10530,7 +10530,7 @@ rec { edition = "2018"; sha256 = "083jv1ai930azvawz2khv7w73xh8mnylk7i578cifndjn5y64kwv"; libName = "percent_encoding"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The rust-url developers" ]; @@ -10545,7 +10545,7 @@ rec { version = "2.8.3"; edition = "2021"; sha256 = "1x3xc1s5vhwswmmr51i60kfbcnp1zgdblsxbqd8dxvs0l0hpb7lq"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Dragoș Tiselice " ]; @@ -10576,7 +10576,7 @@ rec { edition = "2021"; sha256 = "1pp2g39k2vjdyzr89k8zx5y7pp3np4iv635jpyxzmfhd0fisjz8q"; procMacro = true; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Dragoș Tiselice " ]; @@ -10605,7 +10605,7 @@ rec { version = "2.8.3"; edition = "2021"; sha256 = "0hr80m5xzzrhzjvnmbawk72cxvn0ssc5j216gblynmspizch3d29"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Dragoș Tiselice " ]; @@ -10645,7 +10645,7 @@ rec { version = "2.8.3"; edition = "2021"; sha256 = "0nh6w1mv8hx0p1jli8s12j2w62ia2apsbyl69nf07yg9zqn7mwkj"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Dragoș Tiselice " ]; @@ -10672,7 +10672,7 @@ rec { version = "0.11.3"; edition = "2021"; sha256 = "0y6hxp1d48rx2434wgi5g8j1pr8s5jja29ha2b65435fh057imhz"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -10698,7 +10698,7 @@ rec { version = "0.13.1"; edition = "2021"; sha256 = "1pzswx5gdglgjgp4azyzwyr4gh031r0kcnpqq6jblga72z3jsmn1"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -10731,7 +10731,7 @@ rec { version = "0.11.3"; edition = "2021"; sha256 = "0si1n6zr93kzjs3wah04ikw8z6npsr39jw4dam8yi9czg2609y5f"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -10753,7 +10753,7 @@ rec { edition = "2021"; crateBin = []; sha256 = "0gc4np7s91ynrgw73s2i7iakhb4lzdv1gcyx7yhlc0n214a2701w"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -10779,7 +10779,7 @@ rec { version = "0.11.3"; edition = "2021"; sha256 = "1rallyvh28jqd9i916gk5gk2igdmzlgvv5q0l3xbf3m6y8pbrsk7"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -10801,7 +10801,7 @@ rec { version = "0.13.1"; edition = "2021"; sha256 = "0rpjchnswm0x5l4mz9xqfpw0j4w68sjvyqrdrv13h7lqqmmyyzz5"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -10824,7 +10824,7 @@ rec { edition = "2018"; sha256 = "16wzc7z7dfkf9bmjin22f5282783f6mdksnr0nv0j5ym5f9gyg1v"; libName = "pin_project_lite"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; }; "pin-utils" = rec { @@ -10833,7 +10833,7 @@ rec { edition = "2018"; sha256 = "117ir7vslsl2z1a7qzhws4pd01cg2d3338c47swjyvqv2n60v1wb"; libName = "pin_utils"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Josef Brandl " ]; @@ -10844,7 +10844,7 @@ rec { version = "1.8.0"; edition = "2021"; sha256 = "01qyv51ljbvhjbg8mva5c802b3dzrr95y6nd23wjh52xbjhvw3kl"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Ed Barnard " ]; @@ -10885,7 +10885,7 @@ rec { edition = "2018"; sha256 = "10s4cx9y3jvw0idip09ar52s2kymq8rq9a668f793shn1ar6fhpq"; libName = "portable_atomic"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; features = { "critical-section" = [ "dep:critical-section" ]; "default" = [ "fallback" ]; @@ -10898,7 +10898,7 @@ rec { version = "0.19.12"; edition = "2021"; sha256 = "0xmimkn7scd1kwri94hf2iani9wd6whig3053fv0vnkc3k78xi77"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -10960,7 +10960,7 @@ rec { sha256 = "1rna7k5zxsk5sv4lkx2hwydal9bckrpi9pj91srd2w2377srdpsn"; procMacro = true; libName = "postgres_derive"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -10990,7 +10990,7 @@ rec { edition = "2021"; sha256 = "1m6g7zzcdj4pgw2gs3anh57ylzbabpynq9s8h23fn5mrar86bvzv"; libName = "postgres_protocol"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -11048,7 +11048,7 @@ rec { edition = "2021"; sha256 = "15bh03mqaclmv9jhzvrb3xdrgr1q0c6ardmfbg9ns1apq2vhaipg"; libName = "postgres_types"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -11148,7 +11148,7 @@ rec { version = "0.1.4"; edition = "2021"; sha256 = "0xxg0pkfpq299wvwln409z4fk80rbv55phh3f1jhjajy5x1ljfdp"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -11175,7 +11175,7 @@ rec { version = "0.2.0"; edition = "2021"; sha256 = "14ckj2xdpkhv3h6l5sdmb9f1d57z8hbfpdldjc2vl5givq2y77j3"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Jacob Pratt " ]; @@ -11191,7 +11191,7 @@ rec { edition = "2021"; sha256 = "1abxx6qz5qnd43br1dd9b2savpihzjza8gb4fbzdql1gxp2f7sl5"; libName = "ppv_lite86"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The CryptoCorrosion Contributors" ]; @@ -11212,7 +11212,7 @@ rec { version = "3.1.3"; edition = "2021"; sha256 = "0wrm57acvagx0xmh5xffx5xspsr2kbggm698x0vks132fpjrxld5"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Nick Stevens " ]; @@ -11240,7 +11240,7 @@ rec { edition = "2021"; sha256 = "1yjz144yn3imq2r4mh7k9h0r8wv4yyjjj57bs0zwkscz24mlczkj"; libName = "predicates_core"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Nick Stevens " ]; @@ -11252,7 +11252,7 @@ rec { edition = "2021"; sha256 = "0p223d9y02ywwxs3yl68kziswz4da4vabz67jfhp7yqx71njvpbj"; libName = "predicates_tree"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Nick Stevens " ]; @@ -11273,7 +11273,7 @@ rec { version = "1.4.1"; edition = "2018"; sha256 = "0v8iq35ca4rw3rza5is3wjxwsf88303ivys07anc5yviybi31q9s"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Colin Kiegel " "Florent Fayolle " @@ -11300,7 +11300,7 @@ rec { edition = "2021"; sha256 = "10v9qi51n4phn1lrj5r94kjq7yhci9jrkqnn6wpan05yjsgb3711"; libName = "proc_macro_crate"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Bastian Köcher " ]; @@ -11320,7 +11320,7 @@ rec { edition = "2021"; sha256 = "1s29bz20xl2qk5ffs2mbdqknaj43ri673dz86axdbf47xz25psay"; libName = "proc_macro2"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " "Alex Crichton " @@ -11342,7 +11342,7 @@ rec { edition = "2018"; sha256 = "1j48ipc80pykvhx6yhndfa774s58ax1h6sm6mlhf09ls76f6l1mg"; libName = "proc_macro2_diagnostics"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sergio Benitez " ]; @@ -11383,7 +11383,7 @@ rec { version = "0.1.28"; edition = "2021"; sha256 = "00ad2j9vbsy79civwnc86wylgibpfckjzi8vhp1gvnmpqgnjy7yi"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Simonas Kazlauskas " ]; @@ -11404,7 +11404,7 @@ rec { version = "0.1.4"; edition = "2018"; sha256 = "1wd4wy0wxrcays4f1gy8gwcmxg7mskmivcv40p0hidh6xbvwqf07"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Koloski " ]; @@ -11425,7 +11425,7 @@ rec { edition = "2018"; sha256 = "1b69cav9wn67cixshizii0q5mlbl0lihx706vcrzm259zkdlbf0n"; procMacro = true; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Koloski " ]; @@ -11452,7 +11452,7 @@ rec { edition = "2021"; sha256 = "12bvsbnnmlnq9xg9in3h3080ag3sisafgpcn7lqyzhkz93kk58j2"; libName = "quick_xml"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "memchr"; @@ -11477,7 +11477,7 @@ rec { version = "0.11.9"; edition = "2021"; sha256 = "086gzj666dr3slmlynkvxlndy28hahgl361d6bf93hk3i6ahmqmr"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "bytes"; @@ -11580,7 +11580,7 @@ rec { edition = "2021"; sha256 = "0cca3mgja9p4w66f6sl1kfhj8rdf4mwsg1jxzssh9g63n14np47i"; libName = "quinn_proto"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "bytes"; @@ -11678,7 +11678,7 @@ rec { edition = "2021"; sha256 = "1gacawr17a2zkyri0r3m0lc9spzmxbq1by3ilyb8v2mdvjhcdpmd"; libName = "quinn_udp"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "libc"; @@ -11727,7 +11727,7 @@ rec { version = "1.0.41"; edition = "2018"; sha256 = "1lg108nb57lwbqlnpsii89cchk6i8pkcvrv88xh1p7a9gdz7c9ff"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -11749,7 +11749,7 @@ rec { version = "0.5.1"; edition = "2018"; sha256 = "0wvwq6w6rdsx1yxzr7ckspff0qk0q9252dzmxrd4c0kv97c9n334"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Kartikaya Gupta " ]; @@ -11764,7 +11764,7 @@ rec { edition = "2018"; sha256 = "03sbfm3g7myvzyylff6qaxk4z6fy76yv860yy66jiswc2m6b7kb9"; libName = "r_efi"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; features = { "core" = [ "dep:core" ]; "examples" = [ "native" ]; @@ -11776,7 +11776,7 @@ rec { version = "0.7.0"; edition = "2018"; sha256 = "02cxfi3ky3c4yhyqx9axqwhyaca804ws46nn4gc1imbk94nzycyw"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Nika Layzell " "myrrlyn " @@ -11788,7 +11788,7 @@ rec { version = "0.8.5"; edition = "2018"; sha256 = "013l6931nn7gkc23jz5mm3qdhf93jjf0fg64nz2lp4i51qd8vbrl"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11833,7 +11833,7 @@ rec { version = "0.9.2"; edition = "2021"; sha256 = "1lah73ainvrgl7brcxx0pwhpnqa3sm3qaj672034jz8i0q7pgckd"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11867,7 +11867,7 @@ rec { version = "0.3.1"; edition = "2018"; sha256 = "123x2adin558xbhvqb8w4f6syjsdkmqff8cxwhmjacpsl1ihmhg6"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11898,7 +11898,7 @@ rec { version = "0.9.0"; edition = "2021"; sha256 = "1jr5ygix7r60pz0s1cv3ms1f6pd1i9pcdmnxzzhjc3zn3mgjn0nk"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11936,7 +11936,7 @@ rec { version = "0.6.4"; edition = "2018"; sha256 = "0b4j2v4cb5krak1pv6kakv4sz6xcwbrmy2zckc32hsigbrwy82zc"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11961,7 +11961,7 @@ rec { version = "0.9.3"; edition = "2021"; sha256 = "0f3xhf16yks5ic6kmgxcpv1ngdhp48mmfy4ag82i1wnwh8ws3ncr"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11985,7 +11985,7 @@ rec { version = "0.32.7"; edition = "2021"; sha256 = "0i7grxrnqwa201r4kgcg4476x75drhmi2ifak3ks7dpszrkwfk01"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "bytes"; @@ -12102,7 +12102,7 @@ rec { edition = "2021"; sha256 = "0b9n38zsxylql36vybw18if68yc9jczxmbyzdwyhb9sifmag4azd"; libName = "syscall"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Jeremy Soller " ]; @@ -12125,7 +12125,7 @@ rec { edition = "2021"; sha256 = "0zdzc34qjva9xxgs889z5iz787g81hznk12zbk4g2xkgwq530m7k"; libName = "ref_cast"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -12144,7 +12144,7 @@ rec { sha256 = "1nkhn1fklmn342z5c4mzfzlxddv3x8yhxwwk02cj06djvh36065p"; procMacro = true; libName = "ref_cast_impl"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -12169,7 +12169,7 @@ rec { version = "1.12.2"; edition = "2021"; sha256 = "1m14zkg6xmkb0q5ah3y39cmggclsjdr1wpxfa4kf5wvm3wcw0fw4"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" "Andrew Gallant " @@ -12229,7 +12229,7 @@ rec { edition = "2021"; sha256 = "070z0j23pjfidqz0z89id1fca4p572wxpcr20a0qsv68bbrclxjj"; libName = "regex_automata"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" "Andrew Gallant " @@ -12291,7 +12291,7 @@ rec { edition = "2021"; sha256 = "0n7ggnpk0r32rzgnycy5xrc1yp2kq19m6pz98ch3c6dkaxw9hbbs"; libName = "regex_syntax"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" "Andrew Gallant " @@ -12308,7 +12308,7 @@ rec { version = "0.4.2"; edition = "2018"; sha256 = "0z4rrkycva0lcw0hxq479h4amxj9syn5vq4vb2qid5v2ylj3izki"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Koloski " ]; @@ -12334,7 +12334,7 @@ rec { version = "0.12.24"; edition = "2021"; sha256 = "0vx3f2n6hfnv81y66v5wayrqh6jlzz4gakky88m0hywz1d0lc2cx"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -12620,7 +12620,7 @@ rec { edition = "2021"; links = "ring_core_0_17_14_"; sha256 = "1dw32gv19ccq4hsx3ribhpdzri1vnrlcfqb2vj41xn4l49n9ws54"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "cfg-if"; @@ -12681,7 +12681,7 @@ rec { version = "0.7.45"; edition = "2021"; sha256 = "16vp6m4sq41smhvym8ijy4id1hr3vm4na7wy4bc63qdrhmiws24h"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Koloski " ]; @@ -12771,7 +12771,7 @@ rec { edition = "2021"; sha256 = "1h1jwmyivx7g88d41gzcjrqnax98m9algjd49hx0laqab4kisgah"; procMacro = true; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Koloski " ]; @@ -12798,7 +12798,7 @@ rec { version = "0.8.14"; edition = "2021"; sha256 = "1i1l6dhv7vws5vp0ikakj44fk597xi59g3j6ng1q55x3dz0xg3i2"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Evgeny Safronov " ]; @@ -12830,7 +12830,7 @@ rec { edition = "2021"; sha256 = "1nylmh7w2vpa1bwrnx1jfp2l4yz6i5qrmpic5zll166gfyj9kraj"; libName = "rmp_serde"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Evgeny Safronov " ]; @@ -12862,7 +12862,7 @@ rec { version = "1.39.0"; edition = "2021"; sha256 = "10i20blk3gma74qjl29c58dx4ma3cnbls9qjcy2bvac72x0gxbrm"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Paul Mason " ]; @@ -12981,7 +12981,7 @@ rec { edition = "2021"; sha256 = "18v9227aybig2rvr47817sx0kgpgw248f51dvhjbwgj1iys0r35f"; procMacro = true; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Paul Mason " ]; @@ -13005,7 +13005,7 @@ rec { edition = "2015"; sha256 = "1kja3nb0yhlm4j2p1hl8d7sjmn2g9fa1s4pj0qma5kj2lcndkxsn"; libName = "rustc_demangle"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Alex Crichton " ]; @@ -13020,7 +13020,7 @@ rec { edition = "2021"; sha256 = "03gz5lvd9ghcwsal022cgkq67dmimcgdjghfb5yb5d352ga06xrm"; libName = "rustc_hash"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -13035,7 +13035,7 @@ rec { version = "0.4.1"; edition = "2018"; sha256 = "14lvdsmr5si5qbqzrajgb6vfn69k0sfygrvfvr2mps26xwi3mjyg"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "semver"; @@ -13049,7 +13049,7 @@ rec { version = "1.1.2"; edition = "2021"; sha256 = "0gpz343xfzx16x82s1x336n0kr49j02cvhgxdvaq86jmqnigh5fd"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Dan Gohman " "Jakub Konka " @@ -13157,7 +13157,7 @@ rec { version = "0.23.34"; edition = "2021"; sha256 = "19vzmdybp5rlgr0bjb4fykp28w2d6fkqq150aamqykrbxvlqd5ba"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "log"; @@ -13228,7 +13228,7 @@ rec { edition = "2018"; sha256 = "0l3f3mrfkgdjrava7ibwzgwc4h3dljw3pdkbsi9rkwz3zvji9qyw"; libName = "rustls_pemfile"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "rustls-pki-types"; @@ -13248,7 +13248,7 @@ rec { edition = "2021"; sha256 = "0yjzsnpv1sjbnfxbbmrnyimd23jip48nav6l9hr1rjd06vcjl64l"; libName = "rustls_pki_types"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "web-time"; @@ -13277,7 +13277,7 @@ rec { edition = "2021"; sha256 = "0lpymb84bi5d2pm017n39nbiaa5cd046hgz06ir29ql6a8pzmz9g"; libName = "webpki"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "ring"; @@ -13313,8 +13313,8 @@ rec { edition = "2018"; sha256 = "0vfl70jhv72scd9rfqgr2n11m5i9l1acnk684m2w83w0zbqdx75k"; procMacro = true; - build = "build\\build.rs"; - libPath = "src\\lib.rs"; + build = "build/build.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -13325,7 +13325,7 @@ rec { version = "1.0.20"; edition = "2018"; sha256 = "07s855l8sb333h6bpn24pka5sp7hjk2w667xy6a0khkf6sqv5lr8"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -13339,7 +13339,7 @@ rec { edition = "2018"; sha256 = "00h5j1w87dmhnvbv9l8bic3y7xxsnjmssvifw2ayvgx9mb1ivz4k"; libName = "same_file"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -13357,7 +13357,7 @@ rec { version = "0.9.0"; edition = "2021"; sha256 = "0pqncln5hqbzbl2r3yayyr4a82jjf93h2cfxrn0xamvx77wr3lac"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Graham Esau " ]; @@ -13479,7 +13479,7 @@ rec { edition = "2021"; sha256 = "1ziqhh5c2yw0q8n4fxsfgl0c544avkvq3dq8iq5jzly6fx6dj5jh"; procMacro = true; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Graham Esau " ]; @@ -13509,7 +13509,7 @@ rec { version = "1.2.0"; edition = "2015"; sha256 = "0jcz9sd47zlsgcnm1hdw0664krxwb5gczlif4qngj2aif8vky54l"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "bluss" ]; @@ -13522,7 +13522,7 @@ rec { version = "4.1.0"; edition = "2015"; sha256 = "0sxsb64np6bvnppjz5hg4rqpnkczhsl8w8kf2a5lr1c08xppn40w"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "ticki " "Tom Almeida " @@ -13536,7 +13536,7 @@ rec { version = "1.0.27"; edition = "2018"; sha256 = "1qmi3akfrnqc2hfkdgcxhld5bv961wbk8my3ascv5068mc5fnryp"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -13551,7 +13551,7 @@ rec { version = "0.45.0"; edition = "2021"; sha256 = "083fbmszf1b4bp8ax4v9qharx878mc9vzs45i2917z51x0jmxf28"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13677,7 +13677,7 @@ rec { edition = "2021"; sha256 = "1s0k2mmw9cirb4n3r144pjjga0nw6171cs2s0sd483rv44127lfg"; libName = "sentry_anyhow"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13706,7 +13706,7 @@ rec { edition = "2021"; sha256 = "1q3s0wwnhdgvls64n6lfw1spvdr4g1fqv9a62zggcdmmb94kl9gk"; libName = "sentry_backtrace"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13734,7 +13734,7 @@ rec { edition = "2021"; sha256 = "0029h4zxkgpwl1xfn12vd7i3anpdyl86lrh7ijw6cvl352kq2zq2"; libName = "sentry_contexts"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13776,7 +13776,7 @@ rec { edition = "2021"; sha256 = "19c4p8ddwkp20wmwvfjj5dajw5lw23a2vgz9vf79db3iisf75dnk"; libName = "sentry_core"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13819,7 +13819,7 @@ rec { edition = "2021"; sha256 = "0k6h6crspbq5p3n7j6i4ms659rg2jajp7bx1zcmr26gv3nfbb1fw"; libName = "sentry_debug_images"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13841,7 +13841,7 @@ rec { edition = "2021"; sha256 = "0h1dii4cxnbi8g35p9bi08falgz22v2s5v3yq7q7mygq0hglgh0s"; libName = "sentry_panic"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13864,7 +13864,7 @@ rec { edition = "2021"; sha256 = "00zbfjcll5frvpbvc8nzyibc1lg439azidw1rhni84x6cq47i3s2"; libName = "sentry_tracing"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13913,7 +13913,7 @@ rec { edition = "2021"; sha256 = "1hdfmmswd16k4zbwg12z8j6lhxihmbqx11l86nf6ambvjv8x269c"; libName = "sentry_types"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13970,7 +13970,7 @@ rec { version = "1.0.228"; edition = "2021"; sha256 = "17mf4hhjxv5m90g42wmlbc61hdhlm6j9hwfkpcnd72rpgzm993ls"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Erick Tryzelaar " "David Tolnay " @@ -14004,7 +14004,7 @@ rec { version = "1.0.228"; edition = "2021"; sha256 = "1bb7id2xwx8izq50098s5j2sqrrvk31jbbrjqygyan6ask3qbls1"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Erick Tryzelaar " "David Tolnay " @@ -14033,7 +14033,7 @@ rec { edition = "2021"; sha256 = "0y8xm7fvmr2kjcd029g9fijpndh8csv5m20g4bd76w8qschg4h6m"; procMacro = true; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Erick Tryzelaar " "David Tolnay " @@ -14097,7 +14097,7 @@ rec { version = "1.0.145"; edition = "2021"; sha256 = "1767y6kxjf7gwpbv8bkhgwc50nhg46mqwm9gy9n122f7v1k6yaj0"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Erick Tryzelaar " "David Tolnay " @@ -14154,7 +14154,7 @@ rec { version = "0.1.20"; edition = "2021"; sha256 = "0mxls44p2ycmnxh03zpnlxxygq42w61ws7ir7r0ba6rp5s1gza8h"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -14189,7 +14189,7 @@ rec { version = "0.14.0"; edition = "2018"; sha256 = "19ha3lk8mdhzjavm09my9c8j96c554nlig5lsvvbvb08q3npnhcb"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sam Scott " ]; @@ -14239,7 +14239,7 @@ rec { version = "1.0.3"; edition = "2021"; sha256 = "14j32cqcs6jjdl1c111lz6s0hr913dnmy2kpfd75k2761ym4ahz2"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "serde_core"; @@ -14261,7 +14261,7 @@ rec { version = "0.7.1"; edition = "2018"; sha256 = "1zgklbdaysj3230xivihs30qi5vkhigg323a9m62k8jwf4a1qjfk"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Anthony Ramine " ]; @@ -14290,7 +14290,7 @@ rec { version = "0.10.6"; edition = "2018"; sha256 = "1fnnxlfg08xhkmwf2ahv634as30l1i3xhlhkvxflmasi5nd85gz3"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -14330,7 +14330,7 @@ rec { version = "0.10.9"; edition = "2018"; sha256 = "10xjj843v31ghsksd9sl9y12qfc48157j1xpb8v1ml39jy0psl57"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -14372,7 +14372,7 @@ rec { edition = "2018"; sha256 = "1xipjr4nqsgw34k7a2cgj9zaasl2ds6jwn89886kww93d32a637l"; libName = "sharded_slab"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Eliza Weisman " ]; @@ -14391,7 +14391,7 @@ rec { version = "1.3.0"; edition = "2015"; sha256 = "0r1y6bv26c1scpxvhg2cabimrmwgbp4p3wy6syj9n0c4s3q2znhg"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "comex " "Fenhl " @@ -14411,7 +14411,7 @@ rec { edition = "2015"; sha256 = "12y2v1ms5z111fymaw1v8k93m5chnkp21h0jknrydkj8zydp395j"; libName = "signal_hook_registry"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Michal 'vorner' Vaner " "Masaki Hara " @@ -14429,7 +14429,7 @@ rec { version = "0.1.5"; edition = "2018"; sha256 = "0vmpf7xaa0dnaikib5jlx6y4dxd3hxqz6l830qb079g7wcsgxag3"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Hans Kratz " ]; @@ -14443,7 +14443,7 @@ rec { version = "1.0.1"; edition = "2018"; sha256 = "17f35782ma3fn6sh21c027kjmd227xyrx06ffi8gw4xzv9yry6an"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Frank Denis " ]; @@ -14461,7 +14461,7 @@ rec { version = "0.4.11"; edition = "2018"; sha256 = "12bm4s88rblq02jjbi1dw31984w61y2ldn13ifk5gsqgy97f8aks"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Carl Lerche " ]; @@ -14476,7 +14476,7 @@ rec { version = "0.1.6"; edition = "2021"; sha256 = "0977cyp88xrwbpmqwzafkvv8vm9i0gdb5zjskb6f6pg45vvq0al8"; - libPath = "src\\lib.rs";type = [ "cdylib" "rlib" ]; + libPath = "src/lib.rs";type = [ "cdylib" "rlib" ]; authors = [ "Steven Allen " ]; @@ -14498,7 +14498,7 @@ rec { version = "1.15.1"; edition = "2018"; sha256 = "00xxdxxpgyq5vjnpljvkmy99xij5rxgh913ii1v16kzynnivgcb7"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Servo Project Developers" ]; @@ -14519,7 +14519,7 @@ rec { version = "0.6.1"; edition = "2021"; sha256 = "109qn0kjhqi5zds84qyqi5wn72g8azjhmf4b04fkgkrkd48rw4hp"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Alex Crichton " "Thomas de Zeeuw " @@ -14546,7 +14546,7 @@ rec { version = "1.2.1"; edition = "2015"; sha256 = "15h5h73ppqyhdhx6ywxfj88azmrpml9gl6zp3pwy2malqa6vxqkc"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Robert Grosse " ]; @@ -14560,7 +14560,7 @@ rec { version = "0.1.22"; edition = "2021"; sha256 = "0nbfvmqw9bsawv9g0k4bqilxkl7cszrb5dpfxnjcxbranjgv5y71"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Alex Crichton " "Simonas Kazlauskas " @@ -14604,7 +14604,7 @@ rec { version = "1.1.0"; edition = "2015"; sha256 = "0gsl6xmw10gvn3zs1rv99laj5ig7ylffnh71f9l34js4nr4r7sx2"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Nikolai Vazquez" ]; @@ -14616,7 +14616,7 @@ rec { version = "0.1.5"; edition = "2015"; sha256 = "1cb3jis4h2b767csk272zw92lc6jzfzvh8d6m1cd86yqjb9z6kbv"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -14641,7 +14641,7 @@ rec { version = "0.11.1"; edition = "2015"; sha256 = "0kzvqlw8hxqb7y598w1s0hxlnmi84sg5vsipp3yg5na5d1rvba3x"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Danny Guo " "maxbachmann " @@ -14653,7 +14653,7 @@ rec { version = "2.6.1"; edition = "2018"; sha256 = "14ijxaymghbl1p0wql9cib5zlwiina7kall6w7g89csprkgbvhhk"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Isis Lovecruft " "Henry de Valence " @@ -14667,7 +14667,7 @@ rec { version = "1.0.109"; edition = "2018"; sha256 = "0ds2if4600bd59wsv7jjgfkayfzy3hnazs394kz6zdkmna8l3dkj"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -14702,7 +14702,7 @@ rec { version = "2.0.108"; edition = "2021"; sha256 = "05z908svb0yw5wzrlv27l2i8j1d8l16hd5r8bjh809146myr2n6s"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -14736,7 +14736,7 @@ rec { version = "1.0.2"; edition = "2021"; sha256 = "0qvjyasd6w18mjg5xlaq5jgy84jsjfsvmnn12c13gypxbv75dwhb"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Actyx AG " ]; @@ -14759,7 +14759,7 @@ rec { version = "0.13.2"; edition = "2018"; sha256 = "1lh9lx3r3jb18f8sbj29am5hm9jymvbwh6jb1izsnnxgvgrp12kj"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Nika Layzell " ]; @@ -14792,7 +14792,7 @@ rec { version = "1.0.1"; edition = "2015"; sha256 = "0sc3gl4nldqpvyhqi3bbd0l9k7fngrcl4zs47n314nqqk4bpx4sm"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Elliott Linder " "myrrlyn " @@ -14804,7 +14804,7 @@ rec { version = "3.23.0"; edition = "2021"; sha256 = "05igl2gml6z6i2va1bv49f9f1wb3f752c2i63lvlb9s2vxxwfc9d"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Steven Allen " "The Rust Project Developers" @@ -14845,7 +14845,7 @@ rec { version = "1.20.1"; edition = "2018"; sha256 = "08k743nwb2mykpbwnipa1k3v8b1igg39pmdc7ggk4b8z5354n078"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Vincent Prouillet " ]; @@ -14935,7 +14935,7 @@ rec { version = "0.5.1"; edition = "2021"; sha256 = "10s610ax6nb70yi7xfmwcb6d3wi9sj5isd0m63gy2pizr2zgwl4g"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; }; "thiserror 1.0.69" = rec { @@ -14943,7 +14943,7 @@ rec { version = "1.0.69"; edition = "2021"; sha256 = "0lizjay08agcr5hs9yfzzj6axs53a2rgx070a1dsi3jpkcrzbamn"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -14960,7 +14960,7 @@ rec { version = "2.0.17"; edition = "2021"; sha256 = "1j2gixhm2c3s6g96vd0b01v0i0qz1101vfmw0032mdqj1z58fdgn"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -14982,7 +14982,7 @@ rec { sha256 = "1h84fmn2nai41cxbhk6pqf46bxqq1b344v8yz089w1chzi76rvjg"; procMacro = true; libName = "thiserror_impl"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -15009,7 +15009,7 @@ rec { sha256 = "04y92yjwg1a4piwk9nayzjfs07sps8c4vq9jnsfq9qvxrn75rw9z"; procMacro = true; libName = "thiserror_impl"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -15034,7 +15034,7 @@ rec { version = "1.1.9"; edition = "2021"; sha256 = "1191jvl8d63agnq06pcnarivf63qzgpws5xa33hgc92gjjj4c0pn"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -15052,7 +15052,7 @@ rec { version = "0.3.44"; edition = "2021"; sha256 = "179awlwb36zly3nmz5h9awai1h4pbf1d83g2pmvlw4v1pgixkrwi"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Jacob Pratt " "Time contributors" @@ -15135,7 +15135,7 @@ rec { edition = "2021"; sha256 = "0sqwhg7n47gbffyr0zhipqcnskxgcgzz1ix8wirqs2rg3my8x1j0"; libName = "time_core"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Jacob Pratt " "Time contributors" @@ -15149,7 +15149,7 @@ rec { sha256 = "1wzb6hnl35856f58cx259q7ijc4c7yis0qsnydvw5n8jbw9b1krh"; procMacro = true; libName = "time_macros"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Jacob Pratt " "Time contributors" @@ -15173,7 +15173,7 @@ rec { version = "0.8.2"; edition = "2021"; sha256 = "0sa8z88axdsf088hgw5p4xcyi6g3w3sgbb6qdp81bph9bk2fkls2"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -15204,7 +15204,7 @@ rec { version = "1.10.0"; edition = "2018"; sha256 = "1yhk0qdqyiaa4v2j9h8pzax5gxgwpz4da0lcphfil6g6pk1zv9dz"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Lokathor " ]; @@ -15234,7 +15234,7 @@ rec { version = "0.1.1"; edition = "2018"; sha256 = "081gag86208sc3y6sdkshgw3vysm5d34p431dzw0bshz66ncng0z"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Soveu " ]; @@ -15245,7 +15245,7 @@ rec { version = "1.48.0"; edition = "2021"; sha256 = "0244qva5pksy8gam6llf7bd6wbk2vkab9lx26yyf08dix810wdpz"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Tokio Contributors " ]; @@ -15363,7 +15363,7 @@ rec { sha256 = "19czvgliginbzyhhfbmj77wazqn2y8g27y2nirfajdlm41bphh5g"; procMacro = true; libName = "tokio_macros"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Tokio Contributors " ]; @@ -15390,7 +15390,7 @@ rec { edition = "2021"; sha256 = "17kc1zr0j7dsqvkb1lxvvn77w92qiqv0jd0p52v09zickdnxch1b"; libName = "tokio_postgres"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -15520,7 +15520,7 @@ rec { edition = "2021"; sha256 = "0qggwknz9w4bbsv1z158hlnpkm97j3w8v31586jipn99byaala8p"; libName = "tokio_rustls"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "rustls"; @@ -15559,7 +15559,7 @@ rec { edition = "2021"; sha256 = "1r9wdrg1k5hna3m0kc8kcb8jdb6n52g7vnw93kw2xxw4cyc7qc0l"; libName = "tokio_util"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Tokio Contributors " ]; @@ -15615,7 +15615,7 @@ rec { version = "0.9.8"; edition = "2021"; sha256 = "1n569s0dgdmqjy21wf85df7kx3vb1zgin3pc2rvy4j8lnqgqpp7h"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "serde_core"; @@ -15667,7 +15667,7 @@ rec { version = "0.7.3"; edition = "2021"; sha256 = "0cs5f8y4rdsmmwipjclmq97lrwppjy2qa3vja4f9d5xwxcwvdkgj"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "serde_core"; @@ -15689,7 +15689,7 @@ rec { version = "0.23.7"; edition = "2021"; sha256 = "13cgp4y6prad1lh18bbg64zkq48hafq7xzs4fb0hwpcv1mnyz1b4"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "indexmap"; @@ -15725,7 +15725,7 @@ rec { version = "1.0.4"; edition = "2021"; sha256 = "03l0750d1cyliij9vac4afpp1syh1a6yhbbalnslpnsvsdlf5jy0"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "winnow"; @@ -15747,7 +15747,7 @@ rec { edition = "2021"; sha256 = "0wmz0ri3d9ml04wrd5qk5a6xq70g8zlzc2g9k61gi3pm10hka97i"; libName = "totp_rs"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Cleo Rebert " ]; @@ -15790,7 +15790,7 @@ rec { version = "0.5.2"; edition = "2018"; sha256 = "1ybmd59nm4abl9bsvy6rx31m4zvzp5rja2slzpn712y9b68ssffh"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Tower Maintainers " ]; @@ -15882,7 +15882,7 @@ rec { edition = "2018"; sha256 = "1wh51y4rf03f91c6rvli6nwzsarx7097yx6sqlm75ag27pbjzj5d"; libName = "tower_http"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Tower Maintainers " ]; @@ -16004,7 +16004,7 @@ rec { edition = "2018"; sha256 = "03kq92fdzxin51w8iqix06dcfgydyvx7yr6izjq0p626v9n2l70j"; libName = "tower_layer"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Tower Maintainers " ]; @@ -16016,7 +16016,7 @@ rec { edition = "2018"; sha256 = "1hzfkvkci33ra94xjx64vv3pp0sq346w06fpkcdwjcid7zhvdycd"; libName = "tower_service"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Tower Maintainers " ]; @@ -16027,7 +16027,7 @@ rec { version = "0.1.41"; edition = "2018"; sha256 = "1l5xrzyjfyayrwhvhldfnwdyligi1mpqm8mzbi2m1d6y6p2hlkkq"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Eliza Weisman " "Tokio Contributors " @@ -16066,7 +16066,7 @@ rec { sha256 = "00v9bhfgfg3v101nmmy7s3vdwadb7ngc8c1iw6wai9vj9sv3lf41"; procMacro = true; libName = "tracing_attributes"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Tokio Contributors " "Eliza Weisman " @@ -16097,7 +16097,7 @@ rec { edition = "2018"; sha256 = "0y3nc4mpnr79rzkrcylv5f5bnjjp19lsxwis9l4kzs97ya0jbldr"; libName = "tracing_core"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Tokio Contributors " ]; @@ -16129,7 +16129,7 @@ rec { edition = "2018"; sha256 = "1m9447bxq7236avgl6n5yb2aqwplrghm61dgipw03mh7ad7s2m10"; libName = "tracing_subscriber"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Eliza Weisman " "David Barsky " @@ -16221,7 +16221,7 @@ rec { edition = "2015"; sha256 = "0jqijrrvm1pyq34zn1jmy2vihd4jcrjlvsh4alkjahhssjnsn8g4"; libName = "try_lock"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -16232,7 +16232,7 @@ rec { version = "1.19.0"; edition = "2018"; sha256 = "1fw2mpbn2vmqan56j1b3fbpcdg80mz26fm53fs16bq5xcq84hban"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Paho Lurie-Gregg " "Andre Bogus " @@ -16248,7 +16248,7 @@ rec { edition = "2021"; sha256 = "0wc9p07sqwz320848i52nvyjvpsxkx3kv5bfbmm6s35809fdk5i8"; libName = "ucd_trie"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -16262,7 +16262,7 @@ rec { version = "0.1.1"; edition = "2015"; sha256 = "1j1xd1rryml4j1hf07kahva9d5ym8m9jz9z20hfdpr1jrbq8jbxp"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Ignacio Corderi " ]; @@ -16280,7 +16280,7 @@ rec { edition = "2018"; sha256 = "1xcxwbsqa24b8vfchhzyyzgj0l6bn51ib5v8j6krha0m77dva72w"; libName = "unicode_bidi"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Servo Project Developers" ]; @@ -16301,7 +16301,7 @@ rec { edition = "2018"; sha256 = "1x8xrz17vqi6qmkkcqr8cyf0an76ig7390j9cnqnk47zyv2gf4lk"; libName = "unicode_ident"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -16313,7 +16313,7 @@ rec { edition = "2018"; sha256 = "0mnrk809z3ix1wspcqy97ld5wxdb31f3xz6nsvg5qcv289ycjcsh"; libName = "unicode_normalization"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "kwantam " "Manish Goregaokar " @@ -16336,7 +16336,7 @@ rec { edition = "2021"; sha256 = "1l3mbgzwz8g14xcs09p4ww3hjkjcf0i1ih13nsg72bhj8n5jl3z7"; libName = "unicode_properties"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Charles Lew " "Manish Goregaokar " @@ -16352,7 +16352,7 @@ rec { edition = "2018"; sha256 = "14qla2jfx74yyb9ds3d2mpwpa4l4lzb9z57c6d2ba511458z5k7n"; libName = "unicode_segmentation"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "kwantam " "Manish Goregaokar " @@ -16366,7 +16366,7 @@ rec { edition = "2021"; sha256 = "0m7jjzlcccw716dy9423xxh0clys8pfpllc5smvfxrzdf66h9b5l"; libName = "unicode_width"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "kwantam " "Manish Goregaokar " @@ -16385,7 +16385,7 @@ rec { edition = "2018"; sha256 = "05rq0asf2f1q5vrcv4bwf0c3y6q20asqkiqpr8wqyrfxyb7h4d1j"; libName = "unit_prefix"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Fabio Valentini " "Benjamin Sago " @@ -16400,7 +16400,7 @@ rec { version = "0.9.0"; edition = "2018"; sha256 = "1ha7ib98vkc538x0z60gfn0fc5whqdd85mb87dvisdcaifi6vjwf"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Brian Smith " ]; @@ -16411,7 +16411,7 @@ rec { version = "3.1.2"; edition = "2018"; sha256 = "0dv5yhcl3g96vax2b8xinks28kzbkf78d35lx71kyjlay4ji1flr"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Martin Algesten " "Jacob Hoffman-Andrews " @@ -16500,7 +16500,7 @@ rec { edition = "2021"; sha256 = "1lpm7075y1bkg1snc678sxmwhk75n3flhq1l6hhncdc324f57d30"; libName = "ureq_proto"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Martin Algesten " ]; @@ -16537,7 +16537,7 @@ rec { version = "2.5.7"; edition = "2018"; sha256 = "0nzghdv0kcksyvri0npxbjzyx2ihprks5k590y77bld355m17g08"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The rust-url developers" ]; @@ -16587,7 +16587,7 @@ rec { version = "2.1.3"; edition = "2021"; sha256 = "1nj99jp37k47n0hvaz5fvz7z6jd0sb4ppvfy3nphr1zbnyixpy6s"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Kornel " "Bertram Truong " @@ -16600,7 +16600,7 @@ rec { edition = "2015"; sha256 = "1a9ns3fvgird0snjkd3wbdhwd3zdpc2h5gpyybrfr6ra5pkqxk09"; libName = "utf8"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Simon Sapin " ]; @@ -16611,7 +16611,7 @@ rec { version = "1.0.4"; edition = "2021"; sha256 = "1gmna9flnj8dbyd8ba17zigrp9c4c3zclngf5lnb5yvz1ri41hdn"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Henri Sivonen " ]; @@ -16622,7 +16622,7 @@ rec { version = "0.2.2"; edition = "2018"; sha256 = "088807qwjq46azicqwbhlmzwrbkz7l4hpw43sdkdyyk524vdxaq6"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Joe Wilm " "Christian Duerr " @@ -16636,7 +16636,7 @@ rec { version = "1.18.1"; edition = "2018"; sha256 = "18kh01qmfayn4psap52x8xdjkzw2q8bcbpnhhxjs05dr22mbi1rg"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Ashley Mannix" "Dylan DPC" @@ -16711,7 +16711,7 @@ rec { version = "0.1.1"; edition = "2021"; sha256 = "0r9srp55v7g27s5bg7a2m095fzckrcdca5maih6dy9bay6fflwxs"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; features = { "default" = [ "std" ]; "derive" = [ "valuable-derive" ]; @@ -16725,7 +16725,7 @@ rec { version = "0.9.5"; edition = "2015"; sha256 = "0nhhi4i5x89gm911azqbn7avs9mdacw2i3vcz3cnmz3mv4rqz4hb"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sergio Benitez " ]; @@ -16736,7 +16736,7 @@ rec { version = "2.5.0"; edition = "2018"; sha256 = "0jsy7a710qv8gld5957ybrnc07gavppp963gs32xk4ag8130jy99"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -16758,7 +16758,7 @@ rec { version = "0.3.1"; edition = "2018"; sha256 = "03hbfrnvqqdchb5kgxyavb9jabwza0dmh2vw5kg0dq8rxl57d9xz"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -16775,7 +16775,7 @@ rec { version = "0.11.1+wasi-snapshot-preview1"; edition = "2018"; sha256 = "0jx49r7nbkbhyfrfyhz0bm4817yrnxgd3jiwwwfv0zl439jyrwyc"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The Cranelift Project Developers" ]; @@ -16792,7 +16792,7 @@ rec { version = "1.0.1+wasi-0.2.4"; edition = "2021"; sha256 = "1rsqmpspwy0zja82xx7kbkbg9fv34a4a2if3sbd76dy64a244qh5"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "wit-bindgen"; @@ -16813,7 +16813,7 @@ rec { version = "0.1.0"; edition = "2018"; sha256 = "0nw5h9nmcl4fyf4j5d4mfdjfgvwi1cakpi349wc4zrr59wxxinmq"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; }; "wasm-bindgen" = rec { @@ -16822,7 +16822,7 @@ rec { edition = "2021"; sha256 = "0q7aqnjwl9dn5sql46nbhzz63v3q0mdp3rsv7zcvn7s1zhypk5fs"; libName = "wasm_bindgen"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -16874,7 +16874,7 @@ rec { edition = "2021"; sha256 = "186l2nhznpbxcl2475dlm1pd7dfk5lqnz8frgk67qpkddh88h7sm"; libName = "wasm_bindgen_futures"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -16921,7 +16921,7 @@ rec { sha256 = "1hjrmfnnjcksmf4kizsb78a0apr6ym73iwlhhszsf14ya0s469h4"; procMacro = true; libName = "wasm_bindgen_macro"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -16945,7 +16945,7 @@ rec { edition = "2021"; sha256 = "1g3ydkp5js5qg56a30w9v090v5byslay2lidjiifa8pkv4ww62s2"; libName = "wasm_bindgen_macro_support"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -16983,7 +16983,7 @@ rec { links = "wasm_bindgen"; sha256 = "0xmgnvf5m91lw6avjxha1v76bm27g2q5jw7c4lyb7g44ijiiiwkn"; libName = "wasm_bindgen_shared"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -17001,7 +17001,7 @@ rec { edition = "2021"; sha256 = "18d9k5f92czaj27zmw20nzcnax5rdcx68r3s3ypg8irss309a7rs"; libName = "web_sys"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -17490,7 +17490,7 @@ rec { edition = "2021"; sha256 = "1fx05yqx83dhx628wb70fyy10yjfq1jpl20qfqhdkymi13rq0ras"; libName = "web_time"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "js-sys"; @@ -17514,7 +17514,7 @@ rec { edition = "2021"; sha256 = "1f49w0s7f3fgczvjri179wh2a9g8jpkmdi5bi5l8p7ylsb031c9j"; libName = "webpki_roots"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "rustls-pki-types"; @@ -17530,7 +17530,7 @@ rec { version = "1.6.1"; edition = "2018"; sha256 = "0zg9sz669vhqyxysn4lymnianj29jxs2vl6k2lqcl0kp0yslsjjx"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "libredox"; @@ -17562,7 +17562,7 @@ rec { version = "0.3.9"; edition = "2015"; sha256 = "06gl025x418lchw1wxj64ycr7gha83m44cjr5sarhynd9xkrm0sw"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Peter Atashian " ]; @@ -17589,7 +17589,7 @@ rec { edition = "2015"; sha256 = "1dmpa6mvcvzz16zg6d5vrfy4bxgg541wxrcip7cnshi06v38ffxc"; libName = "winapi_i686_pc_windows_gnu"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Peter Atashian " ]; @@ -17601,7 +17601,7 @@ rec { edition = "2021"; sha256 = "08hdl7mkll7pz8whg869h58c1r9y7in0w0pk8fm24qc77k0b39y2"; libName = "winapi_util"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -17621,7 +17621,7 @@ rec { edition = "2015"; sha256 = "0gqq64czqb64kskjryj8isp62m2sgvx25yyj3kpc2myh85w24bki"; libName = "winapi_x86_64_pc_windows_gnu"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Peter Atashian " ]; @@ -17633,7 +17633,7 @@ rec { edition = "2021"; sha256 = "1swxpv1a8qvn3bkxv8cn663238h2jccq35ff3nsj61jdsca3ms5q"; libName = "windows_core"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "windows-implement"; @@ -17674,7 +17674,7 @@ rec { sha256 = "1psxhmklzcf3wjs4b8qb42qb6znvc142cb5pa74rsyxm1822wgh5"; procMacro = true; libName = "windows_implement"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "proc-macro2"; @@ -17702,7 +17702,7 @@ rec { sha256 = "0n73cwrn4247d0axrk7gjp08p34x1723483jxjxjdfkh4m56qc9z"; procMacro = true; libName = "windows_interface"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "proc-macro2"; @@ -17729,7 +17729,7 @@ rec { edition = "2021"; sha256 = "12kr1p46dbhpijr4zbwr2spfgq8i8c5x55mvvfmyl96m01cx4sjy"; libName = "windows_link"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -17741,7 +17741,7 @@ rec { edition = "2021"; sha256 = "1rag186yfr3xx7piv5rg8b6im2dwcf8zldiflvb22xbzwli5507h"; libName = "windows_link"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; }; "windows-result" = rec { @@ -17750,7 +17750,7 @@ rec { edition = "2021"; sha256 = "1d9yhmrmmfqh56zlj751s5wfm9a2aa7az9rd7nn5027nxa4zm0bp"; libName = "windows_result"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "windows-link"; @@ -17769,7 +17769,7 @@ rec { edition = "2021"; sha256 = "14bhng9jqv4fyl7lqjz3az7vzh8pw0w4am49fsqgcz67d67x0dvq"; libName = "windows_strings"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "windows-link"; @@ -17788,7 +17788,7 @@ rec { edition = "2021"; sha256 = "0gd3v4ji88490zgb6b5mq5zgbvwv7zx1ibn8v3x83rwcdbryaar8"; libName = "windows_sys"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -18037,7 +18037,7 @@ rec { edition = "2021"; sha256 = "0fw5672ziw8b3zpmnbp9pdv1famk74f1l9fcbc3zsrzdg56vqf0y"; libName = "windows_sys"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -18297,7 +18297,7 @@ rec { edition = "2021"; sha256 = "1jrbc615ihqnhjhxplr2kw7rasrskv9wj3lr80hgfd42sbj01xgj"; libName = "windows_sys"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -18563,7 +18563,7 @@ rec { edition = "2021"; sha256 = "1z7k3y9b6b5h52kid57lvmvm05362zv1v8w0gc7xyv5xphlp44xf"; libName = "windows_sys"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "windows-link"; @@ -18826,7 +18826,7 @@ rec { edition = "2021"; sha256 = "0wwrx625nwlfp7k93r2rra568gad1mwd888h1jwnl0vfg5r4ywlv"; libName = "windows_targets"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -18880,7 +18880,7 @@ rec { edition = "2021"; sha256 = "1wv9j2gv3l6wj3gkw5j1kr6ymb5q6dfc42yvydjhv3mqa7szjia9"; libName = "windows_targets"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "windows-link"; @@ -18936,7 +18936,7 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "1lrcq38cr2arvmz19v32qaggvj8bh1640mdm9c2fr877h0hn591j"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -18947,7 +18947,7 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "0lqvdm510mka9w26vmga7hbkmrw9glzc90l4gya5qbxlm1pl3n59"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; }; "windows_aarch64_msvc 0.52.6" = rec { @@ -18955,7 +18955,7 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "0sfl0nysnz32yyfh773hpi49b1q700ah6y7sacmjbqjjn5xjmv09"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -18966,7 +18966,7 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "01jh2adlwx043rji888b22whx4bm8alrk3khjpik5xn20kl85mxr"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; }; "windows_i686_gnu 0.52.6" = rec { @@ -18974,7 +18974,7 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "02zspglbykh1jh9pi7gn8g1f97jh1rrccni9ivmrfbl0mgamm6wf"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -18985,7 +18985,7 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "18wkcm82ldyg4figcsidzwbg1pqd49jpm98crfz0j7nqd6h6s3ln"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; }; "windows_i686_gnullvm 0.52.6" = rec { @@ -18993,7 +18993,7 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "0rpdx1537mw6slcpqa0rm3qixmsb79nbhqy5fsm3q2q9ik9m5vhf"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -19004,7 +19004,7 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "030qaxqc4salz6l4immfb6sykc6gmhyir9wzn2w8mxj8038mjwzs"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; }; "windows_i686_msvc 0.52.6" = rec { @@ -19012,7 +19012,7 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "0rkcqmp4zzmfvrrrx01260q3xkpzi6fzi2x2pgdcdry50ny4h294"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -19023,7 +19023,7 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "1hi6scw3mn2pbdl30ji5i4y8vvspb9b66l98kkz350pig58wfyhy"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; }; "windows_x86_64_gnu 0.52.6" = rec { @@ -19031,7 +19031,7 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "0y0sifqcb56a56mvn7xjgs8g43p33mfqkd8wj1yhrgxzma05qyhl"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -19042,7 +19042,7 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "16d4yiysmfdlsrghndr97y57gh3kljkwhfdbcs05m1jasz6l4f4w"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; }; "windows_x86_64_gnullvm 0.52.6" = rec { @@ -19050,7 +19050,7 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "03gda7zjx1qh8k9nnlgb7m3w3s1xkysg55hkd1wjch8pqhyv5m94"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -19061,7 +19061,7 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "1qbspgv4g3q0vygkg8rnql5c6z3caqv38japiynyivh75ng1gyhg"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; }; "windows_x86_64_msvc 0.52.6" = rec { @@ -19069,7 +19069,7 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "1v7rb5cibyzx8vak29pdrk8nx9hycsjs4w0jgms08qk49jl6v7sq"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -19080,7 +19080,7 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "0l6npq76vlq4ksn4bwsncpr8508mk0gmznm6wnhjg95d19gzzfyn"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; }; "winnow" = rec { @@ -19088,7 +19088,7 @@ rec { version = "0.7.13"; edition = "2021"; sha256 = "1krrjc1wj2vx0r57m9nwnlc1zrhga3fq41d8w9hysvvqb5mj7811"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; dependencies = [ { name = "memchr"; @@ -19112,7 +19112,7 @@ rec { edition = "2021"; sha256 = "0ngysw50gp2wrrfxbwgp6dhw1g6sckknsn3wm7l00vaf7n48aypi"; libName = "wit_bindgen"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Alex Crichton " ]; @@ -19129,7 +19129,7 @@ rec { version = "0.6.2"; edition = "2021"; sha256 = "1fg08y97n6vk7l0rnjggw3xyrii6dcqg54wqaxldrlk98zdy1pcy"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -19143,7 +19143,7 @@ rec { version = "0.5.1"; edition = "2018"; sha256 = "1vdrfy7i2bznnzjdl9vvrzljvs4s3qm8bnlgqwln6a941gy61wq5"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "myrrlyn " ]; @@ -19166,7 +19166,7 @@ rec { version = "1.0.1"; edition = "2021"; sha256 = "0jdh55jyv0dpd38ij4qh60zglbw9aa8wafqai6m0wa7xaxk3mrfg"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Sergio Benitez " ]; @@ -19185,7 +19185,7 @@ rec { version = "0.8.1"; edition = "2021"; sha256 = "0m29dm0bf5iakxgma0bj6dbmc3b8qi9b1vaw9sa76kdqmz3fbmkj"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Manish Goregaokar " ]; @@ -19223,7 +19223,7 @@ rec { sha256 = "0pbyja133jnng4mrhimzdq4a0y26421g734ybgz8wsgbfhl0andn"; procMacro = true; libName = "yoke_derive"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Manish Goregaokar " ]; @@ -19253,7 +19253,7 @@ rec { version = "0.8.27"; edition = "2021"; sha256 = "0b1870gf2zzlckca69v2k4mqwmf8yh2li37qldnzvvd3by58g508"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Joshua Liebow-Feeser " "Jack Wrenn " @@ -19292,7 +19292,7 @@ rec { sha256 = "0c9qrylm2p55dvaplxsl24ma48add9qk4y0d6kjbkllaqvcvill8"; procMacro = true; libName = "zerocopy_derive"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Joshua Liebow-Feeser " "Jack Wrenn " @@ -19319,7 +19319,7 @@ rec { version = "0.1.6"; edition = "2021"; sha256 = "19dyky67zkjichsb7ykhv0aqws3q0jfvzww76l66c19y6gh45k2h"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Manish Goregaokar " ]; @@ -19344,7 +19344,7 @@ rec { sha256 = "00l5niw7c1b0lf1vhvajpjmcnbdp2vn96jg4nmkhq2db0rp5s7np"; procMacro = true; libName = "zerofrom_derive"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Manish Goregaokar " ]; @@ -19374,7 +19374,7 @@ rec { version = "1.8.2"; edition = "2021"; sha256 = "1l48zxgcv34d7kjskr610zqsm6j2b4fcr2vfh9jm9j1jgvk58wdr"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The RustCrypto Project Developers" ]; @@ -19392,7 +19392,7 @@ rec { version = "0.2.3"; edition = "2021"; sha256 = "0lbqznlqazmrwwzslw0ci7p3pqxykrbfhq29npj0gmb2amxc2n9a"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -19431,7 +19431,7 @@ rec { version = "0.11.5"; edition = "2021"; sha256 = "00m0p47k2g9mkv505hky5xh3r6ps7v8qc0dy4pspg542jj972a3c"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -19471,7 +19471,7 @@ rec { sha256 = "1wsig4h5j7a1scd5hrlnragnazjny9qjc44hancb6p6a76ay7p7a"; procMacro = true; libName = "zerovec_derive"; - libPath = "src\\lib.rs"; + libPath = "src/lib.rs"; authors = [ "Manish Goregaokar " ]; @@ -19559,8 +19559,8 @@ rec { # Filter out editor backup / swap files. || lib.hasSuffix "~" baseName - || builtins.match "^\\.sw[a-z]$$" baseName != null - || builtins.match "^\\..*\\.sw[a-z]$$" baseName != null + || builtins.match "^/.sw[a-z]$$" baseName != null + || builtins.match "^/..*/.sw[a-z]$$" baseName != null || lib.hasSuffix ".tmp" baseName || lib.hasSuffix ".bak" baseName || baseName == "tests.nix" @@ -19593,7 +19593,7 @@ rec { # If the user hasn't set any pre/post commands, we don't want to # insert empty lines. This means that any existing users of crate2nix # don't get a spurious rebuild unless they set these explicitly. - testCommand = pkgs.lib.concatStringsSep "\n" + testCommand = pkgs.lib.concatStringsSep "/n" (pkgs.lib.filter (s: s != "") [ testPreRun "$f $testCrateFlags 2>&1 | tee -a $out" @@ -19657,7 +19657,7 @@ rec { (lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) '' echo tested by ${test} '' + '' - ${lib.concatMapStringsSep "\n" (output: "ln -s ${crate.${output}} ${"$"}${output}") crate.outputs} + ${lib.concatMapStringsSep "/n" (output: "ln -s ${crate.${output}} ${"$"}${output}") crate.outputs} ''); /* A restricted overridable version of builtRustCratesWithFeatures. */ From ccb235e40575a9d795e38304ad94f808dc21e7fe Mon Sep 17 00:00:00 2001 From: Morpheus Date: Sun, 2 Nov 2025 19:15:45 +0100 Subject: [PATCH 07/13] insert recommendations --- Cargo.nix | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Cargo.nix b/Cargo.nix index 7edc6357..a8479589 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -1080,7 +1080,6 @@ rec { edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_assets; }; libPath = "src/lib.rs"; - }; "academy_auth_contracts" = rec { crateName = "academy_auth_contracts"; @@ -14943,7 +14942,6 @@ rec { version = "1.0.69"; edition = "2021"; sha256 = "0lizjay08agcr5hs9yfzzj6axs53a2rgx070a1dsi3jpkcrzbamn"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -14960,7 +14958,6 @@ rec { version = "2.0.17"; edition = "2021"; sha256 = "1j2gixhm2c3s6g96vd0b01v0i0qz1101vfmw0032mdqj1z58fdgn"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -14982,7 +14979,6 @@ rec { sha256 = "1h84fmn2nai41cxbhk6pqf46bxqq1b344v8yz089w1chzi76rvjg"; procMacro = true; libName = "thiserror_impl"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -15009,7 +15005,6 @@ rec { sha256 = "04y92yjwg1a4piwk9nayzjfs07sps8c4vq9jnsfq9qvxrn75rw9z"; procMacro = true; libName = "thiserror_impl"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -20172,4 +20167,3 @@ rec { # }; } - From 2a38540191a1f26ad22701e15f927af27fc5a510 Mon Sep 17 00:00:00 2001 From: Morpheus Date: Sun, 2 Nov 2025 19:21:58 +0100 Subject: [PATCH 08/13] insert recommendations --- Cargo.nix | 475 +----------------------------------------------------- 1 file changed, 1 insertion(+), 474 deletions(-) diff --git a/Cargo.nix b/Cargo.nix index a8479589..1cbd65b6 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -625,7 +625,6 @@ rec { } ]; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_api_rest"; @@ -887,7 +886,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_api/rest; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_assets"; @@ -1079,14 +1077,12 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_assets; }; - libPath = "src/lib.rs"; }; "academy_auth_contracts" = rec { crateName = "academy_auth_contracts"; version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_auth/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -1120,7 +1116,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_auth/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -1218,7 +1213,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_cache/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "anyhow"; @@ -1249,7 +1243,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_cache/valkey; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_cache_contracts"; @@ -1323,7 +1316,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_config; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_assets"; @@ -1384,7 +1376,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/coin/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -1418,7 +1409,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/coin/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -1489,7 +1479,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/config/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "mockall"; @@ -1508,7 +1497,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/config/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_core_config_contracts"; @@ -1547,7 +1535,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/contact/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -1581,7 +1568,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/contact/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_core_contact_contracts"; @@ -1650,7 +1636,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/daily_rewards/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -1708,7 +1693,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/daily_rewards/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -1865,7 +1849,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/finance/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -1905,7 +1888,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/finance/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2023,7 +2005,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/health/contracts; }; - libPath = "src/lib.rs"; }; "academy_core_health_impl" = rec { @@ -2031,7 +2012,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/health/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_cache_contracts"; @@ -2087,7 +2067,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/heart/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -2121,7 +2100,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/heart/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2218,7 +2196,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/internal/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2256,7 +2233,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/internal/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2366,7 +2342,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/mfa/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -2400,7 +2375,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/mfa/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2482,7 +2456,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/oauth2/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -2516,7 +2489,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/oauth2/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2625,7 +2597,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/paypal/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -2659,7 +2630,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/paypal/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2797,7 +2767,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/premium/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -2831,7 +2800,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/premium/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -2928,7 +2896,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/session/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -2962,7 +2929,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/session/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -3077,7 +3043,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/user/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -3125,7 +3090,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_core/user/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -3277,7 +3241,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_demo; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -3330,7 +3293,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_di; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_di_derive"; @@ -3345,7 +3307,6 @@ rec { edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_di_derive; }; procMacro = true; - libPath = "src/lib.rs"; dependencies = [ { name = "darling"; @@ -3373,7 +3334,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_email/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -3406,7 +3366,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_email/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_assets"; @@ -3490,7 +3449,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_extern/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -3524,7 +3482,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_extern/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_auth_contracts"; @@ -3615,7 +3572,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_models; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_utils"; @@ -3705,7 +3661,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_persistence/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -3763,7 +3718,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_persistence/postgres; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_di"; @@ -3947,7 +3901,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_shared/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_models"; @@ -3999,7 +3952,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_shared/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_cache_contracts"; @@ -4138,7 +4090,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_templates/contracts; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_assets"; @@ -4194,7 +4145,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_templates/impl; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_assets"; @@ -4251,7 +4201,6 @@ rec { } ]; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_testing; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_utils"; @@ -4342,7 +4291,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_utils; }; - libPath = "src/lib.rs"; dependencies = [ { name = "academy_utils_derive"; @@ -4377,7 +4325,6 @@ rec { edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_utils_derive; }; procMacro = true; - libPath = "src/lib.rs"; dependencies = [ { name = "proc-macro2"; @@ -4406,7 +4353,6 @@ rec { edition = "2018"; crateBin = []; sha256 = "0jwb96gv17vdr29hbzi0ha5q6jkpgjyn7rjlg5nis65k41rk0p8v"; - libPath = "src/lib.rs"; dependencies = [ { name = "gimli"; @@ -4436,7 +4382,6 @@ rec { version = "2.0.1"; edition = "2021"; sha256 = "1ymy18s9hs7ya1pjc9864l30wk8p2qfqdi7mhhcc5nfakxbij09j"; - libPath = "src/lib.rs"; authors = [ "Jonas Schievink " "oyvindln " @@ -4452,7 +4397,6 @@ rec { version = "0.7.8"; edition = "2018"; sha256 = "1y9014qsy6gs9xld4ch7a6xi9bpki8vaciawxq4p75d8qvh7f549"; - libPath = "src/lib.rs"; authors = [ "Tom Kaitchuck " ]; @@ -4489,7 +4433,6 @@ rec { version = "0.8.12"; edition = "2018"; sha256 = "0xbsp9rlm5ki017c0w6ay8kjwinwm8knjncci95mii30rmwz25as"; - libPath = "src/lib.rs"; authors = [ "Tom Kaitchuck " ]; @@ -4534,7 +4477,6 @@ rec { edition = "2021"; sha256 = "00a32wb2h07im3skkikc495jvncf62jl6s96vwc7bhi70h9imlyx"; libName = "aho_corasick"; - libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -4559,7 +4501,6 @@ rec { version = "0.15.1"; edition = "2021"; sha256 = "18p3n7dihh4ys1rp16yf7vxlla91s2as2009ik2m9zndi1qk2rk9"; - libPath = "src/lib.rs"; authors = [ "tamasfe" ]; @@ -4662,7 +4603,6 @@ rec { version = "0.1.3"; edition = "2018"; sha256 = "1z8548zdjlm4ps1k0d7x68lfdyji02crwcc9rw3q3bb106f643r5"; - libPath = "src/lib.rs"; authors = [ "avitex " ]; @@ -4680,7 +4620,6 @@ rec { edition = "2018"; sha256 = "08zrzs022xwndihvzdn78yqarv2b9696y67i6h78nla3ww87jgb8"; libName = "allocator_api2"; - libPath = "src/lib.rs"; authors = [ "Zakarum " ]; @@ -4696,7 +4635,6 @@ rec { version = "0.1.5"; edition = "2018"; sha256 = "04b3wrz12837j7mdczqd95b732gw5q7q66cv4yn4646lvccp57l1"; - libPath = "src/lib.rs"; authors = [ "Nicolas Silva " ]; @@ -4713,7 +4651,6 @@ rec { version = "0.6.21"; edition = "2021"; sha256 = "0jjgixms4qjj58dzr846h2s29p8w7ynwr9b9x6246m1pwy0v5ma3"; - libPath = "src/lib.rs"; dependencies = [ { name = "anstyle"; @@ -4759,7 +4696,6 @@ rec { version = "1.0.13"; edition = "2021"; sha256 = "0y2ynjqajpny6q0amvfzzgw0gfw3l47z85km4gvx87vg02lcr4ji"; - libPath = "src/lib.rs"; features = { "default" = [ "std" ]; }; @@ -4771,7 +4707,6 @@ rec { edition = "2021"; sha256 = "1hhmkkfr95d462b3zf6yl2vfzdqfy5726ya572wwg8ha9y148xjf"; libName = "anstyle_parse"; - libPath = "src/lib.rs"; dependencies = [ { name = "utf8parse"; @@ -4792,7 +4727,6 @@ rec { edition = "2021"; sha256 = "1qir6d6fl5a4y2gmmw9a5w93ckwx6xn51aryd83p26zn6ihiy8wy"; libName = "anstyle_query"; - libPath = "src/lib.rs"; dependencies = [ { name = "windows-sys"; @@ -4809,7 +4743,6 @@ rec { edition = "2021"; sha256 = "0ajz9wsf46a2l3pds7v62xbhq2cffj7wrilamkx2z8r28m0k61iy"; libName = "anstyle_wincon"; - libPath = "src/lib.rs"; dependencies = [ { name = "anstyle"; @@ -4834,7 +4767,6 @@ rec { version = "1.0.100"; edition = "2018"; sha256 = "0qbfmw4hhv2ampza1csyvf1jqjs2dgrj29cv3h3sh623c6qvcgm2"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -4849,7 +4781,6 @@ rec { version = "0.2.0"; edition = "2021"; sha256 = "16ikh370y20xivq73hjzq9dz6zw4pysnkkx0mpbykrbg9f4nkhph"; - libPath = "src/lib.rs"; dependencies = [ { name = "object"; @@ -4873,7 +4804,6 @@ rec { version = "0.5.3"; edition = "2021"; sha256 = "0wn0kk97k49wxidfigmz1pdqmygqzi4h6w72ib7cpq765s4i0diw"; - libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -4921,7 +4851,6 @@ rec { version = "0.7.6"; edition = "2018"; sha256 = "0l1fz4ccgv6pm609rif37sl5nv5k6lbzi7kkppgzqzh1vwix20kw"; - libPath = "src/lib.rs"; authors = [ "bluss" ]; @@ -4940,7 +4869,6 @@ rec { sha256 = "1fsxxmz3rzx1prn1h3rs7kyjhkap60i7xvi0ldapkvbb14nssdch"; procMacro = true; libName = "async_trait"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -4968,7 +4896,6 @@ rec { edition = "2018"; sha256 = "1h5av1lw56m0jf0fd3bchxq8a30xv0b4wv8s4zkp4s0i7mfvs18m"; libName = "atomic_waker"; - libPath = "src/lib.rs"; authors = [ "Stjepan Glavina " "Contributors to futures-rs" @@ -4982,7 +4909,6 @@ rec { version = "1.5.0"; edition = "2015"; sha256 = "1s77f98id9l4af4alklmzq46f21c980v13z2r1pcxx6bqgw0d1n0"; - libPath = "src/lib.rs"; authors = [ "Josh Stone " ]; @@ -4993,7 +4919,6 @@ rec { version = "0.8.6"; edition = "2021"; sha256 = "0w9qyxcp77gwswc9sz3pf2rzpm4jycpxvd70yh8i60sjccrys64a"; - libPath = "src/lib.rs"; dependencies = [ { name = "axum-core"; @@ -5165,7 +5090,6 @@ rec { edition = "2021"; sha256 = "08pa4752h96pai7j5avr2hnq35xh7qgv6vl57y1zhhnikkhnqi2r"; libName = "axum_core"; - libPath = "src/lib.rs"; dependencies = [ { name = "bytes"; @@ -5226,7 +5150,6 @@ rec { edition = "2021"; sha256 = "15mb28f49y4g434ry9c7gnamh3ac0130mvsncz3h4q8cyhczyqwr"; libName = "axum_extra"; - libPath = "src/lib.rs"; dependencies = [ { name = "axum"; @@ -5325,7 +5248,6 @@ rec { version = "0.3.76"; edition = "2021"; sha256 = "1mibx75x4jf6wz7qjifynld3hpw3vq6sy3d3c9y5s88sg59ihlxv"; - libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -5383,7 +5305,6 @@ rec { version = "0.5.1"; edition = "2015"; sha256 = "0xp0a3xml25xw2bp5pyac2nld7vmmfjl02qynnyfn6aznfggwb82"; - libPath = "src/lib.rs"; authors = [ "Andreas Ots " "Tim Dumol " @@ -5396,7 +5317,6 @@ rec { version = "0.13.1"; edition = "2018"; sha256 = "1s494mqmzjb766fy1kqlccgfg2sdcjb6hzbvzqv2jw65fdi5h6wy"; - libPath = "src/lib.rs"; authors = [ "Alice Maz " "Marshall Pierce " @@ -5411,7 +5331,6 @@ rec { version = "0.22.1"; edition = "2018"; sha256 = "1imqzgh7bxcikp5vx3shqvw9j09g9ly0xr0jma0q66i52r7jbcvj"; - libPath = "src/lib.rs"; authors = [ "Marshall Pierce " ]; @@ -5426,7 +5345,6 @@ rec { version = "1.8.0"; edition = "2024"; sha256 = "1fj4vc6ghy3j1120r7dwn4xw90crfy46b448g5pm9w6an13qn92m"; - libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -5440,7 +5358,6 @@ rec { version = "0.9.0"; edition = "2021"; sha256 = "1ralsazlyyj7gsmqc73p6kpqz76g4al6np2p8693sx123a78nb91"; - libPath = "src/lib.rs"; dependencies = [ { name = "futures-util"; @@ -5478,7 +5395,6 @@ rec { edition = "2021"; sha256 = "175a6r01q0mjcpsnsr92viq1l9vk91j7dyiascl8vy6hgiaycw75"; libName = "bb8_postgres"; - libPath = "src/lib.rs"; dependencies = [ { name = "bb8"; @@ -5520,7 +5436,6 @@ rec { edition = "2021"; sha256 = "1abxld7w80931hyvq1z3wlan7nkpcwdx5qz3h6la3vp1ymm96hsi"; libName = "bb8_redis"; - libPath = "src/lib.rs"; dependencies = [ { name = "bb8"; @@ -5540,7 +5455,6 @@ rec { version = "2.10.0"; edition = "2021"; sha256 = "1lqxwc3625lcjrjm5vygban9v8a6dlxisp1aqylibiaw52si4bl1"; - libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -5557,7 +5471,6 @@ rec { version = "1.0.1"; edition = "2021"; sha256 = "173ydyj2q5vwj88k6xgjnfsshs4x9wbvjjv7sm0h36r34hn87hhv"; - libPath = "src/lib.rs"; dependencies = [ { name = "funty"; @@ -5590,7 +5503,6 @@ rec { version = "0.10.6"; edition = "2018"; sha256 = "1zlf7w7gql12v61d9jcbbswa3dw8qxsjglylsiljp9f9b3a2ll26"; - libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -5621,7 +5533,6 @@ rec { edition = "2018"; sha256 = "0w9sa2ypmrsqqvc20nhwr75wbb5cjr4kkyhpjm1z1lv2kdicfy1h"; libName = "block_buffer"; - libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -5639,7 +5550,6 @@ rec { edition = "2018"; crateBin = []; sha256 = "1kikljm5yr3l9qsw5xvdccragxj4445s4s3fqsgy6hmmipwld1md"; - libPath = "src/lib.rs"; authors = [ "Near Inc " ]; @@ -5676,7 +5586,6 @@ rec { sha256 = "1hwsznww7d01bh1fzpndzmcpyp00xpl2y9bg70i3z0zmqb0d7lgx"; procMacro = true; libName = "borsh_derive"; - libPath = "src/lib.rs"; authors = [ "Near Inc " ]; @@ -5719,7 +5628,6 @@ rec { version = "1.12.1"; edition = "2021"; sha256 = "1arc1v7h5l86vd6z76z3xykjzldqd5icldn7j9d3p7z6x0d4w133"; - libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -5750,7 +5658,6 @@ rec { version = "3.19.0"; edition = "2021"; sha256 = "0hsdndvcpqbjb85ghrhska2qxvp9i75q2vb70hma9fxqawdy9ia6"; - libPath = "src/lib.rs"; authors = [ "Nick Fitzgerald " ]; @@ -5766,7 +5673,6 @@ rec { version = "0.6.12"; edition = "2021"; sha256 = "1hmipv4yyxgbamcbw5r65wagv9khs033v9483s9kri9sw9ycbk93"; - libPath = "src/lib.rs"; authors = [ "David Koloski " ]; @@ -5802,7 +5708,6 @@ rec { edition = "2021"; sha256 = "0ng6230brd0hvqpbgcx83inn74mdv3abwn95x515bndwkz90dd1x"; procMacro = true; - libPath = "src/lib.rs"; authors = [ "David Koloski " ]; @@ -5830,7 +5735,6 @@ rec { version = "1.5.0"; edition = "2021"; sha256 = "0jzncxyf404mwqdbspihyzpkndfgda450l0893pz5xj685cg5l0z"; - libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -5844,7 +5748,6 @@ rec { version = "1.10.1"; edition = "2018"; sha256 = "0smd4wi2yrhp5pmq571yiaqx84bjqlm1ixqhnvfwzzc6pqkn26yp"; - libPath = "src/lib.rs"; authors = [ "Carl Lerche " "Sean McArthur " @@ -5861,7 +5764,6 @@ rec { version = "1.2.43"; edition = "2018"; sha256 = "1hpg1f1srgd5bfivvln1s3kcajdxpqvjsvd8m4y4nmap8pwv17kk"; - libPath = "src/lib.rs"; authors = [ "Alex Crichton " ]; @@ -5885,7 +5787,6 @@ rec { edition = "2018"; sha256 = "008q28ajc546z5p2hcwdnckmg0hia7rnx52fni04bwqkzyrghc4k"; libName = "cfg_if"; - libPath = "src/lib.rs"; authors = [ "Alex Crichton " ]; @@ -5899,7 +5800,6 @@ rec { version = "0.2.1"; edition = "2018"; sha256 = "092pxdc1dbgjb6qvh83gk56rkic2n2ybm4yvy76cgynmzi3zwfk1"; - libPath = "src/lib.rs"; authors = [ "Zicklag " ]; @@ -5910,7 +5810,6 @@ rec { version = "0.4.42"; edition = "2021"; sha256 = "1lp8iz9js9jwxw0sj8yi59v54lgvwdvm49b9wch77f25sfym4l0l"; - libPath = "src/lib.rs"; dependencies = [ { name = "iana-time-zone"; @@ -5978,7 +5877,6 @@ rec { edition = "2021"; sha256 = "1fvicqrlmdsjkrgxr7bxfd62i9w2qi2b6iv4w85av5syvqlqnsck"; libName = "chrono_tz"; - libPath = "src/lib.rs"; dependencies = [ { name = "chrono"; @@ -6020,7 +5918,6 @@ rec { edition = "2021"; sha256 = "1c8ixwwwsn9kgs1dr5mz963p0fgw9j9p7fzb3w2c7y8xhkp8l20c"; libName = "chrono_tz_build"; - libPath = "src/lib.rs"; dependencies = [ { name = "parse-zoneinfo"; @@ -6049,7 +5946,6 @@ rec { version = "0.9.3"; edition = "2018"; sha256 = "1jcnafc8rjfs1al08gqzyn0kpbaizgdwrd0ajqafspd18ikxdswf"; - libPath = "src/lib.rs"; authors = [ "Joshua Barretto " ]; @@ -6077,7 +5973,6 @@ rec { edition = "2021"; crateBin = []; sha256 = "1xg5fa4lcl2pmdhlns1qzw5dpz1yz6hxk6x6j7qra0hf2whxf9jc"; - libPath = "src/lib.rs"; dependencies = [ { name = "clap_builder"; @@ -6119,7 +6014,6 @@ rec { version = "4.5.51"; edition = "2021"; sha256 = "06h10byk8dl8b4nypil6aad9kshgfrjyji5ybb8bz0gngc65z0vm"; - libPath = "src/lib.rs"; dependencies = [ { name = "anstream"; @@ -6159,7 +6053,6 @@ rec { version = "4.5.60"; edition = "2021"; sha256 = "0wfrf9rfz8qhb07716i2hmhh1jgai8lmlfx3vy8l4nlwfdbjhq4f"; - libPath = "src/lib.rs"; dependencies = [ { name = "clap"; @@ -6205,7 +6098,6 @@ rec { edition = "2021"; sha256 = "0wbngw649138v3jwx8pm5x9sq0qsml3sh0sfzyrdxcpamy3m82ra"; procMacro = true; - libPath = "src/lib.rs"; dependencies = [ { name = "heck"; @@ -6237,7 +6129,6 @@ rec { version = "0.7.6"; edition = "2021"; sha256 = "13cxw9m2rqvplgazgkq2awms0rgf34myc19bz6gywfngi762imx1"; - libPath = "src/lib.rs"; }; "clorinde" = rec { @@ -6245,7 +6136,6 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_persistence/postgres/clorinde; }; - libPath = "src/lib.rs"; dependencies = [ { name = "chrono"; @@ -6291,7 +6181,6 @@ rec { version = "1.0.4"; edition = "2021"; sha256 = "0x8ymkz1xr77rcj1cfanhf416pc4v681gmkc9dzb3jqja7f62nxh"; - libPath = "src/lib.rs"; }; "combine" = rec { @@ -6299,7 +6188,6 @@ rec { version = "4.6.7"; edition = "2018"; sha256 = "1z8rh8wp59gf8k23ar010phgs0wgf5i8cx4fg01gwcnzfn5k0nms"; - libPath = "src/lib.rs"; authors = [ "Markus Westerlind " ]; @@ -6379,7 +6267,6 @@ rec { version = "0.15.18"; edition = "2018"; sha256 = "060rrj5fl3n1vfrng4r8dbzqay5mnvripm1fngwp80q88j9m83hq"; - libPath = "src/lib.rs"; dependencies = [ { name = "pathdiff"; @@ -6428,7 +6315,6 @@ rec { version = "0.16.1"; edition = "2021"; sha256 = "1x4x6vfi1s55nbr4i77b9r87s213h46lq396sij9fkmidqx78c5l"; - libPath = "src/lib.rs"; dependencies = [ { name = "encode_unicode"; @@ -6470,7 +6356,6 @@ rec { version = "0.3.1"; edition = "2021"; sha256 = "19nwwczii762pwlsm7bpizgjg8hkg1kqi32b2g4rglijklsbhx3w"; - libPath = "src/lib.rs"; authors = [ "Cesar Eduardo Barros " ]; @@ -6482,7 +6367,6 @@ rec { version = "0.6.0"; edition = "2018"; sha256 = "1jn1pq6fp3rri88zyw6jlhwwgf6qiyc08d6gjv0qypgkl862n67c"; - libPath = "src/lib.rs"; authors = [ "Rutrum " ]; @@ -6503,7 +6387,6 @@ rec { edition = "2018"; sha256 = "12w8j73lazxmr1z0h98hf3z623kl8ms7g07jch7n4p8f9nwlhdkp"; libName = "core_foundation_sys"; - libPath = "src/lib.rs"; authors = [ "The Servo Project Developers" ]; @@ -6517,7 +6400,6 @@ rec { version = "0.2.17"; edition = "2018"; sha256 = "10023dnnaghhdl70xcds12fsx2b966sxbxjq5sxs49mvxqw5ivar"; - libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -6555,7 +6437,6 @@ rec { edition = "2021"; sha256 = "0l9f1saqp1gn5qy0rxvkmz4m6n7fc0b3dbm6q1r5pmgpnyvi3lcx"; libName = "crossbeam_deque"; - libPath = "src/lib.rs"; dependencies = [ { name = "crossbeam-epoch"; @@ -6580,7 +6461,6 @@ rec { edition = "2021"; sha256 = "03j2np8llwf376m3fxqx859mgp9f83hj1w34153c7a9c7i5ar0jv"; libName = "crossbeam_epoch"; - libPath = "src/lib.rs"; dependencies = [ { name = "crossbeam-utils"; @@ -6603,7 +6483,6 @@ rec { edition = "2021"; sha256 = "0a3aa2bmc8q35fb67432w16wvi54sfmb69rk9h5bhd18vw0c99fh"; libName = "crossbeam_utils"; - libPath = "src/lib.rs"; features = { "default" = [ "std" ]; "loom" = [ "dep:loom" ]; @@ -6616,7 +6495,6 @@ rec { edition = "2018"; sha256 = "1cvby95a6xg7kxdz5ln3rl9xh66nz66w46mm3g56ri1z5x815yqv"; libName = "crypto_common"; - libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -6642,7 +6520,6 @@ rec { version = "0.21.3"; edition = "2021"; sha256 = "1h281ah78pz05450r71h3gwm2n24hy8yngbz58g426l4j1q37pww"; - libPath = "src/lib.rs"; authors = [ "Ted Driggs " ]; @@ -6669,7 +6546,6 @@ rec { version = "0.21.3"; edition = "2021"; sha256 = "193ya45qgac0a4siwghk0bl8im8h89p3cald7kw8ag3yrmg1jiqj"; - libPath = "src/lib.rs"; authors = [ "Ted Driggs " ]; @@ -6714,7 +6590,6 @@ rec { edition = "2021"; sha256 = "10ac85n4lnx3rmf5rw8lijl2c0sbl6ghcpgfmzh0s26ihbghi0yk"; procMacro = true; - libPath = "src/lib.rs"; authors = [ "Ted Driggs " ]; @@ -6739,7 +6614,6 @@ rec { version = "0.8.0"; edition = "2018"; sha256 = "13f15dfvn07fa7087pmacixqqv0lmj4hv93biw4ldr48ypk55xdy"; - libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -6764,7 +6638,6 @@ rec { version = "0.5.5"; edition = "2021"; sha256 = "11z5939gv2klp1r1lgrp4w5fnlkj18jqqf0h9zxmia3vkrjwpv7c"; - libPath = "src/lib.rs"; authors = [ "Jacob Pratt " ]; @@ -6793,7 +6666,6 @@ rec { version = "1.6.2"; edition = "2021"; sha256 = "013biy7hhy59jcbry4dqn2pf4qhaw083ksn8xxiw373wjc37imdb"; - libPath = "src/lib.rs"; authors = [ "Kornel Lesinski " "Amit Chowdhury " @@ -6808,7 +6680,6 @@ rec { version = "0.1.13"; edition = "2015"; sha256 = "1j0nzjxci2zqx63hdcihkp0a4dkdmzxd7my4m7zk6cjyfy34j9an"; - libPath = "src/lib.rs"; authors = [ "Utkarsh Kukreti " ]; @@ -6819,7 +6690,6 @@ rec { version = "0.10.7"; edition = "2018"; sha256 = "14p2n6ih29x81akj097lvz7wi9b6b9hvls0lwrv7b6xwyy0s5ncy"; - libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -6861,7 +6731,6 @@ rec { edition = "2021"; sha256 = "1q0alair462j21iiqwrr21iabkfnb13d6x5w95lkdg21q2xrqdlp"; procMacro = true; - libPath = "src/lib.rs"; authors = [ "Jane Lusby " ]; @@ -6888,7 +6757,6 @@ rec { version = "0.11.0"; edition = "2018"; sha256 = "1wa78ahlc57wmqyq2ncr80l7plrkgz57xsg7kfzgpcnqac8gld8l"; - libPath = "src/lib.rs"; authors = [ "Felix Köpge " ]; @@ -6903,7 +6771,6 @@ rec { edition = "2018"; sha256 = "0m956cxcg8v2n8kmz6xs5zl13k2fak3zkapzfzzp7pxih6hix26h"; libName = "dyn_clone"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -6915,7 +6782,6 @@ rec { edition = "2021"; sha256 = "1dkhcqmhgc25m437fzxhkvhd135yc4xd9pzpsc77i7lv9m8fd64j"; libName = "email_encoding"; - libPath = "src/lib.rs"; dependencies = [ { name = "base64"; @@ -6939,7 +6805,6 @@ rec { version = "0.2.9"; edition = "2018"; sha256 = "0jf4v3npa524c7npy7w3jl0a6gng26f51a4bgzs3jqna12dz2yg0"; - libPath = "src/lib.rs"; authors = [ "Simon Johnston " ]; @@ -6954,7 +6819,6 @@ rec { version = "1.0.0"; edition = "2021"; sha256 = "1h5j7j7byi289by63s3w4a8b3g6l5ccdrws7a67nn07vdxj77ail"; - libPath = "src/lib.rs"; authors = [ "Torbjørn Birch Moltu " ]; @@ -6969,7 +6833,6 @@ rec { version = "1.0.2"; edition = "2015"; sha256 = "03swzqznragy8n0x31lqc78g2af054jwivp7lkrbrc0khz74lyl7"; - libPath = "src/lib.rs"; }; "errno" = rec { @@ -6977,7 +6840,6 @@ rec { version = "0.3.14"; edition = "2018"; sha256 = "1szgccmh8vgryqyadg8xd58mnwwicf39zmin3bsn63df2wbbgjir"; - libPath = "src/lib.rs"; authors = [ "Chris Wong " "Dan Gohman " @@ -7020,7 +6882,6 @@ rec { edition = "2018"; sha256 = "1xq759lsr8gqss7hva42azn3whgrbrs2sd9xpn92c5ickxm1fhs4"; libName = "fallible_iterator"; - libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -7034,7 +6895,6 @@ rec { version = "2.3.0"; edition = "2018"; sha256 = "1ghiahsw1jd68df895cy5h3gzwk30hndidn3b682zmshpgmrx41p"; - libPath = "src/lib.rs"; authors = [ "Stjepan Glavina " ]; @@ -7052,7 +6912,6 @@ rec { edition = "2018"; sha256 = "09x1sfinrz86bkm6i2d85lpsfnxn0w797g5zisv1nwhaz1w1h1aj"; libName = "find_msvc_tools"; - libPath = "src/lib.rs"; }; "findshlibs" = rec { @@ -7060,7 +6919,6 @@ rec { version = "0.10.2"; edition = "2018"; sha256 = "0r3zy2r12rxzwqgz53830bk38r6b7rl8kq2br9n81q7ps2ffbfa0"; - libPath = "src/lib.rs"; dependencies = [ { name = "lazy_static"; @@ -7105,7 +6963,6 @@ rec { version = "1.2.2"; edition = "2018"; sha256 = "1kqzb2qn608rxl3dws04zahcklpplkd5r1vpabwga5l50d2v4k6b"; - libPath = "src/lib.rs"; authors = [ "The rust-url developers" ]; @@ -7128,7 +6985,6 @@ rec { version = "2.0.1"; edition = "2018"; sha256 = "06g69s9w3hmdnjp5b60ph15v367278mgxy1shijrllarc2pnrp98"; - libPath = "src/lib.rs"; authors = [ "Armin Ronacher " ]; @@ -7141,7 +6997,6 @@ rec { version = "2.0.0"; edition = "2018"; sha256 = "177w048bm0046qlzvp33ag3ghqkqw4ncpzcm5lq36gxf2lla7mg6"; - libPath = "src/lib.rs"; authors = [ "myrrlyn " ]; @@ -7154,7 +7009,6 @@ rec { version = "0.3.31"; edition = "2018"; sha256 = "0xh8ddbkm9jy8kc5gbvjp9a4b6rqqxvc8471yb2qaz5wm2qhgg35"; - libPath = "src/lib.rs"; dependencies = [ { name = "futures-channel"; @@ -7217,7 +7071,6 @@ rec { edition = "2018"; sha256 = "040vpqpqlbk099razq8lyn74m0f161zd0rp36hciqrwcg2zibzrd"; libName = "futures_channel"; - libPath = "src/lib.rs"; dependencies = [ { name = "futures-core"; @@ -7246,7 +7099,6 @@ rec { edition = "2018"; sha256 = "0gk6yrxgi5ihfanm2y431jadrll00n5ifhnpx090c2f2q1cr1wh5"; libName = "futures_core"; - libPath = "src/lib.rs"; features = { "default" = [ "std" ]; "portable-atomic" = [ "dep:portable-atomic" ]; @@ -7260,7 +7112,6 @@ rec { edition = "2018"; sha256 = "17vcci6mdfzx4gbk0wx64chr2f13wwwpvyf3xd5fb1gmjzcx2a0y"; libName = "futures_executor"; - libPath = "src/lib.rs"; dependencies = [ { name = "futures-core"; @@ -7292,7 +7143,6 @@ rec { edition = "2018"; sha256 = "1ikmw1yfbgvsychmsihdkwa8a1knank2d9a8dk01mbjar9w1np4y"; libName = "futures_io"; - libPath = "src/lib.rs"; features = { "default" = [ "std" ]; }; @@ -7305,7 +7155,6 @@ rec { sha256 = "0l1n7kqzwwmgiznn0ywdc5i24z72zvh9q1dwps54mimppi7f6bhn"; procMacro = true; libName = "futures_macro"; - libPath = "src/lib.rs"; dependencies = [ { name = "proc-macro2"; @@ -7329,7 +7178,6 @@ rec { edition = "2018"; sha256 = "1xyly6naq6aqm52d5rh236snm08kw8zadydwqz8bip70s6vzlxg5"; libName = "futures_sink"; - libPath = "src/lib.rs"; features = { "default" = [ "std" ]; "std" = [ "alloc" ]; @@ -7342,7 +7190,6 @@ rec { edition = "2018"; sha256 = "124rv4n90f5xwfsm9qw6y99755y021cmi5dhzh253s920z77s3zr"; libName = "futures_task"; - libPath = "src/lib.rs"; features = { "default" = [ "std" ]; "std" = [ "alloc" ]; @@ -7355,7 +7202,6 @@ rec { edition = "2018"; sha256 = "10aa1ar8bgkgbr4wzxlidkqkcxf77gffyj8j7768h831pcaq784z"; libName = "futures_util"; - libPath = "src/lib.rs"; dependencies = [ { name = "futures-channel"; @@ -7442,7 +7288,6 @@ rec { edition = "2015"; sha256 = "1wpdn5ngpqkkyyibbg7wa4cfg0y8zjc57spaia2h47jkk0qp9djb"; libName = "generic_array"; - libPath = "src/lib.rs"; authors = [ "Bartłomiej Kamiński " "Aaron Trent " @@ -7470,7 +7315,6 @@ rec { version = "0.2.16"; edition = "2018"; sha256 = "14l5aaia20cc6cc08xdlhrzmfcylmrnprwnna20lqf746pqzjprk"; - libPath = "src/lib.rs"; authors = [ "The Rand Project Developers" ]; @@ -7520,7 +7364,6 @@ rec { version = "0.3.4"; edition = "2021"; sha256 = "1zbpvpicry9lrbjmkd4msgj3ihff1q92i334chk7pzf46xffz7c9"; - libPath = "src/lib.rs"; authors = [ "The Rand Project Developers" ]; @@ -7614,7 +7457,6 @@ rec { version = "0.32.3"; edition = "2018"; sha256 = "1iqk5xznimn5bfa8jy4h7pa1dv3c624hzgd2dkz8mpgkiswvjag6"; - libPath = "src/lib.rs"; features = { "default" = [ "read-all" "write" ]; "endian-reader" = [ "read" "dep:stable_deref_trait" ]; @@ -7632,7 +7474,6 @@ rec { version = "0.4.18"; edition = "2024"; sha256 = "1qsp3wg0mgxzmshcgymdlpivqlc1bihm6133pl6dx2x4af8w3psj"; - libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -7679,7 +7520,6 @@ rec { version = "0.9.1"; edition = "2021"; sha256 = "0mz7bsa66p2rrgnz3l94ac4kbklh7mq8j30iizyxjy4qyvmn1xqb"; - libPath = "src/lib.rs"; authors = [ "Gilad Naaman " ]; @@ -7704,7 +7544,6 @@ rec { version = "0.4.12"; edition = "2021"; sha256 = "11hk5mpid8757z6n3v18jwb62ikffrgzjlrgpzqvkqdlzjfbdh7k"; - libPath = "src/lib.rs"; authors = [ "Carl Lerche " "Sean McArthur " @@ -7777,7 +7616,6 @@ rec { version = "0.12.3"; edition = "2021"; sha256 = "1268ka4750pyg2pbgsr43f0289l5zah4arir2k4igx5a8c6fg7la"; - libPath = "src/lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -7808,7 +7646,6 @@ rec { version = "0.14.5"; edition = "2021"; sha256 = "1wa1vy1xs3mp11bn3z9dv0jricgr6a2j0zkf1g19yz3vw4il89z5"; - libPath = "src/lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -7848,7 +7685,6 @@ rec { version = "0.16.0"; edition = "2021"; sha256 = "13blh9j2yv77a6ni236ixiwdzbc1sh2bc4bdpaz7y859yv2bs6al"; - libPath = "src/lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -7870,7 +7706,6 @@ rec { version = "0.4.1"; edition = "2018"; sha256 = "1sr4zygaq1b2f0k7b5l8vx5vp05wvd82w7vpavgvr52xvdd4scdk"; - libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -7913,7 +7748,6 @@ rec { edition = "2015"; sha256 = "1r1w80i2bhmyh8s5mjr2dz6baqlrm6cak6yvzm4jq96lacjs5d2l"; libName = "headers_core"; - libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -7930,7 +7764,6 @@ rec { version = "0.4.1"; edition = "2018"; sha256 = "1a7mqsnycv5z4z5vnv1k34548jzmc0ajic7c1j8jsaspnhw5ql4m"; - libPath = "src/lib.rs"; authors = [ "Without Boats " ]; @@ -7945,7 +7778,6 @@ rec { version = "0.5.0"; edition = "2021"; sha256 = "1sjmpsdl8czyh9ywl3qcsfsq9a307dg4ni2vnlwgnzzqhc4y0113"; - libPath = "src/lib.rs"; }; "hex" = rec { @@ -7953,7 +7785,6 @@ rec { version = "0.4.3"; edition = "2018"; sha256 = "0w1a4davm1lgzpamwnba907aysmlrnygbqmfis2mqjx5m552a93z"; - libPath = "src/lib.rs"; authors = [ "KokaKiwi " ]; @@ -7969,7 +7800,6 @@ rec { version = "0.12.1"; edition = "2018"; sha256 = "0pmbr069sfg76z7wsssfk5ddcqd9ncp79fyz6zcm6yn115yc6jbc"; - libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -7997,7 +7827,6 @@ rec { version = "0.4.1"; edition = "2021"; sha256 = "0rbxryl68bwv8hkjdjd8f37kdb10fncgsqrqksv64qy7s4y20vx5"; - libPath = "src/lib.rs"; dependencies = [ { name = "cfg-if"; @@ -8023,7 +7852,6 @@ rec { version = "1.3.1"; edition = "2018"; sha256 = "0r95i5h7dr1xadp1ac9453w0s62s27hzkam356nyx2d9mqqmva7l"; - libPath = "src/lib.rs"; authors = [ "Alex Crichton " "Carl Lerche " @@ -8054,7 +7882,6 @@ rec { edition = "2018"; sha256 = "111ir5k2b9ihz5nr9cz7cwm7fnydca7dx4hc7vr16scfzghxrzhy"; libName = "http_body"; - libPath = "src/lib.rs"; authors = [ "Carl Lerche " "Lucio Franco " @@ -8078,7 +7905,6 @@ rec { edition = "2018"; sha256 = "0jm6jv4gxsnlsi1kzdyffjrj8cfr3zninnxpw73mvkxy4qzdj8dh"; libName = "http_body_util"; - libPath = "src/lib.rs"; authors = [ "Carl Lerche " "Lucio Franco " @@ -8118,7 +7944,6 @@ rec { version = "1.10.1"; edition = "2018"; sha256 = "11ycd554bw2dkgw0q61xsa7a4jn1wb1xbfacmf3dbwsikvkkvgvd"; - libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -8132,7 +7957,6 @@ rec { version = "1.0.3"; edition = "2021"; sha256 = "1aa9rd2sac0zhjqh24c9xvir96g188zldkx0hr6dnnlx5904cfyz"; - libPath = "src/lib.rs"; authors = [ "Pyfisch " ]; @@ -8143,7 +7967,6 @@ rec { version = "2.1.3"; edition = "2021"; sha256 = "1msxd1akb3dydsa8qs461sds9krwnn31szvqgaq93p4x0ad1rdbc"; - libPath = "src/lib.rs"; authors = [ "Leopold Arkham " ]; @@ -8161,7 +7984,6 @@ rec { version = "1.7.0"; edition = "2021"; sha256 = "07n59pxzlq621z611cbpvh7p4h9h15v0r7m5wgxygpx02d5aafpb"; - libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -8273,7 +8095,6 @@ rec { edition = "2021"; sha256 = "0n6g8998szbzhnvcs1b7ibn745grxiqmlpg53xz206v826v3xjg3"; libName = "hyper_rustls"; - libPath = "src/lib.rs"; dependencies = [ { name = "http"; @@ -8362,7 +8183,6 @@ rec { edition = "2021"; sha256 = "1a5fcnz0alrg4lx9xf6ja66ihaab58jnm5msnky804wg39cras9w"; libName = "hyper_util"; - libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -8492,7 +8312,6 @@ rec { edition = "2021"; sha256 = "1yz980fmhaq9bdkasz35z63az37ci6kzzfhya83kgdqba61pzr9k"; libName = "iana_time_zone"; - libPath = "src/lib.rs"; authors = [ "Andrew Straw " "René Kijewski " @@ -8545,7 +8364,6 @@ rec { edition = "2018"; sha256 = "17r6jmj31chn7xs9698r122mapq85mfnv98bb4pg6spm0si2f67k"; libName = "iana_time_zone_haiku"; - libPath = "src/lib.rs"; authors = [ "René Kijewski " ]; @@ -8562,7 +8380,6 @@ rec { version = "2.1.1"; edition = "2021"; sha256 = "0hsblchsdl64q21qwrs4hvc2672jrf466zivbj1bwyv606bn8ssc"; - libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8608,7 +8425,6 @@ rec { version = "2.1.1"; edition = "2021"; sha256 = "1djvdc2f5ylmp1ymzv4gcnmq1s4hqfim9nxlcm173lsd01hpifpd"; - libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8653,7 +8469,6 @@ rec { version = "2.1.1"; edition = "2021"; sha256 = "16dmn5596la2qm0r3vih0bzjfi0vx9a20yqjha6r1y3vnql8hv2z"; - libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8707,7 +8522,6 @@ rec { version = "2.1.1"; edition = "2021"; sha256 = "02jnzizg6q75m41l6c13xc7nkc5q8yr1b728dcgfhpzw076wrvbs"; - libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8718,7 +8532,6 @@ rec { version = "2.1.1"; edition = "2021"; sha256 = "16gvnnxr1xry6vn5275a1s0z0c8scp7gdkzqla6hqv3nawqwsgz9"; - libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8773,7 +8586,6 @@ rec { version = "2.1.1"; edition = "2021"; sha256 = "16a80p8j371jkl10x26rh9gw6d1gyl7limpc008my15v8wv5p102"; - libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8784,7 +8596,6 @@ rec { version = "2.1.1"; edition = "2021"; sha256 = "0576b7dizgyhpfa74kacv86y4g1p7v5ffd6c56kf1q82rvq2r5l5"; - libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -8848,7 +8659,6 @@ rec { version = "1.0.1"; edition = "2015"; sha256 = "0fac21q6pwns8gh1hz3nbq15j8fi441ncl6w4vlnd1cmc55kiq5r"; - libPath = "src/lib.rs"; authors = [ "Ted Driggs " ]; @@ -8859,7 +8669,6 @@ rec { version = "1.1.0"; edition = "2018"; sha256 = "1pp4n7hppm480zcx411dsv9wfibai00wbpgnjj4qj0xa7kr7a21v"; - libPath = "src/lib.rs"; authors = [ "The rust-url developers" ]; @@ -8890,7 +8699,6 @@ rec { version = "1.2.1"; edition = "2021"; sha256 = "0i0339pxig6mv786nkqcxnwqa87v4m94b2653f6k3aj0jmhfkjis"; - libPath = "src/lib.rs"; authors = [ "The rust-url developers" ]; @@ -8916,7 +8724,6 @@ rec { version = "0.4.24"; edition = "2024"; sha256 = "00q41xq3wri74kpjmxb60mpkpj81n4pfa0wdqby2lhv4jipnwxw1"; - libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -8965,7 +8772,6 @@ rec { version = "2.12.0"; edition = "2021"; sha256 = "17xs7cqf9nzv8iw8yzpvpjh43lcf9492i8a3xfia2ad9lp9ah5v7"; - libPath = "src/lib.rs"; dependencies = [ { name = "equivalent"; @@ -9015,7 +8821,6 @@ rec { version = "0.18.2"; edition = "2021"; sha256 = "0rcbiqkvv4mr7lz783lys97z6alir0g29rsrkvajmdnzl35xzrmd"; - libPath = "src/lib.rs"; dependencies = [ { name = "console"; @@ -9060,7 +8865,6 @@ rec { version = "2.11.0"; edition = "2018"; sha256 = "0c5i9sfi2asai28m8xp48k5gvwkqrg5ffpi767py6mzsrswv17s6"; - libPath = "src/lib.rs"; authors = [ "Kris Price " ]; @@ -9080,7 +8884,6 @@ rec { edition = "2021"; sha256 = "1cl0wfq97wq4s1p4dl0ix5cfgsc5fn7l22ljgw9ab9x1qglypifv"; libName = "iri_string"; - libPath = "src/lib.rs"; authors = [ "YOSHIOKA Takuma " ]; @@ -9113,7 +8916,6 @@ rec { version = "1.0.5"; edition = "2021"; sha256 = "1i78ss45h94nwabbn6ki64a91djlli8zdwwbh56jj9kvhssbiaxs"; - libPath = "src/lib.rs"; authors = [ "Nick Fitzgerald " ]; @@ -9132,7 +8934,6 @@ rec { version = "1.70.2"; edition = "2021"; sha256 = "15anlc47sbz0jfs9q8fhwf0h3vs2w4imc030shdnq54sny5i7jx6"; - libPath = "src/lib.rs"; features = { }; resolvedDefaultFeatures = [ "default" ]; @@ -9142,7 +8943,6 @@ rec { version = "1.0.15"; edition = "2018"; sha256 = "0b4fj9kz54dr3wam0vprjwgygvycyw8r0qwg7vp19ly8b2w16psa"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -9156,7 +8956,6 @@ rec { edition = "2021"; sha256 = "0rcfkz7r28r01a8m6n2q13aglm44q5g6gzsw5nmjmninrk4fw4dh"; libName = "js_sys"; - libPath = "src/lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -9183,7 +8982,6 @@ rec { version = "0.16.0"; edition = "2018"; sha256 = "0pq13h0r58n7qi0ml7d54x4i3871rjg49p1zvf29fzgyfxgjh132"; - libPath = "src/lib.rs"; authors = [ "Michael Yang " ]; @@ -9228,7 +9026,6 @@ rec { version = "0.3.0"; edition = "2021"; sha256 = "0k7kc8jy5qxflg80r12zvpc34ir1h98i3xz9y0chnri3yjrdnjyf"; - libPath = "src/lib.rs"; authors = [ "Serhii Potapov " ]; @@ -9246,7 +9043,6 @@ rec { edition = "2021"; sha256 = "13982c6nrvym7kk2g151cjcxnbx5l9nn0vrxmifz8cnbbpf4sfx1"; procMacro = true; - libPath = "src/lib.rs"; authors = [ "Serhii Potapov " ]; @@ -9276,7 +9072,6 @@ rec { version = "1.5.0"; edition = "2015"; sha256 = "1zk6dqqni0193xg6iijh7i3i44sryglwgvx20spdvwk3r6sbrlmv"; - libPath = "src/lib.rs"; authors = [ "Marvin Löbel " ]; @@ -9290,7 +9085,6 @@ rec { version = "0.11.19"; edition = "2021"; sha256 = "0zzg5wk25ymgrvljp9ln7agvi26k85q15jsj1ykb5y0qi07f24wy"; - libPath = "src/lib.rs"; authors = [ "Alexis Mousset " "Paolo Barbolini " @@ -9475,7 +9269,6 @@ rec { version = "0.2.177"; edition = "2021"; sha256 = "0xjrn69cywaii1iq2lib201bhlvan7czmrm604h5qcm28yps4x18"; - libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -9492,7 +9285,6 @@ rec { version = "0.2.15"; edition = "2021"; sha256 = "1plpzf0p829viazdj57yw5dhmlr8ywf3apayxc2f2bq5a6mvryzr"; - libPath = "src/lib.rs"; authors = [ "Jorge Aparicio " ]; @@ -9507,7 +9299,6 @@ rec { version = "0.1.10"; edition = "2021"; sha256 = "1jswil4ai90s4rh91fg8580x8nikni1zl3wnch4h01nvidqpwvs1"; - libPath = "src/lib.rs"; authors = [ "4lDO2 <4lDO2@protonmail.com>" ]; @@ -9540,7 +9331,6 @@ rec { edition = "2021"; sha256 = "0fghx0nn8nvbz5yzgizfcwd6ap2pislp68j8c1bwyr6sacxkq7fz"; libName = "linux_raw_sys"; - libPath = "src/lib.rs"; authors = [ "Dan Gohman " ]; @@ -9556,7 +9346,6 @@ rec { version = "0.8.1"; edition = "2021"; sha256 = "0xsy8pfp9s802rsj1bq2ys2kbk1g36w5dr3gkfip7gphb5x60wv3"; - libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -9573,7 +9362,6 @@ rec { version = "0.4.14"; edition = "2021"; sha256 = "0rg9mhx7vdpajfxvdjmgmlyrn20ligzqvn8ifmaz7dc79gkrjhr2"; - libPath = "src/lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -9596,7 +9384,6 @@ rec { version = "0.4.28"; edition = "2021"; sha256 = "0cklpzrpxafbaq1nyxarhnmcw9z3xcjrad3ch55mmr58xw2ha21l"; - libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -9620,7 +9407,6 @@ rec { edition = "2021"; sha256 = "0m2139k466qj3bnpk66bwivgcx3z88qkxvlzk70vd65jq373jaqi"; libName = "lru_slab"; - libPath = "src/lib.rs"; authors = [ "Benjamin Saunders " ]; @@ -9631,7 +9417,6 @@ rec { version = "0.2.0"; edition = "2018"; sha256 = "1sasssspdj2vwcwmbq3ra18d3qniapkimfcbr47zmx6750m5llni"; - libPath = "src/lib.rs"; authors = [ "Eliza Weisman " ]; @@ -9652,7 +9437,6 @@ rec { version = "0.8.4"; edition = "2021"; sha256 = "1hzl48fwq1cn5dvshfly6vzkzqhfihya65zpj7nz7lfx82mgzqa7"; - libPath = "src/lib.rs"; authors = [ "Ibraheem Ahmed " ]; @@ -9666,7 +9450,6 @@ rec { edition = "2018"; sha256 = "1kvq5rnpm4fzwmyv5nmnxygdhhb2369888a06gdc9pxyrzh7x7nq"; libName = "md5"; - libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -9701,7 +9484,6 @@ rec { version = "2.7.6"; edition = "2021"; sha256 = "0wy29kf6pb4fbhfksjbs05jy2f32r2f3r1ga6qkmpz31k79h0azm"; - libPath = "src/lib.rs"; authors = [ "Andrew Gallant " "bluss" @@ -9721,7 +9503,6 @@ rec { version = "0.3.17"; edition = "2015"; sha256 = "16hkibgvb9klh0w0jk5crr5xv90l3wlf77ggymzjmvl1818vnxv8"; - libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -9732,7 +9513,6 @@ rec { version = "0.8.9"; edition = "2021"; sha256 = "05k3pdg8bjjzayq3rf0qhpirq9k37pxnasfn4arbs17phqn6m9qz"; - libPath = "src/lib.rs"; authors = [ "Frommi " "oyvindln " @@ -9760,7 +9540,6 @@ rec { version = "1.1.0"; edition = "2021"; sha256 = "0wr816q3jrjwiajvw807lgi540i9s6r78a5fx4ycz3nwhq03pn39"; - libPath = "src/lib.rs"; authors = [ "Carl Lerche " "Thomas de Zeeuw " @@ -9806,7 +9585,6 @@ rec { version = "0.13.1"; edition = "2021"; sha256 = "1lir70dd9cnsjlf20gi3i51ha9n7mlrkx74bx5gfszlcdk6bz9ir"; - libPath = "src/lib.rs"; authors = [ "Alan Somers " ]; @@ -9847,7 +9625,6 @@ rec { edition = "2021"; sha256 = "1608qajqrz23xbvv81alc6wm4l24as1bsqg4shdh3sggq8231ji5"; procMacro = true; - libPath = "src/lib.rs"; authors = [ "Alan Somers " ]; @@ -9879,7 +9656,6 @@ rec { version = "8.0.0"; edition = "2021"; sha256 = "01cl5xng9d0gxf26h39m0l8lprgpa00fcc75ps1yzgbib1vn35yz"; - libPath = "src/lib.rs"; authors = [ "contact@geoffroycouprie.com" ]; @@ -9902,7 +9678,6 @@ rec { edition = "2021"; sha256 = "1ra088d885lbd21q1bxgpqdlk1zlndblmarn948jz2a40xsbjmvr"; libName = "nu_ansi_term"; - libPath = "src/lib.rs"; authors = [ "ogham@bsago.me" "Ryan Scheel (Havvy) " @@ -9931,7 +9706,6 @@ rec { edition = "2021"; sha256 = "1f903zd33i6hkjpsgwhqwi2wffnvkxbn6rv4mkgcjcqi7xr4zr55"; libName = "num_bigint"; - libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -9965,7 +9739,6 @@ rec { edition = "2021"; sha256 = "1ndiyg82q73783jq18isi71a7mjh56wxrk52rlvyx0mi5z9ibmai"; libName = "num_conv"; - libPath = "src/lib.rs"; authors = [ "Jacob Pratt " ]; @@ -9977,7 +9750,6 @@ rec { edition = "2018"; sha256 = "13w5g54a9184cqlbsq80rnxw4jj4s0d8wv75jsq5r2lms8gncsbr"; libName = "num_integer"; - libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -10001,7 +9773,6 @@ rec { edition = "2021"; sha256 = "0h984rhdkkqd4ny9cif7y2azl3xdfb7768hb9irhpsch4q3gq787"; libName = "num_traits"; - libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -10022,7 +9793,6 @@ rec { version = "0.6.2"; edition = "2024"; sha256 = "1ddvp7zr8cp0gn5ys3cc9mmhj5jnbj3jnwmz66npvil801w7ln3h"; - libPath = "src/lib.rs"; authors = [ "Serhii Potapov " ]; @@ -10050,7 +9820,6 @@ rec { edition = "2024"; sha256 = "015lfhl96z7hv8myfvsx972w8l0b508wzmvr0s7xvvgsfnwk928l"; procMacro = true; - libPath = "src/lib.rs"; authors = [ "Serhii Potapov " ]; @@ -10102,7 +9871,6 @@ rec { version = "5.0.0"; edition = "2021"; sha256 = "0zfn67m93qfh9gyxxx1hj6yprk9dkr3hm1mi4ni23pqlj3kikqji"; - libPath = "src/lib.rs"; authors = [ "Alex Crichton " "Florin Lipan " @@ -10182,7 +9950,6 @@ rec { version = "0.32.2"; edition = "2018"; sha256 = "0hc4cjwyngiy6k51hlzrlsxgv5z25vv7c2cp0ky1lckfic0259m6"; - libPath = "src/lib.rs"; dependencies = [ { name = "memchr"; @@ -10215,7 +9982,6 @@ rec { version = "0.37.3"; edition = "2018"; sha256 = "1zikiy9xhk6lfx1dn2gn2pxbnfpmlkn0byd7ib1n720x0cgj0xpz"; - libPath = "src/lib.rs"; dependencies = [ { name = "memchr"; @@ -10249,7 +10015,6 @@ rec { version = "1.21.3"; edition = "2021"; sha256 = "0b9x77lb9f1j6nqgf5aka4s2qj0nly176bpbrv6f9iakk5ff3xa2"; - libPath = "src/lib.rs"; authors = [ "Aleksey Kladov " ]; @@ -10269,7 +10034,6 @@ rec { version = "1.70.2"; edition = "2021"; sha256 = "1zmla628f0sk3fhjdjqzgxhalr2xrfna958s632z65bjsfv8ljrq"; - libPath = "src/lib.rs"; features = { }; resolvedDefaultFeatures = [ "default" ]; @@ -10279,7 +10043,6 @@ rec { version = "3.12.0"; edition = "2018"; sha256 = "1hzzmxj8z69q5l1hzlnqnaa56ip9kvmghp8k750w6hwdvrgsrqfh"; - libPath = "src/lib.rs"; authors = [ "Jan Schulte " "Stanislav Tkach " @@ -10318,7 +10081,6 @@ rec { version = "0.18.5"; edition = "2018"; sha256 = "0ndy8hvp24gs7yxw9wj81hs5rb36wxmpw4i38ylrfjy4p46ha3qy"; - libPath = "src/lib.rs"; authors = [ "Josh " ]; @@ -10347,7 +10109,6 @@ rec { edition = "2018"; sha256 = "1l343ss6hlh0abbwjk6zah6mdlyhh1v1imflv3v86c6lsfyjhw1w"; procMacro = true; - libPath = "src/lib.rs"; authors = [ "Josh " ]; @@ -10382,7 +10143,6 @@ rec { version = "0.12.5"; edition = "2021"; sha256 = "06jsqh9aqmc94j2rlm8gpccilqm6bskbd67zf6ypfc0f4m9p91ck"; - libPath = "src/lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -10410,7 +10170,6 @@ rec { version = "0.9.12"; edition = "2021"; sha256 = "1hb4rggy70fwa1w9nb0svbyflzdc69h047482v2z3sx2hmcnh896"; - libPath = "src/lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -10451,7 +10210,6 @@ rec { edition = "2021"; sha256 = "093cs8slbd6kyfi6h12isz0mnaayf5ha8szri1xrbqj4inqhaahz"; libName = "parse_zoneinfo"; - libPath = "src/lib.rs"; dependencies = [ { name = "regex"; @@ -10468,7 +10226,6 @@ rec { edition = "2021"; sha256 = "0ri1mim11zk0a9s40zdi288dfqvmdiryc7lw8vl46b59ifa08vrl"; libName = "password_hash"; - libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -10504,7 +10261,6 @@ rec { edition = "2018"; sha256 = "02pxffpdqkapy292harq6asfjvadgp1s005fip9ljfsn9fvxgh2p"; procMacro = true; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -10515,7 +10271,6 @@ rec { version = "0.2.3"; edition = "2018"; sha256 = "1lrqp4ip05df8dzldq6gb2c1sq2gs54gly8lcnv3rhav1qhwx56z"; - libPath = "src/lib.rs"; authors = [ "Manish Goregaokar " ]; @@ -10529,7 +10284,6 @@ rec { edition = "2018"; sha256 = "083jv1ai930azvawz2khv7w73xh8mnylk7i578cifndjn5y64kwv"; libName = "percent_encoding"; - libPath = "src/lib.rs"; authors = [ "The rust-url developers" ]; @@ -10544,7 +10298,6 @@ rec { version = "2.8.3"; edition = "2021"; sha256 = "1x3xc1s5vhwswmmr51i60kfbcnp1zgdblsxbqd8dxvs0l0hpb7lq"; - libPath = "src/lib.rs"; authors = [ "Dragoș Tiselice " ]; @@ -10575,7 +10328,6 @@ rec { edition = "2021"; sha256 = "1pp2g39k2vjdyzr89k8zx5y7pp3np4iv635jpyxzmfhd0fisjz8q"; procMacro = true; - libPath = "src/lib.rs"; authors = [ "Dragoș Tiselice " ]; @@ -10604,7 +10356,6 @@ rec { version = "2.8.3"; edition = "2021"; sha256 = "0hr80m5xzzrhzjvnmbawk72cxvn0ssc5j216gblynmspizch3d29"; - libPath = "src/lib.rs"; authors = [ "Dragoș Tiselice " ]; @@ -10644,7 +10395,6 @@ rec { version = "2.8.3"; edition = "2021"; sha256 = "0nh6w1mv8hx0p1jli8s12j2w62ia2apsbyl69nf07yg9zqn7mwkj"; - libPath = "src/lib.rs"; authors = [ "Dragoș Tiselice " ]; @@ -10671,7 +10421,6 @@ rec { version = "0.11.3"; edition = "2021"; sha256 = "0y6hxp1d48rx2434wgi5g8j1pr8s5jja29ha2b65435fh057imhz"; - libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -10697,7 +10446,6 @@ rec { version = "0.13.1"; edition = "2021"; sha256 = "1pzswx5gdglgjgp4azyzwyr4gh031r0kcnpqq6jblga72z3jsmn1"; - libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -10730,7 +10478,6 @@ rec { version = "0.11.3"; edition = "2021"; sha256 = "0si1n6zr93kzjs3wah04ikw8z6npsr39jw4dam8yi9czg2609y5f"; - libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -10752,7 +10499,6 @@ rec { edition = "2021"; crateBin = []; sha256 = "0gc4np7s91ynrgw73s2i7iakhb4lzdv1gcyx7yhlc0n214a2701w"; - libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -10778,7 +10524,6 @@ rec { version = "0.11.3"; edition = "2021"; sha256 = "1rallyvh28jqd9i916gk5gk2igdmzlgvv5q0l3xbf3m6y8pbrsk7"; - libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -10800,7 +10545,6 @@ rec { version = "0.13.1"; edition = "2021"; sha256 = "0rpjchnswm0x5l4mz9xqfpw0j4w68sjvyqrdrv13h7lqqmmyyzz5"; - libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -10823,7 +10567,6 @@ rec { edition = "2018"; sha256 = "16wzc7z7dfkf9bmjin22f5282783f6mdksnr0nv0j5ym5f9gyg1v"; libName = "pin_project_lite"; - libPath = "src/lib.rs"; }; "pin-utils" = rec { @@ -10832,7 +10575,6 @@ rec { edition = "2018"; sha256 = "117ir7vslsl2z1a7qzhws4pd01cg2d3338c47swjyvqv2n60v1wb"; libName = "pin_utils"; - libPath = "src/lib.rs"; authors = [ "Josef Brandl " ]; @@ -10843,7 +10585,6 @@ rec { version = "1.8.0"; edition = "2021"; sha256 = "01qyv51ljbvhjbg8mva5c802b3dzrr95y6nd23wjh52xbjhvw3kl"; - libPath = "src/lib.rs"; authors = [ "Ed Barnard " ]; @@ -10884,7 +10625,6 @@ rec { edition = "2018"; sha256 = "10s4cx9y3jvw0idip09ar52s2kymq8rq9a668f793shn1ar6fhpq"; libName = "portable_atomic"; - libPath = "src/lib.rs"; features = { "critical-section" = [ "dep:critical-section" ]; "default" = [ "fallback" ]; @@ -10897,7 +10637,6 @@ rec { version = "0.19.12"; edition = "2021"; sha256 = "0xmimkn7scd1kwri94hf2iani9wd6whig3053fv0vnkc3k78xi77"; - libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -10959,7 +10698,6 @@ rec { sha256 = "1rna7k5zxsk5sv4lkx2hwydal9bckrpi9pj91srd2w2377srdpsn"; procMacro = true; libName = "postgres_derive"; - libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -10989,7 +10727,6 @@ rec { edition = "2021"; sha256 = "1m6g7zzcdj4pgw2gs3anh57ylzbabpynq9s8h23fn5mrar86bvzv"; libName = "postgres_protocol"; - libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -11047,7 +10784,6 @@ rec { edition = "2021"; sha256 = "15bh03mqaclmv9jhzvrb3xdrgr1q0c6ardmfbg9ns1apq2vhaipg"; libName = "postgres_types"; - libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -11147,7 +10883,6 @@ rec { version = "0.1.4"; edition = "2021"; sha256 = "0xxg0pkfpq299wvwln409z4fk80rbv55phh3f1jhjajy5x1ljfdp"; - libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -11174,7 +10909,6 @@ rec { version = "0.2.0"; edition = "2021"; sha256 = "14ckj2xdpkhv3h6l5sdmb9f1d57z8hbfpdldjc2vl5givq2y77j3"; - libPath = "src/lib.rs"; authors = [ "Jacob Pratt " ]; @@ -11190,7 +10924,6 @@ rec { edition = "2021"; sha256 = "1abxx6qz5qnd43br1dd9b2savpihzjza8gb4fbzdql1gxp2f7sl5"; libName = "ppv_lite86"; - libPath = "src/lib.rs"; authors = [ "The CryptoCorrosion Contributors" ]; @@ -11211,7 +10944,6 @@ rec { version = "3.1.3"; edition = "2021"; sha256 = "0wrm57acvagx0xmh5xffx5xspsr2kbggm698x0vks132fpjrxld5"; - libPath = "src/lib.rs"; authors = [ "Nick Stevens " ]; @@ -11239,7 +10971,6 @@ rec { edition = "2021"; sha256 = "1yjz144yn3imq2r4mh7k9h0r8wv4yyjjj57bs0zwkscz24mlczkj"; libName = "predicates_core"; - libPath = "src/lib.rs"; authors = [ "Nick Stevens " ]; @@ -11251,7 +10982,6 @@ rec { edition = "2021"; sha256 = "0p223d9y02ywwxs3yl68kziswz4da4vabz67jfhp7yqx71njvpbj"; libName = "predicates_tree"; - libPath = "src/lib.rs"; authors = [ "Nick Stevens " ]; @@ -11272,7 +11002,6 @@ rec { version = "1.4.1"; edition = "2018"; sha256 = "0v8iq35ca4rw3rza5is3wjxwsf88303ivys07anc5yviybi31q9s"; - libPath = "src/lib.rs"; authors = [ "Colin Kiegel " "Florent Fayolle " @@ -11299,7 +11028,6 @@ rec { edition = "2021"; sha256 = "10v9qi51n4phn1lrj5r94kjq7yhci9jrkqnn6wpan05yjsgb3711"; libName = "proc_macro_crate"; - libPath = "src/lib.rs"; authors = [ "Bastian Köcher " ]; @@ -11319,7 +11047,6 @@ rec { edition = "2021"; sha256 = "1s29bz20xl2qk5ffs2mbdqknaj43ri673dz86axdbf47xz25psay"; libName = "proc_macro2"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " "Alex Crichton " @@ -11341,7 +11068,6 @@ rec { edition = "2018"; sha256 = "1j48ipc80pykvhx6yhndfa774s58ax1h6sm6mlhf09ls76f6l1mg"; libName = "proc_macro2_diagnostics"; - libPath = "src/lib.rs"; authors = [ "Sergio Benitez " ]; @@ -11382,7 +11108,6 @@ rec { version = "0.1.28"; edition = "2021"; sha256 = "00ad2j9vbsy79civwnc86wylgibpfckjzi8vhp1gvnmpqgnjy7yi"; - libPath = "src/lib.rs"; authors = [ "Simonas Kazlauskas " ]; @@ -11403,7 +11128,6 @@ rec { version = "0.1.4"; edition = "2018"; sha256 = "1wd4wy0wxrcays4f1gy8gwcmxg7mskmivcv40p0hidh6xbvwqf07"; - libPath = "src/lib.rs"; authors = [ "David Koloski " ]; @@ -11424,7 +11148,6 @@ rec { edition = "2018"; sha256 = "1b69cav9wn67cixshizii0q5mlbl0lihx706vcrzm259zkdlbf0n"; procMacro = true; - libPath = "src/lib.rs"; authors = [ "David Koloski " ]; @@ -11451,7 +11174,6 @@ rec { edition = "2021"; sha256 = "12bvsbnnmlnq9xg9in3h3080ag3sisafgpcn7lqyzhkz93kk58j2"; libName = "quick_xml"; - libPath = "src/lib.rs"; dependencies = [ { name = "memchr"; @@ -11476,7 +11198,6 @@ rec { version = "0.11.9"; edition = "2021"; sha256 = "086gzj666dr3slmlynkvxlndy28hahgl361d6bf93hk3i6ahmqmr"; - libPath = "src/lib.rs"; dependencies = [ { name = "bytes"; @@ -11579,7 +11300,6 @@ rec { edition = "2021"; sha256 = "0cca3mgja9p4w66f6sl1kfhj8rdf4mwsg1jxzssh9g63n14np47i"; libName = "quinn_proto"; - libPath = "src/lib.rs"; dependencies = [ { name = "bytes"; @@ -11677,7 +11397,6 @@ rec { edition = "2021"; sha256 = "1gacawr17a2zkyri0r3m0lc9spzmxbq1by3ilyb8v2mdvjhcdpmd"; libName = "quinn_udp"; - libPath = "src/lib.rs"; dependencies = [ { name = "libc"; @@ -11726,7 +11445,6 @@ rec { version = "1.0.41"; edition = "2018"; sha256 = "1lg108nb57lwbqlnpsii89cchk6i8pkcvrv88xh1p7a9gdz7c9ff"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -11748,7 +11466,6 @@ rec { version = "0.5.1"; edition = "2018"; sha256 = "0wvwq6w6rdsx1yxzr7ckspff0qk0q9252dzmxrd4c0kv97c9n334"; - libPath = "src/lib.rs"; authors = [ "Kartikaya Gupta " ]; @@ -11763,7 +11480,6 @@ rec { edition = "2018"; sha256 = "03sbfm3g7myvzyylff6qaxk4z6fy76yv860yy66jiswc2m6b7kb9"; libName = "r_efi"; - libPath = "src/lib.rs"; features = { "core" = [ "dep:core" ]; "examples" = [ "native" ]; @@ -11775,7 +11491,6 @@ rec { version = "0.7.0"; edition = "2018"; sha256 = "02cxfi3ky3c4yhyqx9axqwhyaca804ws46nn4gc1imbk94nzycyw"; - libPath = "src/lib.rs"; authors = [ "Nika Layzell " "myrrlyn " @@ -11787,7 +11502,6 @@ rec { version = "0.8.5"; edition = "2018"; sha256 = "013l6931nn7gkc23jz5mm3qdhf93jjf0fg64nz2lp4i51qd8vbrl"; - libPath = "src/lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11832,7 +11546,6 @@ rec { version = "0.9.2"; edition = "2021"; sha256 = "1lah73ainvrgl7brcxx0pwhpnqa3sm3qaj672034jz8i0q7pgckd"; - libPath = "src/lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11866,7 +11579,6 @@ rec { version = "0.3.1"; edition = "2018"; sha256 = "123x2adin558xbhvqb8w4f6syjsdkmqff8cxwhmjacpsl1ihmhg6"; - libPath = "src/lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11897,7 +11609,6 @@ rec { version = "0.9.0"; edition = "2021"; sha256 = "1jr5ygix7r60pz0s1cv3ms1f6pd1i9pcdmnxzzhjc3zn3mgjn0nk"; - libPath = "src/lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11935,7 +11646,6 @@ rec { version = "0.6.4"; edition = "2018"; sha256 = "0b4j2v4cb5krak1pv6kakv4sz6xcwbrmy2zckc32hsigbrwy82zc"; - libPath = "src/lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11960,7 +11670,6 @@ rec { version = "0.9.3"; edition = "2021"; sha256 = "0f3xhf16yks5ic6kmgxcpv1ngdhp48mmfy4ag82i1wnwh8ws3ncr"; - libPath = "src/lib.rs"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -11984,7 +11693,6 @@ rec { version = "0.32.7"; edition = "2021"; sha256 = "0i7grxrnqwa201r4kgcg4476x75drhmi2ifak3ks7dpszrkwfk01"; - libPath = "src/lib.rs"; dependencies = [ { name = "bytes"; @@ -12101,7 +11809,6 @@ rec { edition = "2021"; sha256 = "0b9n38zsxylql36vybw18if68yc9jczxmbyzdwyhb9sifmag4azd"; libName = "syscall"; - libPath = "src/lib.rs"; authors = [ "Jeremy Soller " ]; @@ -12124,7 +11831,6 @@ rec { edition = "2021"; sha256 = "0zdzc34qjva9xxgs889z5iz787g81hznk12zbk4g2xkgwq530m7k"; libName = "ref_cast"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -12143,7 +11849,6 @@ rec { sha256 = "1nkhn1fklmn342z5c4mzfzlxddv3x8yhxwwk02cj06djvh36065p"; procMacro = true; libName = "ref_cast_impl"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -12168,7 +11873,6 @@ rec { version = "1.12.2"; edition = "2021"; sha256 = "1m14zkg6xmkb0q5ah3y39cmggclsjdr1wpxfa4kf5wvm3wcw0fw4"; - libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" "Andrew Gallant " @@ -12228,7 +11932,6 @@ rec { edition = "2021"; sha256 = "070z0j23pjfidqz0z89id1fca4p572wxpcr20a0qsv68bbrclxjj"; libName = "regex_automata"; - libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" "Andrew Gallant " @@ -12290,7 +11993,6 @@ rec { edition = "2021"; sha256 = "0n7ggnpk0r32rzgnycy5xrc1yp2kq19m6pz98ch3c6dkaxw9hbbs"; libName = "regex_syntax"; - libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" "Andrew Gallant " @@ -12307,7 +12009,6 @@ rec { version = "0.4.2"; edition = "2018"; sha256 = "0z4rrkycva0lcw0hxq479h4amxj9syn5vq4vb2qid5v2ylj3izki"; - libPath = "src/lib.rs"; authors = [ "David Koloski " ]; @@ -12333,7 +12034,6 @@ rec { version = "0.12.24"; edition = "2021"; sha256 = "0vx3f2n6hfnv81y66v5wayrqh6jlzz4gakky88m0hywz1d0lc2cx"; - libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -12619,7 +12319,6 @@ rec { edition = "2021"; links = "ring_core_0_17_14_"; sha256 = "1dw32gv19ccq4hsx3ribhpdzri1vnrlcfqb2vj41xn4l49n9ws54"; - libPath = "src/lib.rs"; dependencies = [ { name = "cfg-if"; @@ -12680,7 +12379,6 @@ rec { version = "0.7.45"; edition = "2021"; sha256 = "16vp6m4sq41smhvym8ijy4id1hr3vm4na7wy4bc63qdrhmiws24h"; - libPath = "src/lib.rs"; authors = [ "David Koloski " ]; @@ -12770,7 +12468,6 @@ rec { edition = "2021"; sha256 = "1h1jwmyivx7g88d41gzcjrqnax98m9algjd49hx0laqab4kisgah"; procMacro = true; - libPath = "src/lib.rs"; authors = [ "David Koloski " ]; @@ -12797,7 +12494,6 @@ rec { version = "0.8.14"; edition = "2021"; sha256 = "1i1l6dhv7vws5vp0ikakj44fk597xi59g3j6ng1q55x3dz0xg3i2"; - libPath = "src/lib.rs"; authors = [ "Evgeny Safronov " ]; @@ -12829,7 +12525,6 @@ rec { edition = "2021"; sha256 = "1nylmh7w2vpa1bwrnx1jfp2l4yz6i5qrmpic5zll166gfyj9kraj"; libName = "rmp_serde"; - libPath = "src/lib.rs"; authors = [ "Evgeny Safronov " ]; @@ -12861,7 +12556,6 @@ rec { version = "1.39.0"; edition = "2021"; sha256 = "10i20blk3gma74qjl29c58dx4ma3cnbls9qjcy2bvac72x0gxbrm"; - libPath = "src/lib.rs"; authors = [ "Paul Mason " ]; @@ -12980,7 +12674,6 @@ rec { edition = "2021"; sha256 = "18v9227aybig2rvr47817sx0kgpgw248f51dvhjbwgj1iys0r35f"; procMacro = true; - libPath = "src/lib.rs"; authors = [ "Paul Mason " ]; @@ -13004,7 +12697,6 @@ rec { edition = "2015"; sha256 = "1kja3nb0yhlm4j2p1hl8d7sjmn2g9fa1s4pj0qma5kj2lcndkxsn"; libName = "rustc_demangle"; - libPath = "src/lib.rs"; authors = [ "Alex Crichton " ]; @@ -13019,7 +12711,6 @@ rec { edition = "2021"; sha256 = "03gz5lvd9ghcwsal022cgkq67dmimcgdjghfb5yb5d352ga06xrm"; libName = "rustc_hash"; - libPath = "src/lib.rs"; authors = [ "The Rust Project Developers" ]; @@ -13034,7 +12725,6 @@ rec { version = "0.4.1"; edition = "2018"; sha256 = "14lvdsmr5si5qbqzrajgb6vfn69k0sfygrvfvr2mps26xwi3mjyg"; - libPath = "src/lib.rs"; dependencies = [ { name = "semver"; @@ -13048,7 +12738,6 @@ rec { version = "1.1.2"; edition = "2021"; sha256 = "0gpz343xfzx16x82s1x336n0kr49j02cvhgxdvaq86jmqnigh5fd"; - libPath = "src/lib.rs"; authors = [ "Dan Gohman " "Jakub Konka " @@ -13156,7 +12845,6 @@ rec { version = "0.23.34"; edition = "2021"; sha256 = "19vzmdybp5rlgr0bjb4fykp28w2d6fkqq150aamqykrbxvlqd5ba"; - libPath = "src/lib.rs"; dependencies = [ { name = "log"; @@ -13227,7 +12915,6 @@ rec { edition = "2018"; sha256 = "0l3f3mrfkgdjrava7ibwzgwc4h3dljw3pdkbsi9rkwz3zvji9qyw"; libName = "rustls_pemfile"; - libPath = "src/lib.rs"; dependencies = [ { name = "rustls-pki-types"; @@ -13247,7 +12934,6 @@ rec { edition = "2021"; sha256 = "0yjzsnpv1sjbnfxbbmrnyimd23jip48nav6l9hr1rjd06vcjl64l"; libName = "rustls_pki_types"; - libPath = "src/lib.rs"; dependencies = [ { name = "web-time"; @@ -13276,7 +12962,6 @@ rec { edition = "2021"; sha256 = "0lpymb84bi5d2pm017n39nbiaa5cd046hgz06ir29ql6a8pzmz9g"; libName = "webpki"; - libPath = "src/lib.rs"; dependencies = [ { name = "ring"; @@ -13313,7 +12998,6 @@ rec { sha256 = "0vfl70jhv72scd9rfqgr2n11m5i9l1acnk684m2w83w0zbqdx75k"; procMacro = true; build = "build/build.rs"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -13324,7 +13008,6 @@ rec { version = "1.0.20"; edition = "2018"; sha256 = "07s855l8sb333h6bpn24pka5sp7hjk2w667xy6a0khkf6sqv5lr8"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -13338,7 +13021,6 @@ rec { edition = "2018"; sha256 = "00h5j1w87dmhnvbv9l8bic3y7xxsnjmssvifw2ayvgx9mb1ivz4k"; libName = "same_file"; - libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -13356,7 +13038,6 @@ rec { version = "0.9.0"; edition = "2021"; sha256 = "0pqncln5hqbzbl2r3yayyr4a82jjf93h2cfxrn0xamvx77wr3lac"; - libPath = "src/lib.rs"; authors = [ "Graham Esau " ]; @@ -13478,7 +13159,6 @@ rec { edition = "2021"; sha256 = "1ziqhh5c2yw0q8n4fxsfgl0c544avkvq3dq8iq5jzly6fx6dj5jh"; procMacro = true; - libPath = "src/lib.rs"; authors = [ "Graham Esau " ]; @@ -13508,7 +13188,6 @@ rec { version = "1.2.0"; edition = "2015"; sha256 = "0jcz9sd47zlsgcnm1hdw0664krxwb5gczlif4qngj2aif8vky54l"; - libPath = "src/lib.rs"; authors = [ "bluss" ]; @@ -13521,7 +13200,6 @@ rec { version = "4.1.0"; edition = "2015"; sha256 = "0sxsb64np6bvnppjz5hg4rqpnkczhsl8w8kf2a5lr1c08xppn40w"; - libPath = "src/lib.rs"; authors = [ "ticki " "Tom Almeida " @@ -13535,7 +13213,6 @@ rec { version = "1.0.27"; edition = "2018"; sha256 = "1qmi3akfrnqc2hfkdgcxhld5bv961wbk8my3ascv5068mc5fnryp"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -13550,7 +13227,6 @@ rec { version = "0.45.0"; edition = "2021"; sha256 = "083fbmszf1b4bp8ax4v9qharx878mc9vzs45i2917z51x0jmxf28"; - libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13676,7 +13352,6 @@ rec { edition = "2021"; sha256 = "1s0k2mmw9cirb4n3r144pjjga0nw6171cs2s0sd483rv44127lfg"; libName = "sentry_anyhow"; - libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13705,7 +13380,6 @@ rec { edition = "2021"; sha256 = "1q3s0wwnhdgvls64n6lfw1spvdr4g1fqv9a62zggcdmmb94kl9gk"; libName = "sentry_backtrace"; - libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13733,7 +13407,6 @@ rec { edition = "2021"; sha256 = "0029h4zxkgpwl1xfn12vd7i3anpdyl86lrh7ijw6cvl352kq2zq2"; libName = "sentry_contexts"; - libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13775,7 +13448,6 @@ rec { edition = "2021"; sha256 = "19c4p8ddwkp20wmwvfjj5dajw5lw23a2vgz9vf79db3iisf75dnk"; libName = "sentry_core"; - libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13818,7 +13490,6 @@ rec { edition = "2021"; sha256 = "0k6h6crspbq5p3n7j6i4ms659rg2jajp7bx1zcmr26gv3nfbb1fw"; libName = "sentry_debug_images"; - libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13840,7 +13511,6 @@ rec { edition = "2021"; sha256 = "0h1dii4cxnbi8g35p9bi08falgz22v2s5v3yq7q7mygq0hglgh0s"; libName = "sentry_panic"; - libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13863,7 +13533,6 @@ rec { edition = "2021"; sha256 = "00zbfjcll5frvpbvc8nzyibc1lg439azidw1rhni84x6cq47i3s2"; libName = "sentry_tracing"; - libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13912,7 +13581,6 @@ rec { edition = "2021"; sha256 = "1hdfmmswd16k4zbwg12z8j6lhxihmbqx11l86nf6ambvjv8x269c"; libName = "sentry_types"; - libPath = "src/lib.rs"; authors = [ "Sentry " ]; @@ -13969,7 +13637,6 @@ rec { version = "1.0.228"; edition = "2021"; sha256 = "17mf4hhjxv5m90g42wmlbc61hdhlm6j9hwfkpcnd72rpgzm993ls"; - libPath = "src/lib.rs"; authors = [ "Erick Tryzelaar " "David Tolnay " @@ -14003,7 +13670,6 @@ rec { version = "1.0.228"; edition = "2021"; sha256 = "1bb7id2xwx8izq50098s5j2sqrrvk31jbbrjqygyan6ask3qbls1"; - libPath = "src/lib.rs"; authors = [ "Erick Tryzelaar " "David Tolnay " @@ -14032,7 +13698,6 @@ rec { edition = "2021"; sha256 = "0y8xm7fvmr2kjcd029g9fijpndh8csv5m20g4bd76w8qschg4h6m"; procMacro = true; - libPath = "src/lib.rs"; authors = [ "Erick Tryzelaar " "David Tolnay " @@ -14096,7 +13761,6 @@ rec { version = "1.0.145"; edition = "2021"; sha256 = "1767y6kxjf7gwpbv8bkhgwc50nhg46mqwm9gy9n122f7v1k6yaj0"; - libPath = "src/lib.rs"; authors = [ "Erick Tryzelaar " "David Tolnay " @@ -14153,7 +13817,6 @@ rec { version = "0.1.20"; edition = "2021"; sha256 = "0mxls44p2ycmnxh03zpnlxxygq42w61ws7ir7r0ba6rp5s1gza8h"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -14188,7 +13851,6 @@ rec { version = "0.14.0"; edition = "2018"; sha256 = "19ha3lk8mdhzjavm09my9c8j96c554nlig5lsvvbvb08q3npnhcb"; - libPath = "src/lib.rs"; authors = [ "Sam Scott " ]; @@ -14238,7 +13900,6 @@ rec { version = "1.0.3"; edition = "2021"; sha256 = "14j32cqcs6jjdl1c111lz6s0hr913dnmy2kpfd75k2761ym4ahz2"; - libPath = "src/lib.rs"; dependencies = [ { name = "serde_core"; @@ -14260,7 +13921,6 @@ rec { version = "0.7.1"; edition = "2018"; sha256 = "1zgklbdaysj3230xivihs30qi5vkhigg323a9m62k8jwf4a1qjfk"; - libPath = "src/lib.rs"; authors = [ "Anthony Ramine " ]; @@ -14289,7 +13949,6 @@ rec { version = "0.10.6"; edition = "2018"; sha256 = "1fnnxlfg08xhkmwf2ahv634as30l1i3xhlhkvxflmasi5nd85gz3"; - libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -14329,7 +13988,6 @@ rec { version = "0.10.9"; edition = "2018"; sha256 = "10xjj843v31ghsksd9sl9y12qfc48157j1xpb8v1ml39jy0psl57"; - libPath = "src/lib.rs"; authors = [ "RustCrypto Developers" ]; @@ -14371,7 +14029,6 @@ rec { edition = "2018"; sha256 = "1xipjr4nqsgw34k7a2cgj9zaasl2ds6jwn89886kww93d32a637l"; libName = "sharded_slab"; - libPath = "src/lib.rs"; authors = [ "Eliza Weisman " ]; @@ -14390,7 +14047,6 @@ rec { version = "1.3.0"; edition = "2015"; sha256 = "0r1y6bv26c1scpxvhg2cabimrmwgbp4p3wy6syj9n0c4s3q2znhg"; - libPath = "src/lib.rs"; authors = [ "comex " "Fenhl " @@ -14410,7 +14066,6 @@ rec { edition = "2015"; sha256 = "12y2v1ms5z111fymaw1v8k93m5chnkp21h0jknrydkj8zydp395j"; libName = "signal_hook_registry"; - libPath = "src/lib.rs"; authors = [ "Michal 'vorner' Vaner " "Masaki Hara " @@ -14428,7 +14083,6 @@ rec { version = "0.1.5"; edition = "2018"; sha256 = "0vmpf7xaa0dnaikib5jlx6y4dxd3hxqz6l830qb079g7wcsgxag3"; - libPath = "src/lib.rs"; authors = [ "Hans Kratz " ]; @@ -14442,7 +14096,6 @@ rec { version = "1.0.1"; edition = "2018"; sha256 = "17f35782ma3fn6sh21c027kjmd227xyrx06ffi8gw4xzv9yry6an"; - libPath = "src/lib.rs"; authors = [ "Frank Denis " ]; @@ -14460,7 +14113,6 @@ rec { version = "0.4.11"; edition = "2018"; sha256 = "12bm4s88rblq02jjbi1dw31984w61y2ldn13ifk5gsqgy97f8aks"; - libPath = "src/lib.rs"; authors = [ "Carl Lerche " ]; @@ -14475,7 +14127,7 @@ rec { version = "0.1.6"; edition = "2021"; sha256 = "0977cyp88xrwbpmqwzafkvv8vm9i0gdb5zjskb6f6pg45vvq0al8"; - libPath = "src/lib.rs";type = [ "cdylib" "rlib" ]; + type = [ "cdylib" "rlib" ]; authors = [ "Steven Allen " ]; @@ -14497,7 +14149,6 @@ rec { version = "1.15.1"; edition = "2018"; sha256 = "00xxdxxpgyq5vjnpljvkmy99xij5rxgh913ii1v16kzynnivgcb7"; - libPath = "src/lib.rs"; authors = [ "The Servo Project Developers" ]; @@ -14518,7 +14169,6 @@ rec { version = "0.6.1"; edition = "2021"; sha256 = "109qn0kjhqi5zds84qyqi5wn72g8azjhmf4b04fkgkrkd48rw4hp"; - libPath = "src/lib.rs"; authors = [ "Alex Crichton " "Thomas de Zeeuw " @@ -14545,7 +14195,6 @@ rec { version = "1.2.1"; edition = "2015"; sha256 = "15h5h73ppqyhdhx6ywxfj88azmrpml9gl6zp3pwy2malqa6vxqkc"; - libPath = "src/lib.rs"; authors = [ "Robert Grosse " ]; @@ -14559,7 +14208,6 @@ rec { version = "0.1.22"; edition = "2021"; sha256 = "0nbfvmqw9bsawv9g0k4bqilxkl7cszrb5dpfxnjcxbranjgv5y71"; - libPath = "src/lib.rs"; authors = [ "Alex Crichton " "Simonas Kazlauskas " @@ -14603,7 +14251,6 @@ rec { version = "1.1.0"; edition = "2015"; sha256 = "0gsl6xmw10gvn3zs1rv99laj5ig7ylffnh71f9l34js4nr4r7sx2"; - libPath = "src/lib.rs"; authors = [ "Nikolai Vazquez" ]; @@ -14615,7 +14262,6 @@ rec { version = "0.1.5"; edition = "2015"; sha256 = "1cb3jis4h2b767csk272zw92lc6jzfzvh8d6m1cd86yqjb9z6kbv"; - libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -14640,7 +14286,6 @@ rec { version = "0.11.1"; edition = "2015"; sha256 = "0kzvqlw8hxqb7y598w1s0hxlnmi84sg5vsipp3yg5na5d1rvba3x"; - libPath = "src/lib.rs"; authors = [ "Danny Guo " "maxbachmann " @@ -14652,7 +14297,6 @@ rec { version = "2.6.1"; edition = "2018"; sha256 = "14ijxaymghbl1p0wql9cib5zlwiina7kall6w7g89csprkgbvhhk"; - libPath = "src/lib.rs"; authors = [ "Isis Lovecruft " "Henry de Valence " @@ -14666,7 +14310,6 @@ rec { version = "1.0.109"; edition = "2018"; sha256 = "0ds2if4600bd59wsv7jjgfkayfzy3hnazs394kz6zdkmna8l3dkj"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -14701,7 +14344,6 @@ rec { version = "2.0.108"; edition = "2021"; sha256 = "05z908svb0yw5wzrlv27l2i8j1d8l16hd5r8bjh809146myr2n6s"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -14735,7 +14377,6 @@ rec { version = "1.0.2"; edition = "2021"; sha256 = "0qvjyasd6w18mjg5xlaq5jgy84jsjfsvmnn12c13gypxbv75dwhb"; - libPath = "src/lib.rs"; authors = [ "Actyx AG " ]; @@ -14758,7 +14399,6 @@ rec { version = "0.13.2"; edition = "2018"; sha256 = "1lh9lx3r3jb18f8sbj29am5hm9jymvbwh6jb1izsnnxgvgrp12kj"; - libPath = "src/lib.rs"; authors = [ "Nika Layzell " ]; @@ -14791,7 +14431,6 @@ rec { version = "1.0.1"; edition = "2015"; sha256 = "0sc3gl4nldqpvyhqi3bbd0l9k7fngrcl4zs47n314nqqk4bpx4sm"; - libPath = "src/lib.rs"; authors = [ "Elliott Linder " "myrrlyn " @@ -14803,7 +14442,6 @@ rec { version = "3.23.0"; edition = "2021"; sha256 = "05igl2gml6z6i2va1bv49f9f1wb3f752c2i63lvlb9s2vxxwfc9d"; - libPath = "src/lib.rs"; authors = [ "Steven Allen " "The Rust Project Developers" @@ -14844,7 +14482,6 @@ rec { version = "1.20.1"; edition = "2018"; sha256 = "08k743nwb2mykpbwnipa1k3v8b1igg39pmdc7ggk4b8z5354n078"; - libPath = "src/lib.rs"; authors = [ "Vincent Prouillet " ]; @@ -14934,7 +14571,6 @@ rec { version = "0.5.1"; edition = "2021"; sha256 = "10s610ax6nb70yi7xfmwcb6d3wi9sj5isd0m63gy2pizr2zgwl4g"; - libPath = "src/lib.rs"; }; "thiserror 1.0.69" = rec { @@ -15029,7 +14665,6 @@ rec { version = "1.1.9"; edition = "2021"; sha256 = "1191jvl8d63agnq06pcnarivf63qzgpws5xa33hgc92gjjj4c0pn"; - libPath = "src/lib.rs"; authors = [ "Amanieu d'Antras " ]; @@ -15047,7 +14682,6 @@ rec { version = "0.3.44"; edition = "2021"; sha256 = "179awlwb36zly3nmz5h9awai1h4pbf1d83g2pmvlw4v1pgixkrwi"; - libPath = "src/lib.rs"; authors = [ "Jacob Pratt " "Time contributors" @@ -15130,7 +14764,6 @@ rec { edition = "2021"; sha256 = "0sqwhg7n47gbffyr0zhipqcnskxgcgzz1ix8wirqs2rg3my8x1j0"; libName = "time_core"; - libPath = "src/lib.rs"; authors = [ "Jacob Pratt " "Time contributors" @@ -15144,7 +14777,6 @@ rec { sha256 = "1wzb6hnl35856f58cx259q7ijc4c7yis0qsnydvw5n8jbw9b1krh"; procMacro = true; libName = "time_macros"; - libPath = "src/lib.rs"; authors = [ "Jacob Pratt " "Time contributors" @@ -15168,7 +14800,6 @@ rec { version = "0.8.2"; edition = "2021"; sha256 = "0sa8z88axdsf088hgw5p4xcyi6g3w3sgbb6qdp81bph9bk2fkls2"; - libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -15199,7 +14830,6 @@ rec { version = "1.10.0"; edition = "2018"; sha256 = "1yhk0qdqyiaa4v2j9h8pzax5gxgwpz4da0lcphfil6g6pk1zv9dz"; - libPath = "src/lib.rs"; authors = [ "Lokathor " ]; @@ -15229,7 +14859,6 @@ rec { version = "0.1.1"; edition = "2018"; sha256 = "081gag86208sc3y6sdkshgw3vysm5d34p431dzw0bshz66ncng0z"; - libPath = "src/lib.rs"; authors = [ "Soveu " ]; @@ -15240,7 +14869,6 @@ rec { version = "1.48.0"; edition = "2021"; sha256 = "0244qva5pksy8gam6llf7bd6wbk2vkab9lx26yyf08dix810wdpz"; - libPath = "src/lib.rs"; authors = [ "Tokio Contributors " ]; @@ -15358,7 +14986,6 @@ rec { sha256 = "19czvgliginbzyhhfbmj77wazqn2y8g27y2nirfajdlm41bphh5g"; procMacro = true; libName = "tokio_macros"; - libPath = "src/lib.rs"; authors = [ "Tokio Contributors " ]; @@ -15385,7 +15012,6 @@ rec { edition = "2021"; sha256 = "17kc1zr0j7dsqvkb1lxvvn77w92qiqv0jd0p52v09zickdnxch1b"; libName = "tokio_postgres"; - libPath = "src/lib.rs"; authors = [ "Steven Fackler " ]; @@ -15515,7 +15141,6 @@ rec { edition = "2021"; sha256 = "0qggwknz9w4bbsv1z158hlnpkm97j3w8v31586jipn99byaala8p"; libName = "tokio_rustls"; - libPath = "src/lib.rs"; dependencies = [ { name = "rustls"; @@ -15554,7 +15179,6 @@ rec { edition = "2021"; sha256 = "1r9wdrg1k5hna3m0kc8kcb8jdb6n52g7vnw93kw2xxw4cyc7qc0l"; libName = "tokio_util"; - libPath = "src/lib.rs"; authors = [ "Tokio Contributors " ]; @@ -15610,7 +15234,6 @@ rec { version = "0.9.8"; edition = "2021"; sha256 = "1n569s0dgdmqjy21wf85df7kx3vb1zgin3pc2rvy4j8lnqgqpp7h"; - libPath = "src/lib.rs"; dependencies = [ { name = "serde_core"; @@ -15662,7 +15285,6 @@ rec { version = "0.7.3"; edition = "2021"; sha256 = "0cs5f8y4rdsmmwipjclmq97lrwppjy2qa3vja4f9d5xwxcwvdkgj"; - libPath = "src/lib.rs"; dependencies = [ { name = "serde_core"; @@ -15684,7 +15306,6 @@ rec { version = "0.23.7"; edition = "2021"; sha256 = "13cgp4y6prad1lh18bbg64zkq48hafq7xzs4fb0hwpcv1mnyz1b4"; - libPath = "src/lib.rs"; dependencies = [ { name = "indexmap"; @@ -15720,7 +15341,6 @@ rec { version = "1.0.4"; edition = "2021"; sha256 = "03l0750d1cyliij9vac4afpp1syh1a6yhbbalnslpnsvsdlf5jy0"; - libPath = "src/lib.rs"; dependencies = [ { name = "winnow"; @@ -15742,7 +15362,6 @@ rec { edition = "2021"; sha256 = "0wmz0ri3d9ml04wrd5qk5a6xq70g8zlzc2g9k61gi3pm10hka97i"; libName = "totp_rs"; - libPath = "src/lib.rs"; authors = [ "Cleo Rebert " ]; @@ -15785,7 +15404,6 @@ rec { version = "0.5.2"; edition = "2018"; sha256 = "1ybmd59nm4abl9bsvy6rx31m4zvzp5rja2slzpn712y9b68ssffh"; - libPath = "src/lib.rs"; authors = [ "Tower Maintainers " ]; @@ -15877,7 +15495,6 @@ rec { edition = "2018"; sha256 = "1wh51y4rf03f91c6rvli6nwzsarx7097yx6sqlm75ag27pbjzj5d"; libName = "tower_http"; - libPath = "src/lib.rs"; authors = [ "Tower Maintainers " ]; @@ -15999,7 +15616,6 @@ rec { edition = "2018"; sha256 = "03kq92fdzxin51w8iqix06dcfgydyvx7yr6izjq0p626v9n2l70j"; libName = "tower_layer"; - libPath = "src/lib.rs"; authors = [ "Tower Maintainers " ]; @@ -16011,7 +15627,6 @@ rec { edition = "2018"; sha256 = "1hzfkvkci33ra94xjx64vv3pp0sq346w06fpkcdwjcid7zhvdycd"; libName = "tower_service"; - libPath = "src/lib.rs"; authors = [ "Tower Maintainers " ]; @@ -16022,7 +15637,6 @@ rec { version = "0.1.41"; edition = "2018"; sha256 = "1l5xrzyjfyayrwhvhldfnwdyligi1mpqm8mzbi2m1d6y6p2hlkkq"; - libPath = "src/lib.rs"; authors = [ "Eliza Weisman " "Tokio Contributors " @@ -16061,7 +15675,6 @@ rec { sha256 = "00v9bhfgfg3v101nmmy7s3vdwadb7ngc8c1iw6wai9vj9sv3lf41"; procMacro = true; libName = "tracing_attributes"; - libPath = "src/lib.rs"; authors = [ "Tokio Contributors " "Eliza Weisman " @@ -16092,7 +15705,6 @@ rec { edition = "2018"; sha256 = "0y3nc4mpnr79rzkrcylv5f5bnjjp19lsxwis9l4kzs97ya0jbldr"; libName = "tracing_core"; - libPath = "src/lib.rs"; authors = [ "Tokio Contributors " ]; @@ -16124,7 +15736,6 @@ rec { edition = "2018"; sha256 = "1m9447bxq7236avgl6n5yb2aqwplrghm61dgipw03mh7ad7s2m10"; libName = "tracing_subscriber"; - libPath = "src/lib.rs"; authors = [ "Eliza Weisman " "David Barsky " @@ -16216,7 +15827,6 @@ rec { edition = "2015"; sha256 = "0jqijrrvm1pyq34zn1jmy2vihd4jcrjlvsh4alkjahhssjnsn8g4"; libName = "try_lock"; - libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -16227,7 +15837,6 @@ rec { version = "1.19.0"; edition = "2018"; sha256 = "1fw2mpbn2vmqan56j1b3fbpcdg80mz26fm53fs16bq5xcq84hban"; - libPath = "src/lib.rs"; authors = [ "Paho Lurie-Gregg " "Andre Bogus " @@ -16243,7 +15852,6 @@ rec { edition = "2021"; sha256 = "0wc9p07sqwz320848i52nvyjvpsxkx3kv5bfbmm6s35809fdk5i8"; libName = "ucd_trie"; - libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -16257,7 +15865,6 @@ rec { version = "0.1.1"; edition = "2015"; sha256 = "1j1xd1rryml4j1hf07kahva9d5ym8m9jz9z20hfdpr1jrbq8jbxp"; - libPath = "src/lib.rs"; authors = [ "Ignacio Corderi " ]; @@ -16275,7 +15882,6 @@ rec { edition = "2018"; sha256 = "1xcxwbsqa24b8vfchhzyyzgj0l6bn51ib5v8j6krha0m77dva72w"; libName = "unicode_bidi"; - libPath = "src/lib.rs"; authors = [ "The Servo Project Developers" ]; @@ -16296,7 +15902,6 @@ rec { edition = "2018"; sha256 = "1x8xrz17vqi6qmkkcqr8cyf0an76ig7390j9cnqnk47zyv2gf4lk"; libName = "unicode_ident"; - libPath = "src/lib.rs"; authors = [ "David Tolnay " ]; @@ -16308,7 +15913,6 @@ rec { edition = "2018"; sha256 = "0mnrk809z3ix1wspcqy97ld5wxdb31f3xz6nsvg5qcv289ycjcsh"; libName = "unicode_normalization"; - libPath = "src/lib.rs"; authors = [ "kwantam " "Manish Goregaokar " @@ -16331,7 +15935,6 @@ rec { edition = "2021"; sha256 = "1l3mbgzwz8g14xcs09p4ww3hjkjcf0i1ih13nsg72bhj8n5jl3z7"; libName = "unicode_properties"; - libPath = "src/lib.rs"; authors = [ "Charles Lew " "Manish Goregaokar " @@ -16347,7 +15950,6 @@ rec { edition = "2018"; sha256 = "14qla2jfx74yyb9ds3d2mpwpa4l4lzb9z57c6d2ba511458z5k7n"; libName = "unicode_segmentation"; - libPath = "src/lib.rs"; authors = [ "kwantam " "Manish Goregaokar " @@ -16361,7 +15963,6 @@ rec { edition = "2021"; sha256 = "0m7jjzlcccw716dy9423xxh0clys8pfpllc5smvfxrzdf66h9b5l"; libName = "unicode_width"; - libPath = "src/lib.rs"; authors = [ "kwantam " "Manish Goregaokar " @@ -16380,7 +15981,6 @@ rec { edition = "2018"; sha256 = "05rq0asf2f1q5vrcv4bwf0c3y6q20asqkiqpr8wqyrfxyb7h4d1j"; libName = "unit_prefix"; - libPath = "src/lib.rs"; authors = [ "Fabio Valentini " "Benjamin Sago " @@ -16395,7 +15995,6 @@ rec { version = "0.9.0"; edition = "2018"; sha256 = "1ha7ib98vkc538x0z60gfn0fc5whqdd85mb87dvisdcaifi6vjwf"; - libPath = "src/lib.rs"; authors = [ "Brian Smith " ]; @@ -16406,7 +16005,6 @@ rec { version = "3.1.2"; edition = "2018"; sha256 = "0dv5yhcl3g96vax2b8xinks28kzbkf78d35lx71kyjlay4ji1flr"; - libPath = "src/lib.rs"; authors = [ "Martin Algesten " "Jacob Hoffman-Andrews " @@ -16495,7 +16093,6 @@ rec { edition = "2021"; sha256 = "1lpm7075y1bkg1snc678sxmwhk75n3flhq1l6hhncdc324f57d30"; libName = "ureq_proto"; - libPath = "src/lib.rs"; authors = [ "Martin Algesten " ]; @@ -16532,7 +16129,6 @@ rec { version = "2.5.7"; edition = "2018"; sha256 = "0nzghdv0kcksyvri0npxbjzyx2ihprks5k590y77bld355m17g08"; - libPath = "src/lib.rs"; authors = [ "The rust-url developers" ]; @@ -16582,7 +16178,6 @@ rec { version = "2.1.3"; edition = "2021"; sha256 = "1nj99jp37k47n0hvaz5fvz7z6jd0sb4ppvfy3nphr1zbnyixpy6s"; - libPath = "src/lib.rs"; authors = [ "Kornel " "Bertram Truong " @@ -16595,7 +16190,6 @@ rec { edition = "2015"; sha256 = "1a9ns3fvgird0snjkd3wbdhwd3zdpc2h5gpyybrfr6ra5pkqxk09"; libName = "utf8"; - libPath = "src/lib.rs"; authors = [ "Simon Sapin " ]; @@ -16606,7 +16200,6 @@ rec { version = "1.0.4"; edition = "2021"; sha256 = "1gmna9flnj8dbyd8ba17zigrp9c4c3zclngf5lnb5yvz1ri41hdn"; - libPath = "src/lib.rs"; authors = [ "Henri Sivonen " ]; @@ -16617,7 +16210,6 @@ rec { version = "0.2.2"; edition = "2018"; sha256 = "088807qwjq46azicqwbhlmzwrbkz7l4hpw43sdkdyyk524vdxaq6"; - libPath = "src/lib.rs"; authors = [ "Joe Wilm " "Christian Duerr " @@ -16631,7 +16223,6 @@ rec { version = "1.18.1"; edition = "2018"; sha256 = "18kh01qmfayn4psap52x8xdjkzw2q8bcbpnhhxjs05dr22mbi1rg"; - libPath = "src/lib.rs"; authors = [ "Ashley Mannix" "Dylan DPC" @@ -16706,7 +16297,6 @@ rec { version = "0.1.1"; edition = "2021"; sha256 = "0r9srp55v7g27s5bg7a2m095fzckrcdca5maih6dy9bay6fflwxs"; - libPath = "src/lib.rs"; features = { "default" = [ "std" ]; "derive" = [ "valuable-derive" ]; @@ -16720,7 +16310,6 @@ rec { version = "0.9.5"; edition = "2015"; sha256 = "0nhhi4i5x89gm911azqbn7avs9mdacw2i3vcz3cnmz3mv4rqz4hb"; - libPath = "src/lib.rs"; authors = [ "Sergio Benitez " ]; @@ -16731,7 +16320,6 @@ rec { version = "2.5.0"; edition = "2018"; sha256 = "0jsy7a710qv8gld5957ybrnc07gavppp963gs32xk4ag8130jy99"; - libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -16753,7 +16341,6 @@ rec { version = "0.3.1"; edition = "2018"; sha256 = "03hbfrnvqqdchb5kgxyavb9jabwza0dmh2vw5kg0dq8rxl57d9xz"; - libPath = "src/lib.rs"; authors = [ "Sean McArthur " ]; @@ -16770,7 +16357,6 @@ rec { version = "0.11.1+wasi-snapshot-preview1"; edition = "2018"; sha256 = "0jx49r7nbkbhyfrfyhz0bm4817yrnxgd3jiwwwfv0zl439jyrwyc"; - libPath = "src/lib.rs"; authors = [ "The Cranelift Project Developers" ]; @@ -16787,7 +16373,6 @@ rec { version = "1.0.1+wasi-0.2.4"; edition = "2021"; sha256 = "1rsqmpspwy0zja82xx7kbkbg9fv34a4a2if3sbd76dy64a244qh5"; - libPath = "src/lib.rs"; dependencies = [ { name = "wit-bindgen"; @@ -16808,7 +16393,6 @@ rec { version = "0.1.0"; edition = "2018"; sha256 = "0nw5h9nmcl4fyf4j5d4mfdjfgvwi1cakpi349wc4zrr59wxxinmq"; - libPath = "src/lib.rs"; }; "wasm-bindgen" = rec { @@ -16817,7 +16401,6 @@ rec { edition = "2021"; sha256 = "0q7aqnjwl9dn5sql46nbhzz63v3q0mdp3rsv7zcvn7s1zhypk5fs"; libName = "wasm_bindgen"; - libPath = "src/lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -16869,7 +16452,6 @@ rec { edition = "2021"; sha256 = "186l2nhznpbxcl2475dlm1pd7dfk5lqnz8frgk67qpkddh88h7sm"; libName = "wasm_bindgen_futures"; - libPath = "src/lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -16916,7 +16498,6 @@ rec { sha256 = "1hjrmfnnjcksmf4kizsb78a0apr6ym73iwlhhszsf14ya0s469h4"; procMacro = true; libName = "wasm_bindgen_macro"; - libPath = "src/lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -16940,7 +16521,6 @@ rec { edition = "2021"; sha256 = "1g3ydkp5js5qg56a30w9v090v5byslay2lidjiifa8pkv4ww62s2"; libName = "wasm_bindgen_macro_support"; - libPath = "src/lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -16978,7 +16558,6 @@ rec { links = "wasm_bindgen"; sha256 = "0xmgnvf5m91lw6avjxha1v76bm27g2q5jw7c4lyb7g44ijiiiwkn"; libName = "wasm_bindgen_shared"; - libPath = "src/lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -16996,7 +16575,6 @@ rec { edition = "2021"; sha256 = "18d9k5f92czaj27zmw20nzcnax5rdcx68r3s3ypg8irss309a7rs"; libName = "web_sys"; - libPath = "src/lib.rs"; authors = [ "The wasm-bindgen Developers" ]; @@ -17485,7 +17063,6 @@ rec { edition = "2021"; sha256 = "1fx05yqx83dhx628wb70fyy10yjfq1jpl20qfqhdkymi13rq0ras"; libName = "web_time"; - libPath = "src/lib.rs"; dependencies = [ { name = "js-sys"; @@ -17509,7 +17086,6 @@ rec { edition = "2021"; sha256 = "1f49w0s7f3fgczvjri179wh2a9g8jpkmdi5bi5l8p7ylsb031c9j"; libName = "webpki_roots"; - libPath = "src/lib.rs"; dependencies = [ { name = "rustls-pki-types"; @@ -17525,7 +17101,6 @@ rec { version = "1.6.1"; edition = "2018"; sha256 = "0zg9sz669vhqyxysn4lymnianj29jxs2vl6k2lqcl0kp0yslsjjx"; - libPath = "src/lib.rs"; dependencies = [ { name = "libredox"; @@ -17557,7 +17132,6 @@ rec { version = "0.3.9"; edition = "2015"; sha256 = "06gl025x418lchw1wxj64ycr7gha83m44cjr5sarhynd9xkrm0sw"; - libPath = "src/lib.rs"; authors = [ "Peter Atashian " ]; @@ -17584,7 +17158,6 @@ rec { edition = "2015"; sha256 = "1dmpa6mvcvzz16zg6d5vrfy4bxgg541wxrcip7cnshi06v38ffxc"; libName = "winapi_i686_pc_windows_gnu"; - libPath = "src/lib.rs"; authors = [ "Peter Atashian " ]; @@ -17596,7 +17169,6 @@ rec { edition = "2021"; sha256 = "08hdl7mkll7pz8whg869h58c1r9y7in0w0pk8fm24qc77k0b39y2"; libName = "winapi_util"; - libPath = "src/lib.rs"; authors = [ "Andrew Gallant " ]; @@ -17616,7 +17188,6 @@ rec { edition = "2015"; sha256 = "0gqq64czqb64kskjryj8isp62m2sgvx25yyj3kpc2myh85w24bki"; libName = "winapi_x86_64_pc_windows_gnu"; - libPath = "src/lib.rs"; authors = [ "Peter Atashian " ]; @@ -17628,7 +17199,6 @@ rec { edition = "2021"; sha256 = "1swxpv1a8qvn3bkxv8cn663238h2jccq35ff3nsj61jdsca3ms5q"; libName = "windows_core"; - libPath = "src/lib.rs"; dependencies = [ { name = "windows-implement"; @@ -17669,7 +17239,6 @@ rec { sha256 = "1psxhmklzcf3wjs4b8qb42qb6znvc142cb5pa74rsyxm1822wgh5"; procMacro = true; libName = "windows_implement"; - libPath = "src/lib.rs"; dependencies = [ { name = "proc-macro2"; @@ -17697,7 +17266,6 @@ rec { sha256 = "0n73cwrn4247d0axrk7gjp08p34x1723483jxjxjdfkh4m56qc9z"; procMacro = true; libName = "windows_interface"; - libPath = "src/lib.rs"; dependencies = [ { name = "proc-macro2"; @@ -17724,7 +17292,6 @@ rec { edition = "2021"; sha256 = "12kr1p46dbhpijr4zbwr2spfgq8i8c5x55mvvfmyl96m01cx4sjy"; libName = "windows_link"; - libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -17736,7 +17303,6 @@ rec { edition = "2021"; sha256 = "1rag186yfr3xx7piv5rg8b6im2dwcf8zldiflvb22xbzwli5507h"; libName = "windows_link"; - libPath = "src/lib.rs"; }; "windows-result" = rec { @@ -17745,7 +17311,6 @@ rec { edition = "2021"; sha256 = "1d9yhmrmmfqh56zlj751s5wfm9a2aa7az9rd7nn5027nxa4zm0bp"; libName = "windows_result"; - libPath = "src/lib.rs"; dependencies = [ { name = "windows-link"; @@ -17764,7 +17329,6 @@ rec { edition = "2021"; sha256 = "14bhng9jqv4fyl7lqjz3az7vzh8pw0w4am49fsqgcz67d67x0dvq"; libName = "windows_strings"; - libPath = "src/lib.rs"; dependencies = [ { name = "windows-link"; @@ -17783,7 +17347,6 @@ rec { edition = "2021"; sha256 = "0gd3v4ji88490zgb6b5mq5zgbvwv7zx1ibn8v3x83rwcdbryaar8"; libName = "windows_sys"; - libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -18032,7 +17595,6 @@ rec { edition = "2021"; sha256 = "0fw5672ziw8b3zpmnbp9pdv1famk74f1l9fcbc3zsrzdg56vqf0y"; libName = "windows_sys"; - libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -18292,7 +17854,6 @@ rec { edition = "2021"; sha256 = "1jrbc615ihqnhjhxplr2kw7rasrskv9wj3lr80hgfd42sbj01xgj"; libName = "windows_sys"; - libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -18558,7 +18119,6 @@ rec { edition = "2021"; sha256 = "1z7k3y9b6b5h52kid57lvmvm05362zv1v8w0gc7xyv5xphlp44xf"; libName = "windows_sys"; - libPath = "src/lib.rs"; dependencies = [ { name = "windows-link"; @@ -18821,7 +18381,6 @@ rec { edition = "2021"; sha256 = "0wwrx625nwlfp7k93r2rra568gad1mwd888h1jwnl0vfg5r4ywlv"; libName = "windows_targets"; - libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -18875,7 +18434,6 @@ rec { edition = "2021"; sha256 = "1wv9j2gv3l6wj3gkw5j1kr6ymb5q6dfc42yvydjhv3mqa7szjia9"; libName = "windows_targets"; - libPath = "src/lib.rs"; dependencies = [ { name = "windows-link"; @@ -18931,7 +18489,6 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "1lrcq38cr2arvmz19v32qaggvj8bh1640mdm9c2fr877h0hn591j"; - libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -18942,7 +18499,6 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "0lqvdm510mka9w26vmga7hbkmrw9glzc90l4gya5qbxlm1pl3n59"; - libPath = "src/lib.rs"; }; "windows_aarch64_msvc 0.52.6" = rec { @@ -18950,7 +18506,6 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "0sfl0nysnz32yyfh773hpi49b1q700ah6y7sacmjbqjjn5xjmv09"; - libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -18961,7 +18516,6 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "01jh2adlwx043rji888b22whx4bm8alrk3khjpik5xn20kl85mxr"; - libPath = "src/lib.rs"; }; "windows_i686_gnu 0.52.6" = rec { @@ -18969,7 +18523,6 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "02zspglbykh1jh9pi7gn8g1f97jh1rrccni9ivmrfbl0mgamm6wf"; - libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -18980,7 +18533,6 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "18wkcm82ldyg4figcsidzwbg1pqd49jpm98crfz0j7nqd6h6s3ln"; - libPath = "src/lib.rs"; }; "windows_i686_gnullvm 0.52.6" = rec { @@ -18988,7 +18540,6 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "0rpdx1537mw6slcpqa0rm3qixmsb79nbhqy5fsm3q2q9ik9m5vhf"; - libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -18999,7 +18550,6 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "030qaxqc4salz6l4immfb6sykc6gmhyir9wzn2w8mxj8038mjwzs"; - libPath = "src/lib.rs"; }; "windows_i686_msvc 0.52.6" = rec { @@ -19007,7 +18557,6 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "0rkcqmp4zzmfvrrrx01260q3xkpzi6fzi2x2pgdcdry50ny4h294"; - libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -19018,7 +18567,6 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "1hi6scw3mn2pbdl30ji5i4y8vvspb9b66l98kkz350pig58wfyhy"; - libPath = "src/lib.rs"; }; "windows_x86_64_gnu 0.52.6" = rec { @@ -19026,7 +18574,6 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "0y0sifqcb56a56mvn7xjgs8g43p33mfqkd8wj1yhrgxzma05qyhl"; - libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -19037,7 +18584,6 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "16d4yiysmfdlsrghndr97y57gh3kljkwhfdbcs05m1jasz6l4f4w"; - libPath = "src/lib.rs"; }; "windows_x86_64_gnullvm 0.52.6" = rec { @@ -19045,7 +18591,6 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "03gda7zjx1qh8k9nnlgb7m3w3s1xkysg55hkd1wjch8pqhyv5m94"; - libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -19056,7 +18601,6 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "1qbspgv4g3q0vygkg8rnql5c6z3caqv38japiynyivh75ng1gyhg"; - libPath = "src/lib.rs"; }; "windows_x86_64_msvc 0.52.6" = rec { @@ -19064,7 +18608,6 @@ rec { version = "0.52.6"; edition = "2021"; sha256 = "1v7rb5cibyzx8vak29pdrk8nx9hycsjs4w0jgms08qk49jl6v7sq"; - libPath = "src/lib.rs"; authors = [ "Microsoft" ]; @@ -19075,7 +18618,6 @@ rec { version = "0.53.1"; edition = "2021"; sha256 = "0l6npq76vlq4ksn4bwsncpr8508mk0gmznm6wnhjg95d19gzzfyn"; - libPath = "src/lib.rs"; }; "winnow" = rec { @@ -19083,7 +18625,6 @@ rec { version = "0.7.13"; edition = "2021"; sha256 = "1krrjc1wj2vx0r57m9nwnlc1zrhga3fq41d8w9hysvvqb5mj7811"; - libPath = "src/lib.rs"; dependencies = [ { name = "memchr"; @@ -19107,7 +18648,6 @@ rec { edition = "2021"; sha256 = "0ngysw50gp2wrrfxbwgp6dhw1g6sckknsn3wm7l00vaf7n48aypi"; libName = "wit_bindgen"; - libPath = "src/lib.rs"; authors = [ "Alex Crichton " ]; @@ -19124,7 +18664,6 @@ rec { version = "0.6.2"; edition = "2021"; sha256 = "1fg08y97n6vk7l0rnjggw3xyrii6dcqg54wqaxldrlk98zdy1pcy"; - libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -19138,7 +18677,6 @@ rec { version = "0.5.1"; edition = "2018"; sha256 = "1vdrfy7i2bznnzjdl9vvrzljvs4s3qm8bnlgqwln6a941gy61wq5"; - libPath = "src/lib.rs"; authors = [ "myrrlyn " ]; @@ -19161,7 +18699,6 @@ rec { version = "1.0.1"; edition = "2021"; sha256 = "0jdh55jyv0dpd38ij4qh60zglbw9aa8wafqai6m0wa7xaxk3mrfg"; - libPath = "src/lib.rs"; authors = [ "Sergio Benitez " ]; @@ -19180,7 +18717,6 @@ rec { version = "0.8.1"; edition = "2021"; sha256 = "0m29dm0bf5iakxgma0bj6dbmc3b8qi9b1vaw9sa76kdqmz3fbmkj"; - libPath = "src/lib.rs"; authors = [ "Manish Goregaokar " ]; @@ -19218,7 +18754,6 @@ rec { sha256 = "0pbyja133jnng4mrhimzdq4a0y26421g734ybgz8wsgbfhl0andn"; procMacro = true; libName = "yoke_derive"; - libPath = "src/lib.rs"; authors = [ "Manish Goregaokar " ]; @@ -19248,7 +18783,6 @@ rec { version = "0.8.27"; edition = "2021"; sha256 = "0b1870gf2zzlckca69v2k4mqwmf8yh2li37qldnzvvd3by58g508"; - libPath = "src/lib.rs"; authors = [ "Joshua Liebow-Feeser " "Jack Wrenn " @@ -19287,7 +18821,6 @@ rec { sha256 = "0c9qrylm2p55dvaplxsl24ma48add9qk4y0d6kjbkllaqvcvill8"; procMacro = true; libName = "zerocopy_derive"; - libPath = "src/lib.rs"; authors = [ "Joshua Liebow-Feeser " "Jack Wrenn " @@ -19314,7 +18847,6 @@ rec { version = "0.1.6"; edition = "2021"; sha256 = "19dyky67zkjichsb7ykhv0aqws3q0jfvzww76l66c19y6gh45k2h"; - libPath = "src/lib.rs"; authors = [ "Manish Goregaokar " ]; @@ -19339,7 +18871,6 @@ rec { sha256 = "00l5niw7c1b0lf1vhvajpjmcnbdp2vn96jg4nmkhq2db0rp5s7np"; procMacro = true; libName = "zerofrom_derive"; - libPath = "src/lib.rs"; authors = [ "Manish Goregaokar " ]; @@ -19369,7 +18900,6 @@ rec { version = "1.8.2"; edition = "2021"; sha256 = "1l48zxgcv34d7kjskr610zqsm6j2b4fcr2vfh9jm9j1jgvk58wdr"; - libPath = "src/lib.rs"; authors = [ "The RustCrypto Project Developers" ]; @@ -19387,7 +18917,6 @@ rec { version = "0.2.3"; edition = "2021"; sha256 = "0lbqznlqazmrwwzslw0ci7p3pqxykrbfhq29npj0gmb2amxc2n9a"; - libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -19426,7 +18955,6 @@ rec { version = "0.11.5"; edition = "2021"; sha256 = "00m0p47k2g9mkv505hky5xh3r6ps7v8qc0dy4pspg542jj972a3c"; - libPath = "src/lib.rs"; authors = [ "The ICU4X Project Developers" ]; @@ -19466,7 +18994,6 @@ rec { sha256 = "1wsig4h5j7a1scd5hrlnragnazjny9qjc44hancb6p6a76ay7p7a"; procMacro = true; libName = "zerovec_derive"; - libPath = "src/lib.rs"; authors = [ "Manish Goregaokar " ]; From 1ce7f7c08adc7a1e6c581efbb7787376301f18f1 Mon Sep 17 00:00:00 2001 From: Morpheus Date: Sun, 2 Nov 2025 20:15:35 +0100 Subject: [PATCH 09/13] insert recommendations --- Cargo.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.nix b/Cargo.nix index 1cbd65b6..5e740223 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -19115,7 +19115,7 @@ rec { # If the user hasn't set any pre/post commands, we don't want to # insert empty lines. This means that any existing users of crate2nix # don't get a spurious rebuild unless they set these explicitly. - testCommand = pkgs.lib.concatStringsSep "/n" + testCommand = pkgs.lib.concatStringsSep "\n" (pkgs.lib.filter (s: s != "") [ testPreRun "$f $testCrateFlags 2>&1 | tee -a $out" @@ -19179,7 +19179,7 @@ rec { (lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) '' echo tested by ${test} '' + '' - ${lib.concatMapStringsSep "/n" (output: "ln -s ${crate.${output}} ${"$"}${output}") crate.outputs} + ${lib.concatMapStringsSep "\n" (output: "ln -s ${crate.${output}} ${"$"}${output}") crate.outputs} ''); /* A restricted overridable version of builtRustCratesWithFeatures. */ From 2fcaca7ad940019cd229a0ee8921b5b9f3faa8d4 Mon Sep 17 00:00:00 2001 From: Morpheus Date: Sun, 2 Nov 2025 20:25:53 +0100 Subject: [PATCH 10/13] insert recommendations --- Cargo.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.nix b/Cargo.nix index 5e740223..553f44b1 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -1077,6 +1077,7 @@ rec { version = "0.0.0"; edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./academy_assets; }; + }; "academy_auth_contracts" = rec { crateName = "academy_auth_contracts"; @@ -14126,8 +14127,7 @@ rec { crateName = "slug"; version = "0.1.6"; edition = "2021"; - sha256 = "0977cyp88xrwbpmqwzafkvv8vm9i0gdb5zjskb6f6pg45vvq0al8"; - type = [ "cdylib" "rlib" ]; + sha256 = "0977cyp88xrwbpmqwzafkvv8vm9i0gdb5zjskb6f6pg45vvq0al8";type = [ "cdylib" "rlib" ]; authors = [ "Steven Allen " ]; @@ -19081,8 +19081,8 @@ rec { # Filter out editor backup / swap files. || lib.hasSuffix "~" baseName - || builtins.match "^/.sw[a-z]$$" baseName != null - || builtins.match "^/..*/.sw[a-z]$$" baseName != null + || builtins.match "^\.sw[a-z]$$" baseName != null + || builtins.match "^\..*\.sw[a-z]$$" baseName != null || lib.hasSuffix ".tmp" baseName || lib.hasSuffix ".bak" baseName || baseName == "tests.nix" From 592e4ac88924dfb20d287ade030831f1fff8d605 Mon Sep 17 00:00:00 2001 From: Morpheus Date: Sun, 2 Nov 2025 20:30:26 +0100 Subject: [PATCH 11/13] Fix build --- Cargo.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.nix b/Cargo.nix index 553f44b1..6e397f42 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -19081,8 +19081,8 @@ rec { # Filter out editor backup / swap files. || lib.hasSuffix "~" baseName - || builtins.match "^\.sw[a-z]$$" baseName != null - || builtins.match "^\..*\.sw[a-z]$$" baseName != null + || builtins.match "^\\.sw[a-z]$$" baseName != null + || builtins.match "^\\..*\\.sw[a-z]$$" baseName != null || lib.hasSuffix ".tmp" baseName || lib.hasSuffix ".bak" baseName || baseName == "tests.nix" From 94353487427cbc7191e8e91137aa9ef85e89cef9 Mon Sep 17 00:00:00 2001 From: Morpheus Date: Sun, 2 Nov 2025 20:43:03 +0100 Subject: [PATCH 12/13] Fix build --- .gitattributes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index fb6fa53e..4ae6a59f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1 @@ -Cargo.nix linguist-generated +Cargo.nix linguist-generated text eol=lf From e3ecfcd47b494613da48fd210c963ee21db24eb6 Mon Sep 17 00:00:00 2001 From: Morpheus Date: Sun, 2 Nov 2025 21:56:11 +0100 Subject: [PATCH 13/13] Fix build --- Cargo.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.nix b/Cargo.nix index 6e397f42..2d6c18a0 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -19694,3 +19694,4 @@ rec { # }; } +