├── .env.example ├── .gitignore ├── Cargo.lock ├── Cargo.toml └── src ├── main.rs └── services.rs /.env.example: -------------------------------------------------------------------------------- 1 | DATABASE_URL=postgresql://[USERNAME]:[PASSWORD]@[HOST]/[DB] -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | .env -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "actix" 7 | version = "0.13.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "f728064aca1c318585bf4bb04ffcfac9e75e508ab4e8b1bd9ba5dfe04e2cbed5" 10 | dependencies = [ 11 | "actix-rt", 12 | "actix_derive", 13 | "bitflags", 14 | "bytes", 15 | "crossbeam-channel", 16 | "futures-core", 17 | "futures-sink", 18 | "futures-task", 19 | "futures-util", 20 | "log", 21 | "once_cell", 22 | "parking_lot 0.12.1", 23 | "pin-project-lite", 24 | "smallvec", 25 | "tokio", 26 | "tokio-util", 27 | ] 28 | 29 | [[package]] 30 | name = "actix-codec" 31 | version = "0.5.0" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | checksum = "57a7559404a7f3573127aab53c08ce37a6c6a315c374a31070f3c91cd1b4a7fe" 34 | dependencies = [ 35 | "bitflags", 36 | "bytes", 37 | "futures-core", 38 | "futures-sink", 39 | "log", 40 | "memchr", 41 | "pin-project-lite", 42 | "tokio", 43 | "tokio-util", 44 | ] 45 | 46 | [[package]] 47 | name = "actix-http" 48 | version = "3.2.2" 49 | source = "registry+https://github.com/rust-lang/crates.io-index" 50 | checksum = "0c83abf9903e1f0ad9973cc4f7b9767fd5a03a583f51a5b7a339e07987cd2724" 51 | dependencies = [ 52 | "actix-codec", 53 | "actix-rt", 54 | "actix-service", 55 | "actix-utils", 56 | "ahash", 57 | "base64", 58 | "bitflags", 59 | "brotli", 60 | "bytes", 61 | "bytestring", 62 | "derive_more", 63 | "encoding_rs", 64 | "flate2", 65 | "futures-core", 66 | "h2", 67 | "http", 68 | "httparse", 69 | "httpdate", 70 | "itoa", 71 | "language-tags", 72 | "local-channel", 73 | "mime", 74 | "percent-encoding", 75 | "pin-project-lite", 76 | "rand", 77 | "sha1", 78 | "smallvec", 79 | "tracing", 80 | "zstd", 81 | ] 82 | 83 | [[package]] 84 | name = "actix-macros" 85 | version = "0.2.3" 86 | source = "registry+https://github.com/rust-lang/crates.io-index" 87 | checksum = "465a6172cf69b960917811022d8f29bc0b7fa1398bc4f78b3c466673db1213b6" 88 | dependencies = [ 89 | "quote", 90 | "syn", 91 | ] 92 | 93 | [[package]] 94 | name = "actix-router" 95 | version = "0.5.1" 96 | source = "registry+https://github.com/rust-lang/crates.io-index" 97 | checksum = "d66ff4d247d2b160861fa2866457e85706833527840e4133f8f49aa423a38799" 98 | dependencies = [ 99 | "bytestring", 100 | "http", 101 | "regex", 102 | "serde", 103 | "tracing", 104 | ] 105 | 106 | [[package]] 107 | name = "actix-rt" 108 | version = "2.7.0" 109 | source = "registry+https://github.com/rust-lang/crates.io-index" 110 | checksum = "7ea16c295198e958ef31930a6ef37d0fb64e9ca3b6116e6b93a8bdae96ee1000" 111 | dependencies = [ 112 | "futures-core", 113 | "tokio", 114 | ] 115 | 116 | [[package]] 117 | name = "actix-server" 118 | version = "2.1.1" 119 | source = "registry+https://github.com/rust-lang/crates.io-index" 120 | checksum = "0da34f8e659ea1b077bb4637948b815cd3768ad5a188fdcd74ff4d84240cd824" 121 | dependencies = [ 122 | "actix-rt", 123 | "actix-service", 124 | "actix-utils", 125 | "futures-core", 126 | "futures-util", 127 | "mio", 128 | "num_cpus", 129 | "socket2", 130 | "tokio", 131 | "tracing", 132 | ] 133 | 134 | [[package]] 135 | name = "actix-service" 136 | version = "2.0.2" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a" 139 | dependencies = [ 140 | "futures-core", 141 | "paste", 142 | "pin-project-lite", 143 | ] 144 | 145 | [[package]] 146 | name = "actix-utils" 147 | version = "3.0.0" 148 | source = "registry+https://github.com/rust-lang/crates.io-index" 149 | checksum = "e491cbaac2e7fc788dfff99ff48ef317e23b3cf63dbaf7aaab6418f40f92aa94" 150 | dependencies = [ 151 | "local-waker", 152 | "pin-project-lite", 153 | ] 154 | 155 | [[package]] 156 | name = "actix-web" 157 | version = "4.2.1" 158 | source = "registry+https://github.com/rust-lang/crates.io-index" 159 | checksum = "d48f7b6534e06c7bfc72ee91db7917d4af6afe23e7d223b51e68fffbb21e96b9" 160 | dependencies = [ 161 | "actix-codec", 162 | "actix-http", 163 | "actix-macros", 164 | "actix-router", 165 | "actix-rt", 166 | "actix-server", 167 | "actix-service", 168 | "actix-utils", 169 | "actix-web-codegen", 170 | "ahash", 171 | "bytes", 172 | "bytestring", 173 | "cfg-if", 174 | "cookie", 175 | "derive_more", 176 | "encoding_rs", 177 | "futures-core", 178 | "futures-util", 179 | "http", 180 | "itoa", 181 | "language-tags", 182 | "log", 183 | "mime", 184 | "once_cell", 185 | "pin-project-lite", 186 | "regex", 187 | "serde", 188 | "serde_json", 189 | "serde_urlencoded", 190 | "smallvec", 191 | "socket2", 192 | "time", 193 | "url", 194 | ] 195 | 196 | [[package]] 197 | name = "actix-web-codegen" 198 | version = "4.1.0" 199 | source = "registry+https://github.com/rust-lang/crates.io-index" 200 | checksum = "1fa9362663c8643d67b2d5eafba49e4cb2c8a053a29ed00a0bea121f17c76b13" 201 | dependencies = [ 202 | "actix-router", 203 | "proc-macro2", 204 | "quote", 205 | "syn", 206 | ] 207 | 208 | [[package]] 209 | name = "actix_derive" 210 | version = "0.6.0" 211 | source = "registry+https://github.com/rust-lang/crates.io-index" 212 | checksum = "6d44b8fee1ced9671ba043476deddef739dd0959bf77030b26b738cc591737a7" 213 | dependencies = [ 214 | "proc-macro2", 215 | "quote", 216 | "syn", 217 | ] 218 | 219 | [[package]] 220 | name = "adler" 221 | version = "1.0.2" 222 | source = "registry+https://github.com/rust-lang/crates.io-index" 223 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 224 | 225 | [[package]] 226 | name = "ahash" 227 | version = "0.7.6" 228 | source = "registry+https://github.com/rust-lang/crates.io-index" 229 | checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" 230 | dependencies = [ 231 | "getrandom", 232 | "once_cell", 233 | "version_check", 234 | ] 235 | 236 | [[package]] 237 | name = "aho-corasick" 238 | version = "0.7.19" 239 | source = "registry+https://github.com/rust-lang/crates.io-index" 240 | checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" 241 | dependencies = [ 242 | "memchr", 243 | ] 244 | 245 | [[package]] 246 | name = "alloc-no-stdlib" 247 | version = "2.0.4" 248 | source = "registry+https://github.com/rust-lang/crates.io-index" 249 | checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" 250 | 251 | [[package]] 252 | name = "alloc-stdlib" 253 | version = "0.2.2" 254 | source = "registry+https://github.com/rust-lang/crates.io-index" 255 | checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" 256 | dependencies = [ 257 | "alloc-no-stdlib", 258 | ] 259 | 260 | [[package]] 261 | name = "async-channel" 262 | version = "1.7.1" 263 | source = "registry+https://github.com/rust-lang/crates.io-index" 264 | checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28" 265 | dependencies = [ 266 | "concurrent-queue", 267 | "event-listener", 268 | "futures-core", 269 | ] 270 | 271 | [[package]] 272 | name = "async-executor" 273 | version = "1.4.1" 274 | source = "registry+https://github.com/rust-lang/crates.io-index" 275 | checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" 276 | dependencies = [ 277 | "async-task", 278 | "concurrent-queue", 279 | "fastrand", 280 | "futures-lite", 281 | "once_cell", 282 | "slab", 283 | ] 284 | 285 | [[package]] 286 | name = "async-global-executor" 287 | version = "2.3.0" 288 | source = "registry+https://github.com/rust-lang/crates.io-index" 289 | checksum = "0da5b41ee986eed3f524c380e6d64965aea573882a8907682ad100f7859305ca" 290 | dependencies = [ 291 | "async-channel", 292 | "async-executor", 293 | "async-io", 294 | "async-lock", 295 | "blocking", 296 | "futures-lite", 297 | "once_cell", 298 | ] 299 | 300 | [[package]] 301 | name = "async-io" 302 | version = "1.9.0" 303 | source = "registry+https://github.com/rust-lang/crates.io-index" 304 | checksum = "83e21f3a490c72b3b0cf44962180e60045de2925d8dff97918f7ee43c8f637c7" 305 | dependencies = [ 306 | "autocfg", 307 | "concurrent-queue", 308 | "futures-lite", 309 | "libc", 310 | "log", 311 | "once_cell", 312 | "parking", 313 | "polling", 314 | "slab", 315 | "socket2", 316 | "waker-fn", 317 | "winapi", 318 | ] 319 | 320 | [[package]] 321 | name = "async-lock" 322 | version = "2.5.0" 323 | source = "registry+https://github.com/rust-lang/crates.io-index" 324 | checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6" 325 | dependencies = [ 326 | "event-listener", 327 | ] 328 | 329 | [[package]] 330 | name = "async-native-tls" 331 | version = "0.4.0" 332 | source = "registry+https://github.com/rust-lang/crates.io-index" 333 | checksum = "d57d4cec3c647232e1094dc013546c0b33ce785d8aeb251e1f20dfaf8a9a13fe" 334 | dependencies = [ 335 | "futures-util", 336 | "native-tls", 337 | "thiserror", 338 | "url", 339 | ] 340 | 341 | [[package]] 342 | name = "async-process" 343 | version = "1.5.0" 344 | source = "registry+https://github.com/rust-lang/crates.io-index" 345 | checksum = "02111fd8655a613c25069ea89fc8d9bb89331fa77486eb3bc059ee757cfa481c" 346 | dependencies = [ 347 | "async-io", 348 | "autocfg", 349 | "blocking", 350 | "cfg-if", 351 | "event-listener", 352 | "futures-lite", 353 | "libc", 354 | "once_cell", 355 | "signal-hook", 356 | "winapi", 357 | ] 358 | 359 | [[package]] 360 | name = "async-std" 361 | version = "1.12.0" 362 | source = "registry+https://github.com/rust-lang/crates.io-index" 363 | checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" 364 | dependencies = [ 365 | "async-channel", 366 | "async-global-executor", 367 | "async-io", 368 | "async-lock", 369 | "async-process", 370 | "crossbeam-utils", 371 | "futures-channel", 372 | "futures-core", 373 | "futures-io", 374 | "futures-lite", 375 | "gloo-timers", 376 | "kv-log-macro", 377 | "log", 378 | "memchr", 379 | "once_cell", 380 | "pin-project-lite", 381 | "pin-utils", 382 | "slab", 383 | "wasm-bindgen-futures", 384 | ] 385 | 386 | [[package]] 387 | name = "async-task" 388 | version = "4.3.0" 389 | source = "registry+https://github.com/rust-lang/crates.io-index" 390 | checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" 391 | 392 | [[package]] 393 | name = "atoi" 394 | version = "1.0.0" 395 | source = "registry+https://github.com/rust-lang/crates.io-index" 396 | checksum = "d7c57d12312ff59c811c0643f4d80830505833c9ffaebd193d819392b265be8e" 397 | dependencies = [ 398 | "num-traits", 399 | ] 400 | 401 | [[package]] 402 | name = "atomic-waker" 403 | version = "1.0.0" 404 | source = "registry+https://github.com/rust-lang/crates.io-index" 405 | checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" 406 | 407 | [[package]] 408 | name = "autocfg" 409 | version = "1.1.0" 410 | source = "registry+https://github.com/rust-lang/crates.io-index" 411 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 412 | 413 | [[package]] 414 | name = "base64" 415 | version = "0.13.0" 416 | source = "registry+https://github.com/rust-lang/crates.io-index" 417 | checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" 418 | 419 | [[package]] 420 | name = "bitflags" 421 | version = "1.3.2" 422 | source = "registry+https://github.com/rust-lang/crates.io-index" 423 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 424 | 425 | [[package]] 426 | name = "block-buffer" 427 | version = "0.10.3" 428 | source = "registry+https://github.com/rust-lang/crates.io-index" 429 | checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" 430 | dependencies = [ 431 | "generic-array", 432 | ] 433 | 434 | [[package]] 435 | name = "blocking" 436 | version = "1.2.0" 437 | source = "registry+https://github.com/rust-lang/crates.io-index" 438 | checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc" 439 | dependencies = [ 440 | "async-channel", 441 | "async-task", 442 | "atomic-waker", 443 | "fastrand", 444 | "futures-lite", 445 | "once_cell", 446 | ] 447 | 448 | [[package]] 449 | name = "brotli" 450 | version = "3.3.4" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" 453 | dependencies = [ 454 | "alloc-no-stdlib", 455 | "alloc-stdlib", 456 | "brotli-decompressor", 457 | ] 458 | 459 | [[package]] 460 | name = "brotli-decompressor" 461 | version = "2.3.2" 462 | source = "registry+https://github.com/rust-lang/crates.io-index" 463 | checksum = "59ad2d4653bf5ca36ae797b1f4bb4dbddb60ce49ca4aed8a2ce4829f60425b80" 464 | dependencies = [ 465 | "alloc-no-stdlib", 466 | "alloc-stdlib", 467 | ] 468 | 469 | [[package]] 470 | name = "bumpalo" 471 | version = "3.11.0" 472 | source = "registry+https://github.com/rust-lang/crates.io-index" 473 | checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" 474 | 475 | [[package]] 476 | name = "byteorder" 477 | version = "1.4.3" 478 | source = "registry+https://github.com/rust-lang/crates.io-index" 479 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 480 | 481 | [[package]] 482 | name = "bytes" 483 | version = "1.2.1" 484 | source = "registry+https://github.com/rust-lang/crates.io-index" 485 | checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" 486 | 487 | [[package]] 488 | name = "bytestring" 489 | version = "1.1.0" 490 | source = "registry+https://github.com/rust-lang/crates.io-index" 491 | checksum = "86b6a75fd3048808ef06af5cd79712be8111960adaf89d90250974b38fc3928a" 492 | dependencies = [ 493 | "bytes", 494 | ] 495 | 496 | [[package]] 497 | name = "cache-padded" 498 | version = "1.2.0" 499 | source = "registry+https://github.com/rust-lang/crates.io-index" 500 | checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" 501 | 502 | [[package]] 503 | name = "cc" 504 | version = "1.0.73" 505 | source = "registry+https://github.com/rust-lang/crates.io-index" 506 | checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" 507 | dependencies = [ 508 | "jobserver", 509 | ] 510 | 511 | [[package]] 512 | name = "cfg-if" 513 | version = "1.0.0" 514 | source = "registry+https://github.com/rust-lang/crates.io-index" 515 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 516 | 517 | [[package]] 518 | name = "concurrent-queue" 519 | version = "1.2.4" 520 | source = "registry+https://github.com/rust-lang/crates.io-index" 521 | checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" 522 | dependencies = [ 523 | "cache-padded", 524 | ] 525 | 526 | [[package]] 527 | name = "convert_case" 528 | version = "0.4.0" 529 | source = "registry+https://github.com/rust-lang/crates.io-index" 530 | checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" 531 | 532 | [[package]] 533 | name = "cookie" 534 | version = "0.16.1" 535 | source = "registry+https://github.com/rust-lang/crates.io-index" 536 | checksum = "344adc371239ef32293cb1c4fe519592fcf21206c79c02854320afcdf3ab4917" 537 | dependencies = [ 538 | "percent-encoding", 539 | "time", 540 | "version_check", 541 | ] 542 | 543 | [[package]] 544 | name = "core-foundation" 545 | version = "0.9.3" 546 | source = "registry+https://github.com/rust-lang/crates.io-index" 547 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" 548 | dependencies = [ 549 | "core-foundation-sys", 550 | "libc", 551 | ] 552 | 553 | [[package]] 554 | name = "core-foundation-sys" 555 | version = "0.8.3" 556 | source = "registry+https://github.com/rust-lang/crates.io-index" 557 | checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" 558 | 559 | [[package]] 560 | name = "cpufeatures" 561 | version = "0.2.5" 562 | source = "registry+https://github.com/rust-lang/crates.io-index" 563 | checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" 564 | dependencies = [ 565 | "libc", 566 | ] 567 | 568 | [[package]] 569 | name = "crc" 570 | version = "3.0.0" 571 | source = "registry+https://github.com/rust-lang/crates.io-index" 572 | checksum = "53757d12b596c16c78b83458d732a5d1a17ab3f53f2f7412f6fb57cc8a140ab3" 573 | dependencies = [ 574 | "crc-catalog", 575 | ] 576 | 577 | [[package]] 578 | name = "crc-catalog" 579 | version = "2.1.0" 580 | source = "registry+https://github.com/rust-lang/crates.io-index" 581 | checksum = "2d0165d2900ae6778e36e80bbc4da3b5eefccee9ba939761f9c2882a5d9af3ff" 582 | 583 | [[package]] 584 | name = "crc32fast" 585 | version = "1.3.2" 586 | source = "registry+https://github.com/rust-lang/crates.io-index" 587 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" 588 | dependencies = [ 589 | "cfg-if", 590 | ] 591 | 592 | [[package]] 593 | name = "crossbeam-channel" 594 | version = "0.5.6" 595 | source = "registry+https://github.com/rust-lang/crates.io-index" 596 | checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" 597 | dependencies = [ 598 | "cfg-if", 599 | "crossbeam-utils", 600 | ] 601 | 602 | [[package]] 603 | name = "crossbeam-queue" 604 | version = "0.3.6" 605 | source = "registry+https://github.com/rust-lang/crates.io-index" 606 | checksum = "1cd42583b04998a5363558e5f9291ee5a5ff6b49944332103f251e7479a82aa7" 607 | dependencies = [ 608 | "cfg-if", 609 | "crossbeam-utils", 610 | ] 611 | 612 | [[package]] 613 | name = "crossbeam-utils" 614 | version = "0.8.12" 615 | source = "registry+https://github.com/rust-lang/crates.io-index" 616 | checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" 617 | dependencies = [ 618 | "cfg-if", 619 | ] 620 | 621 | [[package]] 622 | name = "crypto-common" 623 | version = "0.1.6" 624 | source = "registry+https://github.com/rust-lang/crates.io-index" 625 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 626 | dependencies = [ 627 | "generic-array", 628 | "typenum", 629 | ] 630 | 631 | [[package]] 632 | name = "ctor" 633 | version = "0.1.23" 634 | source = "registry+https://github.com/rust-lang/crates.io-index" 635 | checksum = "cdffe87e1d521a10f9696f833fe502293ea446d7f256c06128293a4119bdf4cb" 636 | dependencies = [ 637 | "quote", 638 | "syn", 639 | ] 640 | 641 | [[package]] 642 | name = "derive_more" 643 | version = "0.99.17" 644 | source = "registry+https://github.com/rust-lang/crates.io-index" 645 | checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" 646 | dependencies = [ 647 | "convert_case", 648 | "proc-macro2", 649 | "quote", 650 | "rustc_version", 651 | "syn", 652 | ] 653 | 654 | [[package]] 655 | name = "digest" 656 | version = "0.10.5" 657 | source = "registry+https://github.com/rust-lang/crates.io-index" 658 | checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" 659 | dependencies = [ 660 | "block-buffer", 661 | "crypto-common", 662 | "subtle", 663 | ] 664 | 665 | [[package]] 666 | name = "dirs" 667 | version = "4.0.0" 668 | source = "registry+https://github.com/rust-lang/crates.io-index" 669 | checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" 670 | dependencies = [ 671 | "dirs-sys", 672 | ] 673 | 674 | [[package]] 675 | name = "dirs-sys" 676 | version = "0.3.7" 677 | source = "registry+https://github.com/rust-lang/crates.io-index" 678 | checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" 679 | dependencies = [ 680 | "libc", 681 | "redox_users", 682 | "winapi", 683 | ] 684 | 685 | [[package]] 686 | name = "dotenv" 687 | version = "0.15.0" 688 | source = "registry+https://github.com/rust-lang/crates.io-index" 689 | checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" 690 | 691 | [[package]] 692 | name = "dotenvy" 693 | version = "0.15.5" 694 | source = "registry+https://github.com/rust-lang/crates.io-index" 695 | checksum = "ed9155c8f4dc55c7470ae9da3f63c6785245093b3f6aeb0f5bf2e968efbba314" 696 | dependencies = [ 697 | "dirs", 698 | ] 699 | 700 | [[package]] 701 | name = "either" 702 | version = "1.8.0" 703 | source = "registry+https://github.com/rust-lang/crates.io-index" 704 | checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" 705 | 706 | [[package]] 707 | name = "encoding_rs" 708 | version = "0.8.31" 709 | source = "registry+https://github.com/rust-lang/crates.io-index" 710 | checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" 711 | dependencies = [ 712 | "cfg-if", 713 | ] 714 | 715 | [[package]] 716 | name = "event-listener" 717 | version = "2.5.3" 718 | source = "registry+https://github.com/rust-lang/crates.io-index" 719 | checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" 720 | 721 | [[package]] 722 | name = "fastrand" 723 | version = "1.8.0" 724 | source = "registry+https://github.com/rust-lang/crates.io-index" 725 | checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" 726 | dependencies = [ 727 | "instant", 728 | ] 729 | 730 | [[package]] 731 | name = "flate2" 732 | version = "1.0.24" 733 | source = "registry+https://github.com/rust-lang/crates.io-index" 734 | checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" 735 | dependencies = [ 736 | "crc32fast", 737 | "miniz_oxide", 738 | ] 739 | 740 | [[package]] 741 | name = "fnv" 742 | version = "1.0.7" 743 | source = "registry+https://github.com/rust-lang/crates.io-index" 744 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 745 | 746 | [[package]] 747 | name = "foreign-types" 748 | version = "0.3.2" 749 | source = "registry+https://github.com/rust-lang/crates.io-index" 750 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 751 | dependencies = [ 752 | "foreign-types-shared", 753 | ] 754 | 755 | [[package]] 756 | name = "foreign-types-shared" 757 | version = "0.1.1" 758 | source = "registry+https://github.com/rust-lang/crates.io-index" 759 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 760 | 761 | [[package]] 762 | name = "form_urlencoded" 763 | version = "1.1.0" 764 | source = "registry+https://github.com/rust-lang/crates.io-index" 765 | checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" 766 | dependencies = [ 767 | "percent-encoding", 768 | ] 769 | 770 | [[package]] 771 | name = "futures-channel" 772 | version = "0.3.24" 773 | source = "registry+https://github.com/rust-lang/crates.io-index" 774 | checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050" 775 | dependencies = [ 776 | "futures-core", 777 | "futures-sink", 778 | ] 779 | 780 | [[package]] 781 | name = "futures-core" 782 | version = "0.3.24" 783 | source = "registry+https://github.com/rust-lang/crates.io-index" 784 | checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf" 785 | 786 | [[package]] 787 | name = "futures-intrusive" 788 | version = "0.4.0" 789 | source = "registry+https://github.com/rust-lang/crates.io-index" 790 | checksum = "62007592ac46aa7c2b6416f7deb9a8a8f63a01e0f1d6e1787d5630170db2b63e" 791 | dependencies = [ 792 | "futures-core", 793 | "lock_api", 794 | "parking_lot 0.11.2", 795 | ] 796 | 797 | [[package]] 798 | name = "futures-io" 799 | version = "0.3.24" 800 | source = "registry+https://github.com/rust-lang/crates.io-index" 801 | checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" 802 | 803 | [[package]] 804 | name = "futures-lite" 805 | version = "1.12.0" 806 | source = "registry+https://github.com/rust-lang/crates.io-index" 807 | checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" 808 | dependencies = [ 809 | "fastrand", 810 | "futures-core", 811 | "futures-io", 812 | "memchr", 813 | "parking", 814 | "pin-project-lite", 815 | "waker-fn", 816 | ] 817 | 818 | [[package]] 819 | name = "futures-macro" 820 | version = "0.3.24" 821 | source = "registry+https://github.com/rust-lang/crates.io-index" 822 | checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17" 823 | dependencies = [ 824 | "proc-macro2", 825 | "quote", 826 | "syn", 827 | ] 828 | 829 | [[package]] 830 | name = "futures-sink" 831 | version = "0.3.24" 832 | source = "registry+https://github.com/rust-lang/crates.io-index" 833 | checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56" 834 | 835 | [[package]] 836 | name = "futures-task" 837 | version = "0.3.24" 838 | source = "registry+https://github.com/rust-lang/crates.io-index" 839 | checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1" 840 | 841 | [[package]] 842 | name = "futures-util" 843 | version = "0.3.24" 844 | source = "registry+https://github.com/rust-lang/crates.io-index" 845 | checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90" 846 | dependencies = [ 847 | "futures-core", 848 | "futures-io", 849 | "futures-macro", 850 | "futures-sink", 851 | "futures-task", 852 | "memchr", 853 | "pin-project-lite", 854 | "pin-utils", 855 | "slab", 856 | ] 857 | 858 | [[package]] 859 | name = "generic-array" 860 | version = "0.14.6" 861 | source = "registry+https://github.com/rust-lang/crates.io-index" 862 | checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" 863 | dependencies = [ 864 | "typenum", 865 | "version_check", 866 | ] 867 | 868 | [[package]] 869 | name = "getrandom" 870 | version = "0.2.7" 871 | source = "registry+https://github.com/rust-lang/crates.io-index" 872 | checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" 873 | dependencies = [ 874 | "cfg-if", 875 | "libc", 876 | "wasi", 877 | ] 878 | 879 | [[package]] 880 | name = "gloo-timers" 881 | version = "0.2.4" 882 | source = "registry+https://github.com/rust-lang/crates.io-index" 883 | checksum = "5fb7d06c1c8cc2a29bee7ec961009a0b2caa0793ee4900c2ffb348734ba1c8f9" 884 | dependencies = [ 885 | "futures-channel", 886 | "futures-core", 887 | "js-sys", 888 | "wasm-bindgen", 889 | ] 890 | 891 | [[package]] 892 | name = "h2" 893 | version = "0.3.14" 894 | source = "registry+https://github.com/rust-lang/crates.io-index" 895 | checksum = "5ca32592cf21ac7ccab1825cd87f6c9b3d9022c44d086172ed0966bec8af30be" 896 | dependencies = [ 897 | "bytes", 898 | "fnv", 899 | "futures-core", 900 | "futures-sink", 901 | "futures-util", 902 | "http", 903 | "indexmap", 904 | "slab", 905 | "tokio", 906 | "tokio-util", 907 | "tracing", 908 | ] 909 | 910 | [[package]] 911 | name = "hashbrown" 912 | version = "0.12.3" 913 | source = "registry+https://github.com/rust-lang/crates.io-index" 914 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 915 | dependencies = [ 916 | "ahash", 917 | ] 918 | 919 | [[package]] 920 | name = "hashlink" 921 | version = "0.8.1" 922 | source = "registry+https://github.com/rust-lang/crates.io-index" 923 | checksum = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa" 924 | dependencies = [ 925 | "hashbrown", 926 | ] 927 | 928 | [[package]] 929 | name = "heck" 930 | version = "0.4.0" 931 | source = "registry+https://github.com/rust-lang/crates.io-index" 932 | checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" 933 | dependencies = [ 934 | "unicode-segmentation", 935 | ] 936 | 937 | [[package]] 938 | name = "hermit-abi" 939 | version = "0.1.19" 940 | source = "registry+https://github.com/rust-lang/crates.io-index" 941 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 942 | dependencies = [ 943 | "libc", 944 | ] 945 | 946 | [[package]] 947 | name = "hex" 948 | version = "0.4.3" 949 | source = "registry+https://github.com/rust-lang/crates.io-index" 950 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 951 | 952 | [[package]] 953 | name = "hkdf" 954 | version = "0.12.3" 955 | source = "registry+https://github.com/rust-lang/crates.io-index" 956 | checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" 957 | dependencies = [ 958 | "hmac", 959 | ] 960 | 961 | [[package]] 962 | name = "hmac" 963 | version = "0.12.1" 964 | source = "registry+https://github.com/rust-lang/crates.io-index" 965 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 966 | dependencies = [ 967 | "digest", 968 | ] 969 | 970 | [[package]] 971 | name = "http" 972 | version = "0.2.8" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" 975 | dependencies = [ 976 | "bytes", 977 | "fnv", 978 | "itoa", 979 | ] 980 | 981 | [[package]] 982 | name = "httparse" 983 | version = "1.8.0" 984 | source = "registry+https://github.com/rust-lang/crates.io-index" 985 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 986 | 987 | [[package]] 988 | name = "httpdate" 989 | version = "1.0.2" 990 | source = "registry+https://github.com/rust-lang/crates.io-index" 991 | checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" 992 | 993 | [[package]] 994 | name = "idna" 995 | version = "0.3.0" 996 | source = "registry+https://github.com/rust-lang/crates.io-index" 997 | checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" 998 | dependencies = [ 999 | "unicode-bidi", 1000 | "unicode-normalization", 1001 | ] 1002 | 1003 | [[package]] 1004 | name = "indexmap" 1005 | version = "1.9.1" 1006 | source = "registry+https://github.com/rust-lang/crates.io-index" 1007 | checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" 1008 | dependencies = [ 1009 | "autocfg", 1010 | "hashbrown", 1011 | ] 1012 | 1013 | [[package]] 1014 | name = "instant" 1015 | version = "0.1.12" 1016 | source = "registry+https://github.com/rust-lang/crates.io-index" 1017 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 1018 | dependencies = [ 1019 | "cfg-if", 1020 | ] 1021 | 1022 | [[package]] 1023 | name = "itertools" 1024 | version = "0.10.5" 1025 | source = "registry+https://github.com/rust-lang/crates.io-index" 1026 | checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" 1027 | dependencies = [ 1028 | "either", 1029 | ] 1030 | 1031 | [[package]] 1032 | name = "itoa" 1033 | version = "1.0.4" 1034 | source = "registry+https://github.com/rust-lang/crates.io-index" 1035 | checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" 1036 | 1037 | [[package]] 1038 | name = "jobserver" 1039 | version = "0.1.25" 1040 | source = "registry+https://github.com/rust-lang/crates.io-index" 1041 | checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" 1042 | dependencies = [ 1043 | "libc", 1044 | ] 1045 | 1046 | [[package]] 1047 | name = "js-sys" 1048 | version = "0.3.60" 1049 | source = "registry+https://github.com/rust-lang/crates.io-index" 1050 | checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" 1051 | dependencies = [ 1052 | "wasm-bindgen", 1053 | ] 1054 | 1055 | [[package]] 1056 | name = "kv-log-macro" 1057 | version = "1.0.7" 1058 | source = "registry+https://github.com/rust-lang/crates.io-index" 1059 | checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" 1060 | dependencies = [ 1061 | "log", 1062 | ] 1063 | 1064 | [[package]] 1065 | name = "language-tags" 1066 | version = "0.3.2" 1067 | source = "registry+https://github.com/rust-lang/crates.io-index" 1068 | checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" 1069 | 1070 | [[package]] 1071 | name = "lazy_static" 1072 | version = "1.4.0" 1073 | source = "registry+https://github.com/rust-lang/crates.io-index" 1074 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1075 | 1076 | [[package]] 1077 | name = "libc" 1078 | version = "0.2.135" 1079 | source = "registry+https://github.com/rust-lang/crates.io-index" 1080 | checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c" 1081 | 1082 | [[package]] 1083 | name = "local-channel" 1084 | version = "0.1.3" 1085 | source = "registry+https://github.com/rust-lang/crates.io-index" 1086 | checksum = "7f303ec0e94c6c54447f84f3b0ef7af769858a9c4ef56ef2a986d3dcd4c3fc9c" 1087 | dependencies = [ 1088 | "futures-core", 1089 | "futures-sink", 1090 | "futures-util", 1091 | "local-waker", 1092 | ] 1093 | 1094 | [[package]] 1095 | name = "local-waker" 1096 | version = "0.1.3" 1097 | source = "registry+https://github.com/rust-lang/crates.io-index" 1098 | checksum = "e34f76eb3611940e0e7d53a9aaa4e6a3151f69541a282fd0dad5571420c53ff1" 1099 | 1100 | [[package]] 1101 | name = "lock_api" 1102 | version = "0.4.9" 1103 | source = "registry+https://github.com/rust-lang/crates.io-index" 1104 | checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" 1105 | dependencies = [ 1106 | "autocfg", 1107 | "scopeguard", 1108 | ] 1109 | 1110 | [[package]] 1111 | name = "log" 1112 | version = "0.4.17" 1113 | source = "registry+https://github.com/rust-lang/crates.io-index" 1114 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 1115 | dependencies = [ 1116 | "cfg-if", 1117 | "value-bag", 1118 | ] 1119 | 1120 | [[package]] 1121 | name = "md-5" 1122 | version = "0.10.5" 1123 | source = "registry+https://github.com/rust-lang/crates.io-index" 1124 | checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" 1125 | dependencies = [ 1126 | "digest", 1127 | ] 1128 | 1129 | [[package]] 1130 | name = "memchr" 1131 | version = "2.5.0" 1132 | source = "registry+https://github.com/rust-lang/crates.io-index" 1133 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 1134 | 1135 | [[package]] 1136 | name = "mime" 1137 | version = "0.3.16" 1138 | source = "registry+https://github.com/rust-lang/crates.io-index" 1139 | checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" 1140 | 1141 | [[package]] 1142 | name = "minimal-lexical" 1143 | version = "0.2.1" 1144 | source = "registry+https://github.com/rust-lang/crates.io-index" 1145 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1146 | 1147 | [[package]] 1148 | name = "miniz_oxide" 1149 | version = "0.5.4" 1150 | source = "registry+https://github.com/rust-lang/crates.io-index" 1151 | checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" 1152 | dependencies = [ 1153 | "adler", 1154 | ] 1155 | 1156 | [[package]] 1157 | name = "mio" 1158 | version = "0.8.4" 1159 | source = "registry+https://github.com/rust-lang/crates.io-index" 1160 | checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" 1161 | dependencies = [ 1162 | "libc", 1163 | "log", 1164 | "wasi", 1165 | "windows-sys", 1166 | ] 1167 | 1168 | [[package]] 1169 | name = "native-tls" 1170 | version = "0.2.10" 1171 | source = "registry+https://github.com/rust-lang/crates.io-index" 1172 | checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" 1173 | dependencies = [ 1174 | "lazy_static", 1175 | "libc", 1176 | "log", 1177 | "openssl", 1178 | "openssl-probe", 1179 | "openssl-sys", 1180 | "schannel", 1181 | "security-framework", 1182 | "security-framework-sys", 1183 | "tempfile", 1184 | ] 1185 | 1186 | [[package]] 1187 | name = "nom" 1188 | version = "7.1.1" 1189 | source = "registry+https://github.com/rust-lang/crates.io-index" 1190 | checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" 1191 | dependencies = [ 1192 | "memchr", 1193 | "minimal-lexical", 1194 | ] 1195 | 1196 | [[package]] 1197 | name = "num-traits" 1198 | version = "0.2.15" 1199 | source = "registry+https://github.com/rust-lang/crates.io-index" 1200 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 1201 | dependencies = [ 1202 | "autocfg", 1203 | ] 1204 | 1205 | [[package]] 1206 | name = "num_cpus" 1207 | version = "1.13.1" 1208 | source = "registry+https://github.com/rust-lang/crates.io-index" 1209 | checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" 1210 | dependencies = [ 1211 | "hermit-abi", 1212 | "libc", 1213 | ] 1214 | 1215 | [[package]] 1216 | name = "num_threads" 1217 | version = "0.1.6" 1218 | source = "registry+https://github.com/rust-lang/crates.io-index" 1219 | checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" 1220 | dependencies = [ 1221 | "libc", 1222 | ] 1223 | 1224 | [[package]] 1225 | name = "once_cell" 1226 | version = "1.15.0" 1227 | source = "registry+https://github.com/rust-lang/crates.io-index" 1228 | checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" 1229 | 1230 | [[package]] 1231 | name = "openssl" 1232 | version = "0.10.42" 1233 | source = "registry+https://github.com/rust-lang/crates.io-index" 1234 | checksum = "12fc0523e3bd51a692c8850d075d74dc062ccf251c0110668cbd921917118a13" 1235 | dependencies = [ 1236 | "bitflags", 1237 | "cfg-if", 1238 | "foreign-types", 1239 | "libc", 1240 | "once_cell", 1241 | "openssl-macros", 1242 | "openssl-sys", 1243 | ] 1244 | 1245 | [[package]] 1246 | name = "openssl-macros" 1247 | version = "0.1.0" 1248 | source = "registry+https://github.com/rust-lang/crates.io-index" 1249 | checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" 1250 | dependencies = [ 1251 | "proc-macro2", 1252 | "quote", 1253 | "syn", 1254 | ] 1255 | 1256 | [[package]] 1257 | name = "openssl-probe" 1258 | version = "0.1.5" 1259 | source = "registry+https://github.com/rust-lang/crates.io-index" 1260 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 1261 | 1262 | [[package]] 1263 | name = "openssl-sys" 1264 | version = "0.9.76" 1265 | source = "registry+https://github.com/rust-lang/crates.io-index" 1266 | checksum = "5230151e44c0f05157effb743e8d517472843121cf9243e8b81393edb5acd9ce" 1267 | dependencies = [ 1268 | "autocfg", 1269 | "cc", 1270 | "libc", 1271 | "pkg-config", 1272 | "vcpkg", 1273 | ] 1274 | 1275 | [[package]] 1276 | name = "parking" 1277 | version = "2.0.0" 1278 | source = "registry+https://github.com/rust-lang/crates.io-index" 1279 | checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" 1280 | 1281 | [[package]] 1282 | name = "parking_lot" 1283 | version = "0.11.2" 1284 | source = "registry+https://github.com/rust-lang/crates.io-index" 1285 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" 1286 | dependencies = [ 1287 | "instant", 1288 | "lock_api", 1289 | "parking_lot_core 0.8.5", 1290 | ] 1291 | 1292 | [[package]] 1293 | name = "parking_lot" 1294 | version = "0.12.1" 1295 | source = "registry+https://github.com/rust-lang/crates.io-index" 1296 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 1297 | dependencies = [ 1298 | "lock_api", 1299 | "parking_lot_core 0.9.3", 1300 | ] 1301 | 1302 | [[package]] 1303 | name = "parking_lot_core" 1304 | version = "0.8.5" 1305 | source = "registry+https://github.com/rust-lang/crates.io-index" 1306 | checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" 1307 | dependencies = [ 1308 | "cfg-if", 1309 | "instant", 1310 | "libc", 1311 | "redox_syscall", 1312 | "smallvec", 1313 | "winapi", 1314 | ] 1315 | 1316 | [[package]] 1317 | name = "parking_lot_core" 1318 | version = "0.9.3" 1319 | source = "registry+https://github.com/rust-lang/crates.io-index" 1320 | checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" 1321 | dependencies = [ 1322 | "cfg-if", 1323 | "libc", 1324 | "redox_syscall", 1325 | "smallvec", 1326 | "windows-sys", 1327 | ] 1328 | 1329 | [[package]] 1330 | name = "paste" 1331 | version = "1.0.9" 1332 | source = "registry+https://github.com/rust-lang/crates.io-index" 1333 | checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1" 1334 | 1335 | [[package]] 1336 | name = "percent-encoding" 1337 | version = "2.2.0" 1338 | source = "registry+https://github.com/rust-lang/crates.io-index" 1339 | checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" 1340 | 1341 | [[package]] 1342 | name = "pin-project-lite" 1343 | version = "0.2.9" 1344 | source = "registry+https://github.com/rust-lang/crates.io-index" 1345 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" 1346 | 1347 | [[package]] 1348 | name = "pin-utils" 1349 | version = "0.1.0" 1350 | source = "registry+https://github.com/rust-lang/crates.io-index" 1351 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1352 | 1353 | [[package]] 1354 | name = "pkg-config" 1355 | version = "0.3.25" 1356 | source = "registry+https://github.com/rust-lang/crates.io-index" 1357 | checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" 1358 | 1359 | [[package]] 1360 | name = "polling" 1361 | version = "2.3.0" 1362 | source = "registry+https://github.com/rust-lang/crates.io-index" 1363 | checksum = "899b00b9c8ab553c743b3e11e87c5c7d423b2a2de229ba95b24a756344748011" 1364 | dependencies = [ 1365 | "autocfg", 1366 | "cfg-if", 1367 | "libc", 1368 | "log", 1369 | "wepoll-ffi", 1370 | "winapi", 1371 | ] 1372 | 1373 | [[package]] 1374 | name = "ppv-lite86" 1375 | version = "0.2.16" 1376 | source = "registry+https://github.com/rust-lang/crates.io-index" 1377 | checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" 1378 | 1379 | [[package]] 1380 | name = "proc-macro2" 1381 | version = "1.0.46" 1382 | source = "registry+https://github.com/rust-lang/crates.io-index" 1383 | checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b" 1384 | dependencies = [ 1385 | "unicode-ident", 1386 | ] 1387 | 1388 | [[package]] 1389 | name = "quote" 1390 | version = "1.0.21" 1391 | source = "registry+https://github.com/rust-lang/crates.io-index" 1392 | checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" 1393 | dependencies = [ 1394 | "proc-macro2", 1395 | ] 1396 | 1397 | [[package]] 1398 | name = "rand" 1399 | version = "0.8.5" 1400 | source = "registry+https://github.com/rust-lang/crates.io-index" 1401 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1402 | dependencies = [ 1403 | "libc", 1404 | "rand_chacha", 1405 | "rand_core", 1406 | ] 1407 | 1408 | [[package]] 1409 | name = "rand_chacha" 1410 | version = "0.3.1" 1411 | source = "registry+https://github.com/rust-lang/crates.io-index" 1412 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1413 | dependencies = [ 1414 | "ppv-lite86", 1415 | "rand_core", 1416 | ] 1417 | 1418 | [[package]] 1419 | name = "rand_core" 1420 | version = "0.6.4" 1421 | source = "registry+https://github.com/rust-lang/crates.io-index" 1422 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1423 | dependencies = [ 1424 | "getrandom", 1425 | ] 1426 | 1427 | [[package]] 1428 | name = "redox_syscall" 1429 | version = "0.2.16" 1430 | source = "registry+https://github.com/rust-lang/crates.io-index" 1431 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 1432 | dependencies = [ 1433 | "bitflags", 1434 | ] 1435 | 1436 | [[package]] 1437 | name = "redox_users" 1438 | version = "0.4.3" 1439 | source = "registry+https://github.com/rust-lang/crates.io-index" 1440 | checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" 1441 | dependencies = [ 1442 | "getrandom", 1443 | "redox_syscall", 1444 | "thiserror", 1445 | ] 1446 | 1447 | [[package]] 1448 | name = "regex" 1449 | version = "1.6.0" 1450 | source = "registry+https://github.com/rust-lang/crates.io-index" 1451 | checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" 1452 | dependencies = [ 1453 | "aho-corasick", 1454 | "memchr", 1455 | "regex-syntax", 1456 | ] 1457 | 1458 | [[package]] 1459 | name = "regex-syntax" 1460 | version = "0.6.27" 1461 | source = "registry+https://github.com/rust-lang/crates.io-index" 1462 | checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" 1463 | 1464 | [[package]] 1465 | name = "remove_dir_all" 1466 | version = "0.5.3" 1467 | source = "registry+https://github.com/rust-lang/crates.io-index" 1468 | checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" 1469 | dependencies = [ 1470 | "winapi", 1471 | ] 1472 | 1473 | [[package]] 1474 | name = "rust-sqlx" 1475 | version = "0.1.0" 1476 | dependencies = [ 1477 | "actix", 1478 | "actix-web", 1479 | "dotenv", 1480 | "serde", 1481 | "serde_json", 1482 | "sqlx", 1483 | ] 1484 | 1485 | [[package]] 1486 | name = "rustc_version" 1487 | version = "0.4.0" 1488 | source = "registry+https://github.com/rust-lang/crates.io-index" 1489 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 1490 | dependencies = [ 1491 | "semver", 1492 | ] 1493 | 1494 | [[package]] 1495 | name = "ryu" 1496 | version = "1.0.11" 1497 | source = "registry+https://github.com/rust-lang/crates.io-index" 1498 | checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" 1499 | 1500 | [[package]] 1501 | name = "schannel" 1502 | version = "0.1.20" 1503 | source = "registry+https://github.com/rust-lang/crates.io-index" 1504 | checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" 1505 | dependencies = [ 1506 | "lazy_static", 1507 | "windows-sys", 1508 | ] 1509 | 1510 | [[package]] 1511 | name = "scopeguard" 1512 | version = "1.1.0" 1513 | source = "registry+https://github.com/rust-lang/crates.io-index" 1514 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 1515 | 1516 | [[package]] 1517 | name = "security-framework" 1518 | version = "2.7.0" 1519 | source = "registry+https://github.com/rust-lang/crates.io-index" 1520 | checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" 1521 | dependencies = [ 1522 | "bitflags", 1523 | "core-foundation", 1524 | "core-foundation-sys", 1525 | "libc", 1526 | "security-framework-sys", 1527 | ] 1528 | 1529 | [[package]] 1530 | name = "security-framework-sys" 1531 | version = "2.6.1" 1532 | source = "registry+https://github.com/rust-lang/crates.io-index" 1533 | checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" 1534 | dependencies = [ 1535 | "core-foundation-sys", 1536 | "libc", 1537 | ] 1538 | 1539 | [[package]] 1540 | name = "semver" 1541 | version = "1.0.14" 1542 | source = "registry+https://github.com/rust-lang/crates.io-index" 1543 | checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" 1544 | 1545 | [[package]] 1546 | name = "serde" 1547 | version = "1.0.145" 1548 | source = "registry+https://github.com/rust-lang/crates.io-index" 1549 | checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" 1550 | dependencies = [ 1551 | "serde_derive", 1552 | ] 1553 | 1554 | [[package]] 1555 | name = "serde_derive" 1556 | version = "1.0.145" 1557 | source = "registry+https://github.com/rust-lang/crates.io-index" 1558 | checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" 1559 | dependencies = [ 1560 | "proc-macro2", 1561 | "quote", 1562 | "syn", 1563 | ] 1564 | 1565 | [[package]] 1566 | name = "serde_json" 1567 | version = "1.0.86" 1568 | source = "registry+https://github.com/rust-lang/crates.io-index" 1569 | checksum = "41feea4228a6f1cd09ec7a3593a682276702cd67b5273544757dae23c096f074" 1570 | dependencies = [ 1571 | "itoa", 1572 | "ryu", 1573 | "serde", 1574 | ] 1575 | 1576 | [[package]] 1577 | name = "serde_urlencoded" 1578 | version = "0.7.1" 1579 | source = "registry+https://github.com/rust-lang/crates.io-index" 1580 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1581 | dependencies = [ 1582 | "form_urlencoded", 1583 | "itoa", 1584 | "ryu", 1585 | "serde", 1586 | ] 1587 | 1588 | [[package]] 1589 | name = "sha1" 1590 | version = "0.10.5" 1591 | source = "registry+https://github.com/rust-lang/crates.io-index" 1592 | checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" 1593 | dependencies = [ 1594 | "cfg-if", 1595 | "cpufeatures", 1596 | "digest", 1597 | ] 1598 | 1599 | [[package]] 1600 | name = "sha2" 1601 | version = "0.10.6" 1602 | source = "registry+https://github.com/rust-lang/crates.io-index" 1603 | checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" 1604 | dependencies = [ 1605 | "cfg-if", 1606 | "cpufeatures", 1607 | "digest", 1608 | ] 1609 | 1610 | [[package]] 1611 | name = "signal-hook" 1612 | version = "0.3.14" 1613 | source = "registry+https://github.com/rust-lang/crates.io-index" 1614 | checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d" 1615 | dependencies = [ 1616 | "libc", 1617 | "signal-hook-registry", 1618 | ] 1619 | 1620 | [[package]] 1621 | name = "signal-hook-registry" 1622 | version = "1.4.0" 1623 | source = "registry+https://github.com/rust-lang/crates.io-index" 1624 | checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" 1625 | dependencies = [ 1626 | "libc", 1627 | ] 1628 | 1629 | [[package]] 1630 | name = "slab" 1631 | version = "0.4.7" 1632 | source = "registry+https://github.com/rust-lang/crates.io-index" 1633 | checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" 1634 | dependencies = [ 1635 | "autocfg", 1636 | ] 1637 | 1638 | [[package]] 1639 | name = "smallvec" 1640 | version = "1.10.0" 1641 | source = "registry+https://github.com/rust-lang/crates.io-index" 1642 | checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" 1643 | 1644 | [[package]] 1645 | name = "socket2" 1646 | version = "0.4.7" 1647 | source = "registry+https://github.com/rust-lang/crates.io-index" 1648 | checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" 1649 | dependencies = [ 1650 | "libc", 1651 | "winapi", 1652 | ] 1653 | 1654 | [[package]] 1655 | name = "sqlformat" 1656 | version = "0.2.0" 1657 | source = "registry+https://github.com/rust-lang/crates.io-index" 1658 | checksum = "f87e292b4291f154971a43c3774364e2cbcaec599d3f5bf6fa9d122885dbc38a" 1659 | dependencies = [ 1660 | "itertools", 1661 | "nom", 1662 | "unicode_categories", 1663 | ] 1664 | 1665 | [[package]] 1666 | name = "sqlx" 1667 | version = "0.6.2" 1668 | source = "registry+https://github.com/rust-lang/crates.io-index" 1669 | checksum = "9249290c05928352f71c077cc44a464d880c63f26f7534728cca008e135c0428" 1670 | dependencies = [ 1671 | "sqlx-core", 1672 | "sqlx-macros", 1673 | ] 1674 | 1675 | [[package]] 1676 | name = "sqlx-core" 1677 | version = "0.6.2" 1678 | source = "registry+https://github.com/rust-lang/crates.io-index" 1679 | checksum = "dcbc16ddba161afc99e14d1713a453747a2b07fc097d2009f4c300ec99286105" 1680 | dependencies = [ 1681 | "ahash", 1682 | "atoi", 1683 | "base64", 1684 | "bitflags", 1685 | "byteorder", 1686 | "bytes", 1687 | "crc", 1688 | "crossbeam-queue", 1689 | "dirs", 1690 | "dotenvy", 1691 | "either", 1692 | "event-listener", 1693 | "futures-channel", 1694 | "futures-core", 1695 | "futures-intrusive", 1696 | "futures-util", 1697 | "hashlink", 1698 | "hex", 1699 | "hkdf", 1700 | "hmac", 1701 | "indexmap", 1702 | "itoa", 1703 | "libc", 1704 | "log", 1705 | "md-5", 1706 | "memchr", 1707 | "once_cell", 1708 | "paste", 1709 | "percent-encoding", 1710 | "rand", 1711 | "serde", 1712 | "serde_json", 1713 | "sha1", 1714 | "sha2", 1715 | "smallvec", 1716 | "sqlformat", 1717 | "sqlx-rt", 1718 | "stringprep", 1719 | "thiserror", 1720 | "url", 1721 | "whoami", 1722 | ] 1723 | 1724 | [[package]] 1725 | name = "sqlx-macros" 1726 | version = "0.6.2" 1727 | source = "registry+https://github.com/rust-lang/crates.io-index" 1728 | checksum = "b850fa514dc11f2ee85be9d055c512aa866746adfacd1cb42d867d68e6a5b0d9" 1729 | dependencies = [ 1730 | "dotenvy", 1731 | "either", 1732 | "heck", 1733 | "once_cell", 1734 | "proc-macro2", 1735 | "quote", 1736 | "sha2", 1737 | "sqlx-core", 1738 | "sqlx-rt", 1739 | "syn", 1740 | "url", 1741 | ] 1742 | 1743 | [[package]] 1744 | name = "sqlx-rt" 1745 | version = "0.6.2" 1746 | source = "registry+https://github.com/rust-lang/crates.io-index" 1747 | checksum = "24c5b2d25fa654cc5f841750b8e1cdedbe21189bf9a9382ee90bfa9dd3562396" 1748 | dependencies = [ 1749 | "async-native-tls", 1750 | "async-std", 1751 | "native-tls", 1752 | ] 1753 | 1754 | [[package]] 1755 | name = "stringprep" 1756 | version = "0.1.2" 1757 | source = "registry+https://github.com/rust-lang/crates.io-index" 1758 | checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1" 1759 | dependencies = [ 1760 | "unicode-bidi", 1761 | "unicode-normalization", 1762 | ] 1763 | 1764 | [[package]] 1765 | name = "subtle" 1766 | version = "2.4.1" 1767 | source = "registry+https://github.com/rust-lang/crates.io-index" 1768 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" 1769 | 1770 | [[package]] 1771 | name = "syn" 1772 | version = "1.0.102" 1773 | source = "registry+https://github.com/rust-lang/crates.io-index" 1774 | checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1" 1775 | dependencies = [ 1776 | "proc-macro2", 1777 | "quote", 1778 | "unicode-ident", 1779 | ] 1780 | 1781 | [[package]] 1782 | name = "tempfile" 1783 | version = "3.3.0" 1784 | source = "registry+https://github.com/rust-lang/crates.io-index" 1785 | checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" 1786 | dependencies = [ 1787 | "cfg-if", 1788 | "fastrand", 1789 | "libc", 1790 | "redox_syscall", 1791 | "remove_dir_all", 1792 | "winapi", 1793 | ] 1794 | 1795 | [[package]] 1796 | name = "thiserror" 1797 | version = "1.0.37" 1798 | source = "registry+https://github.com/rust-lang/crates.io-index" 1799 | checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" 1800 | dependencies = [ 1801 | "thiserror-impl", 1802 | ] 1803 | 1804 | [[package]] 1805 | name = "thiserror-impl" 1806 | version = "1.0.37" 1807 | source = "registry+https://github.com/rust-lang/crates.io-index" 1808 | checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" 1809 | dependencies = [ 1810 | "proc-macro2", 1811 | "quote", 1812 | "syn", 1813 | ] 1814 | 1815 | [[package]] 1816 | name = "time" 1817 | version = "0.3.15" 1818 | source = "registry+https://github.com/rust-lang/crates.io-index" 1819 | checksum = "d634a985c4d4238ec39cacaed2e7ae552fbd3c476b552c1deac3021b7d7eaf0c" 1820 | dependencies = [ 1821 | "itoa", 1822 | "libc", 1823 | "num_threads", 1824 | "time-macros", 1825 | ] 1826 | 1827 | [[package]] 1828 | name = "time-macros" 1829 | version = "0.2.4" 1830 | source = "registry+https://github.com/rust-lang/crates.io-index" 1831 | checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" 1832 | 1833 | [[package]] 1834 | name = "tinyvec" 1835 | version = "1.6.0" 1836 | source = "registry+https://github.com/rust-lang/crates.io-index" 1837 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 1838 | dependencies = [ 1839 | "tinyvec_macros", 1840 | ] 1841 | 1842 | [[package]] 1843 | name = "tinyvec_macros" 1844 | version = "0.1.0" 1845 | source = "registry+https://github.com/rust-lang/crates.io-index" 1846 | checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" 1847 | 1848 | [[package]] 1849 | name = "tokio" 1850 | version = "1.21.2" 1851 | source = "registry+https://github.com/rust-lang/crates.io-index" 1852 | checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099" 1853 | dependencies = [ 1854 | "autocfg", 1855 | "bytes", 1856 | "libc", 1857 | "memchr", 1858 | "mio", 1859 | "parking_lot 0.12.1", 1860 | "pin-project-lite", 1861 | "signal-hook-registry", 1862 | "socket2", 1863 | "winapi", 1864 | ] 1865 | 1866 | [[package]] 1867 | name = "tokio-util" 1868 | version = "0.7.4" 1869 | source = "registry+https://github.com/rust-lang/crates.io-index" 1870 | checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" 1871 | dependencies = [ 1872 | "bytes", 1873 | "futures-core", 1874 | "futures-sink", 1875 | "pin-project-lite", 1876 | "tokio", 1877 | "tracing", 1878 | ] 1879 | 1880 | [[package]] 1881 | name = "tracing" 1882 | version = "0.1.37" 1883 | source = "registry+https://github.com/rust-lang/crates.io-index" 1884 | checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" 1885 | dependencies = [ 1886 | "cfg-if", 1887 | "log", 1888 | "pin-project-lite", 1889 | "tracing-core", 1890 | ] 1891 | 1892 | [[package]] 1893 | name = "tracing-core" 1894 | version = "0.1.30" 1895 | source = "registry+https://github.com/rust-lang/crates.io-index" 1896 | checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" 1897 | dependencies = [ 1898 | "once_cell", 1899 | ] 1900 | 1901 | [[package]] 1902 | name = "typenum" 1903 | version = "1.15.0" 1904 | source = "registry+https://github.com/rust-lang/crates.io-index" 1905 | checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" 1906 | 1907 | [[package]] 1908 | name = "unicode-bidi" 1909 | version = "0.3.8" 1910 | source = "registry+https://github.com/rust-lang/crates.io-index" 1911 | checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" 1912 | 1913 | [[package]] 1914 | name = "unicode-ident" 1915 | version = "1.0.5" 1916 | source = "registry+https://github.com/rust-lang/crates.io-index" 1917 | checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" 1918 | 1919 | [[package]] 1920 | name = "unicode-normalization" 1921 | version = "0.1.22" 1922 | source = "registry+https://github.com/rust-lang/crates.io-index" 1923 | checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" 1924 | dependencies = [ 1925 | "tinyvec", 1926 | ] 1927 | 1928 | [[package]] 1929 | name = "unicode-segmentation" 1930 | version = "1.10.0" 1931 | source = "registry+https://github.com/rust-lang/crates.io-index" 1932 | checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" 1933 | 1934 | [[package]] 1935 | name = "unicode_categories" 1936 | version = "0.1.1" 1937 | source = "registry+https://github.com/rust-lang/crates.io-index" 1938 | checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" 1939 | 1940 | [[package]] 1941 | name = "url" 1942 | version = "2.3.1" 1943 | source = "registry+https://github.com/rust-lang/crates.io-index" 1944 | checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" 1945 | dependencies = [ 1946 | "form_urlencoded", 1947 | "idna", 1948 | "percent-encoding", 1949 | ] 1950 | 1951 | [[package]] 1952 | name = "value-bag" 1953 | version = "1.0.0-alpha.9" 1954 | source = "registry+https://github.com/rust-lang/crates.io-index" 1955 | checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55" 1956 | dependencies = [ 1957 | "ctor", 1958 | "version_check", 1959 | ] 1960 | 1961 | [[package]] 1962 | name = "vcpkg" 1963 | version = "0.2.15" 1964 | source = "registry+https://github.com/rust-lang/crates.io-index" 1965 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 1966 | 1967 | [[package]] 1968 | name = "version_check" 1969 | version = "0.9.4" 1970 | source = "registry+https://github.com/rust-lang/crates.io-index" 1971 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1972 | 1973 | [[package]] 1974 | name = "waker-fn" 1975 | version = "1.1.0" 1976 | source = "registry+https://github.com/rust-lang/crates.io-index" 1977 | checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" 1978 | 1979 | [[package]] 1980 | name = "wasi" 1981 | version = "0.11.0+wasi-snapshot-preview1" 1982 | source = "registry+https://github.com/rust-lang/crates.io-index" 1983 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1984 | 1985 | [[package]] 1986 | name = "wasm-bindgen" 1987 | version = "0.2.83" 1988 | source = "registry+https://github.com/rust-lang/crates.io-index" 1989 | checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" 1990 | dependencies = [ 1991 | "cfg-if", 1992 | "wasm-bindgen-macro", 1993 | ] 1994 | 1995 | [[package]] 1996 | name = "wasm-bindgen-backend" 1997 | version = "0.2.83" 1998 | source = "registry+https://github.com/rust-lang/crates.io-index" 1999 | checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" 2000 | dependencies = [ 2001 | "bumpalo", 2002 | "log", 2003 | "once_cell", 2004 | "proc-macro2", 2005 | "quote", 2006 | "syn", 2007 | "wasm-bindgen-shared", 2008 | ] 2009 | 2010 | [[package]] 2011 | name = "wasm-bindgen-futures" 2012 | version = "0.4.33" 2013 | source = "registry+https://github.com/rust-lang/crates.io-index" 2014 | checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" 2015 | dependencies = [ 2016 | "cfg-if", 2017 | "js-sys", 2018 | "wasm-bindgen", 2019 | "web-sys", 2020 | ] 2021 | 2022 | [[package]] 2023 | name = "wasm-bindgen-macro" 2024 | version = "0.2.83" 2025 | source = "registry+https://github.com/rust-lang/crates.io-index" 2026 | checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" 2027 | dependencies = [ 2028 | "quote", 2029 | "wasm-bindgen-macro-support", 2030 | ] 2031 | 2032 | [[package]] 2033 | name = "wasm-bindgen-macro-support" 2034 | version = "0.2.83" 2035 | source = "registry+https://github.com/rust-lang/crates.io-index" 2036 | checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" 2037 | dependencies = [ 2038 | "proc-macro2", 2039 | "quote", 2040 | "syn", 2041 | "wasm-bindgen-backend", 2042 | "wasm-bindgen-shared", 2043 | ] 2044 | 2045 | [[package]] 2046 | name = "wasm-bindgen-shared" 2047 | version = "0.2.83" 2048 | source = "registry+https://github.com/rust-lang/crates.io-index" 2049 | checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" 2050 | 2051 | [[package]] 2052 | name = "web-sys" 2053 | version = "0.3.60" 2054 | source = "registry+https://github.com/rust-lang/crates.io-index" 2055 | checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" 2056 | dependencies = [ 2057 | "js-sys", 2058 | "wasm-bindgen", 2059 | ] 2060 | 2061 | [[package]] 2062 | name = "wepoll-ffi" 2063 | version = "0.1.2" 2064 | source = "registry+https://github.com/rust-lang/crates.io-index" 2065 | checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" 2066 | dependencies = [ 2067 | "cc", 2068 | ] 2069 | 2070 | [[package]] 2071 | name = "whoami" 2072 | version = "1.2.3" 2073 | source = "registry+https://github.com/rust-lang/crates.io-index" 2074 | checksum = "d6631b6a2fd59b1841b622e8f1a7ad241ef0a46f2d580464ce8140ac94cbd571" 2075 | dependencies = [ 2076 | "bumpalo", 2077 | "wasm-bindgen", 2078 | "web-sys", 2079 | ] 2080 | 2081 | [[package]] 2082 | name = "winapi" 2083 | version = "0.3.9" 2084 | source = "registry+https://github.com/rust-lang/crates.io-index" 2085 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2086 | dependencies = [ 2087 | "winapi-i686-pc-windows-gnu", 2088 | "winapi-x86_64-pc-windows-gnu", 2089 | ] 2090 | 2091 | [[package]] 2092 | name = "winapi-i686-pc-windows-gnu" 2093 | version = "0.4.0" 2094 | source = "registry+https://github.com/rust-lang/crates.io-index" 2095 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2096 | 2097 | [[package]] 2098 | name = "winapi-x86_64-pc-windows-gnu" 2099 | version = "0.4.0" 2100 | source = "registry+https://github.com/rust-lang/crates.io-index" 2101 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2102 | 2103 | [[package]] 2104 | name = "windows-sys" 2105 | version = "0.36.1" 2106 | source = "registry+https://github.com/rust-lang/crates.io-index" 2107 | checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" 2108 | dependencies = [ 2109 | "windows_aarch64_msvc", 2110 | "windows_i686_gnu", 2111 | "windows_i686_msvc", 2112 | "windows_x86_64_gnu", 2113 | "windows_x86_64_msvc", 2114 | ] 2115 | 2116 | [[package]] 2117 | name = "windows_aarch64_msvc" 2118 | version = "0.36.1" 2119 | source = "registry+https://github.com/rust-lang/crates.io-index" 2120 | checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" 2121 | 2122 | [[package]] 2123 | name = "windows_i686_gnu" 2124 | version = "0.36.1" 2125 | source = "registry+https://github.com/rust-lang/crates.io-index" 2126 | checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" 2127 | 2128 | [[package]] 2129 | name = "windows_i686_msvc" 2130 | version = "0.36.1" 2131 | source = "registry+https://github.com/rust-lang/crates.io-index" 2132 | checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" 2133 | 2134 | [[package]] 2135 | name = "windows_x86_64_gnu" 2136 | version = "0.36.1" 2137 | source = "registry+https://github.com/rust-lang/crates.io-index" 2138 | checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" 2139 | 2140 | [[package]] 2141 | name = "windows_x86_64_msvc" 2142 | version = "0.36.1" 2143 | source = "registry+https://github.com/rust-lang/crates.io-index" 2144 | checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" 2145 | 2146 | [[package]] 2147 | name = "zstd" 2148 | version = "0.11.2+zstd.1.5.2" 2149 | source = "registry+https://github.com/rust-lang/crates.io-index" 2150 | checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" 2151 | dependencies = [ 2152 | "zstd-safe", 2153 | ] 2154 | 2155 | [[package]] 2156 | name = "zstd-safe" 2157 | version = "5.0.2+zstd.1.5.2" 2158 | source = "registry+https://github.com/rust-lang/crates.io-index" 2159 | checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" 2160 | dependencies = [ 2161 | "libc", 2162 | "zstd-sys", 2163 | ] 2164 | 2165 | [[package]] 2166 | name = "zstd-sys" 2167 | version = "2.0.1+zstd.1.5.2" 2168 | source = "registry+https://github.com/rust-lang/crates.io-index" 2169 | checksum = "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b" 2170 | dependencies = [ 2171 | "cc", 2172 | "libc", 2173 | ] 2174 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rust-sqlx" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | actix = "0.13.0" 10 | actix-web = "4.2.1" 11 | dotenv = "0.15.0" 12 | serde = { version = "1.0.145", features = ["derive"] } 13 | serde_json = "1.0.86" 14 | sqlx = { version = "0.6.2", features = ["runtime-async-std-native-tls", "postgres"] } 15 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use actix_web::{web::Data, App, HttpServer}; 2 | use dotenv::dotenv; 3 | use sqlx::{postgres::PgPoolOptions, Pool, Postgres}; 4 | 5 | mod services; 6 | use services::{create_user_article, fetch_user_articles, fetch_users}; 7 | 8 | pub struct AppState { 9 | db: Pool 10 | } 11 | 12 | #[actix_web::main] 13 | async fn main() -> std::io::Result<()> { 14 | dotenv().ok(); 15 | let database_url = std::env::var("DATABASE_URL").expect("DATABASE_URL must be set"); 16 | let pool = PgPoolOptions::new() 17 | .max_connections(5) 18 | .connect(&database_url) 19 | .await 20 | .expect("Error building a connection pool"); 21 | 22 | HttpServer::new(move || { 23 | App::new() 24 | .app_data(Data::new(AppState { db: pool.clone() })) 25 | .service(fetch_users) 26 | .service(fetch_user_articles) 27 | .service(create_user_article) 28 | }) 29 | .bind(("127.0.0.1", 8080))? 30 | .run() 31 | .await 32 | } 33 | -------------------------------------------------------------------------------- /src/services.rs: -------------------------------------------------------------------------------- 1 | use actix_web::{ 2 | get, post, 3 | web::{Data, Json, Path}, 4 | Responder, HttpResponse 5 | }; 6 | use serde::{Deserialize, Serialize}; 7 | use sqlx::{self, FromRow}; 8 | use crate::AppState; 9 | 10 | #[derive(Serialize, FromRow)] 11 | struct User { 12 | id: i32, 13 | first_name: String, 14 | last_name: String, 15 | } 16 | 17 | #[derive(Serialize, FromRow)] 18 | struct Article { 19 | id: i32, 20 | title: String, 21 | content: String, 22 | created_by: i32, 23 | } 24 | 25 | #[derive(Deserialize)] 26 | pub struct CreateArticleBody { 27 | pub title: String, 28 | pub content: String, 29 | } 30 | 31 | #[get("/users")] 32 | pub async fn fetch_users(state: Data) -> impl Responder { 33 | // "GET /users".to_string() 34 | 35 | match sqlx::query_as::<_, User>("SELECT id, first_name, last_name FROM users") 36 | .fetch_all(&state.db) 37 | .await 38 | { 39 | Ok(users) => HttpResponse::Ok().json(users), 40 | Err(_) => HttpResponse::NotFound().json("No users found"), 41 | } 42 | } 43 | 44 | #[get("/users/{id}/articles")] 45 | pub async fn fetch_user_articles(state: Data, path: Path) -> impl Responder { 46 | let id: i32 = path.into_inner(); 47 | // format!("GET /users/{id}/articles") 48 | 49 | match sqlx::query_as::<_, Article>( 50 | "SELECT id, title, content, created_by FROM articles WHERE created_by = $1" 51 | ) 52 | .bind(id) 53 | .fetch_all(&state.db) 54 | .await 55 | { 56 | Ok(articles) => HttpResponse::Ok().json(articles), 57 | Err(_) => HttpResponse::NotFound().json("No articles found"), 58 | } 59 | } 60 | 61 | #[post("/users/{id}/articles")] 62 | pub async fn create_user_article(state: Data, path: Path, body: Json) -> impl Responder { 63 | let id: i32 = path.into_inner(); 64 | // format!("POST /users/{id}/articles") 65 | 66 | match sqlx::query_as::<_, Article>( 67 | "INSERT INTO articles (title, content, created_by) VALUES ($1, $2, $3) RETURNING id, title, content, created_by" 68 | ) 69 | .bind(body.title.to_string()) 70 | .bind(body.content.to_string()) 71 | .bind(id) 72 | .fetch_one(&state.db) 73 | .await 74 | { 75 | Ok(article) => HttpResponse::Ok().json(article), 76 | Err(_) => HttpResponse::InternalServerError().json("Failed to create user article"), 77 | } 78 | } 79 | --------------------------------------------------------------------------------