Spaces:
Runtime error
Runtime error
Commit
·
8c9f41d
0
Parent(s):
baseline
Browse files- .gitignore +3 -0
- .sqlfluff +2 -0
- Cargo.lock +1553 -0
- Cargo.toml +19 -0
- Dockerfile +17 -0
- migrations/.keep +0 -0
- migrations/00000000000000_diesel_initial_setup/down.sql +6 -0
- migrations/00000000000000_diesel_initial_setup/up.sql +36 -0
- migrations/2025-08-19-034235_create_videos/down.sql +1 -0
- migrations/2025-08-19-034235_create_videos/up.sql +6 -0
- migrations/2025-08-19-041510_create_keyframes/down.sql +1 -0
- migrations/2025-08-19-041510_create_keyframes/up.sql +7 -0
- src/controllers/mod.rs +9 -0
- src/controllers/v1/keyframes/mod.rs +40 -0
- src/controllers/v1/mod.rs +12 -0
- src/controllers/v1/videos/mod.rs +39 -0
- src/docs/mod.rs +11 -0
- src/dtos/keyframes/mod.rs +32 -0
- src/dtos/mod.rs +2 -0
- src/dtos/videos/mod.rs +17 -0
- src/entities/keyframes/mod.rs +22 -0
- src/entities/mod.rs +2 -0
- src/entities/videos/mod.rs +22 -0
- src/main.rs +42 -0
- src/repositories/keyframes/mod.rs +42 -0
- src/repositories/mod.rs +2 -0
- src/repositories/videos/mod.rs +34 -0
- src/schema.rs +25 -0
- src/services/keyframes/mod.rs +32 -0
- src/services/mod.rs +2 -0
- src/services/videos/mod.rs +27 -0
- src/states/mod.rs +27 -0
.gitignore
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/target
|
| 2 |
+
/.envrc
|
| 3 |
+
/diesel.toml
|
.sqlfluff
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[sqlfluff]
|
| 2 |
+
dialect=postgres
|
Cargo.lock
ADDED
|
@@ -0,0 +1,1553 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file is automatically @generated by Cargo.
|
| 2 |
+
# It is not intended for manual editing.
|
| 3 |
+
version = 4
|
| 4 |
+
|
| 5 |
+
[[package]]
|
| 6 |
+
name = "addr2line"
|
| 7 |
+
version = "0.24.2"
|
| 8 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 9 |
+
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
|
| 10 |
+
dependencies = [
|
| 11 |
+
"gimli",
|
| 12 |
+
]
|
| 13 |
+
|
| 14 |
+
[[package]]
|
| 15 |
+
name = "adler2"
|
| 16 |
+
version = "2.0.1"
|
| 17 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 18 |
+
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
|
| 19 |
+
|
| 20 |
+
[[package]]
|
| 21 |
+
name = "aho-corasick"
|
| 22 |
+
version = "1.1.3"
|
| 23 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 24 |
+
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
|
| 25 |
+
dependencies = [
|
| 26 |
+
"memchr",
|
| 27 |
+
]
|
| 28 |
+
|
| 29 |
+
[[package]]
|
| 30 |
+
name = "aic-server"
|
| 31 |
+
version = "0.1.0"
|
| 32 |
+
dependencies = [
|
| 33 |
+
"anyhow",
|
| 34 |
+
"axum",
|
| 35 |
+
"deadpool-diesel",
|
| 36 |
+
"diesel",
|
| 37 |
+
"futures",
|
| 38 |
+
"serde",
|
| 39 |
+
"tokio",
|
| 40 |
+
"tower",
|
| 41 |
+
"tower-http",
|
| 42 |
+
"tracing",
|
| 43 |
+
"utoipa",
|
| 44 |
+
"utoipa-axum",
|
| 45 |
+
"utoipa-swagger-ui",
|
| 46 |
+
]
|
| 47 |
+
|
| 48 |
+
[[package]]
|
| 49 |
+
name = "anyhow"
|
| 50 |
+
version = "1.0.99"
|
| 51 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 52 |
+
checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100"
|
| 53 |
+
|
| 54 |
+
[[package]]
|
| 55 |
+
name = "arbitrary"
|
| 56 |
+
version = "1.4.2"
|
| 57 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 58 |
+
checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1"
|
| 59 |
+
dependencies = [
|
| 60 |
+
"derive_arbitrary",
|
| 61 |
+
]
|
| 62 |
+
|
| 63 |
+
[[package]]
|
| 64 |
+
name = "axum"
|
| 65 |
+
version = "0.8.4"
|
| 66 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 67 |
+
checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5"
|
| 68 |
+
dependencies = [
|
| 69 |
+
"axum-core",
|
| 70 |
+
"bytes",
|
| 71 |
+
"form_urlencoded",
|
| 72 |
+
"futures-util",
|
| 73 |
+
"http",
|
| 74 |
+
"http-body",
|
| 75 |
+
"http-body-util",
|
| 76 |
+
"hyper",
|
| 77 |
+
"hyper-util",
|
| 78 |
+
"itoa",
|
| 79 |
+
"matchit",
|
| 80 |
+
"memchr",
|
| 81 |
+
"mime",
|
| 82 |
+
"percent-encoding",
|
| 83 |
+
"pin-project-lite",
|
| 84 |
+
"rustversion",
|
| 85 |
+
"serde",
|
| 86 |
+
"serde_json",
|
| 87 |
+
"serde_path_to_error",
|
| 88 |
+
"serde_urlencoded",
|
| 89 |
+
"sync_wrapper",
|
| 90 |
+
"tokio",
|
| 91 |
+
"tower",
|
| 92 |
+
"tower-layer",
|
| 93 |
+
"tower-service",
|
| 94 |
+
"tracing",
|
| 95 |
+
]
|
| 96 |
+
|
| 97 |
+
[[package]]
|
| 98 |
+
name = "axum-core"
|
| 99 |
+
version = "0.5.2"
|
| 100 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 101 |
+
checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6"
|
| 102 |
+
dependencies = [
|
| 103 |
+
"bytes",
|
| 104 |
+
"futures-core",
|
| 105 |
+
"http",
|
| 106 |
+
"http-body",
|
| 107 |
+
"http-body-util",
|
| 108 |
+
"mime",
|
| 109 |
+
"pin-project-lite",
|
| 110 |
+
"rustversion",
|
| 111 |
+
"sync_wrapper",
|
| 112 |
+
"tower-layer",
|
| 113 |
+
"tower-service",
|
| 114 |
+
"tracing",
|
| 115 |
+
]
|
| 116 |
+
|
| 117 |
+
[[package]]
|
| 118 |
+
name = "backtrace"
|
| 119 |
+
version = "0.3.75"
|
| 120 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 121 |
+
checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
|
| 122 |
+
dependencies = [
|
| 123 |
+
"addr2line",
|
| 124 |
+
"cfg-if",
|
| 125 |
+
"libc",
|
| 126 |
+
"miniz_oxide",
|
| 127 |
+
"object",
|
| 128 |
+
"rustc-demangle",
|
| 129 |
+
"windows-targets",
|
| 130 |
+
]
|
| 131 |
+
|
| 132 |
+
[[package]]
|
| 133 |
+
name = "base64"
|
| 134 |
+
version = "0.22.1"
|
| 135 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 136 |
+
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
|
| 137 |
+
|
| 138 |
+
[[package]]
|
| 139 |
+
name = "bitflags"
|
| 140 |
+
version = "2.9.2"
|
| 141 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 142 |
+
checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29"
|
| 143 |
+
|
| 144 |
+
[[package]]
|
| 145 |
+
name = "block-buffer"
|
| 146 |
+
version = "0.10.4"
|
| 147 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 148 |
+
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
|
| 149 |
+
dependencies = [
|
| 150 |
+
"generic-array",
|
| 151 |
+
]
|
| 152 |
+
|
| 153 |
+
[[package]]
|
| 154 |
+
name = "bumpalo"
|
| 155 |
+
version = "3.19.0"
|
| 156 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 157 |
+
checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
|
| 158 |
+
|
| 159 |
+
[[package]]
|
| 160 |
+
name = "byteorder"
|
| 161 |
+
version = "1.5.0"
|
| 162 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 163 |
+
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
| 164 |
+
|
| 165 |
+
[[package]]
|
| 166 |
+
name = "bytes"
|
| 167 |
+
version = "1.10.1"
|
| 168 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 169 |
+
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
|
| 170 |
+
|
| 171 |
+
[[package]]
|
| 172 |
+
name = "cfg-if"
|
| 173 |
+
version = "1.0.1"
|
| 174 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 175 |
+
checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
|
| 176 |
+
|
| 177 |
+
[[package]]
|
| 178 |
+
name = "cpufeatures"
|
| 179 |
+
version = "0.2.17"
|
| 180 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 181 |
+
checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
|
| 182 |
+
dependencies = [
|
| 183 |
+
"libc",
|
| 184 |
+
]
|
| 185 |
+
|
| 186 |
+
[[package]]
|
| 187 |
+
name = "crc32fast"
|
| 188 |
+
version = "1.5.0"
|
| 189 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 190 |
+
checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
|
| 191 |
+
dependencies = [
|
| 192 |
+
"cfg-if",
|
| 193 |
+
]
|
| 194 |
+
|
| 195 |
+
[[package]]
|
| 196 |
+
name = "crypto-common"
|
| 197 |
+
version = "0.1.6"
|
| 198 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 199 |
+
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
|
| 200 |
+
dependencies = [
|
| 201 |
+
"generic-array",
|
| 202 |
+
"typenum",
|
| 203 |
+
]
|
| 204 |
+
|
| 205 |
+
[[package]]
|
| 206 |
+
name = "darling"
|
| 207 |
+
version = "0.20.11"
|
| 208 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 209 |
+
checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
|
| 210 |
+
dependencies = [
|
| 211 |
+
"darling_core",
|
| 212 |
+
"darling_macro",
|
| 213 |
+
]
|
| 214 |
+
|
| 215 |
+
[[package]]
|
| 216 |
+
name = "darling_core"
|
| 217 |
+
version = "0.20.11"
|
| 218 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 219 |
+
checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
|
| 220 |
+
dependencies = [
|
| 221 |
+
"fnv",
|
| 222 |
+
"ident_case",
|
| 223 |
+
"proc-macro2",
|
| 224 |
+
"quote",
|
| 225 |
+
"strsim",
|
| 226 |
+
"syn",
|
| 227 |
+
]
|
| 228 |
+
|
| 229 |
+
[[package]]
|
| 230 |
+
name = "darling_macro"
|
| 231 |
+
version = "0.20.11"
|
| 232 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 233 |
+
checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
|
| 234 |
+
dependencies = [
|
| 235 |
+
"darling_core",
|
| 236 |
+
"quote",
|
| 237 |
+
"syn",
|
| 238 |
+
]
|
| 239 |
+
|
| 240 |
+
[[package]]
|
| 241 |
+
name = "deadpool"
|
| 242 |
+
version = "0.12.2"
|
| 243 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 244 |
+
checksum = "5ed5957ff93768adf7a65ab167a17835c3d2c3c50d084fe305174c112f468e2f"
|
| 245 |
+
dependencies = [
|
| 246 |
+
"deadpool-runtime",
|
| 247 |
+
"num_cpus",
|
| 248 |
+
"tokio",
|
| 249 |
+
]
|
| 250 |
+
|
| 251 |
+
[[package]]
|
| 252 |
+
name = "deadpool-diesel"
|
| 253 |
+
version = "0.6.1"
|
| 254 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 255 |
+
checksum = "590573e9e29c5190a5ff782136f871e6e652e35d598a349888e028693601adf1"
|
| 256 |
+
dependencies = [
|
| 257 |
+
"deadpool",
|
| 258 |
+
"deadpool-sync",
|
| 259 |
+
"diesel",
|
| 260 |
+
]
|
| 261 |
+
|
| 262 |
+
[[package]]
|
| 263 |
+
name = "deadpool-runtime"
|
| 264 |
+
version = "0.1.4"
|
| 265 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 266 |
+
checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b"
|
| 267 |
+
dependencies = [
|
| 268 |
+
"tokio",
|
| 269 |
+
]
|
| 270 |
+
|
| 271 |
+
[[package]]
|
| 272 |
+
name = "deadpool-sync"
|
| 273 |
+
version = "0.1.4"
|
| 274 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 275 |
+
checksum = "524bc3df0d57e98ecd022e21ba31166c2625e7d3e5bcc4510efaeeab4abcab04"
|
| 276 |
+
dependencies = [
|
| 277 |
+
"deadpool-runtime",
|
| 278 |
+
]
|
| 279 |
+
|
| 280 |
+
[[package]]
|
| 281 |
+
name = "derive_arbitrary"
|
| 282 |
+
version = "1.4.2"
|
| 283 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 284 |
+
checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a"
|
| 285 |
+
dependencies = [
|
| 286 |
+
"proc-macro2",
|
| 287 |
+
"quote",
|
| 288 |
+
"syn",
|
| 289 |
+
]
|
| 290 |
+
|
| 291 |
+
[[package]]
|
| 292 |
+
name = "diesel"
|
| 293 |
+
version = "2.2.12"
|
| 294 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 295 |
+
checksum = "229850a212cd9b84d4f0290ad9d294afc0ae70fccaa8949dbe8b43ffafa1e20c"
|
| 296 |
+
dependencies = [
|
| 297 |
+
"bitflags",
|
| 298 |
+
"byteorder",
|
| 299 |
+
"diesel_derives",
|
| 300 |
+
"itoa",
|
| 301 |
+
"pq-sys",
|
| 302 |
+
]
|
| 303 |
+
|
| 304 |
+
[[package]]
|
| 305 |
+
name = "diesel_derives"
|
| 306 |
+
version = "2.2.7"
|
| 307 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 308 |
+
checksum = "1b96984c469425cb577bf6f17121ecb3e4fe1e81de5d8f780dd372802858d756"
|
| 309 |
+
dependencies = [
|
| 310 |
+
"diesel_table_macro_syntax",
|
| 311 |
+
"dsl_auto_type",
|
| 312 |
+
"proc-macro2",
|
| 313 |
+
"quote",
|
| 314 |
+
"syn",
|
| 315 |
+
]
|
| 316 |
+
|
| 317 |
+
[[package]]
|
| 318 |
+
name = "diesel_table_macro_syntax"
|
| 319 |
+
version = "0.2.0"
|
| 320 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 321 |
+
checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25"
|
| 322 |
+
dependencies = [
|
| 323 |
+
"syn",
|
| 324 |
+
]
|
| 325 |
+
|
| 326 |
+
[[package]]
|
| 327 |
+
name = "digest"
|
| 328 |
+
version = "0.10.7"
|
| 329 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 330 |
+
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
|
| 331 |
+
dependencies = [
|
| 332 |
+
"block-buffer",
|
| 333 |
+
"crypto-common",
|
| 334 |
+
]
|
| 335 |
+
|
| 336 |
+
[[package]]
|
| 337 |
+
name = "displaydoc"
|
| 338 |
+
version = "0.2.5"
|
| 339 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 340 |
+
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
|
| 341 |
+
dependencies = [
|
| 342 |
+
"proc-macro2",
|
| 343 |
+
"quote",
|
| 344 |
+
"syn",
|
| 345 |
+
]
|
| 346 |
+
|
| 347 |
+
[[package]]
|
| 348 |
+
name = "dsl_auto_type"
|
| 349 |
+
version = "0.1.3"
|
| 350 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 351 |
+
checksum = "139ae9aca7527f85f26dd76483eb38533fd84bd571065da1739656ef71c5ff5b"
|
| 352 |
+
dependencies = [
|
| 353 |
+
"darling",
|
| 354 |
+
"either",
|
| 355 |
+
"heck",
|
| 356 |
+
"proc-macro2",
|
| 357 |
+
"quote",
|
| 358 |
+
"syn",
|
| 359 |
+
]
|
| 360 |
+
|
| 361 |
+
[[package]]
|
| 362 |
+
name = "either"
|
| 363 |
+
version = "1.15.0"
|
| 364 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 365 |
+
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
|
| 366 |
+
|
| 367 |
+
[[package]]
|
| 368 |
+
name = "equivalent"
|
| 369 |
+
version = "1.0.2"
|
| 370 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 371 |
+
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
|
| 372 |
+
|
| 373 |
+
[[package]]
|
| 374 |
+
name = "flate2"
|
| 375 |
+
version = "1.1.2"
|
| 376 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 377 |
+
checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d"
|
| 378 |
+
dependencies = [
|
| 379 |
+
"crc32fast",
|
| 380 |
+
"libz-rs-sys",
|
| 381 |
+
"miniz_oxide",
|
| 382 |
+
]
|
| 383 |
+
|
| 384 |
+
[[package]]
|
| 385 |
+
name = "fnv"
|
| 386 |
+
version = "1.0.7"
|
| 387 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 388 |
+
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
| 389 |
+
|
| 390 |
+
[[package]]
|
| 391 |
+
name = "form_urlencoded"
|
| 392 |
+
version = "1.2.1"
|
| 393 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 394 |
+
checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
|
| 395 |
+
dependencies = [
|
| 396 |
+
"percent-encoding",
|
| 397 |
+
]
|
| 398 |
+
|
| 399 |
+
[[package]]
|
| 400 |
+
name = "futures"
|
| 401 |
+
version = "0.3.31"
|
| 402 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 403 |
+
checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
|
| 404 |
+
dependencies = [
|
| 405 |
+
"futures-channel",
|
| 406 |
+
"futures-core",
|
| 407 |
+
"futures-executor",
|
| 408 |
+
"futures-io",
|
| 409 |
+
"futures-sink",
|
| 410 |
+
"futures-task",
|
| 411 |
+
"futures-util",
|
| 412 |
+
]
|
| 413 |
+
|
| 414 |
+
[[package]]
|
| 415 |
+
name = "futures-channel"
|
| 416 |
+
version = "0.3.31"
|
| 417 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 418 |
+
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
|
| 419 |
+
dependencies = [
|
| 420 |
+
"futures-core",
|
| 421 |
+
"futures-sink",
|
| 422 |
+
]
|
| 423 |
+
|
| 424 |
+
[[package]]
|
| 425 |
+
name = "futures-core"
|
| 426 |
+
version = "0.3.31"
|
| 427 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 428 |
+
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
|
| 429 |
+
|
| 430 |
+
[[package]]
|
| 431 |
+
name = "futures-executor"
|
| 432 |
+
version = "0.3.31"
|
| 433 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 434 |
+
checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
|
| 435 |
+
dependencies = [
|
| 436 |
+
"futures-core",
|
| 437 |
+
"futures-task",
|
| 438 |
+
"futures-util",
|
| 439 |
+
]
|
| 440 |
+
|
| 441 |
+
[[package]]
|
| 442 |
+
name = "futures-io"
|
| 443 |
+
version = "0.3.31"
|
| 444 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 445 |
+
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
|
| 446 |
+
|
| 447 |
+
[[package]]
|
| 448 |
+
name = "futures-macro"
|
| 449 |
+
version = "0.3.31"
|
| 450 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 451 |
+
checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
|
| 452 |
+
dependencies = [
|
| 453 |
+
"proc-macro2",
|
| 454 |
+
"quote",
|
| 455 |
+
"syn",
|
| 456 |
+
]
|
| 457 |
+
|
| 458 |
+
[[package]]
|
| 459 |
+
name = "futures-sink"
|
| 460 |
+
version = "0.3.31"
|
| 461 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 462 |
+
checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
|
| 463 |
+
|
| 464 |
+
[[package]]
|
| 465 |
+
name = "futures-task"
|
| 466 |
+
version = "0.3.31"
|
| 467 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 468 |
+
checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
|
| 469 |
+
|
| 470 |
+
[[package]]
|
| 471 |
+
name = "futures-util"
|
| 472 |
+
version = "0.3.31"
|
| 473 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 474 |
+
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
|
| 475 |
+
dependencies = [
|
| 476 |
+
"futures-channel",
|
| 477 |
+
"futures-core",
|
| 478 |
+
"futures-io",
|
| 479 |
+
"futures-macro",
|
| 480 |
+
"futures-sink",
|
| 481 |
+
"futures-task",
|
| 482 |
+
"memchr",
|
| 483 |
+
"pin-project-lite",
|
| 484 |
+
"pin-utils",
|
| 485 |
+
"slab",
|
| 486 |
+
]
|
| 487 |
+
|
| 488 |
+
[[package]]
|
| 489 |
+
name = "generic-array"
|
| 490 |
+
version = "0.14.7"
|
| 491 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 492 |
+
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
|
| 493 |
+
dependencies = [
|
| 494 |
+
"typenum",
|
| 495 |
+
"version_check",
|
| 496 |
+
]
|
| 497 |
+
|
| 498 |
+
[[package]]
|
| 499 |
+
name = "gimli"
|
| 500 |
+
version = "0.31.1"
|
| 501 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 502 |
+
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
|
| 503 |
+
|
| 504 |
+
[[package]]
|
| 505 |
+
name = "hashbrown"
|
| 506 |
+
version = "0.15.5"
|
| 507 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 508 |
+
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
|
| 509 |
+
|
| 510 |
+
[[package]]
|
| 511 |
+
name = "heck"
|
| 512 |
+
version = "0.5.0"
|
| 513 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 514 |
+
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
| 515 |
+
|
| 516 |
+
[[package]]
|
| 517 |
+
name = "hermit-abi"
|
| 518 |
+
version = "0.5.2"
|
| 519 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 520 |
+
checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
|
| 521 |
+
|
| 522 |
+
[[package]]
|
| 523 |
+
name = "http"
|
| 524 |
+
version = "1.3.1"
|
| 525 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 526 |
+
checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
|
| 527 |
+
dependencies = [
|
| 528 |
+
"bytes",
|
| 529 |
+
"fnv",
|
| 530 |
+
"itoa",
|
| 531 |
+
]
|
| 532 |
+
|
| 533 |
+
[[package]]
|
| 534 |
+
name = "http-body"
|
| 535 |
+
version = "1.0.1"
|
| 536 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 537 |
+
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
|
| 538 |
+
dependencies = [
|
| 539 |
+
"bytes",
|
| 540 |
+
"http",
|
| 541 |
+
]
|
| 542 |
+
|
| 543 |
+
[[package]]
|
| 544 |
+
name = "http-body-util"
|
| 545 |
+
version = "0.1.3"
|
| 546 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 547 |
+
checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
|
| 548 |
+
dependencies = [
|
| 549 |
+
"bytes",
|
| 550 |
+
"futures-core",
|
| 551 |
+
"http",
|
| 552 |
+
"http-body",
|
| 553 |
+
"pin-project-lite",
|
| 554 |
+
]
|
| 555 |
+
|
| 556 |
+
[[package]]
|
| 557 |
+
name = "httparse"
|
| 558 |
+
version = "1.10.1"
|
| 559 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 560 |
+
checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
|
| 561 |
+
|
| 562 |
+
[[package]]
|
| 563 |
+
name = "httpdate"
|
| 564 |
+
version = "1.0.3"
|
| 565 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 566 |
+
checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
|
| 567 |
+
|
| 568 |
+
[[package]]
|
| 569 |
+
name = "hyper"
|
| 570 |
+
version = "1.6.0"
|
| 571 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 572 |
+
checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80"
|
| 573 |
+
dependencies = [
|
| 574 |
+
"bytes",
|
| 575 |
+
"futures-channel",
|
| 576 |
+
"futures-util",
|
| 577 |
+
"http",
|
| 578 |
+
"http-body",
|
| 579 |
+
"httparse",
|
| 580 |
+
"httpdate",
|
| 581 |
+
"itoa",
|
| 582 |
+
"pin-project-lite",
|
| 583 |
+
"smallvec",
|
| 584 |
+
"tokio",
|
| 585 |
+
]
|
| 586 |
+
|
| 587 |
+
[[package]]
|
| 588 |
+
name = "hyper-util"
|
| 589 |
+
version = "0.1.16"
|
| 590 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 591 |
+
checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e"
|
| 592 |
+
dependencies = [
|
| 593 |
+
"bytes",
|
| 594 |
+
"futures-core",
|
| 595 |
+
"http",
|
| 596 |
+
"http-body",
|
| 597 |
+
"hyper",
|
| 598 |
+
"pin-project-lite",
|
| 599 |
+
"tokio",
|
| 600 |
+
"tower-service",
|
| 601 |
+
]
|
| 602 |
+
|
| 603 |
+
[[package]]
|
| 604 |
+
name = "icu_collections"
|
| 605 |
+
version = "2.0.0"
|
| 606 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 607 |
+
checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
|
| 608 |
+
dependencies = [
|
| 609 |
+
"displaydoc",
|
| 610 |
+
"potential_utf",
|
| 611 |
+
"yoke",
|
| 612 |
+
"zerofrom",
|
| 613 |
+
"zerovec",
|
| 614 |
+
]
|
| 615 |
+
|
| 616 |
+
[[package]]
|
| 617 |
+
name = "icu_locale_core"
|
| 618 |
+
version = "2.0.0"
|
| 619 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 620 |
+
checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
|
| 621 |
+
dependencies = [
|
| 622 |
+
"displaydoc",
|
| 623 |
+
"litemap",
|
| 624 |
+
"tinystr",
|
| 625 |
+
"writeable",
|
| 626 |
+
"zerovec",
|
| 627 |
+
]
|
| 628 |
+
|
| 629 |
+
[[package]]
|
| 630 |
+
name = "icu_normalizer"
|
| 631 |
+
version = "2.0.0"
|
| 632 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 633 |
+
checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
|
| 634 |
+
dependencies = [
|
| 635 |
+
"displaydoc",
|
| 636 |
+
"icu_collections",
|
| 637 |
+
"icu_normalizer_data",
|
| 638 |
+
"icu_properties",
|
| 639 |
+
"icu_provider",
|
| 640 |
+
"smallvec",
|
| 641 |
+
"zerovec",
|
| 642 |
+
]
|
| 643 |
+
|
| 644 |
+
[[package]]
|
| 645 |
+
name = "icu_normalizer_data"
|
| 646 |
+
version = "2.0.0"
|
| 647 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 648 |
+
checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
|
| 649 |
+
|
| 650 |
+
[[package]]
|
| 651 |
+
name = "icu_properties"
|
| 652 |
+
version = "2.0.1"
|
| 653 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 654 |
+
checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
|
| 655 |
+
dependencies = [
|
| 656 |
+
"displaydoc",
|
| 657 |
+
"icu_collections",
|
| 658 |
+
"icu_locale_core",
|
| 659 |
+
"icu_properties_data",
|
| 660 |
+
"icu_provider",
|
| 661 |
+
"potential_utf",
|
| 662 |
+
"zerotrie",
|
| 663 |
+
"zerovec",
|
| 664 |
+
]
|
| 665 |
+
|
| 666 |
+
[[package]]
|
| 667 |
+
name = "icu_properties_data"
|
| 668 |
+
version = "2.0.1"
|
| 669 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 670 |
+
checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
|
| 671 |
+
|
| 672 |
+
[[package]]
|
| 673 |
+
name = "icu_provider"
|
| 674 |
+
version = "2.0.0"
|
| 675 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 676 |
+
checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
|
| 677 |
+
dependencies = [
|
| 678 |
+
"displaydoc",
|
| 679 |
+
"icu_locale_core",
|
| 680 |
+
"stable_deref_trait",
|
| 681 |
+
"tinystr",
|
| 682 |
+
"writeable",
|
| 683 |
+
"yoke",
|
| 684 |
+
"zerofrom",
|
| 685 |
+
"zerotrie",
|
| 686 |
+
"zerovec",
|
| 687 |
+
]
|
| 688 |
+
|
| 689 |
+
[[package]]
|
| 690 |
+
name = "ident_case"
|
| 691 |
+
version = "1.0.1"
|
| 692 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 693 |
+
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
|
| 694 |
+
|
| 695 |
+
[[package]]
|
| 696 |
+
name = "idna"
|
| 697 |
+
version = "1.0.3"
|
| 698 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 699 |
+
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
|
| 700 |
+
dependencies = [
|
| 701 |
+
"idna_adapter",
|
| 702 |
+
"smallvec",
|
| 703 |
+
"utf8_iter",
|
| 704 |
+
]
|
| 705 |
+
|
| 706 |
+
[[package]]
|
| 707 |
+
name = "idna_adapter"
|
| 708 |
+
version = "1.2.1"
|
| 709 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 710 |
+
checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
|
| 711 |
+
dependencies = [
|
| 712 |
+
"icu_normalizer",
|
| 713 |
+
"icu_properties",
|
| 714 |
+
]
|
| 715 |
+
|
| 716 |
+
[[package]]
|
| 717 |
+
name = "indexmap"
|
| 718 |
+
version = "2.10.0"
|
| 719 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 720 |
+
checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
|
| 721 |
+
dependencies = [
|
| 722 |
+
"equivalent",
|
| 723 |
+
"hashbrown",
|
| 724 |
+
"serde",
|
| 725 |
+
]
|
| 726 |
+
|
| 727 |
+
[[package]]
|
| 728 |
+
name = "io-uring"
|
| 729 |
+
version = "0.7.9"
|
| 730 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 731 |
+
checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4"
|
| 732 |
+
dependencies = [
|
| 733 |
+
"bitflags",
|
| 734 |
+
"cfg-if",
|
| 735 |
+
"libc",
|
| 736 |
+
]
|
| 737 |
+
|
| 738 |
+
[[package]]
|
| 739 |
+
name = "itoa"
|
| 740 |
+
version = "1.0.15"
|
| 741 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 742 |
+
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
|
| 743 |
+
|
| 744 |
+
[[package]]
|
| 745 |
+
name = "libc"
|
| 746 |
+
version = "0.2.175"
|
| 747 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 748 |
+
checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
|
| 749 |
+
|
| 750 |
+
[[package]]
|
| 751 |
+
name = "libz-rs-sys"
|
| 752 |
+
version = "0.5.1"
|
| 753 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 754 |
+
checksum = "172a788537a2221661b480fee8dc5f96c580eb34fa88764d3205dc356c7e4221"
|
| 755 |
+
dependencies = [
|
| 756 |
+
"zlib-rs",
|
| 757 |
+
]
|
| 758 |
+
|
| 759 |
+
[[package]]
|
| 760 |
+
name = "litemap"
|
| 761 |
+
version = "0.8.0"
|
| 762 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 763 |
+
checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
|
| 764 |
+
|
| 765 |
+
[[package]]
|
| 766 |
+
name = "log"
|
| 767 |
+
version = "0.4.27"
|
| 768 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 769 |
+
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
|
| 770 |
+
|
| 771 |
+
[[package]]
|
| 772 |
+
name = "matchit"
|
| 773 |
+
version = "0.8.4"
|
| 774 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 775 |
+
checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3"
|
| 776 |
+
|
| 777 |
+
[[package]]
|
| 778 |
+
name = "memchr"
|
| 779 |
+
version = "2.7.5"
|
| 780 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 781 |
+
checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
|
| 782 |
+
|
| 783 |
+
[[package]]
|
| 784 |
+
name = "mime"
|
| 785 |
+
version = "0.3.17"
|
| 786 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 787 |
+
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
|
| 788 |
+
|
| 789 |
+
[[package]]
|
| 790 |
+
name = "mime_guess"
|
| 791 |
+
version = "2.0.5"
|
| 792 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 793 |
+
checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
|
| 794 |
+
dependencies = [
|
| 795 |
+
"mime",
|
| 796 |
+
"unicase",
|
| 797 |
+
]
|
| 798 |
+
|
| 799 |
+
[[package]]
|
| 800 |
+
name = "miniz_oxide"
|
| 801 |
+
version = "0.8.9"
|
| 802 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 803 |
+
checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
|
| 804 |
+
dependencies = [
|
| 805 |
+
"adler2",
|
| 806 |
+
]
|
| 807 |
+
|
| 808 |
+
[[package]]
|
| 809 |
+
name = "mio"
|
| 810 |
+
version = "1.0.4"
|
| 811 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 812 |
+
checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
|
| 813 |
+
dependencies = [
|
| 814 |
+
"libc",
|
| 815 |
+
"wasi",
|
| 816 |
+
"windows-sys",
|
| 817 |
+
]
|
| 818 |
+
|
| 819 |
+
[[package]]
|
| 820 |
+
name = "num_cpus"
|
| 821 |
+
version = "1.17.0"
|
| 822 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 823 |
+
checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b"
|
| 824 |
+
dependencies = [
|
| 825 |
+
"hermit-abi",
|
| 826 |
+
"libc",
|
| 827 |
+
]
|
| 828 |
+
|
| 829 |
+
[[package]]
|
| 830 |
+
name = "object"
|
| 831 |
+
version = "0.36.7"
|
| 832 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 833 |
+
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
|
| 834 |
+
dependencies = [
|
| 835 |
+
"memchr",
|
| 836 |
+
]
|
| 837 |
+
|
| 838 |
+
[[package]]
|
| 839 |
+
name = "once_cell"
|
| 840 |
+
version = "1.21.3"
|
| 841 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 842 |
+
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
|
| 843 |
+
|
| 844 |
+
[[package]]
|
| 845 |
+
name = "paste"
|
| 846 |
+
version = "1.0.15"
|
| 847 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 848 |
+
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
|
| 849 |
+
|
| 850 |
+
[[package]]
|
| 851 |
+
name = "percent-encoding"
|
| 852 |
+
version = "2.3.1"
|
| 853 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 854 |
+
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
|
| 855 |
+
|
| 856 |
+
[[package]]
|
| 857 |
+
name = "pin-project-lite"
|
| 858 |
+
version = "0.2.16"
|
| 859 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 860 |
+
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
|
| 861 |
+
|
| 862 |
+
[[package]]
|
| 863 |
+
name = "pin-utils"
|
| 864 |
+
version = "0.1.0"
|
| 865 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 866 |
+
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
| 867 |
+
|
| 868 |
+
[[package]]
|
| 869 |
+
name = "potential_utf"
|
| 870 |
+
version = "0.1.2"
|
| 871 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 872 |
+
checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
|
| 873 |
+
dependencies = [
|
| 874 |
+
"zerovec",
|
| 875 |
+
]
|
| 876 |
+
|
| 877 |
+
[[package]]
|
| 878 |
+
name = "pq-sys"
|
| 879 |
+
version = "0.7.2"
|
| 880 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 881 |
+
checksum = "dfd6cf44cca8f9624bc19df234fc4112873432f5fda1caff174527846d026fa9"
|
| 882 |
+
dependencies = [
|
| 883 |
+
"libc",
|
| 884 |
+
"vcpkg",
|
| 885 |
+
]
|
| 886 |
+
|
| 887 |
+
[[package]]
|
| 888 |
+
name = "proc-macro2"
|
| 889 |
+
version = "1.0.101"
|
| 890 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 891 |
+
checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
|
| 892 |
+
dependencies = [
|
| 893 |
+
"unicode-ident",
|
| 894 |
+
]
|
| 895 |
+
|
| 896 |
+
[[package]]
|
| 897 |
+
name = "quote"
|
| 898 |
+
version = "1.0.40"
|
| 899 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 900 |
+
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
|
| 901 |
+
dependencies = [
|
| 902 |
+
"proc-macro2",
|
| 903 |
+
]
|
| 904 |
+
|
| 905 |
+
[[package]]
|
| 906 |
+
name = "regex"
|
| 907 |
+
version = "1.11.1"
|
| 908 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 909 |
+
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
|
| 910 |
+
dependencies = [
|
| 911 |
+
"aho-corasick",
|
| 912 |
+
"memchr",
|
| 913 |
+
"regex-automata",
|
| 914 |
+
"regex-syntax",
|
| 915 |
+
]
|
| 916 |
+
|
| 917 |
+
[[package]]
|
| 918 |
+
name = "regex-automata"
|
| 919 |
+
version = "0.4.9"
|
| 920 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 921 |
+
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
|
| 922 |
+
dependencies = [
|
| 923 |
+
"aho-corasick",
|
| 924 |
+
"memchr",
|
| 925 |
+
"regex-syntax",
|
| 926 |
+
]
|
| 927 |
+
|
| 928 |
+
[[package]]
|
| 929 |
+
name = "regex-syntax"
|
| 930 |
+
version = "0.8.5"
|
| 931 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 932 |
+
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
| 933 |
+
|
| 934 |
+
[[package]]
|
| 935 |
+
name = "rust-embed"
|
| 936 |
+
version = "8.7.2"
|
| 937 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 938 |
+
checksum = "025908b8682a26ba8d12f6f2d66b987584a4a87bc024abc5bbc12553a8cd178a"
|
| 939 |
+
dependencies = [
|
| 940 |
+
"rust-embed-impl",
|
| 941 |
+
"rust-embed-utils",
|
| 942 |
+
"walkdir",
|
| 943 |
+
]
|
| 944 |
+
|
| 945 |
+
[[package]]
|
| 946 |
+
name = "rust-embed-impl"
|
| 947 |
+
version = "8.7.2"
|
| 948 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 949 |
+
checksum = "6065f1a4392b71819ec1ea1df1120673418bf386f50de1d6f54204d836d4349c"
|
| 950 |
+
dependencies = [
|
| 951 |
+
"proc-macro2",
|
| 952 |
+
"quote",
|
| 953 |
+
"rust-embed-utils",
|
| 954 |
+
"syn",
|
| 955 |
+
"walkdir",
|
| 956 |
+
]
|
| 957 |
+
|
| 958 |
+
[[package]]
|
| 959 |
+
name = "rust-embed-utils"
|
| 960 |
+
version = "8.7.2"
|
| 961 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 962 |
+
checksum = "f6cc0c81648b20b70c491ff8cce00c1c3b223bb8ed2b5d41f0e54c6c4c0a3594"
|
| 963 |
+
dependencies = [
|
| 964 |
+
"sha2",
|
| 965 |
+
"walkdir",
|
| 966 |
+
]
|
| 967 |
+
|
| 968 |
+
[[package]]
|
| 969 |
+
name = "rustc-demangle"
|
| 970 |
+
version = "0.1.26"
|
| 971 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 972 |
+
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
|
| 973 |
+
|
| 974 |
+
[[package]]
|
| 975 |
+
name = "rustversion"
|
| 976 |
+
version = "1.0.22"
|
| 977 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 978 |
+
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
|
| 979 |
+
|
| 980 |
+
[[package]]
|
| 981 |
+
name = "ryu"
|
| 982 |
+
version = "1.0.20"
|
| 983 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 984 |
+
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
|
| 985 |
+
|
| 986 |
+
[[package]]
|
| 987 |
+
name = "same-file"
|
| 988 |
+
version = "1.0.6"
|
| 989 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 990 |
+
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
|
| 991 |
+
dependencies = [
|
| 992 |
+
"winapi-util",
|
| 993 |
+
]
|
| 994 |
+
|
| 995 |
+
[[package]]
|
| 996 |
+
name = "serde"
|
| 997 |
+
version = "1.0.219"
|
| 998 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 999 |
+
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
|
| 1000 |
+
dependencies = [
|
| 1001 |
+
"serde_derive",
|
| 1002 |
+
]
|
| 1003 |
+
|
| 1004 |
+
[[package]]
|
| 1005 |
+
name = "serde_derive"
|
| 1006 |
+
version = "1.0.219"
|
| 1007 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1008 |
+
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
|
| 1009 |
+
dependencies = [
|
| 1010 |
+
"proc-macro2",
|
| 1011 |
+
"quote",
|
| 1012 |
+
"syn",
|
| 1013 |
+
]
|
| 1014 |
+
|
| 1015 |
+
[[package]]
|
| 1016 |
+
name = "serde_json"
|
| 1017 |
+
version = "1.0.142"
|
| 1018 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1019 |
+
checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7"
|
| 1020 |
+
dependencies = [
|
| 1021 |
+
"itoa",
|
| 1022 |
+
"memchr",
|
| 1023 |
+
"ryu",
|
| 1024 |
+
"serde",
|
| 1025 |
+
]
|
| 1026 |
+
|
| 1027 |
+
[[package]]
|
| 1028 |
+
name = "serde_path_to_error"
|
| 1029 |
+
version = "0.1.17"
|
| 1030 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1031 |
+
checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a"
|
| 1032 |
+
dependencies = [
|
| 1033 |
+
"itoa",
|
| 1034 |
+
"serde",
|
| 1035 |
+
]
|
| 1036 |
+
|
| 1037 |
+
[[package]]
|
| 1038 |
+
name = "serde_urlencoded"
|
| 1039 |
+
version = "0.7.1"
|
| 1040 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1041 |
+
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
|
| 1042 |
+
dependencies = [
|
| 1043 |
+
"form_urlencoded",
|
| 1044 |
+
"itoa",
|
| 1045 |
+
"ryu",
|
| 1046 |
+
"serde",
|
| 1047 |
+
]
|
| 1048 |
+
|
| 1049 |
+
[[package]]
|
| 1050 |
+
name = "sha2"
|
| 1051 |
+
version = "0.10.9"
|
| 1052 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1053 |
+
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
|
| 1054 |
+
dependencies = [
|
| 1055 |
+
"cfg-if",
|
| 1056 |
+
"cpufeatures",
|
| 1057 |
+
"digest",
|
| 1058 |
+
]
|
| 1059 |
+
|
| 1060 |
+
[[package]]
|
| 1061 |
+
name = "simd-adler32"
|
| 1062 |
+
version = "0.3.7"
|
| 1063 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1064 |
+
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
|
| 1065 |
+
|
| 1066 |
+
[[package]]
|
| 1067 |
+
name = "slab"
|
| 1068 |
+
version = "0.4.11"
|
| 1069 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1070 |
+
checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
|
| 1071 |
+
|
| 1072 |
+
[[package]]
|
| 1073 |
+
name = "smallvec"
|
| 1074 |
+
version = "1.15.1"
|
| 1075 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1076 |
+
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
|
| 1077 |
+
|
| 1078 |
+
[[package]]
|
| 1079 |
+
name = "socket2"
|
| 1080 |
+
version = "0.6.0"
|
| 1081 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1082 |
+
checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
|
| 1083 |
+
dependencies = [
|
| 1084 |
+
"libc",
|
| 1085 |
+
"windows-sys",
|
| 1086 |
+
]
|
| 1087 |
+
|
| 1088 |
+
[[package]]
|
| 1089 |
+
name = "stable_deref_trait"
|
| 1090 |
+
version = "1.2.0"
|
| 1091 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1092 |
+
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
|
| 1093 |
+
|
| 1094 |
+
[[package]]
|
| 1095 |
+
name = "strsim"
|
| 1096 |
+
version = "0.11.1"
|
| 1097 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1098 |
+
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
| 1099 |
+
|
| 1100 |
+
[[package]]
|
| 1101 |
+
name = "syn"
|
| 1102 |
+
version = "2.0.106"
|
| 1103 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1104 |
+
checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
|
| 1105 |
+
dependencies = [
|
| 1106 |
+
"proc-macro2",
|
| 1107 |
+
"quote",
|
| 1108 |
+
"unicode-ident",
|
| 1109 |
+
]
|
| 1110 |
+
|
| 1111 |
+
[[package]]
|
| 1112 |
+
name = "sync_wrapper"
|
| 1113 |
+
version = "1.0.2"
|
| 1114 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1115 |
+
checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
|
| 1116 |
+
|
| 1117 |
+
[[package]]
|
| 1118 |
+
name = "synstructure"
|
| 1119 |
+
version = "0.13.2"
|
| 1120 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1121 |
+
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
|
| 1122 |
+
dependencies = [
|
| 1123 |
+
"proc-macro2",
|
| 1124 |
+
"quote",
|
| 1125 |
+
"syn",
|
| 1126 |
+
]
|
| 1127 |
+
|
| 1128 |
+
[[package]]
|
| 1129 |
+
name = "tinystr"
|
| 1130 |
+
version = "0.8.1"
|
| 1131 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1132 |
+
checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
|
| 1133 |
+
dependencies = [
|
| 1134 |
+
"displaydoc",
|
| 1135 |
+
"zerovec",
|
| 1136 |
+
]
|
| 1137 |
+
|
| 1138 |
+
[[package]]
|
| 1139 |
+
name = "tokio"
|
| 1140 |
+
version = "1.47.1"
|
| 1141 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1142 |
+
checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038"
|
| 1143 |
+
dependencies = [
|
| 1144 |
+
"backtrace",
|
| 1145 |
+
"io-uring",
|
| 1146 |
+
"libc",
|
| 1147 |
+
"mio",
|
| 1148 |
+
"pin-project-lite",
|
| 1149 |
+
"slab",
|
| 1150 |
+
"socket2",
|
| 1151 |
+
"tokio-macros",
|
| 1152 |
+
"windows-sys",
|
| 1153 |
+
]
|
| 1154 |
+
|
| 1155 |
+
[[package]]
|
| 1156 |
+
name = "tokio-macros"
|
| 1157 |
+
version = "2.5.0"
|
| 1158 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1159 |
+
checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
|
| 1160 |
+
dependencies = [
|
| 1161 |
+
"proc-macro2",
|
| 1162 |
+
"quote",
|
| 1163 |
+
"syn",
|
| 1164 |
+
]
|
| 1165 |
+
|
| 1166 |
+
[[package]]
|
| 1167 |
+
name = "tower"
|
| 1168 |
+
version = "0.5.2"
|
| 1169 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1170 |
+
checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
|
| 1171 |
+
dependencies = [
|
| 1172 |
+
"futures-core",
|
| 1173 |
+
"futures-util",
|
| 1174 |
+
"pin-project-lite",
|
| 1175 |
+
"sync_wrapper",
|
| 1176 |
+
"tokio",
|
| 1177 |
+
"tower-layer",
|
| 1178 |
+
"tower-service",
|
| 1179 |
+
"tracing",
|
| 1180 |
+
]
|
| 1181 |
+
|
| 1182 |
+
[[package]]
|
| 1183 |
+
name = "tower-http"
|
| 1184 |
+
version = "0.6.6"
|
| 1185 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1186 |
+
checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2"
|
| 1187 |
+
dependencies = [
|
| 1188 |
+
"bitflags",
|
| 1189 |
+
"bytes",
|
| 1190 |
+
"http",
|
| 1191 |
+
"pin-project-lite",
|
| 1192 |
+
"tower-layer",
|
| 1193 |
+
"tower-service",
|
| 1194 |
+
]
|
| 1195 |
+
|
| 1196 |
+
[[package]]
|
| 1197 |
+
name = "tower-layer"
|
| 1198 |
+
version = "0.3.3"
|
| 1199 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1200 |
+
checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
|
| 1201 |
+
|
| 1202 |
+
[[package]]
|
| 1203 |
+
name = "tower-service"
|
| 1204 |
+
version = "0.3.3"
|
| 1205 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1206 |
+
checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
|
| 1207 |
+
|
| 1208 |
+
[[package]]
|
| 1209 |
+
name = "tracing"
|
| 1210 |
+
version = "0.1.41"
|
| 1211 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1212 |
+
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
|
| 1213 |
+
dependencies = [
|
| 1214 |
+
"log",
|
| 1215 |
+
"pin-project-lite",
|
| 1216 |
+
"tracing-attributes",
|
| 1217 |
+
"tracing-core",
|
| 1218 |
+
]
|
| 1219 |
+
|
| 1220 |
+
[[package]]
|
| 1221 |
+
name = "tracing-attributes"
|
| 1222 |
+
version = "0.1.30"
|
| 1223 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1224 |
+
checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903"
|
| 1225 |
+
dependencies = [
|
| 1226 |
+
"proc-macro2",
|
| 1227 |
+
"quote",
|
| 1228 |
+
"syn",
|
| 1229 |
+
]
|
| 1230 |
+
|
| 1231 |
+
[[package]]
|
| 1232 |
+
name = "tracing-core"
|
| 1233 |
+
version = "0.1.34"
|
| 1234 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1235 |
+
checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678"
|
| 1236 |
+
dependencies = [
|
| 1237 |
+
"once_cell",
|
| 1238 |
+
]
|
| 1239 |
+
|
| 1240 |
+
[[package]]
|
| 1241 |
+
name = "typenum"
|
| 1242 |
+
version = "1.18.0"
|
| 1243 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1244 |
+
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
|
| 1245 |
+
|
| 1246 |
+
[[package]]
|
| 1247 |
+
name = "unicase"
|
| 1248 |
+
version = "2.8.1"
|
| 1249 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1250 |
+
checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
|
| 1251 |
+
|
| 1252 |
+
[[package]]
|
| 1253 |
+
name = "unicode-ident"
|
| 1254 |
+
version = "1.0.18"
|
| 1255 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1256 |
+
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
|
| 1257 |
+
|
| 1258 |
+
[[package]]
|
| 1259 |
+
name = "url"
|
| 1260 |
+
version = "2.5.4"
|
| 1261 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1262 |
+
checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
|
| 1263 |
+
dependencies = [
|
| 1264 |
+
"form_urlencoded",
|
| 1265 |
+
"idna",
|
| 1266 |
+
"percent-encoding",
|
| 1267 |
+
]
|
| 1268 |
+
|
| 1269 |
+
[[package]]
|
| 1270 |
+
name = "utf8_iter"
|
| 1271 |
+
version = "1.0.4"
|
| 1272 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1273 |
+
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
|
| 1274 |
+
|
| 1275 |
+
[[package]]
|
| 1276 |
+
name = "utoipa"
|
| 1277 |
+
version = "5.4.0"
|
| 1278 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1279 |
+
checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993"
|
| 1280 |
+
dependencies = [
|
| 1281 |
+
"indexmap",
|
| 1282 |
+
"serde",
|
| 1283 |
+
"serde_json",
|
| 1284 |
+
"utoipa-gen",
|
| 1285 |
+
]
|
| 1286 |
+
|
| 1287 |
+
[[package]]
|
| 1288 |
+
name = "utoipa-axum"
|
| 1289 |
+
version = "0.2.0"
|
| 1290 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1291 |
+
checksum = "7c25bae5bccc842449ec0c5ddc5cbb6a3a1eaeac4503895dc105a1138f8234a0"
|
| 1292 |
+
dependencies = [
|
| 1293 |
+
"axum",
|
| 1294 |
+
"paste",
|
| 1295 |
+
"tower-layer",
|
| 1296 |
+
"tower-service",
|
| 1297 |
+
"utoipa",
|
| 1298 |
+
]
|
| 1299 |
+
|
| 1300 |
+
[[package]]
|
| 1301 |
+
name = "utoipa-gen"
|
| 1302 |
+
version = "5.4.0"
|
| 1303 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1304 |
+
checksum = "6d79d08d92ab8af4c5e8a6da20c47ae3f61a0f1dabc1997cdf2d082b757ca08b"
|
| 1305 |
+
dependencies = [
|
| 1306 |
+
"proc-macro2",
|
| 1307 |
+
"quote",
|
| 1308 |
+
"syn",
|
| 1309 |
+
]
|
| 1310 |
+
|
| 1311 |
+
[[package]]
|
| 1312 |
+
name = "utoipa-swagger-ui"
|
| 1313 |
+
version = "9.0.2"
|
| 1314 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1315 |
+
checksum = "d047458f1b5b65237c2f6dc6db136945667f40a7668627b3490b9513a3d43a55"
|
| 1316 |
+
dependencies = [
|
| 1317 |
+
"axum",
|
| 1318 |
+
"base64",
|
| 1319 |
+
"mime_guess",
|
| 1320 |
+
"regex",
|
| 1321 |
+
"rust-embed",
|
| 1322 |
+
"serde",
|
| 1323 |
+
"serde_json",
|
| 1324 |
+
"url",
|
| 1325 |
+
"utoipa",
|
| 1326 |
+
"zip",
|
| 1327 |
+
]
|
| 1328 |
+
|
| 1329 |
+
[[package]]
|
| 1330 |
+
name = "vcpkg"
|
| 1331 |
+
version = "0.2.15"
|
| 1332 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1333 |
+
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
| 1334 |
+
|
| 1335 |
+
[[package]]
|
| 1336 |
+
name = "version_check"
|
| 1337 |
+
version = "0.9.5"
|
| 1338 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1339 |
+
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
|
| 1340 |
+
|
| 1341 |
+
[[package]]
|
| 1342 |
+
name = "walkdir"
|
| 1343 |
+
version = "2.5.0"
|
| 1344 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1345 |
+
checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
|
| 1346 |
+
dependencies = [
|
| 1347 |
+
"same-file",
|
| 1348 |
+
"winapi-util",
|
| 1349 |
+
]
|
| 1350 |
+
|
| 1351 |
+
[[package]]
|
| 1352 |
+
name = "wasi"
|
| 1353 |
+
version = "0.11.1+wasi-snapshot-preview1"
|
| 1354 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1355 |
+
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
|
| 1356 |
+
|
| 1357 |
+
[[package]]
|
| 1358 |
+
name = "winapi-util"
|
| 1359 |
+
version = "0.1.9"
|
| 1360 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1361 |
+
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
|
| 1362 |
+
dependencies = [
|
| 1363 |
+
"windows-sys",
|
| 1364 |
+
]
|
| 1365 |
+
|
| 1366 |
+
[[package]]
|
| 1367 |
+
name = "windows-sys"
|
| 1368 |
+
version = "0.59.0"
|
| 1369 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1370 |
+
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
|
| 1371 |
+
dependencies = [
|
| 1372 |
+
"windows-targets",
|
| 1373 |
+
]
|
| 1374 |
+
|
| 1375 |
+
[[package]]
|
| 1376 |
+
name = "windows-targets"
|
| 1377 |
+
version = "0.52.6"
|
| 1378 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1379 |
+
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
|
| 1380 |
+
dependencies = [
|
| 1381 |
+
"windows_aarch64_gnullvm",
|
| 1382 |
+
"windows_aarch64_msvc",
|
| 1383 |
+
"windows_i686_gnu",
|
| 1384 |
+
"windows_i686_gnullvm",
|
| 1385 |
+
"windows_i686_msvc",
|
| 1386 |
+
"windows_x86_64_gnu",
|
| 1387 |
+
"windows_x86_64_gnullvm",
|
| 1388 |
+
"windows_x86_64_msvc",
|
| 1389 |
+
]
|
| 1390 |
+
|
| 1391 |
+
[[package]]
|
| 1392 |
+
name = "windows_aarch64_gnullvm"
|
| 1393 |
+
version = "0.52.6"
|
| 1394 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1395 |
+
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
|
| 1396 |
+
|
| 1397 |
+
[[package]]
|
| 1398 |
+
name = "windows_aarch64_msvc"
|
| 1399 |
+
version = "0.52.6"
|
| 1400 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1401 |
+
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
|
| 1402 |
+
|
| 1403 |
+
[[package]]
|
| 1404 |
+
name = "windows_i686_gnu"
|
| 1405 |
+
version = "0.52.6"
|
| 1406 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1407 |
+
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
|
| 1408 |
+
|
| 1409 |
+
[[package]]
|
| 1410 |
+
name = "windows_i686_gnullvm"
|
| 1411 |
+
version = "0.52.6"
|
| 1412 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1413 |
+
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
|
| 1414 |
+
|
| 1415 |
+
[[package]]
|
| 1416 |
+
name = "windows_i686_msvc"
|
| 1417 |
+
version = "0.52.6"
|
| 1418 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1419 |
+
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
|
| 1420 |
+
|
| 1421 |
+
[[package]]
|
| 1422 |
+
name = "windows_x86_64_gnu"
|
| 1423 |
+
version = "0.52.6"
|
| 1424 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1425 |
+
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
|
| 1426 |
+
|
| 1427 |
+
[[package]]
|
| 1428 |
+
name = "windows_x86_64_gnullvm"
|
| 1429 |
+
version = "0.52.6"
|
| 1430 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1431 |
+
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
|
| 1432 |
+
|
| 1433 |
+
[[package]]
|
| 1434 |
+
name = "windows_x86_64_msvc"
|
| 1435 |
+
version = "0.52.6"
|
| 1436 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1437 |
+
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
| 1438 |
+
|
| 1439 |
+
[[package]]
|
| 1440 |
+
name = "writeable"
|
| 1441 |
+
version = "0.6.1"
|
| 1442 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1443 |
+
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
|
| 1444 |
+
|
| 1445 |
+
[[package]]
|
| 1446 |
+
name = "yoke"
|
| 1447 |
+
version = "0.8.0"
|
| 1448 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1449 |
+
checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
|
| 1450 |
+
dependencies = [
|
| 1451 |
+
"serde",
|
| 1452 |
+
"stable_deref_trait",
|
| 1453 |
+
"yoke-derive",
|
| 1454 |
+
"zerofrom",
|
| 1455 |
+
]
|
| 1456 |
+
|
| 1457 |
+
[[package]]
|
| 1458 |
+
name = "yoke-derive"
|
| 1459 |
+
version = "0.8.0"
|
| 1460 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1461 |
+
checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
|
| 1462 |
+
dependencies = [
|
| 1463 |
+
"proc-macro2",
|
| 1464 |
+
"quote",
|
| 1465 |
+
"syn",
|
| 1466 |
+
"synstructure",
|
| 1467 |
+
]
|
| 1468 |
+
|
| 1469 |
+
[[package]]
|
| 1470 |
+
name = "zerofrom"
|
| 1471 |
+
version = "0.1.6"
|
| 1472 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1473 |
+
checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
|
| 1474 |
+
dependencies = [
|
| 1475 |
+
"zerofrom-derive",
|
| 1476 |
+
]
|
| 1477 |
+
|
| 1478 |
+
[[package]]
|
| 1479 |
+
name = "zerofrom-derive"
|
| 1480 |
+
version = "0.1.6"
|
| 1481 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1482 |
+
checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
|
| 1483 |
+
dependencies = [
|
| 1484 |
+
"proc-macro2",
|
| 1485 |
+
"quote",
|
| 1486 |
+
"syn",
|
| 1487 |
+
"synstructure",
|
| 1488 |
+
]
|
| 1489 |
+
|
| 1490 |
+
[[package]]
|
| 1491 |
+
name = "zerotrie"
|
| 1492 |
+
version = "0.2.2"
|
| 1493 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1494 |
+
checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
|
| 1495 |
+
dependencies = [
|
| 1496 |
+
"displaydoc",
|
| 1497 |
+
"yoke",
|
| 1498 |
+
"zerofrom",
|
| 1499 |
+
]
|
| 1500 |
+
|
| 1501 |
+
[[package]]
|
| 1502 |
+
name = "zerovec"
|
| 1503 |
+
version = "0.11.4"
|
| 1504 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1505 |
+
checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b"
|
| 1506 |
+
dependencies = [
|
| 1507 |
+
"yoke",
|
| 1508 |
+
"zerofrom",
|
| 1509 |
+
"zerovec-derive",
|
| 1510 |
+
]
|
| 1511 |
+
|
| 1512 |
+
[[package]]
|
| 1513 |
+
name = "zerovec-derive"
|
| 1514 |
+
version = "0.11.1"
|
| 1515 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1516 |
+
checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
|
| 1517 |
+
dependencies = [
|
| 1518 |
+
"proc-macro2",
|
| 1519 |
+
"quote",
|
| 1520 |
+
"syn",
|
| 1521 |
+
]
|
| 1522 |
+
|
| 1523 |
+
[[package]]
|
| 1524 |
+
name = "zip"
|
| 1525 |
+
version = "3.0.0"
|
| 1526 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1527 |
+
checksum = "12598812502ed0105f607f941c386f43d441e00148fce9dec3ca5ffb0bde9308"
|
| 1528 |
+
dependencies = [
|
| 1529 |
+
"arbitrary",
|
| 1530 |
+
"crc32fast",
|
| 1531 |
+
"flate2",
|
| 1532 |
+
"indexmap",
|
| 1533 |
+
"memchr",
|
| 1534 |
+
"zopfli",
|
| 1535 |
+
]
|
| 1536 |
+
|
| 1537 |
+
[[package]]
|
| 1538 |
+
name = "zlib-rs"
|
| 1539 |
+
version = "0.5.1"
|
| 1540 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1541 |
+
checksum = "626bd9fa9734751fc50d6060752170984d7053f5a39061f524cda68023d4db8a"
|
| 1542 |
+
|
| 1543 |
+
[[package]]
|
| 1544 |
+
name = "zopfli"
|
| 1545 |
+
version = "0.8.2"
|
| 1546 |
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
| 1547 |
+
checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7"
|
| 1548 |
+
dependencies = [
|
| 1549 |
+
"bumpalo",
|
| 1550 |
+
"crc32fast",
|
| 1551 |
+
"log",
|
| 1552 |
+
"simd-adler32",
|
| 1553 |
+
]
|
Cargo.toml
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[package]
|
| 2 |
+
name = "aic-server"
|
| 3 |
+
version = "0.1.0"
|
| 4 |
+
edition = "2024"
|
| 5 |
+
|
| 6 |
+
[dependencies]
|
| 7 |
+
anyhow = "1.0.99"
|
| 8 |
+
axum = "0.8.4"
|
| 9 |
+
deadpool-diesel = { version = "0.6.1", features = ["postgres"] }
|
| 10 |
+
diesel = { version = "2.2.12", features = ["postgres"] }
|
| 11 |
+
futures = "0.3.31"
|
| 12 |
+
serde = { version = "1.0.219", features = ["derive"] }
|
| 13 |
+
tokio = { version = "1.47.1", features = ["macros", "rt-multi-thread"] }
|
| 14 |
+
tower = "0.5.2"
|
| 15 |
+
tower-http = { version = "0.6.6", features = ["cors"] }
|
| 16 |
+
tracing = "0.1.41"
|
| 17 |
+
utoipa = "5.4.0"
|
| 18 |
+
utoipa-axum = "0.2.0"
|
| 19 |
+
utoipa-swagger-ui = { version = "9.0.2", features = ["axum"] }
|
Dockerfile
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM rust:alpine AS builder
|
| 2 |
+
WORKDIR /app
|
| 3 |
+
|
| 4 |
+
RUN apk add build-base
|
| 5 |
+
|
| 6 |
+
COPY Cargo.toml Cargo.lock /app/
|
| 7 |
+
COPY src/ /app/src/
|
| 8 |
+
RUN cargo build --release
|
| 9 |
+
|
| 10 |
+
FROM alpine:latest
|
| 11 |
+
WORKDIR /app
|
| 12 |
+
|
| 13 |
+
COPY --from=builder /app/target/release/aic-server /app/server
|
| 14 |
+
|
| 15 |
+
EXPOSE 8080
|
| 16 |
+
|
| 17 |
+
CMD [ "/app/server" ]
|
migrations/.keep
ADDED
|
File without changes
|
migrations/00000000000000_diesel_initial_setup/down.sql
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
-- This file was automatically created by Diesel to setup helper functions
|
| 2 |
+
-- and other internal bookkeeping. This file is safe to edit, any future
|
| 3 |
+
-- changes will be added to existing projects as new migrations.
|
| 4 |
+
|
| 5 |
+
DROP FUNCTION IF EXISTS diesel_manage_updated_at(_tbl regclass);
|
| 6 |
+
DROP FUNCTION IF EXISTS diesel_set_updated_at();
|
migrations/00000000000000_diesel_initial_setup/up.sql
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
-- This file was automatically created by Diesel to setup helper functions
|
| 2 |
+
-- and other internal bookkeeping. This file is safe to edit, any future
|
| 3 |
+
-- changes will be added to existing projects as new migrations.
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
-- Sets up a trigger for the given table to automatically set a column called
|
| 9 |
+
-- `updated_at` whenever the row is modified (unless `updated_at` was included
|
| 10 |
+
-- in the modified columns)
|
| 11 |
+
--
|
| 12 |
+
-- # Example
|
| 13 |
+
--
|
| 14 |
+
-- ```sql
|
| 15 |
+
-- CREATE TABLE users (id SERIAL PRIMARY KEY, updated_at TIMESTAMP NOT NULL DEFAULT NOW());
|
| 16 |
+
--
|
| 17 |
+
-- SELECT diesel_manage_updated_at('users');
|
| 18 |
+
-- ```
|
| 19 |
+
CREATE OR REPLACE FUNCTION diesel_manage_updated_at(_tbl regclass) RETURNS VOID AS $$
|
| 20 |
+
BEGIN
|
| 21 |
+
EXECUTE format('CREATE TRIGGER set_updated_at BEFORE UPDATE ON %s
|
| 22 |
+
FOR EACH ROW EXECUTE PROCEDURE diesel_set_updated_at()', _tbl);
|
| 23 |
+
END;
|
| 24 |
+
$$ LANGUAGE plpgsql;
|
| 25 |
+
|
| 26 |
+
CREATE OR REPLACE FUNCTION diesel_set_updated_at() RETURNS trigger AS $$
|
| 27 |
+
BEGIN
|
| 28 |
+
IF (
|
| 29 |
+
NEW IS DISTINCT FROM OLD AND
|
| 30 |
+
NEW.updated_at IS NOT DISTINCT FROM OLD.updated_at
|
| 31 |
+
) THEN
|
| 32 |
+
NEW.updated_at := current_timestamp;
|
| 33 |
+
END IF;
|
| 34 |
+
RETURN NEW;
|
| 35 |
+
END;
|
| 36 |
+
$$ LANGUAGE plpgsql;
|
migrations/2025-08-19-034235_create_videos/down.sql
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
DROP TABLE videos
|
migrations/2025-08-19-034235_create_videos/up.sql
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
CREATE TABLE videos (
|
| 2 |
+
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
| 3 |
+
l SMALLINT NOT NULL,
|
| 4 |
+
v SMALLINT NOT NULL,
|
| 5 |
+
UNIQUE (l, v)
|
| 6 |
+
)
|
migrations/2025-08-19-041510_create_keyframes/down.sql
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
DROP TABLE keyframes
|
migrations/2025-08-19-041510_create_keyframes/up.sql
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
CREATE TABLE keyframes (
|
| 2 |
+
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
| 3 |
+
video_id BIGINT NOT NULL REFERENCES videos (id),
|
| 4 |
+
video_related_frame_id SMALLINT NOT NULL,
|
| 5 |
+
video_related_frame_timestamp DOUBLE PRECISION NOT NULL,
|
| 6 |
+
UNIQUE (video_id, video_related_frame_id)
|
| 7 |
+
)
|
src/controllers/mod.rs
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
use utoipa_axum::router::OpenApiRouter;
|
| 2 |
+
|
| 3 |
+
use crate::states::AppState;
|
| 4 |
+
|
| 5 |
+
mod v1;
|
| 6 |
+
|
| 7 |
+
pub fn router() -> OpenApiRouter<AppState> {
|
| 8 |
+
OpenApiRouter::new().nest("/v1", v1::router())
|
| 9 |
+
}
|
src/controllers/v1/keyframes/mod.rs
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
use axum::{
|
| 2 |
+
Json,
|
| 3 |
+
extract::{Path, State},
|
| 4 |
+
http::StatusCode,
|
| 5 |
+
};
|
| 6 |
+
use utoipa_axum::{router::OpenApiRouter, routes};
|
| 7 |
+
|
| 8 |
+
use crate::{
|
| 9 |
+
docs::OPENAPI_TAG, dtos::keyframes::KeyframeDto, services::keyframes::KeyframeService,
|
| 10 |
+
states::AppState,
|
| 11 |
+
};
|
| 12 |
+
|
| 13 |
+
pub fn router() -> OpenApiRouter<AppState> {
|
| 14 |
+
OpenApiRouter::new().routes(routes!(find_by_id))
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
#[utoipa::path(
|
| 18 |
+
get,
|
| 19 |
+
path = "/{id}",
|
| 20 |
+
tag = OPENAPI_TAG,
|
| 21 |
+
params(
|
| 22 |
+
("id" = i64, Path, description = "Keyframe database id")
|
| 23 |
+
),
|
| 24 |
+
responses(
|
| 25 |
+
(status = 200, description = "Keyframe matched by id", body = KeyframeDto)
|
| 26 |
+
)
|
| 27 |
+
)]
|
| 28 |
+
async fn find_by_id(
|
| 29 |
+
Path(id): Path<i64>,
|
| 30 |
+
State(state): State<AppState>,
|
| 31 |
+
) -> Result<Json<KeyframeDto>, StatusCode> {
|
| 32 |
+
let service = KeyframeService::from(&state);
|
| 33 |
+
match service.find_by_id(id).await {
|
| 34 |
+
Ok(result) => result.map(Json).ok_or(StatusCode::NOT_FOUND),
|
| 35 |
+
Err(e) => {
|
| 36 |
+
tracing::debug!("{:?}", e);
|
| 37 |
+
Err(StatusCode::INTERNAL_SERVER_ERROR)
|
| 38 |
+
}
|
| 39 |
+
}
|
| 40 |
+
}
|
src/controllers/v1/mod.rs
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
use utoipa_axum::router::OpenApiRouter;
|
| 2 |
+
|
| 3 |
+
use crate::states::AppState;
|
| 4 |
+
|
| 5 |
+
mod keyframes;
|
| 6 |
+
mod videos;
|
| 7 |
+
|
| 8 |
+
pub fn router() -> OpenApiRouter<AppState> {
|
| 9 |
+
OpenApiRouter::new()
|
| 10 |
+
.nest("/keyframes", keyframes::router())
|
| 11 |
+
.nest("/videos", videos::router())
|
| 12 |
+
}
|
src/controllers/v1/videos/mod.rs
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
use axum::{
|
| 2 |
+
Json,
|
| 3 |
+
extract::{Path, State},
|
| 4 |
+
http::StatusCode,
|
| 5 |
+
};
|
| 6 |
+
use utoipa_axum::{router::OpenApiRouter, routes};
|
| 7 |
+
|
| 8 |
+
use crate::{
|
| 9 |
+
docs::OPENAPI_TAG, dtos::videos::VideoDto, services::videos::VideoService, states::AppState,
|
| 10 |
+
};
|
| 11 |
+
|
| 12 |
+
pub fn router() -> OpenApiRouter<AppState> {
|
| 13 |
+
OpenApiRouter::new().routes(routes!(find_by_id))
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
#[utoipa::path(
|
| 17 |
+
get,
|
| 18 |
+
path = "/{id}",
|
| 19 |
+
tag = OPENAPI_TAG,
|
| 20 |
+
params(
|
| 21 |
+
("id" = i64, Path, description = "Video database id")
|
| 22 |
+
),
|
| 23 |
+
responses(
|
| 24 |
+
(status = 200, description = "Video matched by id", body = VideoDto)
|
| 25 |
+
)
|
| 26 |
+
)]
|
| 27 |
+
async fn find_by_id(
|
| 28 |
+
Path(id): Path<i64>,
|
| 29 |
+
State(state): State<AppState>,
|
| 30 |
+
) -> Result<Json<VideoDto>, StatusCode> {
|
| 31 |
+
let service = VideoService::from(&state);
|
| 32 |
+
match service.find_by_id(id).await {
|
| 33 |
+
Ok(result) => result.map(Json).ok_or(StatusCode::NOT_FOUND),
|
| 34 |
+
Err(e) => {
|
| 35 |
+
tracing::debug!("{:?}", e);
|
| 36 |
+
Err(StatusCode::INTERNAL_SERVER_ERROR)
|
| 37 |
+
}
|
| 38 |
+
}
|
| 39 |
+
}
|
src/docs/mod.rs
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
use utoipa::OpenApi;
|
| 2 |
+
|
| 3 |
+
pub const OPENAPI_TAG: &str = "AIC Server";
|
| 4 |
+
|
| 5 |
+
#[derive(OpenApi)]
|
| 6 |
+
#[openapi(
|
| 7 |
+
tags(
|
| 8 |
+
(name = OPENAPI_TAG, description = "AIC data server API")
|
| 9 |
+
)
|
| 10 |
+
)]
|
| 11 |
+
pub struct ApiDoc;
|
src/dtos/keyframes/mod.rs
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
use crate::entities::{keyframes::KeyframeEntity, videos::VideoEntity};
|
| 2 |
+
|
| 3 |
+
#[derive(Debug, Clone, serde::Serialize, utoipa::ToSchema)]
|
| 4 |
+
pub struct KeyframeDto {
|
| 5 |
+
id: i64,
|
| 6 |
+
path: String,
|
| 7 |
+
timestamp: f64,
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
impl From<(KeyframeEntity, VideoEntity)> for KeyframeDto {
|
| 11 |
+
fn from((keyframe, video): (KeyframeEntity, VideoEntity)) -> Self {
|
| 12 |
+
let id = keyframe.id();
|
| 13 |
+
let timestamp = keyframe.video_related_frame_timestamp();
|
| 14 |
+
let path = format!(
|
| 15 |
+
"/static/keyframes/L{}_V{:0>3}/{:0>3}.jpg",
|
| 16 |
+
video.l(),
|
| 17 |
+
video.v(),
|
| 18 |
+
keyframe.video_related_frame_id()
|
| 19 |
+
);
|
| 20 |
+
Self {
|
| 21 |
+
id,
|
| 22 |
+
path,
|
| 23 |
+
timestamp,
|
| 24 |
+
}
|
| 25 |
+
}
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
impl From<(VideoEntity, KeyframeEntity)> for KeyframeDto {
|
| 29 |
+
fn from((video, keyframe): (VideoEntity, KeyframeEntity)) -> Self {
|
| 30 |
+
Self::from((keyframe, video))
|
| 31 |
+
}
|
| 32 |
+
}
|
src/dtos/mod.rs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
pub mod keyframes;
|
| 2 |
+
pub mod videos;
|
src/dtos/videos/mod.rs
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
use crate::entities::videos::VideoEntity;
|
| 2 |
+
|
| 3 |
+
#[derive(Debug, Clone, serde::Serialize, utoipa::ToSchema)]
|
| 4 |
+
pub struct VideoDto {
|
| 5 |
+
id: i64,
|
| 6 |
+
path: String,
|
| 7 |
+
}
|
| 8 |
+
|
| 9 |
+
impl From<VideoEntity> for VideoDto {
|
| 10 |
+
fn from(value: VideoEntity) -> Self {
|
| 11 |
+
let path = format!("/static/videos/L{}_V{:0>3}.mp4", value.l(), value.v());
|
| 12 |
+
Self {
|
| 13 |
+
id: value.id(),
|
| 14 |
+
path,
|
| 15 |
+
}
|
| 16 |
+
}
|
| 17 |
+
}
|
src/entities/keyframes/mod.rs
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#[derive(Debug, Clone, diesel::Queryable, diesel::Selectable)]
|
| 2 |
+
#[diesel(table_name = crate::schema::keyframes)]
|
| 3 |
+
#[diesel(check_for_backend(diesel::pg::Pg))]
|
| 4 |
+
pub struct KeyframeEntity {
|
| 5 |
+
id: i64,
|
| 6 |
+
video_related_frame_id: i16,
|
| 7 |
+
video_related_frame_timestamp: f64,
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
impl KeyframeEntity {
|
| 11 |
+
pub fn id(&self) -> i64 {
|
| 12 |
+
self.id
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
pub fn video_related_frame_id(&self) -> i16 {
|
| 16 |
+
self.video_related_frame_id
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
pub fn video_related_frame_timestamp(&self) -> f64 {
|
| 20 |
+
self.video_related_frame_timestamp
|
| 21 |
+
}
|
| 22 |
+
}
|
src/entities/mod.rs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
pub mod keyframes;
|
| 2 |
+
pub mod videos;
|
src/entities/videos/mod.rs
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#[derive(Debug, Clone, diesel::Queryable, diesel::Selectable)]
|
| 2 |
+
#[diesel(table_name = crate::schema::videos)]
|
| 3 |
+
#[diesel(check_for_backend(diesel::pg::Pg))]
|
| 4 |
+
pub struct VideoEntity {
|
| 5 |
+
id: i64,
|
| 6 |
+
l: i16,
|
| 7 |
+
v: i16,
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
impl VideoEntity {
|
| 11 |
+
pub fn id(&self) -> i64 {
|
| 12 |
+
self.id
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
pub fn l(&self) -> i16 {
|
| 16 |
+
self.l
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
pub fn v(&self) -> i16 {
|
| 20 |
+
self.v
|
| 21 |
+
}
|
| 22 |
+
}
|
src/main.rs
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
use std::net::SocketAddr;
|
| 2 |
+
|
| 3 |
+
use axum::http::Method;
|
| 4 |
+
use tokio::net::TcpListener;
|
| 5 |
+
use tower::ServiceBuilder;
|
| 6 |
+
use tower_http::cors::{Any, CorsLayer};
|
| 7 |
+
use utoipa::OpenApi;
|
| 8 |
+
use utoipa_axum::router::OpenApiRouter;
|
| 9 |
+
use utoipa_swagger_ui::SwaggerUi;
|
| 10 |
+
|
| 11 |
+
use crate::{docs::ApiDoc, states::AppState};
|
| 12 |
+
|
| 13 |
+
mod controllers;
|
| 14 |
+
mod docs;
|
| 15 |
+
mod dtos;
|
| 16 |
+
mod entities;
|
| 17 |
+
mod repositories;
|
| 18 |
+
mod schema;
|
| 19 |
+
mod services;
|
| 20 |
+
mod states;
|
| 21 |
+
|
| 22 |
+
#[tokio::main]
|
| 23 |
+
async fn main() -> anyhow::Result<()> {
|
| 24 |
+
let cors = CorsLayer::new()
|
| 25 |
+
.allow_methods([Method::GET, Method::POST])
|
| 26 |
+
.allow_origin(Any);
|
| 27 |
+
|
| 28 |
+
let (router, api) = OpenApiRouter::with_openapi(ApiDoc::openapi())
|
| 29 |
+
.nest("/api", controllers::router())
|
| 30 |
+
.split_for_parts();
|
| 31 |
+
|
| 32 |
+
let app = router
|
| 33 |
+
.merge(SwaggerUi::new("/swagger-ui").url("/api-docs/openapi.json", api.clone()))
|
| 34 |
+
.layer(ServiceBuilder::new().layer(cors))
|
| 35 |
+
.with_state(AppState::new()?);
|
| 36 |
+
|
| 37 |
+
let listener = TcpListener::bind(SocketAddr::from(([127, 0, 0, 1], 8080))).await?;
|
| 38 |
+
|
| 39 |
+
axum::serve(listener, app).await?;
|
| 40 |
+
|
| 41 |
+
Ok(())
|
| 42 |
+
}
|
src/repositories/keyframes/mod.rs
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
use deadpool_diesel::postgres::Pool;
|
| 2 |
+
use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl, SelectableHelper};
|
| 3 |
+
|
| 4 |
+
use crate::{
|
| 5 |
+
entities::{keyframes::KeyframeEntity, videos::VideoEntity},
|
| 6 |
+
services::keyframes::KeyframeService,
|
| 7 |
+
};
|
| 8 |
+
|
| 9 |
+
#[derive(Clone)]
|
| 10 |
+
pub struct KeyframeRepository<'a> {
|
| 11 |
+
pool: &'a Pool,
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
impl<'a> From<&'a KeyframeService<'_>> for KeyframeRepository<'a> {
|
| 15 |
+
fn from(value: &'a KeyframeService) -> Self {
|
| 16 |
+
Self { pool: value.pool() }
|
| 17 |
+
}
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
impl<'a> KeyframeRepository<'a> {
|
| 21 |
+
pub async fn find_by_id_and_join_video(
|
| 22 |
+
&self,
|
| 23 |
+
id: i64,
|
| 24 |
+
) -> anyhow::Result<Option<(KeyframeEntity, VideoEntity)>> {
|
| 25 |
+
use crate::schema::keyframes::dsl as keyframe_dsl;
|
| 26 |
+
use crate::schema::videos::dsl as video_dsl;
|
| 27 |
+
|
| 28 |
+
let query = keyframe_dsl::keyframes
|
| 29 |
+
.inner_join(video_dsl::videos)
|
| 30 |
+
.filter(keyframe_dsl::id.eq(id))
|
| 31 |
+
.select((KeyframeEntity::as_select(), VideoEntity::as_select()));
|
| 32 |
+
|
| 33 |
+
let conn = self.pool.get().await?;
|
| 34 |
+
|
| 35 |
+
let results = conn
|
| 36 |
+
.interact(move |conn| query.load::<(KeyframeEntity, VideoEntity)>(conn))
|
| 37 |
+
.await
|
| 38 |
+
.map_err(|e| anyhow::anyhow!("{:?}", e))??;
|
| 39 |
+
|
| 40 |
+
Ok(results.into_iter().next())
|
| 41 |
+
}
|
| 42 |
+
}
|
src/repositories/mod.rs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
pub mod keyframes;
|
| 2 |
+
pub mod videos;
|
src/repositories/videos/mod.rs
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
use deadpool_diesel::postgres::Pool;
|
| 2 |
+
use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl, SelectableHelper};
|
| 3 |
+
|
| 4 |
+
use crate::{entities::videos::VideoEntity, services::videos::VideoService};
|
| 5 |
+
|
| 6 |
+
#[derive(Clone)]
|
| 7 |
+
pub struct VideoRepository<'a> {
|
| 8 |
+
pool: &'a Pool,
|
| 9 |
+
}
|
| 10 |
+
|
| 11 |
+
impl<'a> From<&'a VideoService<'_>> for VideoRepository<'a> {
|
| 12 |
+
fn from(value: &'a VideoService) -> Self {
|
| 13 |
+
Self { pool: value.pool() }
|
| 14 |
+
}
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
impl<'a> VideoRepository<'a> {
|
| 18 |
+
pub async fn find_by_id(&self, id: i64) -> anyhow::Result<Option<VideoEntity>> {
|
| 19 |
+
use crate::schema::videos::dsl;
|
| 20 |
+
|
| 21 |
+
let query = dsl::videos
|
| 22 |
+
.filter(dsl::id.eq(id))
|
| 23 |
+
.select(VideoEntity::as_select());
|
| 24 |
+
|
| 25 |
+
let conn = self.pool.get().await?;
|
| 26 |
+
|
| 27 |
+
let results = conn
|
| 28 |
+
.interact(move |conn| query.load::<VideoEntity>(conn))
|
| 29 |
+
.await
|
| 30 |
+
.map_err(|e| anyhow::anyhow!("{:?}", e))??;
|
| 31 |
+
|
| 32 |
+
Ok(results.into_iter().next())
|
| 33 |
+
}
|
| 34 |
+
}
|
src/schema.rs
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// @generated automatically by Diesel CLI.
|
| 2 |
+
|
| 3 |
+
diesel::table! {
|
| 4 |
+
keyframes (id) {
|
| 5 |
+
id -> Int8,
|
| 6 |
+
video_id -> Int8,
|
| 7 |
+
video_related_frame_id -> Int2,
|
| 8 |
+
video_related_frame_timestamp -> Float8,
|
| 9 |
+
}
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
diesel::table! {
|
| 13 |
+
videos (id) {
|
| 14 |
+
id -> Int8,
|
| 15 |
+
l -> Int2,
|
| 16 |
+
v -> Int2,
|
| 17 |
+
}
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
diesel::joinable!(keyframes -> videos (video_id));
|
| 21 |
+
|
| 22 |
+
diesel::allow_tables_to_appear_in_same_query!(
|
| 23 |
+
keyframes,
|
| 24 |
+
videos,
|
| 25 |
+
);
|
src/services/keyframes/mod.rs
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
use deadpool_diesel::postgres::Pool;
|
| 2 |
+
|
| 3 |
+
use crate::{
|
| 4 |
+
dtos::keyframes::KeyframeDto, repositories::keyframes::KeyframeRepository, states::AppState,
|
| 5 |
+
};
|
| 6 |
+
|
| 7 |
+
#[derive(Clone, Copy)]
|
| 8 |
+
pub struct KeyframeService<'a> {
|
| 9 |
+
pool: &'a Pool,
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
impl<'a> From<&'a AppState> for KeyframeService<'a> {
|
| 13 |
+
fn from(value: &'a AppState) -> Self {
|
| 14 |
+
Self { pool: value.pool() }
|
| 15 |
+
}
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
impl<'a> KeyframeService<'a> {
|
| 19 |
+
pub const fn pool(&self) -> &'a Pool {
|
| 20 |
+
self.pool
|
| 21 |
+
}
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
impl<'a> KeyframeService<'a> {
|
| 25 |
+
pub async fn find_by_id(&self, id: i64) -> anyhow::Result<Option<KeyframeDto>> {
|
| 26 |
+
let repository = KeyframeRepository::from(self);
|
| 27 |
+
Ok(repository
|
| 28 |
+
.find_by_id_and_join_video(id)
|
| 29 |
+
.await?
|
| 30 |
+
.map(Into::into))
|
| 31 |
+
}
|
| 32 |
+
}
|
src/services/mod.rs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
pub mod keyframes;
|
| 2 |
+
pub mod videos;
|
src/services/videos/mod.rs
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
use deadpool_diesel::postgres::Pool;
|
| 2 |
+
|
| 3 |
+
use crate::{dtos::videos::VideoDto, repositories::videos::VideoRepository, states::AppState};
|
| 4 |
+
|
| 5 |
+
#[derive(Clone, Copy)]
|
| 6 |
+
pub struct VideoService<'a> {
|
| 7 |
+
pool: &'a Pool,
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
impl<'a> From<&'a AppState> for VideoService<'a> {
|
| 11 |
+
fn from(value: &'a AppState) -> Self {
|
| 12 |
+
Self { pool: value.pool() }
|
| 13 |
+
}
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
impl<'a> VideoService<'a> {
|
| 17 |
+
pub const fn pool(&self) -> &'a Pool {
|
| 18 |
+
self.pool
|
| 19 |
+
}
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
impl<'a> VideoService<'a> {
|
| 23 |
+
pub async fn find_by_id(&self, id: i64) -> anyhow::Result<Option<VideoDto>> {
|
| 24 |
+
let repository = VideoRepository::from(self);
|
| 25 |
+
Ok(repository.find_by_id(id).await?.map(Into::into))
|
| 26 |
+
}
|
| 27 |
+
}
|
src/states/mod.rs
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
use deadpool_diesel::{
|
| 2 |
+
Runtime,
|
| 3 |
+
postgres::{Manager, Pool},
|
| 4 |
+
};
|
| 5 |
+
|
| 6 |
+
#[derive(Clone)]
|
| 7 |
+
pub struct AppState {
|
| 8 |
+
pool: Pool,
|
| 9 |
+
}
|
| 10 |
+
|
| 11 |
+
impl AppState {
|
| 12 |
+
pub fn new() -> anyhow::Result<Self> {
|
| 13 |
+
Ok(Self {
|
| 14 |
+
pool: Pool::builder(Manager::new(
|
| 15 |
+
std::env::var("DATABASE_URL")?,
|
| 16 |
+
Runtime::Tokio1,
|
| 17 |
+
))
|
| 18 |
+
.build()?,
|
| 19 |
+
})
|
| 20 |
+
}
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
impl AppState {
|
| 24 |
+
pub fn pool(&self) -> &Pool {
|
| 25 |
+
&self.pool
|
| 26 |
+
}
|
| 27 |
+
}
|