A little app to serve my photography from my personal website

load photos from DB and show them all. scaffolding for templating engine etc.

+2195
+2
.gitignore
··· 1 + /target 2 + .env
+2068
Cargo.lock
··· 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.25.1" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" 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 = "allocator-api2" 22 + version = "0.2.21" 23 + source = "registry+https://github.com/rust-lang/crates.io-index" 24 + checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" 25 + 26 + [[package]] 27 + name = "anyhow" 28 + version = "1.0.100" 29 + source = "registry+https://github.com/rust-lang/crates.io-index" 30 + checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" 31 + 32 + [[package]] 33 + name = "atoi" 34 + version = "2.0.0" 35 + source = "registry+https://github.com/rust-lang/crates.io-index" 36 + checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" 37 + dependencies = [ 38 + "num-traits", 39 + ] 40 + 41 + [[package]] 42 + name = "atomic-waker" 43 + version = "1.1.2" 44 + source = "registry+https://github.com/rust-lang/crates.io-index" 45 + checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 46 + 47 + [[package]] 48 + name = "autocfg" 49 + version = "1.5.0" 50 + source = "registry+https://github.com/rust-lang/crates.io-index" 51 + checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 52 + 53 + [[package]] 54 + name = "axum" 55 + version = "0.8.6" 56 + source = "registry+https://github.com/rust-lang/crates.io-index" 57 + checksum = "8a18ed336352031311f4e0b4dd2ff392d4fbb370777c9d18d7fc9d7359f73871" 58 + dependencies = [ 59 + "axum-core", 60 + "bytes", 61 + "form_urlencoded", 62 + "futures-util", 63 + "http", 64 + "http-body", 65 + "http-body-util", 66 + "hyper", 67 + "hyper-util", 68 + "itoa", 69 + "matchit", 70 + "memchr", 71 + "mime", 72 + "percent-encoding", 73 + "pin-project-lite", 74 + "serde_core", 75 + "serde_json", 76 + "serde_path_to_error", 77 + "serde_urlencoded", 78 + "sync_wrapper", 79 + "tokio", 80 + "tower", 81 + "tower-layer", 82 + "tower-service", 83 + "tracing", 84 + ] 85 + 86 + [[package]] 87 + name = "axum-core" 88 + version = "0.5.5" 89 + source = "registry+https://github.com/rust-lang/crates.io-index" 90 + checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22" 91 + dependencies = [ 92 + "bytes", 93 + "futures-core", 94 + "http", 95 + "http-body", 96 + "http-body-util", 97 + "mime", 98 + "pin-project-lite", 99 + "sync_wrapper", 100 + "tower-layer", 101 + "tower-service", 102 + "tracing", 103 + ] 104 + 105 + [[package]] 106 + name = "backtrace" 107 + version = "0.3.76" 108 + source = "registry+https://github.com/rust-lang/crates.io-index" 109 + checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" 110 + dependencies = [ 111 + "addr2line", 112 + "cfg-if", 113 + "libc", 114 + "miniz_oxide", 115 + "object", 116 + "rustc-demangle", 117 + "windows-link", 118 + ] 119 + 120 + [[package]] 121 + name = "base64" 122 + version = "0.22.1" 123 + source = "registry+https://github.com/rust-lang/crates.io-index" 124 + checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 125 + 126 + [[package]] 127 + name = "base64ct" 128 + version = "1.8.0" 129 + source = "registry+https://github.com/rust-lang/crates.io-index" 130 + checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" 131 + 132 + [[package]] 133 + name = "bitflags" 134 + version = "2.9.4" 135 + source = "registry+https://github.com/rust-lang/crates.io-index" 136 + checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" 137 + dependencies = [ 138 + "serde", 139 + ] 140 + 141 + [[package]] 142 + name = "block-buffer" 143 + version = "0.10.4" 144 + source = "registry+https://github.com/rust-lang/crates.io-index" 145 + checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 146 + dependencies = [ 147 + "generic-array", 148 + ] 149 + 150 + [[package]] 151 + name = "byteorder" 152 + version = "1.5.0" 153 + source = "registry+https://github.com/rust-lang/crates.io-index" 154 + checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 155 + 156 + [[package]] 157 + name = "bytes" 158 + version = "1.10.1" 159 + source = "registry+https://github.com/rust-lang/crates.io-index" 160 + checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 161 + 162 + [[package]] 163 + name = "cc" 164 + version = "1.2.38" 165 + source = "registry+https://github.com/rust-lang/crates.io-index" 166 + checksum = "80f41ae168f955c12fb8960b057d70d0ca153fb83182b57d86380443527be7e9" 167 + dependencies = [ 168 + "find-msvc-tools", 169 + "shlex", 170 + ] 171 + 172 + [[package]] 173 + name = "cfg-if" 174 + version = "1.0.3" 175 + source = "registry+https://github.com/rust-lang/crates.io-index" 176 + checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" 177 + 178 + [[package]] 179 + name = "concurrent-queue" 180 + version = "2.5.0" 181 + source = "registry+https://github.com/rust-lang/crates.io-index" 182 + checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 183 + dependencies = [ 184 + "crossbeam-utils", 185 + ] 186 + 187 + [[package]] 188 + name = "const-oid" 189 + version = "0.9.6" 190 + source = "registry+https://github.com/rust-lang/crates.io-index" 191 + checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" 192 + 193 + [[package]] 194 + name = "cpufeatures" 195 + version = "0.2.17" 196 + source = "registry+https://github.com/rust-lang/crates.io-index" 197 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 198 + dependencies = [ 199 + "libc", 200 + ] 201 + 202 + [[package]] 203 + name = "crc" 204 + version = "3.3.0" 205 + source = "registry+https://github.com/rust-lang/crates.io-index" 206 + checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" 207 + dependencies = [ 208 + "crc-catalog", 209 + ] 210 + 211 + [[package]] 212 + name = "crc-catalog" 213 + version = "2.4.0" 214 + source = "registry+https://github.com/rust-lang/crates.io-index" 215 + checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" 216 + 217 + [[package]] 218 + name = "crossbeam-queue" 219 + version = "0.3.12" 220 + source = "registry+https://github.com/rust-lang/crates.io-index" 221 + checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" 222 + dependencies = [ 223 + "crossbeam-utils", 224 + ] 225 + 226 + [[package]] 227 + name = "crossbeam-utils" 228 + version = "0.8.21" 229 + source = "registry+https://github.com/rust-lang/crates.io-index" 230 + checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 231 + 232 + [[package]] 233 + name = "crypto-common" 234 + version = "0.1.6" 235 + source = "registry+https://github.com/rust-lang/crates.io-index" 236 + checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 237 + dependencies = [ 238 + "generic-array", 239 + "typenum", 240 + ] 241 + 242 + [[package]] 243 + name = "der" 244 + version = "0.7.10" 245 + source = "registry+https://github.com/rust-lang/crates.io-index" 246 + checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" 247 + dependencies = [ 248 + "const-oid", 249 + "pem-rfc7468", 250 + "zeroize", 251 + ] 252 + 253 + [[package]] 254 + name = "digest" 255 + version = "0.10.7" 256 + source = "registry+https://github.com/rust-lang/crates.io-index" 257 + checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 258 + dependencies = [ 259 + "block-buffer", 260 + "const-oid", 261 + "crypto-common", 262 + "subtle", 263 + ] 264 + 265 + [[package]] 266 + name = "displaydoc" 267 + version = "0.2.5" 268 + source = "registry+https://github.com/rust-lang/crates.io-index" 269 + checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 270 + dependencies = [ 271 + "proc-macro2", 272 + "quote", 273 + "syn", 274 + ] 275 + 276 + [[package]] 277 + name = "dotenv" 278 + version = "0.15.0" 279 + source = "registry+https://github.com/rust-lang/crates.io-index" 280 + checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" 281 + 282 + [[package]] 283 + name = "dotenvy" 284 + version = "0.15.7" 285 + source = "registry+https://github.com/rust-lang/crates.io-index" 286 + checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" 287 + 288 + [[package]] 289 + name = "either" 290 + version = "1.15.0" 291 + source = "registry+https://github.com/rust-lang/crates.io-index" 292 + checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 293 + dependencies = [ 294 + "serde", 295 + ] 296 + 297 + [[package]] 298 + name = "equivalent" 299 + version = "1.0.2" 300 + source = "registry+https://github.com/rust-lang/crates.io-index" 301 + checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 302 + 303 + [[package]] 304 + name = "etcetera" 305 + version = "0.8.0" 306 + source = "registry+https://github.com/rust-lang/crates.io-index" 307 + checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" 308 + dependencies = [ 309 + "cfg-if", 310 + "home", 311 + "windows-sys 0.48.0", 312 + ] 313 + 314 + [[package]] 315 + name = "event-listener" 316 + version = "5.4.1" 317 + source = "registry+https://github.com/rust-lang/crates.io-index" 318 + checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" 319 + dependencies = [ 320 + "concurrent-queue", 321 + "parking", 322 + "pin-project-lite", 323 + ] 324 + 325 + [[package]] 326 + name = "find-msvc-tools" 327 + version = "0.1.2" 328 + source = "registry+https://github.com/rust-lang/crates.io-index" 329 + checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" 330 + 331 + [[package]] 332 + name = "flume" 333 + version = "0.11.1" 334 + source = "registry+https://github.com/rust-lang/crates.io-index" 335 + checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" 336 + dependencies = [ 337 + "futures-core", 338 + "futures-sink", 339 + "spin", 340 + ] 341 + 342 + [[package]] 343 + name = "fnv" 344 + version = "1.0.7" 345 + source = "registry+https://github.com/rust-lang/crates.io-index" 346 + checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 347 + 348 + [[package]] 349 + name = "foldhash" 350 + version = "0.1.5" 351 + source = "registry+https://github.com/rust-lang/crates.io-index" 352 + checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 353 + 354 + [[package]] 355 + name = "form_urlencoded" 356 + version = "1.2.2" 357 + source = "registry+https://github.com/rust-lang/crates.io-index" 358 + checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" 359 + dependencies = [ 360 + "percent-encoding", 361 + ] 362 + 363 + [[package]] 364 + name = "futures-channel" 365 + version = "0.3.31" 366 + source = "registry+https://github.com/rust-lang/crates.io-index" 367 + checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 368 + dependencies = [ 369 + "futures-core", 370 + "futures-sink", 371 + ] 372 + 373 + [[package]] 374 + name = "futures-core" 375 + version = "0.3.31" 376 + source = "registry+https://github.com/rust-lang/crates.io-index" 377 + checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 378 + 379 + [[package]] 380 + name = "futures-executor" 381 + version = "0.3.31" 382 + source = "registry+https://github.com/rust-lang/crates.io-index" 383 + checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 384 + dependencies = [ 385 + "futures-core", 386 + "futures-task", 387 + "futures-util", 388 + ] 389 + 390 + [[package]] 391 + name = "futures-intrusive" 392 + version = "0.5.0" 393 + source = "registry+https://github.com/rust-lang/crates.io-index" 394 + checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" 395 + dependencies = [ 396 + "futures-core", 397 + "lock_api", 398 + "parking_lot", 399 + ] 400 + 401 + [[package]] 402 + name = "futures-io" 403 + version = "0.3.31" 404 + source = "registry+https://github.com/rust-lang/crates.io-index" 405 + checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 406 + 407 + [[package]] 408 + name = "futures-sink" 409 + version = "0.3.31" 410 + source = "registry+https://github.com/rust-lang/crates.io-index" 411 + checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 412 + 413 + [[package]] 414 + name = "futures-task" 415 + version = "0.3.31" 416 + source = "registry+https://github.com/rust-lang/crates.io-index" 417 + checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 418 + 419 + [[package]] 420 + name = "futures-util" 421 + version = "0.3.31" 422 + source = "registry+https://github.com/rust-lang/crates.io-index" 423 + checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 424 + dependencies = [ 425 + "futures-core", 426 + "futures-io", 427 + "futures-sink", 428 + "futures-task", 429 + "memchr", 430 + "pin-project-lite", 431 + "pin-utils", 432 + "slab", 433 + ] 434 + 435 + [[package]] 436 + name = "generic-array" 437 + version = "0.14.7" 438 + source = "registry+https://github.com/rust-lang/crates.io-index" 439 + checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 440 + dependencies = [ 441 + "typenum", 442 + "version_check", 443 + ] 444 + 445 + [[package]] 446 + name = "getrandom" 447 + version = "0.2.16" 448 + source = "registry+https://github.com/rust-lang/crates.io-index" 449 + checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 450 + dependencies = [ 451 + "cfg-if", 452 + "libc", 453 + "wasi", 454 + ] 455 + 456 + [[package]] 457 + name = "gimli" 458 + version = "0.32.3" 459 + source = "registry+https://github.com/rust-lang/crates.io-index" 460 + checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" 461 + 462 + [[package]] 463 + name = "hashbrown" 464 + version = "0.15.5" 465 + source = "registry+https://github.com/rust-lang/crates.io-index" 466 + checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" 467 + dependencies = [ 468 + "allocator-api2", 469 + "equivalent", 470 + "foldhash", 471 + ] 472 + 473 + [[package]] 474 + name = "hashbrown" 475 + version = "0.16.0" 476 + source = "registry+https://github.com/rust-lang/crates.io-index" 477 + checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" 478 + 479 + [[package]] 480 + name = "hashlink" 481 + version = "0.10.0" 482 + source = "registry+https://github.com/rust-lang/crates.io-index" 483 + checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" 484 + dependencies = [ 485 + "hashbrown 0.15.5", 486 + ] 487 + 488 + [[package]] 489 + name = "heck" 490 + version = "0.5.0" 491 + source = "registry+https://github.com/rust-lang/crates.io-index" 492 + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 493 + 494 + [[package]] 495 + name = "hex" 496 + version = "0.4.3" 497 + source = "registry+https://github.com/rust-lang/crates.io-index" 498 + checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 499 + 500 + [[package]] 501 + name = "hkdf" 502 + version = "0.12.4" 503 + source = "registry+https://github.com/rust-lang/crates.io-index" 504 + checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" 505 + dependencies = [ 506 + "hmac", 507 + ] 508 + 509 + [[package]] 510 + name = "hmac" 511 + version = "0.12.1" 512 + source = "registry+https://github.com/rust-lang/crates.io-index" 513 + checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 514 + dependencies = [ 515 + "digest", 516 + ] 517 + 518 + [[package]] 519 + name = "home" 520 + version = "0.5.11" 521 + source = "registry+https://github.com/rust-lang/crates.io-index" 522 + checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" 523 + dependencies = [ 524 + "windows-sys 0.59.0", 525 + ] 526 + 527 + [[package]] 528 + name = "http" 529 + version = "1.3.1" 530 + source = "registry+https://github.com/rust-lang/crates.io-index" 531 + checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" 532 + dependencies = [ 533 + "bytes", 534 + "fnv", 535 + "itoa", 536 + ] 537 + 538 + [[package]] 539 + name = "http-body" 540 + version = "1.0.1" 541 + source = "registry+https://github.com/rust-lang/crates.io-index" 542 + checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 543 + dependencies = [ 544 + "bytes", 545 + "http", 546 + ] 547 + 548 + [[package]] 549 + name = "http-body-util" 550 + version = "0.1.3" 551 + source = "registry+https://github.com/rust-lang/crates.io-index" 552 + checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" 553 + dependencies = [ 554 + "bytes", 555 + "futures-core", 556 + "http", 557 + "http-body", 558 + "pin-project-lite", 559 + ] 560 + 561 + [[package]] 562 + name = "http-range-header" 563 + version = "0.4.2" 564 + source = "registry+https://github.com/rust-lang/crates.io-index" 565 + checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" 566 + 567 + [[package]] 568 + name = "httparse" 569 + version = "1.10.1" 570 + source = "registry+https://github.com/rust-lang/crates.io-index" 571 + checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 572 + 573 + [[package]] 574 + name = "httpdate" 575 + version = "1.0.3" 576 + source = "registry+https://github.com/rust-lang/crates.io-index" 577 + checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 578 + 579 + [[package]] 580 + name = "hyper" 581 + version = "1.7.0" 582 + source = "registry+https://github.com/rust-lang/crates.io-index" 583 + checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" 584 + dependencies = [ 585 + "atomic-waker", 586 + "bytes", 587 + "futures-channel", 588 + "futures-core", 589 + "http", 590 + "http-body", 591 + "httparse", 592 + "httpdate", 593 + "itoa", 594 + "pin-project-lite", 595 + "pin-utils", 596 + "smallvec", 597 + "tokio", 598 + ] 599 + 600 + [[package]] 601 + name = "hyper-util" 602 + version = "0.1.17" 603 + source = "registry+https://github.com/rust-lang/crates.io-index" 604 + checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" 605 + dependencies = [ 606 + "bytes", 607 + "futures-core", 608 + "http", 609 + "http-body", 610 + "hyper", 611 + "pin-project-lite", 612 + "tokio", 613 + "tower-service", 614 + ] 615 + 616 + [[package]] 617 + name = "icu_collections" 618 + version = "2.0.0" 619 + source = "registry+https://github.com/rust-lang/crates.io-index" 620 + checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 621 + dependencies = [ 622 + "displaydoc", 623 + "potential_utf", 624 + "yoke", 625 + "zerofrom", 626 + "zerovec", 627 + ] 628 + 629 + [[package]] 630 + name = "icu_locale_core" 631 + version = "2.0.0" 632 + source = "registry+https://github.com/rust-lang/crates.io-index" 633 + checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 634 + dependencies = [ 635 + "displaydoc", 636 + "litemap", 637 + "tinystr", 638 + "writeable", 639 + "zerovec", 640 + ] 641 + 642 + [[package]] 643 + name = "icu_normalizer" 644 + version = "2.0.0" 645 + source = "registry+https://github.com/rust-lang/crates.io-index" 646 + checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 647 + dependencies = [ 648 + "displaydoc", 649 + "icu_collections", 650 + "icu_normalizer_data", 651 + "icu_properties", 652 + "icu_provider", 653 + "smallvec", 654 + "zerovec", 655 + ] 656 + 657 + [[package]] 658 + name = "icu_normalizer_data" 659 + version = "2.0.0" 660 + source = "registry+https://github.com/rust-lang/crates.io-index" 661 + checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 662 + 663 + [[package]] 664 + name = "icu_properties" 665 + version = "2.0.1" 666 + source = "registry+https://github.com/rust-lang/crates.io-index" 667 + checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" 668 + dependencies = [ 669 + "displaydoc", 670 + "icu_collections", 671 + "icu_locale_core", 672 + "icu_properties_data", 673 + "icu_provider", 674 + "potential_utf", 675 + "zerotrie", 676 + "zerovec", 677 + ] 678 + 679 + [[package]] 680 + name = "icu_properties_data" 681 + version = "2.0.1" 682 + source = "registry+https://github.com/rust-lang/crates.io-index" 683 + checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" 684 + 685 + [[package]] 686 + name = "icu_provider" 687 + version = "2.0.0" 688 + source = "registry+https://github.com/rust-lang/crates.io-index" 689 + checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 690 + dependencies = [ 691 + "displaydoc", 692 + "icu_locale_core", 693 + "stable_deref_trait", 694 + "tinystr", 695 + "writeable", 696 + "yoke", 697 + "zerofrom", 698 + "zerotrie", 699 + "zerovec", 700 + ] 701 + 702 + [[package]] 703 + name = "idna" 704 + version = "1.1.0" 705 + source = "registry+https://github.com/rust-lang/crates.io-index" 706 + checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" 707 + dependencies = [ 708 + "idna_adapter", 709 + "smallvec", 710 + "utf8_iter", 711 + ] 712 + 713 + [[package]] 714 + name = "idna_adapter" 715 + version = "1.2.1" 716 + source = "registry+https://github.com/rust-lang/crates.io-index" 717 + checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 718 + dependencies = [ 719 + "icu_normalizer", 720 + "icu_properties", 721 + ] 722 + 723 + [[package]] 724 + name = "indexmap" 725 + version = "2.11.4" 726 + source = "registry+https://github.com/rust-lang/crates.io-index" 727 + checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" 728 + dependencies = [ 729 + "equivalent", 730 + "hashbrown 0.16.0", 731 + ] 732 + 733 + [[package]] 734 + name = "io-uring" 735 + version = "0.7.10" 736 + source = "registry+https://github.com/rust-lang/crates.io-index" 737 + checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" 738 + dependencies = [ 739 + "bitflags", 740 + "cfg-if", 741 + "libc", 742 + ] 743 + 744 + [[package]] 745 + name = "itoa" 746 + version = "1.0.15" 747 + source = "registry+https://github.com/rust-lang/crates.io-index" 748 + checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 749 + 750 + [[package]] 751 + name = "lazy_static" 752 + version = "1.5.0" 753 + source = "registry+https://github.com/rust-lang/crates.io-index" 754 + checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 755 + dependencies = [ 756 + "spin", 757 + ] 758 + 759 + [[package]] 760 + name = "libc" 761 + version = "0.2.176" 762 + source = "registry+https://github.com/rust-lang/crates.io-index" 763 + checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" 764 + 765 + [[package]] 766 + name = "libm" 767 + version = "0.2.15" 768 + source = "registry+https://github.com/rust-lang/crates.io-index" 769 + checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" 770 + 771 + [[package]] 772 + name = "libredox" 773 + version = "0.1.10" 774 + source = "registry+https://github.com/rust-lang/crates.io-index" 775 + checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" 776 + dependencies = [ 777 + "bitflags", 778 + "libc", 779 + "redox_syscall", 780 + ] 781 + 782 + [[package]] 783 + name = "libsqlite3-sys" 784 + version = "0.30.1" 785 + source = "registry+https://github.com/rust-lang/crates.io-index" 786 + checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" 787 + dependencies = [ 788 + "cc", 789 + "pkg-config", 790 + "vcpkg", 791 + ] 792 + 793 + [[package]] 794 + name = "litemap" 795 + version = "0.8.0" 796 + source = "registry+https://github.com/rust-lang/crates.io-index" 797 + checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 798 + 799 + [[package]] 800 + name = "lock_api" 801 + version = "0.4.14" 802 + source = "registry+https://github.com/rust-lang/crates.io-index" 803 + checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 804 + dependencies = [ 805 + "scopeguard", 806 + ] 807 + 808 + [[package]] 809 + name = "log" 810 + version = "0.4.28" 811 + source = "registry+https://github.com/rust-lang/crates.io-index" 812 + checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 813 + 814 + [[package]] 815 + name = "matchit" 816 + version = "0.8.4" 817 + source = "registry+https://github.com/rust-lang/crates.io-index" 818 + checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" 819 + 820 + [[package]] 821 + name = "md-5" 822 + version = "0.10.6" 823 + source = "registry+https://github.com/rust-lang/crates.io-index" 824 + checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" 825 + dependencies = [ 826 + "cfg-if", 827 + "digest", 828 + ] 829 + 830 + [[package]] 831 + name = "memchr" 832 + version = "2.7.6" 833 + source = "registry+https://github.com/rust-lang/crates.io-index" 834 + checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" 835 + 836 + [[package]] 837 + name = "mime" 838 + version = "0.3.17" 839 + source = "registry+https://github.com/rust-lang/crates.io-index" 840 + checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 841 + 842 + [[package]] 843 + name = "mime_guess" 844 + version = "2.0.5" 845 + source = "registry+https://github.com/rust-lang/crates.io-index" 846 + checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 847 + dependencies = [ 848 + "mime", 849 + "unicase", 850 + ] 851 + 852 + [[package]] 853 + name = "minijinja" 854 + version = "2.12.0" 855 + source = "registry+https://github.com/rust-lang/crates.io-index" 856 + checksum = "a9f264d75233323f4b7d2f03aefe8a990690cdebfbfe26ea86bcbaec5e9ac990" 857 + dependencies = [ 858 + "serde", 859 + ] 860 + 861 + [[package]] 862 + name = "miniz_oxide" 863 + version = "0.8.9" 864 + source = "registry+https://github.com/rust-lang/crates.io-index" 865 + checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" 866 + dependencies = [ 867 + "adler2", 868 + ] 869 + 870 + [[package]] 871 + name = "mio" 872 + version = "1.0.4" 873 + source = "registry+https://github.com/rust-lang/crates.io-index" 874 + checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" 875 + dependencies = [ 876 + "libc", 877 + "wasi", 878 + "windows-sys 0.59.0", 879 + ] 880 + 881 + [[package]] 882 + name = "num-bigint-dig" 883 + version = "0.8.4" 884 + source = "registry+https://github.com/rust-lang/crates.io-index" 885 + checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" 886 + dependencies = [ 887 + "byteorder", 888 + "lazy_static", 889 + "libm", 890 + "num-integer", 891 + "num-iter", 892 + "num-traits", 893 + "rand", 894 + "smallvec", 895 + "zeroize", 896 + ] 897 + 898 + [[package]] 899 + name = "num-integer" 900 + version = "0.1.46" 901 + source = "registry+https://github.com/rust-lang/crates.io-index" 902 + checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 903 + dependencies = [ 904 + "num-traits", 905 + ] 906 + 907 + [[package]] 908 + name = "num-iter" 909 + version = "0.1.45" 910 + source = "registry+https://github.com/rust-lang/crates.io-index" 911 + checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" 912 + dependencies = [ 913 + "autocfg", 914 + "num-integer", 915 + "num-traits", 916 + ] 917 + 918 + [[package]] 919 + name = "num-traits" 920 + version = "0.2.19" 921 + source = "registry+https://github.com/rust-lang/crates.io-index" 922 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 923 + dependencies = [ 924 + "autocfg", 925 + "libm", 926 + ] 927 + 928 + [[package]] 929 + name = "object" 930 + version = "0.37.3" 931 + source = "registry+https://github.com/rust-lang/crates.io-index" 932 + checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" 933 + dependencies = [ 934 + "memchr", 935 + ] 936 + 937 + [[package]] 938 + name = "once_cell" 939 + version = "1.21.3" 940 + source = "registry+https://github.com/rust-lang/crates.io-index" 941 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 942 + 943 + [[package]] 944 + name = "parking" 945 + version = "2.2.1" 946 + source = "registry+https://github.com/rust-lang/crates.io-index" 947 + checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 948 + 949 + [[package]] 950 + name = "parking_lot" 951 + version = "0.12.5" 952 + source = "registry+https://github.com/rust-lang/crates.io-index" 953 + checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 954 + dependencies = [ 955 + "lock_api", 956 + "parking_lot_core", 957 + ] 958 + 959 + [[package]] 960 + name = "parking_lot_core" 961 + version = "0.9.12" 962 + source = "registry+https://github.com/rust-lang/crates.io-index" 963 + checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 964 + dependencies = [ 965 + "cfg-if", 966 + "libc", 967 + "redox_syscall", 968 + "smallvec", 969 + "windows-link", 970 + ] 971 + 972 + [[package]] 973 + name = "pem-rfc7468" 974 + version = "0.7.0" 975 + source = "registry+https://github.com/rust-lang/crates.io-index" 976 + checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" 977 + dependencies = [ 978 + "base64ct", 979 + ] 980 + 981 + [[package]] 982 + name = "percent-encoding" 983 + version = "2.3.2" 984 + source = "registry+https://github.com/rust-lang/crates.io-index" 985 + checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 986 + 987 + [[package]] 988 + name = "photos" 989 + version = "0.1.0" 990 + dependencies = [ 991 + "anyhow", 992 + "axum", 993 + "dotenv", 994 + "minijinja", 995 + "serde", 996 + "sqlx", 997 + "tokio", 998 + "tower-http", 999 + ] 1000 + 1001 + [[package]] 1002 + name = "pin-project-lite" 1003 + version = "0.2.16" 1004 + source = "registry+https://github.com/rust-lang/crates.io-index" 1005 + checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 1006 + 1007 + [[package]] 1008 + name = "pin-utils" 1009 + version = "0.1.0" 1010 + source = "registry+https://github.com/rust-lang/crates.io-index" 1011 + checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1012 + 1013 + [[package]] 1014 + name = "pkcs1" 1015 + version = "0.7.5" 1016 + source = "registry+https://github.com/rust-lang/crates.io-index" 1017 + checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" 1018 + dependencies = [ 1019 + "der", 1020 + "pkcs8", 1021 + "spki", 1022 + ] 1023 + 1024 + [[package]] 1025 + name = "pkcs8" 1026 + version = "0.10.2" 1027 + source = "registry+https://github.com/rust-lang/crates.io-index" 1028 + checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" 1029 + dependencies = [ 1030 + "der", 1031 + "spki", 1032 + ] 1033 + 1034 + [[package]] 1035 + name = "pkg-config" 1036 + version = "0.3.32" 1037 + source = "registry+https://github.com/rust-lang/crates.io-index" 1038 + checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 1039 + 1040 + [[package]] 1041 + name = "potential_utf" 1042 + version = "0.1.3" 1043 + source = "registry+https://github.com/rust-lang/crates.io-index" 1044 + checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" 1045 + dependencies = [ 1046 + "zerovec", 1047 + ] 1048 + 1049 + [[package]] 1050 + name = "ppv-lite86" 1051 + version = "0.2.21" 1052 + source = "registry+https://github.com/rust-lang/crates.io-index" 1053 + checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 1054 + dependencies = [ 1055 + "zerocopy", 1056 + ] 1057 + 1058 + [[package]] 1059 + name = "proc-macro2" 1060 + version = "1.0.101" 1061 + source = "registry+https://github.com/rust-lang/crates.io-index" 1062 + checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" 1063 + dependencies = [ 1064 + "unicode-ident", 1065 + ] 1066 + 1067 + [[package]] 1068 + name = "quote" 1069 + version = "1.0.41" 1070 + source = "registry+https://github.com/rust-lang/crates.io-index" 1071 + checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" 1072 + dependencies = [ 1073 + "proc-macro2", 1074 + ] 1075 + 1076 + [[package]] 1077 + name = "rand" 1078 + version = "0.8.5" 1079 + source = "registry+https://github.com/rust-lang/crates.io-index" 1080 + checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1081 + dependencies = [ 1082 + "libc", 1083 + "rand_chacha", 1084 + "rand_core", 1085 + ] 1086 + 1087 + [[package]] 1088 + name = "rand_chacha" 1089 + version = "0.3.1" 1090 + source = "registry+https://github.com/rust-lang/crates.io-index" 1091 + checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1092 + dependencies = [ 1093 + "ppv-lite86", 1094 + "rand_core", 1095 + ] 1096 + 1097 + [[package]] 1098 + name = "rand_core" 1099 + version = "0.6.4" 1100 + source = "registry+https://github.com/rust-lang/crates.io-index" 1101 + checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1102 + dependencies = [ 1103 + "getrandom", 1104 + ] 1105 + 1106 + [[package]] 1107 + name = "redox_syscall" 1108 + version = "0.5.18" 1109 + source = "registry+https://github.com/rust-lang/crates.io-index" 1110 + checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" 1111 + dependencies = [ 1112 + "bitflags", 1113 + ] 1114 + 1115 + [[package]] 1116 + name = "rsa" 1117 + version = "0.9.8" 1118 + source = "registry+https://github.com/rust-lang/crates.io-index" 1119 + checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" 1120 + dependencies = [ 1121 + "const-oid", 1122 + "digest", 1123 + "num-bigint-dig", 1124 + "num-integer", 1125 + "num-traits", 1126 + "pkcs1", 1127 + "pkcs8", 1128 + "rand_core", 1129 + "signature", 1130 + "spki", 1131 + "subtle", 1132 + "zeroize", 1133 + ] 1134 + 1135 + [[package]] 1136 + name = "rustc-demangle" 1137 + version = "0.1.26" 1138 + source = "registry+https://github.com/rust-lang/crates.io-index" 1139 + checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" 1140 + 1141 + [[package]] 1142 + name = "ryu" 1143 + version = "1.0.20" 1144 + source = "registry+https://github.com/rust-lang/crates.io-index" 1145 + checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 1146 + 1147 + [[package]] 1148 + name = "scopeguard" 1149 + version = "1.2.0" 1150 + source = "registry+https://github.com/rust-lang/crates.io-index" 1151 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1152 + 1153 + [[package]] 1154 + name = "serde" 1155 + version = "1.0.228" 1156 + source = "registry+https://github.com/rust-lang/crates.io-index" 1157 + checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 1158 + dependencies = [ 1159 + "serde_core", 1160 + "serde_derive", 1161 + ] 1162 + 1163 + [[package]] 1164 + name = "serde_core" 1165 + version = "1.0.228" 1166 + source = "registry+https://github.com/rust-lang/crates.io-index" 1167 + checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" 1168 + dependencies = [ 1169 + "serde_derive", 1170 + ] 1171 + 1172 + [[package]] 1173 + name = "serde_derive" 1174 + version = "1.0.228" 1175 + source = "registry+https://github.com/rust-lang/crates.io-index" 1176 + checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 1177 + dependencies = [ 1178 + "proc-macro2", 1179 + "quote", 1180 + "syn", 1181 + ] 1182 + 1183 + [[package]] 1184 + name = "serde_json" 1185 + version = "1.0.145" 1186 + source = "registry+https://github.com/rust-lang/crates.io-index" 1187 + checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" 1188 + dependencies = [ 1189 + "itoa", 1190 + "memchr", 1191 + "ryu", 1192 + "serde", 1193 + "serde_core", 1194 + ] 1195 + 1196 + [[package]] 1197 + name = "serde_path_to_error" 1198 + version = "0.1.20" 1199 + source = "registry+https://github.com/rust-lang/crates.io-index" 1200 + checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" 1201 + dependencies = [ 1202 + "itoa", 1203 + "serde", 1204 + "serde_core", 1205 + ] 1206 + 1207 + [[package]] 1208 + name = "serde_urlencoded" 1209 + version = "0.7.1" 1210 + source = "registry+https://github.com/rust-lang/crates.io-index" 1211 + checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1212 + dependencies = [ 1213 + "form_urlencoded", 1214 + "itoa", 1215 + "ryu", 1216 + "serde", 1217 + ] 1218 + 1219 + [[package]] 1220 + name = "sha1" 1221 + version = "0.10.6" 1222 + source = "registry+https://github.com/rust-lang/crates.io-index" 1223 + checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 1224 + dependencies = [ 1225 + "cfg-if", 1226 + "cpufeatures", 1227 + "digest", 1228 + ] 1229 + 1230 + [[package]] 1231 + name = "sha2" 1232 + version = "0.10.9" 1233 + source = "registry+https://github.com/rust-lang/crates.io-index" 1234 + checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 1235 + dependencies = [ 1236 + "cfg-if", 1237 + "cpufeatures", 1238 + "digest", 1239 + ] 1240 + 1241 + [[package]] 1242 + name = "shlex" 1243 + version = "1.3.0" 1244 + source = "registry+https://github.com/rust-lang/crates.io-index" 1245 + checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1246 + 1247 + [[package]] 1248 + name = "signature" 1249 + version = "2.2.0" 1250 + source = "registry+https://github.com/rust-lang/crates.io-index" 1251 + checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" 1252 + dependencies = [ 1253 + "digest", 1254 + "rand_core", 1255 + ] 1256 + 1257 + [[package]] 1258 + name = "slab" 1259 + version = "0.4.11" 1260 + source = "registry+https://github.com/rust-lang/crates.io-index" 1261 + checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" 1262 + 1263 + [[package]] 1264 + name = "smallvec" 1265 + version = "1.15.1" 1266 + source = "registry+https://github.com/rust-lang/crates.io-index" 1267 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 1268 + dependencies = [ 1269 + "serde", 1270 + ] 1271 + 1272 + [[package]] 1273 + name = "socket2" 1274 + version = "0.6.0" 1275 + source = "registry+https://github.com/rust-lang/crates.io-index" 1276 + checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" 1277 + dependencies = [ 1278 + "libc", 1279 + "windows-sys 0.59.0", 1280 + ] 1281 + 1282 + [[package]] 1283 + name = "spin" 1284 + version = "0.9.8" 1285 + source = "registry+https://github.com/rust-lang/crates.io-index" 1286 + checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 1287 + dependencies = [ 1288 + "lock_api", 1289 + ] 1290 + 1291 + [[package]] 1292 + name = "spki" 1293 + version = "0.7.3" 1294 + source = "registry+https://github.com/rust-lang/crates.io-index" 1295 + checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" 1296 + dependencies = [ 1297 + "base64ct", 1298 + "der", 1299 + ] 1300 + 1301 + [[package]] 1302 + name = "sqlx" 1303 + version = "0.8.6" 1304 + source = "registry+https://github.com/rust-lang/crates.io-index" 1305 + checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" 1306 + dependencies = [ 1307 + "sqlx-core", 1308 + "sqlx-macros", 1309 + "sqlx-mysql", 1310 + "sqlx-postgres", 1311 + "sqlx-sqlite", 1312 + ] 1313 + 1314 + [[package]] 1315 + name = "sqlx-core" 1316 + version = "0.8.6" 1317 + source = "registry+https://github.com/rust-lang/crates.io-index" 1318 + checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" 1319 + dependencies = [ 1320 + "base64", 1321 + "bytes", 1322 + "crc", 1323 + "crossbeam-queue", 1324 + "either", 1325 + "event-listener", 1326 + "futures-core", 1327 + "futures-intrusive", 1328 + "futures-io", 1329 + "futures-util", 1330 + "hashbrown 0.15.5", 1331 + "hashlink", 1332 + "indexmap", 1333 + "log", 1334 + "memchr", 1335 + "once_cell", 1336 + "percent-encoding", 1337 + "serde", 1338 + "serde_json", 1339 + "sha2", 1340 + "smallvec", 1341 + "thiserror", 1342 + "tokio", 1343 + "tokio-stream", 1344 + "tracing", 1345 + "url", 1346 + ] 1347 + 1348 + [[package]] 1349 + name = "sqlx-macros" 1350 + version = "0.8.6" 1351 + source = "registry+https://github.com/rust-lang/crates.io-index" 1352 + checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" 1353 + dependencies = [ 1354 + "proc-macro2", 1355 + "quote", 1356 + "sqlx-core", 1357 + "sqlx-macros-core", 1358 + "syn", 1359 + ] 1360 + 1361 + [[package]] 1362 + name = "sqlx-macros-core" 1363 + version = "0.8.6" 1364 + source = "registry+https://github.com/rust-lang/crates.io-index" 1365 + checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" 1366 + dependencies = [ 1367 + "dotenvy", 1368 + "either", 1369 + "heck", 1370 + "hex", 1371 + "once_cell", 1372 + "proc-macro2", 1373 + "quote", 1374 + "serde", 1375 + "serde_json", 1376 + "sha2", 1377 + "sqlx-core", 1378 + "sqlx-mysql", 1379 + "sqlx-postgres", 1380 + "sqlx-sqlite", 1381 + "syn", 1382 + "tokio", 1383 + "url", 1384 + ] 1385 + 1386 + [[package]] 1387 + name = "sqlx-mysql" 1388 + version = "0.8.6" 1389 + source = "registry+https://github.com/rust-lang/crates.io-index" 1390 + checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" 1391 + dependencies = [ 1392 + "atoi", 1393 + "base64", 1394 + "bitflags", 1395 + "byteorder", 1396 + "bytes", 1397 + "crc", 1398 + "digest", 1399 + "dotenvy", 1400 + "either", 1401 + "futures-channel", 1402 + "futures-core", 1403 + "futures-io", 1404 + "futures-util", 1405 + "generic-array", 1406 + "hex", 1407 + "hkdf", 1408 + "hmac", 1409 + "itoa", 1410 + "log", 1411 + "md-5", 1412 + "memchr", 1413 + "once_cell", 1414 + "percent-encoding", 1415 + "rand", 1416 + "rsa", 1417 + "serde", 1418 + "sha1", 1419 + "sha2", 1420 + "smallvec", 1421 + "sqlx-core", 1422 + "stringprep", 1423 + "thiserror", 1424 + "tracing", 1425 + "whoami", 1426 + ] 1427 + 1428 + [[package]] 1429 + name = "sqlx-postgres" 1430 + version = "0.8.6" 1431 + source = "registry+https://github.com/rust-lang/crates.io-index" 1432 + checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" 1433 + dependencies = [ 1434 + "atoi", 1435 + "base64", 1436 + "bitflags", 1437 + "byteorder", 1438 + "crc", 1439 + "dotenvy", 1440 + "etcetera", 1441 + "futures-channel", 1442 + "futures-core", 1443 + "futures-util", 1444 + "hex", 1445 + "hkdf", 1446 + "hmac", 1447 + "home", 1448 + "itoa", 1449 + "log", 1450 + "md-5", 1451 + "memchr", 1452 + "once_cell", 1453 + "rand", 1454 + "serde", 1455 + "serde_json", 1456 + "sha2", 1457 + "smallvec", 1458 + "sqlx-core", 1459 + "stringprep", 1460 + "thiserror", 1461 + "tracing", 1462 + "whoami", 1463 + ] 1464 + 1465 + [[package]] 1466 + name = "sqlx-sqlite" 1467 + version = "0.8.6" 1468 + source = "registry+https://github.com/rust-lang/crates.io-index" 1469 + checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" 1470 + dependencies = [ 1471 + "atoi", 1472 + "flume", 1473 + "futures-channel", 1474 + "futures-core", 1475 + "futures-executor", 1476 + "futures-intrusive", 1477 + "futures-util", 1478 + "libsqlite3-sys", 1479 + "log", 1480 + "percent-encoding", 1481 + "serde", 1482 + "serde_urlencoded", 1483 + "sqlx-core", 1484 + "thiserror", 1485 + "tracing", 1486 + "url", 1487 + ] 1488 + 1489 + [[package]] 1490 + name = "stable_deref_trait" 1491 + version = "1.2.0" 1492 + source = "registry+https://github.com/rust-lang/crates.io-index" 1493 + checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1494 + 1495 + [[package]] 1496 + name = "stringprep" 1497 + version = "0.1.5" 1498 + source = "registry+https://github.com/rust-lang/crates.io-index" 1499 + checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" 1500 + dependencies = [ 1501 + "unicode-bidi", 1502 + "unicode-normalization", 1503 + "unicode-properties", 1504 + ] 1505 + 1506 + [[package]] 1507 + name = "subtle" 1508 + version = "2.6.1" 1509 + source = "registry+https://github.com/rust-lang/crates.io-index" 1510 + checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 1511 + 1512 + [[package]] 1513 + name = "syn" 1514 + version = "2.0.106" 1515 + source = "registry+https://github.com/rust-lang/crates.io-index" 1516 + checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" 1517 + dependencies = [ 1518 + "proc-macro2", 1519 + "quote", 1520 + "unicode-ident", 1521 + ] 1522 + 1523 + [[package]] 1524 + name = "sync_wrapper" 1525 + version = "1.0.2" 1526 + source = "registry+https://github.com/rust-lang/crates.io-index" 1527 + checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 1528 + 1529 + [[package]] 1530 + name = "synstructure" 1531 + version = "0.13.2" 1532 + source = "registry+https://github.com/rust-lang/crates.io-index" 1533 + checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 1534 + dependencies = [ 1535 + "proc-macro2", 1536 + "quote", 1537 + "syn", 1538 + ] 1539 + 1540 + [[package]] 1541 + name = "thiserror" 1542 + version = "2.0.17" 1543 + source = "registry+https://github.com/rust-lang/crates.io-index" 1544 + checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" 1545 + dependencies = [ 1546 + "thiserror-impl", 1547 + ] 1548 + 1549 + [[package]] 1550 + name = "thiserror-impl" 1551 + version = "2.0.17" 1552 + source = "registry+https://github.com/rust-lang/crates.io-index" 1553 + checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" 1554 + dependencies = [ 1555 + "proc-macro2", 1556 + "quote", 1557 + "syn", 1558 + ] 1559 + 1560 + [[package]] 1561 + name = "tinystr" 1562 + version = "0.8.1" 1563 + source = "registry+https://github.com/rust-lang/crates.io-index" 1564 + checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 1565 + dependencies = [ 1566 + "displaydoc", 1567 + "zerovec", 1568 + ] 1569 + 1570 + [[package]] 1571 + name = "tinyvec" 1572 + version = "1.10.0" 1573 + source = "registry+https://github.com/rust-lang/crates.io-index" 1574 + checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" 1575 + dependencies = [ 1576 + "tinyvec_macros", 1577 + ] 1578 + 1579 + [[package]] 1580 + name = "tinyvec_macros" 1581 + version = "0.1.1" 1582 + source = "registry+https://github.com/rust-lang/crates.io-index" 1583 + checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 1584 + 1585 + [[package]] 1586 + name = "tokio" 1587 + version = "1.47.1" 1588 + source = "registry+https://github.com/rust-lang/crates.io-index" 1589 + checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" 1590 + dependencies = [ 1591 + "backtrace", 1592 + "bytes", 1593 + "io-uring", 1594 + "libc", 1595 + "mio", 1596 + "pin-project-lite", 1597 + "slab", 1598 + "socket2", 1599 + "tokio-macros", 1600 + "windows-sys 0.59.0", 1601 + ] 1602 + 1603 + [[package]] 1604 + name = "tokio-macros" 1605 + version = "2.5.0" 1606 + source = "registry+https://github.com/rust-lang/crates.io-index" 1607 + checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 1608 + dependencies = [ 1609 + "proc-macro2", 1610 + "quote", 1611 + "syn", 1612 + ] 1613 + 1614 + [[package]] 1615 + name = "tokio-stream" 1616 + version = "0.1.17" 1617 + source = "registry+https://github.com/rust-lang/crates.io-index" 1618 + checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" 1619 + dependencies = [ 1620 + "futures-core", 1621 + "pin-project-lite", 1622 + "tokio", 1623 + ] 1624 + 1625 + [[package]] 1626 + name = "tokio-util" 1627 + version = "0.7.16" 1628 + source = "registry+https://github.com/rust-lang/crates.io-index" 1629 + checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" 1630 + dependencies = [ 1631 + "bytes", 1632 + "futures-core", 1633 + "futures-sink", 1634 + "pin-project-lite", 1635 + "tokio", 1636 + ] 1637 + 1638 + [[package]] 1639 + name = "tower" 1640 + version = "0.5.2" 1641 + source = "registry+https://github.com/rust-lang/crates.io-index" 1642 + checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 1643 + dependencies = [ 1644 + "futures-core", 1645 + "futures-util", 1646 + "pin-project-lite", 1647 + "sync_wrapper", 1648 + "tokio", 1649 + "tower-layer", 1650 + "tower-service", 1651 + "tracing", 1652 + ] 1653 + 1654 + [[package]] 1655 + name = "tower-http" 1656 + version = "0.6.6" 1657 + source = "registry+https://github.com/rust-lang/crates.io-index" 1658 + checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" 1659 + dependencies = [ 1660 + "bitflags", 1661 + "bytes", 1662 + "futures-core", 1663 + "futures-util", 1664 + "http", 1665 + "http-body", 1666 + "http-body-util", 1667 + "http-range-header", 1668 + "httpdate", 1669 + "mime", 1670 + "mime_guess", 1671 + "percent-encoding", 1672 + "pin-project-lite", 1673 + "tokio", 1674 + "tokio-util", 1675 + "tower-layer", 1676 + "tower-service", 1677 + "tracing", 1678 + ] 1679 + 1680 + [[package]] 1681 + name = "tower-layer" 1682 + version = "0.3.3" 1683 + source = "registry+https://github.com/rust-lang/crates.io-index" 1684 + checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 1685 + 1686 + [[package]] 1687 + name = "tower-service" 1688 + version = "0.3.3" 1689 + source = "registry+https://github.com/rust-lang/crates.io-index" 1690 + checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 1691 + 1692 + [[package]] 1693 + name = "tracing" 1694 + version = "0.1.41" 1695 + source = "registry+https://github.com/rust-lang/crates.io-index" 1696 + checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 1697 + dependencies = [ 1698 + "log", 1699 + "pin-project-lite", 1700 + "tracing-attributes", 1701 + "tracing-core", 1702 + ] 1703 + 1704 + [[package]] 1705 + name = "tracing-attributes" 1706 + version = "0.1.30" 1707 + source = "registry+https://github.com/rust-lang/crates.io-index" 1708 + checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" 1709 + dependencies = [ 1710 + "proc-macro2", 1711 + "quote", 1712 + "syn", 1713 + ] 1714 + 1715 + [[package]] 1716 + name = "tracing-core" 1717 + version = "0.1.34" 1718 + source = "registry+https://github.com/rust-lang/crates.io-index" 1719 + checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" 1720 + dependencies = [ 1721 + "once_cell", 1722 + ] 1723 + 1724 + [[package]] 1725 + name = "typenum" 1726 + version = "1.19.0" 1727 + source = "registry+https://github.com/rust-lang/crates.io-index" 1728 + checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" 1729 + 1730 + [[package]] 1731 + name = "unicase" 1732 + version = "2.8.1" 1733 + source = "registry+https://github.com/rust-lang/crates.io-index" 1734 + checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" 1735 + 1736 + [[package]] 1737 + name = "unicode-bidi" 1738 + version = "0.3.18" 1739 + source = "registry+https://github.com/rust-lang/crates.io-index" 1740 + checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" 1741 + 1742 + [[package]] 1743 + name = "unicode-ident" 1744 + version = "1.0.19" 1745 + source = "registry+https://github.com/rust-lang/crates.io-index" 1746 + checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" 1747 + 1748 + [[package]] 1749 + name = "unicode-normalization" 1750 + version = "0.1.24" 1751 + source = "registry+https://github.com/rust-lang/crates.io-index" 1752 + checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" 1753 + dependencies = [ 1754 + "tinyvec", 1755 + ] 1756 + 1757 + [[package]] 1758 + name = "unicode-properties" 1759 + version = "0.1.3" 1760 + source = "registry+https://github.com/rust-lang/crates.io-index" 1761 + checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" 1762 + 1763 + [[package]] 1764 + name = "url" 1765 + version = "2.5.7" 1766 + source = "registry+https://github.com/rust-lang/crates.io-index" 1767 + checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" 1768 + dependencies = [ 1769 + "form_urlencoded", 1770 + "idna", 1771 + "percent-encoding", 1772 + "serde", 1773 + ] 1774 + 1775 + [[package]] 1776 + name = "utf8_iter" 1777 + version = "1.0.4" 1778 + source = "registry+https://github.com/rust-lang/crates.io-index" 1779 + checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 1780 + 1781 + [[package]] 1782 + name = "vcpkg" 1783 + version = "0.2.15" 1784 + source = "registry+https://github.com/rust-lang/crates.io-index" 1785 + checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 1786 + 1787 + [[package]] 1788 + name = "version_check" 1789 + version = "0.9.5" 1790 + source = "registry+https://github.com/rust-lang/crates.io-index" 1791 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 1792 + 1793 + [[package]] 1794 + name = "wasi" 1795 + version = "0.11.1+wasi-snapshot-preview1" 1796 + source = "registry+https://github.com/rust-lang/crates.io-index" 1797 + checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 1798 + 1799 + [[package]] 1800 + name = "wasite" 1801 + version = "0.1.0" 1802 + source = "registry+https://github.com/rust-lang/crates.io-index" 1803 + checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" 1804 + 1805 + [[package]] 1806 + name = "whoami" 1807 + version = "1.6.1" 1808 + source = "registry+https://github.com/rust-lang/crates.io-index" 1809 + checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" 1810 + dependencies = [ 1811 + "libredox", 1812 + "wasite", 1813 + ] 1814 + 1815 + [[package]] 1816 + name = "windows-link" 1817 + version = "0.2.1" 1818 + source = "registry+https://github.com/rust-lang/crates.io-index" 1819 + checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 1820 + 1821 + [[package]] 1822 + name = "windows-sys" 1823 + version = "0.48.0" 1824 + source = "registry+https://github.com/rust-lang/crates.io-index" 1825 + checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 1826 + dependencies = [ 1827 + "windows-targets 0.48.5", 1828 + ] 1829 + 1830 + [[package]] 1831 + name = "windows-sys" 1832 + version = "0.59.0" 1833 + source = "registry+https://github.com/rust-lang/crates.io-index" 1834 + checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 1835 + dependencies = [ 1836 + "windows-targets 0.52.6", 1837 + ] 1838 + 1839 + [[package]] 1840 + name = "windows-targets" 1841 + version = "0.48.5" 1842 + source = "registry+https://github.com/rust-lang/crates.io-index" 1843 + checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 1844 + dependencies = [ 1845 + "windows_aarch64_gnullvm 0.48.5", 1846 + "windows_aarch64_msvc 0.48.5", 1847 + "windows_i686_gnu 0.48.5", 1848 + "windows_i686_msvc 0.48.5", 1849 + "windows_x86_64_gnu 0.48.5", 1850 + "windows_x86_64_gnullvm 0.48.5", 1851 + "windows_x86_64_msvc 0.48.5", 1852 + ] 1853 + 1854 + [[package]] 1855 + name = "windows-targets" 1856 + version = "0.52.6" 1857 + source = "registry+https://github.com/rust-lang/crates.io-index" 1858 + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 1859 + dependencies = [ 1860 + "windows_aarch64_gnullvm 0.52.6", 1861 + "windows_aarch64_msvc 0.52.6", 1862 + "windows_i686_gnu 0.52.6", 1863 + "windows_i686_gnullvm", 1864 + "windows_i686_msvc 0.52.6", 1865 + "windows_x86_64_gnu 0.52.6", 1866 + "windows_x86_64_gnullvm 0.52.6", 1867 + "windows_x86_64_msvc 0.52.6", 1868 + ] 1869 + 1870 + [[package]] 1871 + name = "windows_aarch64_gnullvm" 1872 + version = "0.48.5" 1873 + source = "registry+https://github.com/rust-lang/crates.io-index" 1874 + checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 1875 + 1876 + [[package]] 1877 + name = "windows_aarch64_gnullvm" 1878 + version = "0.52.6" 1879 + source = "registry+https://github.com/rust-lang/crates.io-index" 1880 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 1881 + 1882 + [[package]] 1883 + name = "windows_aarch64_msvc" 1884 + version = "0.48.5" 1885 + source = "registry+https://github.com/rust-lang/crates.io-index" 1886 + checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 1887 + 1888 + [[package]] 1889 + name = "windows_aarch64_msvc" 1890 + version = "0.52.6" 1891 + source = "registry+https://github.com/rust-lang/crates.io-index" 1892 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 1893 + 1894 + [[package]] 1895 + name = "windows_i686_gnu" 1896 + version = "0.48.5" 1897 + source = "registry+https://github.com/rust-lang/crates.io-index" 1898 + checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 1899 + 1900 + [[package]] 1901 + name = "windows_i686_gnu" 1902 + version = "0.52.6" 1903 + source = "registry+https://github.com/rust-lang/crates.io-index" 1904 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 1905 + 1906 + [[package]] 1907 + name = "windows_i686_gnullvm" 1908 + version = "0.52.6" 1909 + source = "registry+https://github.com/rust-lang/crates.io-index" 1910 + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 1911 + 1912 + [[package]] 1913 + name = "windows_i686_msvc" 1914 + version = "0.48.5" 1915 + source = "registry+https://github.com/rust-lang/crates.io-index" 1916 + checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 1917 + 1918 + [[package]] 1919 + name = "windows_i686_msvc" 1920 + version = "0.52.6" 1921 + source = "registry+https://github.com/rust-lang/crates.io-index" 1922 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 1923 + 1924 + [[package]] 1925 + name = "windows_x86_64_gnu" 1926 + version = "0.48.5" 1927 + source = "registry+https://github.com/rust-lang/crates.io-index" 1928 + checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 1929 + 1930 + [[package]] 1931 + name = "windows_x86_64_gnu" 1932 + version = "0.52.6" 1933 + source = "registry+https://github.com/rust-lang/crates.io-index" 1934 + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 1935 + 1936 + [[package]] 1937 + name = "windows_x86_64_gnullvm" 1938 + version = "0.48.5" 1939 + source = "registry+https://github.com/rust-lang/crates.io-index" 1940 + checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 1941 + 1942 + [[package]] 1943 + name = "windows_x86_64_gnullvm" 1944 + version = "0.52.6" 1945 + source = "registry+https://github.com/rust-lang/crates.io-index" 1946 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 1947 + 1948 + [[package]] 1949 + name = "windows_x86_64_msvc" 1950 + version = "0.48.5" 1951 + source = "registry+https://github.com/rust-lang/crates.io-index" 1952 + checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 1953 + 1954 + [[package]] 1955 + name = "windows_x86_64_msvc" 1956 + version = "0.52.6" 1957 + source = "registry+https://github.com/rust-lang/crates.io-index" 1958 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 1959 + 1960 + [[package]] 1961 + name = "writeable" 1962 + version = "0.6.1" 1963 + source = "registry+https://github.com/rust-lang/crates.io-index" 1964 + checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 1965 + 1966 + [[package]] 1967 + name = "yoke" 1968 + version = "0.8.0" 1969 + source = "registry+https://github.com/rust-lang/crates.io-index" 1970 + checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 1971 + dependencies = [ 1972 + "serde", 1973 + "stable_deref_trait", 1974 + "yoke-derive", 1975 + "zerofrom", 1976 + ] 1977 + 1978 + [[package]] 1979 + name = "yoke-derive" 1980 + version = "0.8.0" 1981 + source = "registry+https://github.com/rust-lang/crates.io-index" 1982 + checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 1983 + dependencies = [ 1984 + "proc-macro2", 1985 + "quote", 1986 + "syn", 1987 + "synstructure", 1988 + ] 1989 + 1990 + [[package]] 1991 + name = "zerocopy" 1992 + version = "0.8.27" 1993 + source = "registry+https://github.com/rust-lang/crates.io-index" 1994 + checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" 1995 + dependencies = [ 1996 + "zerocopy-derive", 1997 + ] 1998 + 1999 + [[package]] 2000 + name = "zerocopy-derive" 2001 + version = "0.8.27" 2002 + source = "registry+https://github.com/rust-lang/crates.io-index" 2003 + checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" 2004 + dependencies = [ 2005 + "proc-macro2", 2006 + "quote", 2007 + "syn", 2008 + ] 2009 + 2010 + [[package]] 2011 + name = "zerofrom" 2012 + version = "0.1.6" 2013 + source = "registry+https://github.com/rust-lang/crates.io-index" 2014 + checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 2015 + dependencies = [ 2016 + "zerofrom-derive", 2017 + ] 2018 + 2019 + [[package]] 2020 + name = "zerofrom-derive" 2021 + version = "0.1.6" 2022 + source = "registry+https://github.com/rust-lang/crates.io-index" 2023 + checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 2024 + dependencies = [ 2025 + "proc-macro2", 2026 + "quote", 2027 + "syn", 2028 + "synstructure", 2029 + ] 2030 + 2031 + [[package]] 2032 + name = "zeroize" 2033 + version = "1.8.2" 2034 + source = "registry+https://github.com/rust-lang/crates.io-index" 2035 + checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" 2036 + 2037 + [[package]] 2038 + name = "zerotrie" 2039 + version = "0.2.2" 2040 + source = "registry+https://github.com/rust-lang/crates.io-index" 2041 + checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 2042 + dependencies = [ 2043 + "displaydoc", 2044 + "yoke", 2045 + "zerofrom", 2046 + ] 2047 + 2048 + [[package]] 2049 + name = "zerovec" 2050 + version = "0.11.4" 2051 + source = "registry+https://github.com/rust-lang/crates.io-index" 2052 + checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" 2053 + dependencies = [ 2054 + "yoke", 2055 + "zerofrom", 2056 + "zerovec-derive", 2057 + ] 2058 + 2059 + [[package]] 2060 + name = "zerovec-derive" 2061 + version = "0.11.1" 2062 + source = "registry+https://github.com/rust-lang/crates.io-index" 2063 + checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 2064 + dependencies = [ 2065 + "proc-macro2", 2066 + "quote", 2067 + "syn", 2068 + ]
+14
Cargo.toml
··· 1 + [package] 2 + name = "photos" 3 + version = "0.1.0" 4 + edition = "2024" 5 + 6 + [dependencies] 7 + anyhow = "1.0.100" 8 + axum = "0.8.6" 9 + dotenv = "0.15.0" 10 + minijinja = "2.12.0" 11 + serde = "1.0.228" 12 + sqlx = { version = "0.8.6", features = ["runtime-tokio", "sqlite"] } 13 + tokio = { version = "1.47.1", features = ["rt-multi-thread"] } 14 + tower-http = { version = "0.6.6", features = ["fs"] }
+25
src/app_error.rs
··· 1 + use axum::{ 2 + http::StatusCode, 3 + response::{IntoResponse, Response}, 4 + }; 5 + 6 + pub struct AppError(anyhow::Error); 7 + 8 + impl IntoResponse for AppError { 9 + fn into_response(self) -> Response { 10 + ( 11 + StatusCode::INTERNAL_SERVER_ERROR, 12 + format!("Something went wrong: {}", self.0), 13 + ) 14 + .into_response() 15 + } 16 + } 17 + 18 + impl<E> From<E> for AppError 19 + where 20 + E: Into<anyhow::Error>, 21 + { 22 + fn from(err: E) -> Self { 23 + Self(err.into()) 24 + } 25 + }
+10
src/db.rs
··· 1 + use crate::Photo; 2 + use sqlx::SqlitePool; 3 + 4 + pub async fn get_photos(pool: &SqlitePool) -> anyhow::Result<Vec<Photo>> { 5 + let photos = sqlx::query_as::<_, Photo>("SELECT id, caption, filename FROM photos") 6 + .fetch_all(pool) 7 + .await?; 8 + 9 + Ok(photos) 10 + }
+49
src/main.rs
··· 1 + use axum::{Router, extract::State, response::Html, routing::get}; 2 + use dotenv::dotenv; 3 + use minijinja::{Environment, context}; 4 + use std::{env, sync::Arc}; 5 + mod app_error; 6 + use app_error::AppError; 7 + mod db; 8 + mod photos; 9 + use photos::Photo; 10 + use sqlx::SqlitePool; 11 + use tower_http::services::ServeDir; 12 + 13 + struct AppState { 14 + template_env: Environment<'static>, 15 + pool: SqlitePool, 16 + } 17 + 18 + async fn root(State(state): State<Arc<AppState>>) -> Result<Html<String>, AppError> { 19 + let photos = db::get_photos(&state.pool).await?; 20 + let template = state.template_env.get_template("index")?; 21 + let rendered = template.render(context! { 22 + photos => photos, 23 + })?; 24 + 25 + Ok(Html(rendered)) 26 + } 27 + 28 + #[tokio::main] 29 + async fn main() -> anyhow::Result<()> { 30 + dotenv().ok(); 31 + let pool = SqlitePool::connect(&env::var("DATABASE_URL")?) 32 + .await 33 + .expect("Where's the database???"); 34 + 35 + let mut template_env = Environment::new(); 36 + template_env.add_template("layout", include_str!("../templates/layout.jinja"))?; 37 + template_env.add_template("index", include_str!("../templates/index.jinja"))?; 38 + 39 + let app_state = Arc::new(AppState { template_env, pool }); 40 + let app = Router::new() 41 + .route("/", get(root)) 42 + .with_state(app_state) 43 + .nest_service("/thumbnails", ServeDir::new(&env::var("THUMBNAIL_PATH")?)) 44 + .nest_service("/images", ServeDir::new(&env::var("IMAGE_PATH")?)); 45 + let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); 46 + axum::serve(listener, app).await?; 47 + 48 + Ok(()) 49 + }
+11
src/photos.rs
··· 1 + use serde::Serialize; 2 + use sqlx::FromRow; 3 + 4 + #[derive(FromRow, Serialize)] 5 + pub struct Photo { 6 + pub id: String, 7 + pub caption: String, 8 + pub filename: String, 9 + // pub taken_at TEXT, 10 + // pub created_at TEXT 11 + }
+7
templates/index.jinja
··· 1 + {% extends "layout" %} 2 + {% block title %}Photos{% endblock %} 3 + {% block body %} 4 + {% for photo in photos %} 5 + <img src="/thumbnails/{{ photo.id }}.webp"> 6 + {% endfor %} 7 + {% endblock %}
+9
templates/layout.jinja
··· 1 + <!doctype html> 2 + <html> 3 + <head> 4 + <title>{% block title %}{% endblock %}</title> 5 + </head> 6 + <body> 7 + {% block body %}{% endblock %} 8 + </body> 9 + </html>