├── .gitignore ├── .vscode └── launch.json ├── Cargo.lock ├── Cargo.toml ├── README.MD ├── license.txt └── src ├── api ├── mod.rs └── router.rs ├── application ├── commands │ ├── create_todo_command.rs │ ├── delete_todo_command.rs │ ├── mod.rs │ ├── requests │ │ ├── mod.rs │ │ └── update_todo_request.rs │ └── update_todo_command.rs ├── mod.rs └── queries │ ├── get_all_todos_query.rs │ ├── get_todo_by_id_query.rs │ └── mod.rs ├── domain ├── mod.rs └── models │ ├── mod.rs │ └── todo.rs ├── infrastructure ├── data │ ├── db_context │ │ ├── mod.rs │ │ └── surreal_context.rs │ ├── mod.rs │ └── repositories │ │ ├── mod.rs │ │ └── todo_repository.rs └── mod.rs ├── lib.rs └── main.rs /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "lldb", 9 | "request": "launch", 10 | "name": "Debug executable 'article_api'", 11 | "cargo": { 12 | "args": [ 13 | "build", 14 | "--bin=article_api", 15 | "--package=article_api" 16 | ], 17 | "filter": { 18 | "name": "article_api", 19 | "kind": "bin" 20 | } 21 | }, 22 | "args": [], 23 | "cwd": "${workspaceFolder}" 24 | }, 25 | { 26 | "type": "lldb", 27 | "request": "launch", 28 | "name": "Debug unit tests in executable 'article_api'", 29 | "cargo": { 30 | "args": [ 31 | "test", 32 | "--no-run", 33 | "--bin=article_api", 34 | "--package=article_api" 35 | ], 36 | "filter": { 37 | "name": "article_api", 38 | "kind": "bin" 39 | } 40 | }, 41 | "args": [], 42 | "cwd": "${workspaceFolder}" 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /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 = "addr" 7 | version = "0.15.6" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "a93b8a41dbe230ad5087cc721f8d41611de654542180586b315d9f4cf6b72bef" 10 | dependencies = [ 11 | "psl-types", 12 | ] 13 | 14 | [[package]] 15 | name = "addr2line" 16 | version = "0.21.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" 19 | dependencies = [ 20 | "gimli", 21 | ] 22 | 23 | [[package]] 24 | name = "adler" 25 | version = "1.0.2" 26 | source = "registry+https://github.com/rust-lang/crates.io-index" 27 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 28 | 29 | [[package]] 30 | name = "ahash" 31 | version = "0.7.7" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" 34 | dependencies = [ 35 | "getrandom", 36 | "once_cell", 37 | "version_check", 38 | ] 39 | 40 | [[package]] 41 | name = "ahash" 42 | version = "0.8.6" 43 | source = "registry+https://github.com/rust-lang/crates.io-index" 44 | checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" 45 | dependencies = [ 46 | "cfg-if", 47 | "once_cell", 48 | "version_check", 49 | "zerocopy", 50 | ] 51 | 52 | [[package]] 53 | name = "aho-corasick" 54 | version = "1.1.2" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" 57 | dependencies = [ 58 | "memchr", 59 | ] 60 | 61 | [[package]] 62 | name = "android-tzdata" 63 | version = "0.1.1" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 66 | 67 | [[package]] 68 | name = "android_system_properties" 69 | version = "0.1.5" 70 | source = "registry+https://github.com/rust-lang/crates.io-index" 71 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 72 | dependencies = [ 73 | "libc", 74 | ] 75 | 76 | [[package]] 77 | name = "any_ascii" 78 | version = "0.3.2" 79 | source = "registry+https://github.com/rust-lang/crates.io-index" 80 | checksum = "ea50b14b7a4b9343f8c627a7a53c52076482bd4bdad0a24fd3ec533ed616cc2c" 81 | 82 | [[package]] 83 | name = "approx" 84 | version = "0.5.1" 85 | source = "registry+https://github.com/rust-lang/crates.io-index" 86 | checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" 87 | dependencies = [ 88 | "num-traits", 89 | ] 90 | 91 | [[package]] 92 | name = "argon2" 93 | version = "0.5.2" 94 | source = "registry+https://github.com/rust-lang/crates.io-index" 95 | checksum = "17ba4cac0a46bc1d2912652a751c47f2a9f3a7fe89bcae2275d418f5270402f9" 96 | dependencies = [ 97 | "base64ct", 98 | "blake2", 99 | "cpufeatures", 100 | "password-hash", 101 | ] 102 | 103 | [[package]] 104 | name = "arrayvec" 105 | version = "0.7.4" 106 | source = "registry+https://github.com/rust-lang/crates.io-index" 107 | checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" 108 | 109 | [[package]] 110 | name = "article_api" 111 | version = "0.1.0" 112 | dependencies = [ 113 | "axum", 114 | "chrono", 115 | "once_cell", 116 | "serde", 117 | "serde_json", 118 | "surrealdb", 119 | "tokio", 120 | "tower-http", 121 | ] 122 | 123 | [[package]] 124 | name = "ascii-canvas" 125 | version = "3.0.0" 126 | source = "registry+https://github.com/rust-lang/crates.io-index" 127 | checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" 128 | dependencies = [ 129 | "term", 130 | ] 131 | 132 | [[package]] 133 | name = "async-channel" 134 | version = "1.9.0" 135 | source = "registry+https://github.com/rust-lang/crates.io-index" 136 | checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" 137 | dependencies = [ 138 | "concurrent-queue", 139 | "event-listener 2.5.3", 140 | "futures-core", 141 | ] 142 | 143 | [[package]] 144 | name = "async-executor" 145 | version = "1.8.0" 146 | source = "registry+https://github.com/rust-lang/crates.io-index" 147 | checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" 148 | dependencies = [ 149 | "async-lock", 150 | "async-task", 151 | "concurrent-queue", 152 | "fastrand", 153 | "futures-lite", 154 | "slab", 155 | ] 156 | 157 | [[package]] 158 | name = "async-lock" 159 | version = "3.2.0" 160 | source = "registry+https://github.com/rust-lang/crates.io-index" 161 | checksum = "7125e42787d53db9dd54261812ef17e937c95a51e4d291373b670342fa44310c" 162 | dependencies = [ 163 | "event-listener 4.0.0", 164 | "event-listener-strategy", 165 | "pin-project-lite", 166 | ] 167 | 168 | [[package]] 169 | name = "async-recursion" 170 | version = "1.0.5" 171 | source = "registry+https://github.com/rust-lang/crates.io-index" 172 | checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" 173 | dependencies = [ 174 | "proc-macro2", 175 | "quote", 176 | "syn 2.0.40", 177 | ] 178 | 179 | [[package]] 180 | name = "async-task" 181 | version = "4.5.0" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1" 184 | 185 | [[package]] 186 | name = "async-trait" 187 | version = "0.1.74" 188 | source = "registry+https://github.com/rust-lang/crates.io-index" 189 | checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" 190 | dependencies = [ 191 | "proc-macro2", 192 | "quote", 193 | "syn 2.0.40", 194 | ] 195 | 196 | [[package]] 197 | name = "async_io_stream" 198 | version = "0.3.3" 199 | source = "registry+https://github.com/rust-lang/crates.io-index" 200 | checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" 201 | dependencies = [ 202 | "futures", 203 | "pharos", 204 | "rustc_version", 205 | ] 206 | 207 | [[package]] 208 | name = "atomic" 209 | version = "0.5.3" 210 | source = "registry+https://github.com/rust-lang/crates.io-index" 211 | checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" 212 | 213 | [[package]] 214 | name = "atomic-polyfill" 215 | version = "1.0.3" 216 | source = "registry+https://github.com/rust-lang/crates.io-index" 217 | checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" 218 | dependencies = [ 219 | "critical-section", 220 | ] 221 | 222 | [[package]] 223 | name = "autocfg" 224 | version = "1.1.0" 225 | source = "registry+https://github.com/rust-lang/crates.io-index" 226 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 227 | 228 | [[package]] 229 | name = "axum" 230 | version = "0.7.2" 231 | source = "registry+https://github.com/rust-lang/crates.io-index" 232 | checksum = "202651474fe73c62d9e0a56c6133f7a0ff1dc1c8cf7a5b03381af2a26553ac9d" 233 | dependencies = [ 234 | "async-trait", 235 | "axum-core", 236 | "bytes", 237 | "futures-util", 238 | "http 1.0.0", 239 | "http-body 1.0.0", 240 | "http-body-util", 241 | "hyper 1.0.1", 242 | "hyper-util", 243 | "itoa", 244 | "matchit", 245 | "memchr", 246 | "mime", 247 | "percent-encoding", 248 | "pin-project-lite", 249 | "rustversion", 250 | "serde", 251 | "serde_json", 252 | "serde_path_to_error", 253 | "serde_urlencoded", 254 | "sync_wrapper", 255 | "tokio", 256 | "tower", 257 | "tower-layer", 258 | "tower-service", 259 | ] 260 | 261 | [[package]] 262 | name = "axum-core" 263 | version = "0.4.1" 264 | source = "registry+https://github.com/rust-lang/crates.io-index" 265 | checksum = "77cb22c689c44d4c07b0ab44ebc25d69d8ae601a2f28fb8d672d344178fa17aa" 266 | dependencies = [ 267 | "async-trait", 268 | "bytes", 269 | "futures-util", 270 | "http 1.0.0", 271 | "http-body 1.0.0", 272 | "http-body-util", 273 | "mime", 274 | "pin-project-lite", 275 | "rustversion", 276 | "sync_wrapper", 277 | "tower-layer", 278 | "tower-service", 279 | ] 280 | 281 | [[package]] 282 | name = "backtrace" 283 | version = "0.3.69" 284 | source = "registry+https://github.com/rust-lang/crates.io-index" 285 | checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" 286 | dependencies = [ 287 | "addr2line", 288 | "cc", 289 | "cfg-if", 290 | "libc", 291 | "miniz_oxide", 292 | "object", 293 | "rustc-demangle", 294 | ] 295 | 296 | [[package]] 297 | name = "base64" 298 | version = "0.13.1" 299 | source = "registry+https://github.com/rust-lang/crates.io-index" 300 | checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" 301 | 302 | [[package]] 303 | name = "base64" 304 | version = "0.21.5" 305 | source = "registry+https://github.com/rust-lang/crates.io-index" 306 | checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" 307 | 308 | [[package]] 309 | name = "base64ct" 310 | version = "1.6.0" 311 | source = "registry+https://github.com/rust-lang/crates.io-index" 312 | checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" 313 | 314 | [[package]] 315 | name = "bcrypt" 316 | version = "0.14.0" 317 | source = "registry+https://github.com/rust-lang/crates.io-index" 318 | checksum = "9df288bec72232f78c1ec5fe4e8f1d108aa0265476e93097593c803c8c02062a" 319 | dependencies = [ 320 | "base64 0.21.5", 321 | "blowfish", 322 | "getrandom", 323 | "subtle", 324 | "zeroize", 325 | ] 326 | 327 | [[package]] 328 | name = "bincode" 329 | version = "1.3.3" 330 | source = "registry+https://github.com/rust-lang/crates.io-index" 331 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 332 | dependencies = [ 333 | "serde", 334 | ] 335 | 336 | [[package]] 337 | name = "bit-set" 338 | version = "0.5.3" 339 | source = "registry+https://github.com/rust-lang/crates.io-index" 340 | checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" 341 | dependencies = [ 342 | "bit-vec", 343 | ] 344 | 345 | [[package]] 346 | name = "bit-vec" 347 | version = "0.6.3" 348 | source = "registry+https://github.com/rust-lang/crates.io-index" 349 | checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" 350 | 351 | [[package]] 352 | name = "bitflags" 353 | version = "1.3.2" 354 | source = "registry+https://github.com/rust-lang/crates.io-index" 355 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 356 | 357 | [[package]] 358 | name = "bitflags" 359 | version = "2.4.1" 360 | source = "registry+https://github.com/rust-lang/crates.io-index" 361 | checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" 362 | 363 | [[package]] 364 | name = "bitvec" 365 | version = "1.0.1" 366 | source = "registry+https://github.com/rust-lang/crates.io-index" 367 | checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" 368 | dependencies = [ 369 | "funty", 370 | "radium", 371 | "tap", 372 | "wyz", 373 | ] 374 | 375 | [[package]] 376 | name = "blake2" 377 | version = "0.10.6" 378 | source = "registry+https://github.com/rust-lang/crates.io-index" 379 | checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" 380 | dependencies = [ 381 | "digest", 382 | ] 383 | 384 | [[package]] 385 | name = "block-buffer" 386 | version = "0.10.4" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 389 | dependencies = [ 390 | "generic-array", 391 | ] 392 | 393 | [[package]] 394 | name = "blowfish" 395 | version = "0.9.1" 396 | source = "registry+https://github.com/rust-lang/crates.io-index" 397 | checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7" 398 | dependencies = [ 399 | "byteorder", 400 | "cipher", 401 | ] 402 | 403 | [[package]] 404 | name = "borsh" 405 | version = "1.2.1" 406 | source = "registry+https://github.com/rust-lang/crates.io-index" 407 | checksum = "9897ef0f1bd2362169de6d7e436ea2237dc1085d7d1e4db75f4be34d86f309d1" 408 | dependencies = [ 409 | "borsh-derive", 410 | "cfg_aliases", 411 | ] 412 | 413 | [[package]] 414 | name = "borsh-derive" 415 | version = "1.2.1" 416 | source = "registry+https://github.com/rust-lang/crates.io-index" 417 | checksum = "478b41ff04256c5c8330f3dfdaaae2a5cc976a8e75088bafa4625b0d0208de8c" 418 | dependencies = [ 419 | "once_cell", 420 | "proc-macro-crate", 421 | "proc-macro2", 422 | "quote", 423 | "syn 2.0.40", 424 | "syn_derive", 425 | ] 426 | 427 | [[package]] 428 | name = "bumpalo" 429 | version = "3.14.0" 430 | source = "registry+https://github.com/rust-lang/crates.io-index" 431 | checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" 432 | 433 | [[package]] 434 | name = "bytecheck" 435 | version = "0.6.11" 436 | source = "registry+https://github.com/rust-lang/crates.io-index" 437 | checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627" 438 | dependencies = [ 439 | "bytecheck_derive", 440 | "ptr_meta", 441 | "simdutf8", 442 | ] 443 | 444 | [[package]] 445 | name = "bytecheck_derive" 446 | version = "0.6.11" 447 | source = "registry+https://github.com/rust-lang/crates.io-index" 448 | checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61" 449 | dependencies = [ 450 | "proc-macro2", 451 | "quote", 452 | "syn 1.0.109", 453 | ] 454 | 455 | [[package]] 456 | name = "bytemuck" 457 | version = "1.14.0" 458 | source = "registry+https://github.com/rust-lang/crates.io-index" 459 | checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" 460 | 461 | [[package]] 462 | name = "byteorder" 463 | version = "1.5.0" 464 | source = "registry+https://github.com/rust-lang/crates.io-index" 465 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 466 | 467 | [[package]] 468 | name = "bytes" 469 | version = "1.5.0" 470 | source = "registry+https://github.com/rust-lang/crates.io-index" 471 | checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" 472 | 473 | [[package]] 474 | name = "cc" 475 | version = "1.0.83" 476 | source = "registry+https://github.com/rust-lang/crates.io-index" 477 | checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" 478 | dependencies = [ 479 | "libc", 480 | ] 481 | 482 | [[package]] 483 | name = "cedar-policy" 484 | version = "2.4.2" 485 | source = "registry+https://github.com/rust-lang/crates.io-index" 486 | checksum = "3d91e3b10a0f7f2911774d5e49713c4d25753466f9e11d1cd2ec627f8a2dc857" 487 | dependencies = [ 488 | "cedar-policy-core", 489 | "cedar-policy-validator", 490 | "itertools 0.10.5", 491 | "lalrpop-util", 492 | "ref-cast", 493 | "serde", 494 | "serde_json", 495 | "smol_str", 496 | "thiserror", 497 | ] 498 | 499 | [[package]] 500 | name = "cedar-policy-core" 501 | version = "2.4.2" 502 | source = "registry+https://github.com/rust-lang/crates.io-index" 503 | checksum = "cd2315591c6b7e18f8038f0a0529f254235fd902b6c217aabc04f2459b0d9995" 504 | dependencies = [ 505 | "either", 506 | "ipnet", 507 | "itertools 0.10.5", 508 | "lalrpop", 509 | "lalrpop-util", 510 | "lazy_static", 511 | "miette", 512 | "regex", 513 | "rustc_lexer", 514 | "serde", 515 | "serde_json", 516 | "serde_with", 517 | "smol_str", 518 | "stacker", 519 | "thiserror", 520 | ] 521 | 522 | [[package]] 523 | name = "cedar-policy-validator" 524 | version = "2.4.2" 525 | source = "registry+https://github.com/rust-lang/crates.io-index" 526 | checksum = "e756e1b2a5da742ed97e65199ad6d0893e9aa4bd6b34be1de9e70bd1e6adc7df" 527 | dependencies = [ 528 | "cedar-policy-core", 529 | "itertools 0.10.5", 530 | "serde", 531 | "serde_json", 532 | "serde_with", 533 | "smol_str", 534 | "stacker", 535 | "thiserror", 536 | "unicode-security", 537 | ] 538 | 539 | [[package]] 540 | name = "cfg-if" 541 | version = "1.0.0" 542 | source = "registry+https://github.com/rust-lang/crates.io-index" 543 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 544 | 545 | [[package]] 546 | name = "cfg_aliases" 547 | version = "0.1.1" 548 | source = "registry+https://github.com/rust-lang/crates.io-index" 549 | checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" 550 | 551 | [[package]] 552 | name = "chrono" 553 | version = "0.4.31" 554 | source = "registry+https://github.com/rust-lang/crates.io-index" 555 | checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" 556 | dependencies = [ 557 | "android-tzdata", 558 | "iana-time-zone", 559 | "js-sys", 560 | "num-traits", 561 | "serde", 562 | "wasm-bindgen", 563 | "windows-targets 0.48.5", 564 | ] 565 | 566 | [[package]] 567 | name = "cipher" 568 | version = "0.4.4" 569 | source = "registry+https://github.com/rust-lang/crates.io-index" 570 | checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" 571 | dependencies = [ 572 | "crypto-common", 573 | "inout", 574 | ] 575 | 576 | [[package]] 577 | name = "concurrent-queue" 578 | version = "2.4.0" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" 581 | dependencies = [ 582 | "crossbeam-utils", 583 | ] 584 | 585 | [[package]] 586 | name = "const-oid" 587 | version = "0.9.5" 588 | source = "registry+https://github.com/rust-lang/crates.io-index" 589 | checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" 590 | 591 | [[package]] 592 | name = "core-foundation" 593 | version = "0.9.4" 594 | source = "registry+https://github.com/rust-lang/crates.io-index" 595 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 596 | dependencies = [ 597 | "core-foundation-sys", 598 | "libc", 599 | ] 600 | 601 | [[package]] 602 | name = "core-foundation-sys" 603 | version = "0.8.6" 604 | source = "registry+https://github.com/rust-lang/crates.io-index" 605 | checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" 606 | 607 | [[package]] 608 | name = "cpufeatures" 609 | version = "0.2.11" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" 612 | dependencies = [ 613 | "libc", 614 | ] 615 | 616 | [[package]] 617 | name = "critical-section" 618 | version = "1.1.2" 619 | source = "registry+https://github.com/rust-lang/crates.io-index" 620 | checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" 621 | 622 | [[package]] 623 | name = "crossbeam-utils" 624 | version = "0.8.16" 625 | source = "registry+https://github.com/rust-lang/crates.io-index" 626 | checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" 627 | dependencies = [ 628 | "cfg-if", 629 | ] 630 | 631 | [[package]] 632 | name = "crunchy" 633 | version = "0.2.2" 634 | source = "registry+https://github.com/rust-lang/crates.io-index" 635 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 636 | 637 | [[package]] 638 | name = "crypto-common" 639 | version = "0.1.6" 640 | source = "registry+https://github.com/rust-lang/crates.io-index" 641 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 642 | dependencies = [ 643 | "generic-array", 644 | "typenum", 645 | ] 646 | 647 | [[package]] 648 | name = "darling" 649 | version = "0.20.3" 650 | source = "registry+https://github.com/rust-lang/crates.io-index" 651 | checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" 652 | dependencies = [ 653 | "darling_core", 654 | "darling_macro", 655 | ] 656 | 657 | [[package]] 658 | name = "darling_core" 659 | version = "0.20.3" 660 | source = "registry+https://github.com/rust-lang/crates.io-index" 661 | checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" 662 | dependencies = [ 663 | "fnv", 664 | "ident_case", 665 | "proc-macro2", 666 | "quote", 667 | "strsim", 668 | "syn 2.0.40", 669 | ] 670 | 671 | [[package]] 672 | name = "darling_macro" 673 | version = "0.20.3" 674 | source = "registry+https://github.com/rust-lang/crates.io-index" 675 | checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" 676 | dependencies = [ 677 | "darling_core", 678 | "quote", 679 | "syn 2.0.40", 680 | ] 681 | 682 | [[package]] 683 | name = "der" 684 | version = "0.7.8" 685 | source = "registry+https://github.com/rust-lang/crates.io-index" 686 | checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" 687 | dependencies = [ 688 | "const-oid", 689 | "pem-rfc7468", 690 | "zeroize", 691 | ] 692 | 693 | [[package]] 694 | name = "deranged" 695 | version = "0.3.10" 696 | source = "registry+https://github.com/rust-lang/crates.io-index" 697 | checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" 698 | dependencies = [ 699 | "powerfmt", 700 | "serde", 701 | ] 702 | 703 | [[package]] 704 | name = "deunicode" 705 | version = "1.4.2" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | checksum = "3ae2a35373c5c74340b79ae6780b498b2b183915ec5dacf263aac5a099bf485a" 708 | 709 | [[package]] 710 | name = "diff" 711 | version = "0.1.13" 712 | source = "registry+https://github.com/rust-lang/crates.io-index" 713 | checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" 714 | 715 | [[package]] 716 | name = "digest" 717 | version = "0.10.7" 718 | source = "registry+https://github.com/rust-lang/crates.io-index" 719 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 720 | dependencies = [ 721 | "block-buffer", 722 | "const-oid", 723 | "crypto-common", 724 | "subtle", 725 | ] 726 | 727 | [[package]] 728 | name = "dirs-next" 729 | version = "2.0.0" 730 | source = "registry+https://github.com/rust-lang/crates.io-index" 731 | checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" 732 | dependencies = [ 733 | "cfg-if", 734 | "dirs-sys-next", 735 | ] 736 | 737 | [[package]] 738 | name = "dirs-sys-next" 739 | version = "0.1.2" 740 | source = "registry+https://github.com/rust-lang/crates.io-index" 741 | checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" 742 | dependencies = [ 743 | "libc", 744 | "redox_users", 745 | "winapi", 746 | ] 747 | 748 | [[package]] 749 | name = "dmp" 750 | version = "0.2.0" 751 | source = "registry+https://github.com/rust-lang/crates.io-index" 752 | checksum = "bfaa1135a34d26e5cc5b4927a8935af887d4f30a5653a797c33b9a4222beb6d9" 753 | dependencies = [ 754 | "urlencoding", 755 | ] 756 | 757 | [[package]] 758 | name = "earcutr" 759 | version = "0.4.3" 760 | source = "registry+https://github.com/rust-lang/crates.io-index" 761 | checksum = "79127ed59a85d7687c409e9978547cffb7dc79675355ed22da6b66fd5f6ead01" 762 | dependencies = [ 763 | "itertools 0.11.0", 764 | "num-traits", 765 | ] 766 | 767 | [[package]] 768 | name = "either" 769 | version = "1.9.0" 770 | source = "registry+https://github.com/rust-lang/crates.io-index" 771 | checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" 772 | 773 | [[package]] 774 | name = "ena" 775 | version = "0.14.2" 776 | source = "registry+https://github.com/rust-lang/crates.io-index" 777 | checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" 778 | dependencies = [ 779 | "log", 780 | ] 781 | 782 | [[package]] 783 | name = "encoding_rs" 784 | version = "0.8.33" 785 | source = "registry+https://github.com/rust-lang/crates.io-index" 786 | checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" 787 | dependencies = [ 788 | "cfg-if", 789 | ] 790 | 791 | [[package]] 792 | name = "endian-type" 793 | version = "0.1.2" 794 | source = "registry+https://github.com/rust-lang/crates.io-index" 795 | checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" 796 | 797 | [[package]] 798 | name = "equivalent" 799 | version = "1.0.1" 800 | source = "registry+https://github.com/rust-lang/crates.io-index" 801 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 802 | 803 | [[package]] 804 | name = "errno" 805 | version = "0.3.8" 806 | source = "registry+https://github.com/rust-lang/crates.io-index" 807 | checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" 808 | dependencies = [ 809 | "libc", 810 | "windows-sys 0.52.0", 811 | ] 812 | 813 | [[package]] 814 | name = "event-listener" 815 | version = "2.5.3" 816 | source = "registry+https://github.com/rust-lang/crates.io-index" 817 | checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" 818 | 819 | [[package]] 820 | name = "event-listener" 821 | version = "4.0.0" 822 | source = "registry+https://github.com/rust-lang/crates.io-index" 823 | checksum = "770d968249b5d99410d61f5bf89057f3199a077a04d087092f58e7d10692baae" 824 | dependencies = [ 825 | "concurrent-queue", 826 | "parking", 827 | "pin-project-lite", 828 | ] 829 | 830 | [[package]] 831 | name = "event-listener-strategy" 832 | version = "0.4.0" 833 | source = "registry+https://github.com/rust-lang/crates.io-index" 834 | checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" 835 | dependencies = [ 836 | "event-listener 4.0.0", 837 | "pin-project-lite", 838 | ] 839 | 840 | [[package]] 841 | name = "fastrand" 842 | version = "2.0.1" 843 | source = "registry+https://github.com/rust-lang/crates.io-index" 844 | checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" 845 | 846 | [[package]] 847 | name = "fixedbitset" 848 | version = "0.4.2" 849 | source = "registry+https://github.com/rust-lang/crates.io-index" 850 | checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" 851 | 852 | [[package]] 853 | name = "float_next_after" 854 | version = "1.0.0" 855 | source = "registry+https://github.com/rust-lang/crates.io-index" 856 | checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8" 857 | 858 | [[package]] 859 | name = "flume" 860 | version = "0.10.14" 861 | source = "registry+https://github.com/rust-lang/crates.io-index" 862 | checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" 863 | dependencies = [ 864 | "futures-core", 865 | "futures-sink", 866 | "nanorand", 867 | "pin-project", 868 | "spin 0.9.8", 869 | ] 870 | 871 | [[package]] 872 | name = "fnv" 873 | version = "1.0.7" 874 | source = "registry+https://github.com/rust-lang/crates.io-index" 875 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 876 | 877 | [[package]] 878 | name = "form_urlencoded" 879 | version = "1.2.1" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 882 | dependencies = [ 883 | "percent-encoding", 884 | ] 885 | 886 | [[package]] 887 | name = "fst" 888 | version = "0.4.7" 889 | source = "registry+https://github.com/rust-lang/crates.io-index" 890 | checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a" 891 | 892 | [[package]] 893 | name = "funty" 894 | version = "2.0.0" 895 | source = "registry+https://github.com/rust-lang/crates.io-index" 896 | checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" 897 | 898 | [[package]] 899 | name = "futures" 900 | version = "0.3.29" 901 | source = "registry+https://github.com/rust-lang/crates.io-index" 902 | checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" 903 | dependencies = [ 904 | "futures-channel", 905 | "futures-core", 906 | "futures-executor", 907 | "futures-io", 908 | "futures-sink", 909 | "futures-task", 910 | "futures-util", 911 | ] 912 | 913 | [[package]] 914 | name = "futures-channel" 915 | version = "0.3.29" 916 | source = "registry+https://github.com/rust-lang/crates.io-index" 917 | checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" 918 | dependencies = [ 919 | "futures-core", 920 | "futures-sink", 921 | ] 922 | 923 | [[package]] 924 | name = "futures-concurrency" 925 | version = "7.4.3" 926 | source = "registry+https://github.com/rust-lang/crates.io-index" 927 | checksum = "ef6712e11cdeed5c8cf21ea0b90fec40fbe64afc9bbf2339356197eeca829fc3" 928 | dependencies = [ 929 | "bitvec", 930 | "futures-core", 931 | "pin-project", 932 | "slab", 933 | "smallvec", 934 | ] 935 | 936 | [[package]] 937 | name = "futures-core" 938 | version = "0.3.29" 939 | source = "registry+https://github.com/rust-lang/crates.io-index" 940 | checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" 941 | 942 | [[package]] 943 | name = "futures-executor" 944 | version = "0.3.29" 945 | source = "registry+https://github.com/rust-lang/crates.io-index" 946 | checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" 947 | dependencies = [ 948 | "futures-core", 949 | "futures-task", 950 | "futures-util", 951 | ] 952 | 953 | [[package]] 954 | name = "futures-io" 955 | version = "0.3.29" 956 | source = "registry+https://github.com/rust-lang/crates.io-index" 957 | checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" 958 | 959 | [[package]] 960 | name = "futures-lite" 961 | version = "2.1.0" 962 | source = "registry+https://github.com/rust-lang/crates.io-index" 963 | checksum = "aeee267a1883f7ebef3700f262d2d54de95dfaf38189015a74fdc4e0c7ad8143" 964 | dependencies = [ 965 | "fastrand", 966 | "futures-core", 967 | "futures-io", 968 | "parking", 969 | "pin-project-lite", 970 | ] 971 | 972 | [[package]] 973 | name = "futures-macro" 974 | version = "0.3.29" 975 | source = "registry+https://github.com/rust-lang/crates.io-index" 976 | checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" 977 | dependencies = [ 978 | "proc-macro2", 979 | "quote", 980 | "syn 2.0.40", 981 | ] 982 | 983 | [[package]] 984 | name = "futures-sink" 985 | version = "0.3.29" 986 | source = "registry+https://github.com/rust-lang/crates.io-index" 987 | checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" 988 | 989 | [[package]] 990 | name = "futures-task" 991 | version = "0.3.29" 992 | source = "registry+https://github.com/rust-lang/crates.io-index" 993 | checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" 994 | 995 | [[package]] 996 | name = "futures-util" 997 | version = "0.3.29" 998 | source = "registry+https://github.com/rust-lang/crates.io-index" 999 | checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" 1000 | dependencies = [ 1001 | "futures-channel", 1002 | "futures-core", 1003 | "futures-io", 1004 | "futures-macro", 1005 | "futures-sink", 1006 | "futures-task", 1007 | "memchr", 1008 | "pin-project-lite", 1009 | "pin-utils", 1010 | "slab", 1011 | ] 1012 | 1013 | [[package]] 1014 | name = "fuzzy-matcher" 1015 | version = "0.3.7" 1016 | source = "registry+https://github.com/rust-lang/crates.io-index" 1017 | checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94" 1018 | dependencies = [ 1019 | "thread_local", 1020 | ] 1021 | 1022 | [[package]] 1023 | name = "generic-array" 1024 | version = "0.14.7" 1025 | source = "registry+https://github.com/rust-lang/crates.io-index" 1026 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 1027 | dependencies = [ 1028 | "typenum", 1029 | "version_check", 1030 | ] 1031 | 1032 | [[package]] 1033 | name = "geo" 1034 | version = "0.25.1" 1035 | source = "registry+https://github.com/rust-lang/crates.io-index" 1036 | checksum = "a5d07d2288645058f3c78bc64eadd615335791cd5adb632e9865840afbc13dad" 1037 | dependencies = [ 1038 | "earcutr", 1039 | "float_next_after", 1040 | "geo-types", 1041 | "geographiclib-rs", 1042 | "log", 1043 | "num-traits", 1044 | "robust 0.2.3", 1045 | "rstar 0.10.0", 1046 | "serde", 1047 | ] 1048 | 1049 | [[package]] 1050 | name = "geo" 1051 | version = "0.26.0" 1052 | source = "registry+https://github.com/rust-lang/crates.io-index" 1053 | checksum = "1645cf1d7fea7dac1a66f7357f3df2677ada708b8d9db8e9b043878930095a96" 1054 | dependencies = [ 1055 | "earcutr", 1056 | "float_next_after", 1057 | "geo-types", 1058 | "geographiclib-rs", 1059 | "log", 1060 | "num-traits", 1061 | "robust 1.1.0", 1062 | "rstar 0.11.0", 1063 | "serde", 1064 | ] 1065 | 1066 | [[package]] 1067 | name = "geo-types" 1068 | version = "0.7.12" 1069 | source = "registry+https://github.com/rust-lang/crates.io-index" 1070 | checksum = "567495020b114f1ce9bed679b29975aa0bfae06ac22beacd5cfde5dabe7b05d6" 1071 | dependencies = [ 1072 | "approx", 1073 | "num-traits", 1074 | "rstar 0.10.0", 1075 | "rstar 0.11.0", 1076 | "serde", 1077 | ] 1078 | 1079 | [[package]] 1080 | name = "geographiclib-rs" 1081 | version = "0.2.3" 1082 | source = "registry+https://github.com/rust-lang/crates.io-index" 1083 | checksum = "8ea804e7bd3c6a4ca6a01edfa35231557a8a81d4d3f3e1e2b650d028c42592be" 1084 | dependencies = [ 1085 | "lazy_static", 1086 | ] 1087 | 1088 | [[package]] 1089 | name = "getrandom" 1090 | version = "0.2.11" 1091 | source = "registry+https://github.com/rust-lang/crates.io-index" 1092 | checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" 1093 | dependencies = [ 1094 | "cfg-if", 1095 | "js-sys", 1096 | "libc", 1097 | "wasi", 1098 | "wasm-bindgen", 1099 | ] 1100 | 1101 | [[package]] 1102 | name = "gimli" 1103 | version = "0.28.1" 1104 | source = "registry+https://github.com/rust-lang/crates.io-index" 1105 | checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" 1106 | 1107 | [[package]] 1108 | name = "h2" 1109 | version = "0.3.22" 1110 | source = "registry+https://github.com/rust-lang/crates.io-index" 1111 | checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" 1112 | dependencies = [ 1113 | "bytes", 1114 | "fnv", 1115 | "futures-core", 1116 | "futures-sink", 1117 | "futures-util", 1118 | "http 0.2.11", 1119 | "indexmap 2.1.0", 1120 | "slab", 1121 | "tokio", 1122 | "tokio-util", 1123 | "tracing", 1124 | ] 1125 | 1126 | [[package]] 1127 | name = "h2" 1128 | version = "0.4.0" 1129 | source = "registry+https://github.com/rust-lang/crates.io-index" 1130 | checksum = "e1d308f63daf4181410c242d34c11f928dcb3aa105852019e043c9d1f4e4368a" 1131 | dependencies = [ 1132 | "bytes", 1133 | "fnv", 1134 | "futures-core", 1135 | "futures-sink", 1136 | "futures-util", 1137 | "http 1.0.0", 1138 | "indexmap 2.1.0", 1139 | "slab", 1140 | "tokio", 1141 | "tokio-util", 1142 | "tracing", 1143 | ] 1144 | 1145 | [[package]] 1146 | name = "hash32" 1147 | version = "0.2.1" 1148 | source = "registry+https://github.com/rust-lang/crates.io-index" 1149 | checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" 1150 | dependencies = [ 1151 | "byteorder", 1152 | ] 1153 | 1154 | [[package]] 1155 | name = "hashbrown" 1156 | version = "0.12.3" 1157 | source = "registry+https://github.com/rust-lang/crates.io-index" 1158 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1159 | dependencies = [ 1160 | "ahash 0.7.7", 1161 | ] 1162 | 1163 | [[package]] 1164 | name = "hashbrown" 1165 | version = "0.13.2" 1166 | source = "registry+https://github.com/rust-lang/crates.io-index" 1167 | checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" 1168 | dependencies = [ 1169 | "ahash 0.8.6", 1170 | ] 1171 | 1172 | [[package]] 1173 | name = "hashbrown" 1174 | version = "0.14.3" 1175 | source = "registry+https://github.com/rust-lang/crates.io-index" 1176 | checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" 1177 | 1178 | [[package]] 1179 | name = "heapless" 1180 | version = "0.7.17" 1181 | source = "registry+https://github.com/rust-lang/crates.io-index" 1182 | checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" 1183 | dependencies = [ 1184 | "atomic-polyfill", 1185 | "hash32", 1186 | "rustc_version", 1187 | "spin 0.9.8", 1188 | "stable_deref_trait", 1189 | ] 1190 | 1191 | [[package]] 1192 | name = "hermit-abi" 1193 | version = "0.3.3" 1194 | source = "registry+https://github.com/rust-lang/crates.io-index" 1195 | checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" 1196 | 1197 | [[package]] 1198 | name = "hex" 1199 | version = "0.4.3" 1200 | source = "registry+https://github.com/rust-lang/crates.io-index" 1201 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1202 | 1203 | [[package]] 1204 | name = "hmac" 1205 | version = "0.12.1" 1206 | source = "registry+https://github.com/rust-lang/crates.io-index" 1207 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 1208 | dependencies = [ 1209 | "digest", 1210 | ] 1211 | 1212 | [[package]] 1213 | name = "http" 1214 | version = "0.2.11" 1215 | source = "registry+https://github.com/rust-lang/crates.io-index" 1216 | checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" 1217 | dependencies = [ 1218 | "bytes", 1219 | "fnv", 1220 | "itoa", 1221 | ] 1222 | 1223 | [[package]] 1224 | name = "http" 1225 | version = "1.0.0" 1226 | source = "registry+https://github.com/rust-lang/crates.io-index" 1227 | checksum = "b32afd38673a8016f7c9ae69e5af41a58f81b1d31689040f2f1959594ce194ea" 1228 | dependencies = [ 1229 | "bytes", 1230 | "fnv", 1231 | "itoa", 1232 | ] 1233 | 1234 | [[package]] 1235 | name = "http-body" 1236 | version = "0.4.6" 1237 | source = "registry+https://github.com/rust-lang/crates.io-index" 1238 | checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" 1239 | dependencies = [ 1240 | "bytes", 1241 | "http 0.2.11", 1242 | "pin-project-lite", 1243 | ] 1244 | 1245 | [[package]] 1246 | name = "http-body" 1247 | version = "1.0.0" 1248 | source = "registry+https://github.com/rust-lang/crates.io-index" 1249 | checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" 1250 | dependencies = [ 1251 | "bytes", 1252 | "http 1.0.0", 1253 | ] 1254 | 1255 | [[package]] 1256 | name = "http-body-util" 1257 | version = "0.1.0" 1258 | source = "registry+https://github.com/rust-lang/crates.io-index" 1259 | checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840" 1260 | dependencies = [ 1261 | "bytes", 1262 | "futures-util", 1263 | "http 1.0.0", 1264 | "http-body 1.0.0", 1265 | "pin-project-lite", 1266 | ] 1267 | 1268 | [[package]] 1269 | name = "httparse" 1270 | version = "1.8.0" 1271 | source = "registry+https://github.com/rust-lang/crates.io-index" 1272 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 1273 | 1274 | [[package]] 1275 | name = "httpdate" 1276 | version = "1.0.3" 1277 | source = "registry+https://github.com/rust-lang/crates.io-index" 1278 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 1279 | 1280 | [[package]] 1281 | name = "hyper" 1282 | version = "0.14.27" 1283 | source = "registry+https://github.com/rust-lang/crates.io-index" 1284 | checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" 1285 | dependencies = [ 1286 | "bytes", 1287 | "futures-channel", 1288 | "futures-core", 1289 | "futures-util", 1290 | "h2 0.3.22", 1291 | "http 0.2.11", 1292 | "http-body 0.4.6", 1293 | "httparse", 1294 | "httpdate", 1295 | "itoa", 1296 | "pin-project-lite", 1297 | "socket2 0.4.10", 1298 | "tokio", 1299 | "tower-service", 1300 | "tracing", 1301 | "want", 1302 | ] 1303 | 1304 | [[package]] 1305 | name = "hyper" 1306 | version = "1.0.1" 1307 | source = "registry+https://github.com/rust-lang/crates.io-index" 1308 | checksum = "403f9214f3e703236b221f1a9cd88ec8b4adfa5296de01ab96216361f4692f56" 1309 | dependencies = [ 1310 | "bytes", 1311 | "futures-channel", 1312 | "futures-util", 1313 | "h2 0.4.0", 1314 | "http 1.0.0", 1315 | "http-body 1.0.0", 1316 | "httparse", 1317 | "httpdate", 1318 | "itoa", 1319 | "pin-project-lite", 1320 | "tokio", 1321 | ] 1322 | 1323 | [[package]] 1324 | name = "hyper-rustls" 1325 | version = "0.24.2" 1326 | source = "registry+https://github.com/rust-lang/crates.io-index" 1327 | checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" 1328 | dependencies = [ 1329 | "futures-util", 1330 | "http 0.2.11", 1331 | "hyper 0.14.27", 1332 | "rustls 0.21.10", 1333 | "tokio", 1334 | "tokio-rustls 0.24.1", 1335 | ] 1336 | 1337 | [[package]] 1338 | name = "hyper-util" 1339 | version = "0.1.1" 1340 | source = "registry+https://github.com/rust-lang/crates.io-index" 1341 | checksum = "9ca339002caeb0d159cc6e023dff48e199f081e42fa039895c7c6f38b37f2e9d" 1342 | dependencies = [ 1343 | "bytes", 1344 | "futures-channel", 1345 | "futures-util", 1346 | "http 1.0.0", 1347 | "http-body 1.0.0", 1348 | "hyper 1.0.1", 1349 | "pin-project-lite", 1350 | "socket2 0.5.5", 1351 | "tokio", 1352 | "tower", 1353 | "tower-service", 1354 | "tracing", 1355 | ] 1356 | 1357 | [[package]] 1358 | name = "iana-time-zone" 1359 | version = "0.1.58" 1360 | source = "registry+https://github.com/rust-lang/crates.io-index" 1361 | checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" 1362 | dependencies = [ 1363 | "android_system_properties", 1364 | "core-foundation-sys", 1365 | "iana-time-zone-haiku", 1366 | "js-sys", 1367 | "wasm-bindgen", 1368 | "windows-core", 1369 | ] 1370 | 1371 | [[package]] 1372 | name = "iana-time-zone-haiku" 1373 | version = "0.1.2" 1374 | source = "registry+https://github.com/rust-lang/crates.io-index" 1375 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1376 | dependencies = [ 1377 | "cc", 1378 | ] 1379 | 1380 | [[package]] 1381 | name = "ident_case" 1382 | version = "1.0.1" 1383 | source = "registry+https://github.com/rust-lang/crates.io-index" 1384 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1385 | 1386 | [[package]] 1387 | name = "idna" 1388 | version = "0.5.0" 1389 | source = "registry+https://github.com/rust-lang/crates.io-index" 1390 | checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 1391 | dependencies = [ 1392 | "unicode-bidi", 1393 | "unicode-normalization", 1394 | ] 1395 | 1396 | [[package]] 1397 | name = "indexmap" 1398 | version = "1.9.3" 1399 | source = "registry+https://github.com/rust-lang/crates.io-index" 1400 | checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 1401 | dependencies = [ 1402 | "autocfg", 1403 | "hashbrown 0.12.3", 1404 | "serde", 1405 | ] 1406 | 1407 | [[package]] 1408 | name = "indexmap" 1409 | version = "2.1.0" 1410 | source = "registry+https://github.com/rust-lang/crates.io-index" 1411 | checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" 1412 | dependencies = [ 1413 | "equivalent", 1414 | "hashbrown 0.14.3", 1415 | "serde", 1416 | ] 1417 | 1418 | [[package]] 1419 | name = "inout" 1420 | version = "0.1.3" 1421 | source = "registry+https://github.com/rust-lang/crates.io-index" 1422 | checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" 1423 | dependencies = [ 1424 | "generic-array", 1425 | ] 1426 | 1427 | [[package]] 1428 | name = "ipnet" 1429 | version = "2.9.0" 1430 | source = "registry+https://github.com/rust-lang/crates.io-index" 1431 | checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" 1432 | 1433 | [[package]] 1434 | name = "is-terminal" 1435 | version = "0.4.9" 1436 | source = "registry+https://github.com/rust-lang/crates.io-index" 1437 | checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" 1438 | dependencies = [ 1439 | "hermit-abi", 1440 | "rustix", 1441 | "windows-sys 0.48.0", 1442 | ] 1443 | 1444 | [[package]] 1445 | name = "itertools" 1446 | version = "0.10.5" 1447 | source = "registry+https://github.com/rust-lang/crates.io-index" 1448 | checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" 1449 | dependencies = [ 1450 | "either", 1451 | ] 1452 | 1453 | [[package]] 1454 | name = "itertools" 1455 | version = "0.11.0" 1456 | source = "registry+https://github.com/rust-lang/crates.io-index" 1457 | checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" 1458 | dependencies = [ 1459 | "either", 1460 | ] 1461 | 1462 | [[package]] 1463 | name = "itoa" 1464 | version = "1.0.10" 1465 | source = "registry+https://github.com/rust-lang/crates.io-index" 1466 | checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" 1467 | 1468 | [[package]] 1469 | name = "js-sys" 1470 | version = "0.3.66" 1471 | source = "registry+https://github.com/rust-lang/crates.io-index" 1472 | checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" 1473 | dependencies = [ 1474 | "wasm-bindgen", 1475 | ] 1476 | 1477 | [[package]] 1478 | name = "lalrpop" 1479 | version = "0.20.0" 1480 | source = "registry+https://github.com/rust-lang/crates.io-index" 1481 | checksum = "da4081d44f4611b66c6dd725e6de3169f9f63905421e8626fcb86b6a898998b8" 1482 | dependencies = [ 1483 | "ascii-canvas", 1484 | "bit-set", 1485 | "diff", 1486 | "ena", 1487 | "is-terminal", 1488 | "itertools 0.10.5", 1489 | "lalrpop-util", 1490 | "petgraph", 1491 | "pico-args", 1492 | "regex", 1493 | "regex-syntax 0.7.5", 1494 | "string_cache", 1495 | "term", 1496 | "tiny-keccak", 1497 | "unicode-xid", 1498 | ] 1499 | 1500 | [[package]] 1501 | name = "lalrpop-util" 1502 | version = "0.20.0" 1503 | source = "registry+https://github.com/rust-lang/crates.io-index" 1504 | checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d" 1505 | dependencies = [ 1506 | "regex", 1507 | ] 1508 | 1509 | [[package]] 1510 | name = "lazy_static" 1511 | version = "1.4.0" 1512 | source = "registry+https://github.com/rust-lang/crates.io-index" 1513 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1514 | dependencies = [ 1515 | "spin 0.5.2", 1516 | ] 1517 | 1518 | [[package]] 1519 | name = "lexicmp" 1520 | version = "0.1.0" 1521 | source = "registry+https://github.com/rust-lang/crates.io-index" 1522 | checksum = "7378d131ddf24063b32cbd7e91668d183140c4b3906270635a4d633d1068ea5d" 1523 | dependencies = [ 1524 | "any_ascii", 1525 | ] 1526 | 1527 | [[package]] 1528 | name = "libc" 1529 | version = "0.2.151" 1530 | source = "registry+https://github.com/rust-lang/crates.io-index" 1531 | checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" 1532 | 1533 | [[package]] 1534 | name = "libm" 1535 | version = "0.2.8" 1536 | source = "registry+https://github.com/rust-lang/crates.io-index" 1537 | checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" 1538 | 1539 | [[package]] 1540 | name = "libredox" 1541 | version = "0.0.1" 1542 | source = "registry+https://github.com/rust-lang/crates.io-index" 1543 | checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" 1544 | dependencies = [ 1545 | "bitflags 2.4.1", 1546 | "libc", 1547 | "redox_syscall", 1548 | ] 1549 | 1550 | [[package]] 1551 | name = "linux-raw-sys" 1552 | version = "0.4.12" 1553 | source = "registry+https://github.com/rust-lang/crates.io-index" 1554 | checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" 1555 | 1556 | [[package]] 1557 | name = "lock_api" 1558 | version = "0.4.11" 1559 | source = "registry+https://github.com/rust-lang/crates.io-index" 1560 | checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" 1561 | dependencies = [ 1562 | "autocfg", 1563 | "scopeguard", 1564 | ] 1565 | 1566 | [[package]] 1567 | name = "log" 1568 | version = "0.4.20" 1569 | source = "registry+https://github.com/rust-lang/crates.io-index" 1570 | checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" 1571 | 1572 | [[package]] 1573 | name = "lru" 1574 | version = "0.10.1" 1575 | source = "registry+https://github.com/rust-lang/crates.io-index" 1576 | checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" 1577 | dependencies = [ 1578 | "hashbrown 0.13.2", 1579 | ] 1580 | 1581 | [[package]] 1582 | name = "matchit" 1583 | version = "0.7.3" 1584 | source = "registry+https://github.com/rust-lang/crates.io-index" 1585 | checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" 1586 | 1587 | [[package]] 1588 | name = "md-5" 1589 | version = "0.10.6" 1590 | source = "registry+https://github.com/rust-lang/crates.io-index" 1591 | checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" 1592 | dependencies = [ 1593 | "cfg-if", 1594 | "digest", 1595 | ] 1596 | 1597 | [[package]] 1598 | name = "memchr" 1599 | version = "2.6.4" 1600 | source = "registry+https://github.com/rust-lang/crates.io-index" 1601 | checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" 1602 | 1603 | [[package]] 1604 | name = "miette" 1605 | version = "5.10.0" 1606 | source = "registry+https://github.com/rust-lang/crates.io-index" 1607 | checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" 1608 | dependencies = [ 1609 | "miette-derive", 1610 | "once_cell", 1611 | "thiserror", 1612 | "unicode-width", 1613 | ] 1614 | 1615 | [[package]] 1616 | name = "miette-derive" 1617 | version = "5.10.0" 1618 | source = "registry+https://github.com/rust-lang/crates.io-index" 1619 | checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" 1620 | dependencies = [ 1621 | "proc-macro2", 1622 | "quote", 1623 | "syn 2.0.40", 1624 | ] 1625 | 1626 | [[package]] 1627 | name = "mime" 1628 | version = "0.3.17" 1629 | source = "registry+https://github.com/rust-lang/crates.io-index" 1630 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1631 | 1632 | [[package]] 1633 | name = "mime_guess" 1634 | version = "2.0.4" 1635 | source = "registry+https://github.com/rust-lang/crates.io-index" 1636 | checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" 1637 | dependencies = [ 1638 | "mime", 1639 | "unicase", 1640 | ] 1641 | 1642 | [[package]] 1643 | name = "minimal-lexical" 1644 | version = "0.2.1" 1645 | source = "registry+https://github.com/rust-lang/crates.io-index" 1646 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1647 | 1648 | [[package]] 1649 | name = "miniz_oxide" 1650 | version = "0.7.1" 1651 | source = "registry+https://github.com/rust-lang/crates.io-index" 1652 | checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" 1653 | dependencies = [ 1654 | "adler", 1655 | ] 1656 | 1657 | [[package]] 1658 | name = "mio" 1659 | version = "0.8.10" 1660 | source = "registry+https://github.com/rust-lang/crates.io-index" 1661 | checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" 1662 | dependencies = [ 1663 | "libc", 1664 | "wasi", 1665 | "windows-sys 0.48.0", 1666 | ] 1667 | 1668 | [[package]] 1669 | name = "nanoid" 1670 | version = "0.4.0" 1671 | source = "registry+https://github.com/rust-lang/crates.io-index" 1672 | checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8" 1673 | dependencies = [ 1674 | "rand", 1675 | ] 1676 | 1677 | [[package]] 1678 | name = "nanorand" 1679 | version = "0.7.0" 1680 | source = "registry+https://github.com/rust-lang/crates.io-index" 1681 | checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" 1682 | dependencies = [ 1683 | "getrandom", 1684 | ] 1685 | 1686 | [[package]] 1687 | name = "new_debug_unreachable" 1688 | version = "1.0.4" 1689 | source = "registry+https://github.com/rust-lang/crates.io-index" 1690 | checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" 1691 | 1692 | [[package]] 1693 | name = "nibble_vec" 1694 | version = "0.1.0" 1695 | source = "registry+https://github.com/rust-lang/crates.io-index" 1696 | checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" 1697 | dependencies = [ 1698 | "smallvec", 1699 | ] 1700 | 1701 | [[package]] 1702 | name = "nom" 1703 | version = "7.1.3" 1704 | source = "registry+https://github.com/rust-lang/crates.io-index" 1705 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 1706 | dependencies = [ 1707 | "memchr", 1708 | "minimal-lexical", 1709 | ] 1710 | 1711 | [[package]] 1712 | name = "num-bigint" 1713 | version = "0.4.4" 1714 | source = "registry+https://github.com/rust-lang/crates.io-index" 1715 | checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" 1716 | dependencies = [ 1717 | "autocfg", 1718 | "num-integer", 1719 | "num-traits", 1720 | ] 1721 | 1722 | [[package]] 1723 | name = "num-bigint-dig" 1724 | version = "0.8.4" 1725 | source = "registry+https://github.com/rust-lang/crates.io-index" 1726 | checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" 1727 | dependencies = [ 1728 | "byteorder", 1729 | "lazy_static", 1730 | "libm", 1731 | "num-integer", 1732 | "num-iter", 1733 | "num-traits", 1734 | "rand", 1735 | "smallvec", 1736 | "zeroize", 1737 | ] 1738 | 1739 | [[package]] 1740 | name = "num-integer" 1741 | version = "0.1.45" 1742 | source = "registry+https://github.com/rust-lang/crates.io-index" 1743 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 1744 | dependencies = [ 1745 | "autocfg", 1746 | "num-traits", 1747 | ] 1748 | 1749 | [[package]] 1750 | name = "num-iter" 1751 | version = "0.1.43" 1752 | source = "registry+https://github.com/rust-lang/crates.io-index" 1753 | checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" 1754 | dependencies = [ 1755 | "autocfg", 1756 | "num-integer", 1757 | "num-traits", 1758 | ] 1759 | 1760 | [[package]] 1761 | name = "num-traits" 1762 | version = "0.2.17" 1763 | source = "registry+https://github.com/rust-lang/crates.io-index" 1764 | checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" 1765 | dependencies = [ 1766 | "autocfg", 1767 | "libm", 1768 | ] 1769 | 1770 | [[package]] 1771 | name = "num_cpus" 1772 | version = "1.16.0" 1773 | source = "registry+https://github.com/rust-lang/crates.io-index" 1774 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" 1775 | dependencies = [ 1776 | "hermit-abi", 1777 | "libc", 1778 | ] 1779 | 1780 | [[package]] 1781 | name = "object" 1782 | version = "0.32.1" 1783 | source = "registry+https://github.com/rust-lang/crates.io-index" 1784 | checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" 1785 | dependencies = [ 1786 | "memchr", 1787 | ] 1788 | 1789 | [[package]] 1790 | name = "once_cell" 1791 | version = "1.19.0" 1792 | source = "registry+https://github.com/rust-lang/crates.io-index" 1793 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 1794 | 1795 | [[package]] 1796 | name = "parking" 1797 | version = "2.2.0" 1798 | source = "registry+https://github.com/rust-lang/crates.io-index" 1799 | checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" 1800 | 1801 | [[package]] 1802 | name = "parking_lot" 1803 | version = "0.12.1" 1804 | source = "registry+https://github.com/rust-lang/crates.io-index" 1805 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 1806 | dependencies = [ 1807 | "lock_api", 1808 | "parking_lot_core", 1809 | ] 1810 | 1811 | [[package]] 1812 | name = "parking_lot_core" 1813 | version = "0.9.9" 1814 | source = "registry+https://github.com/rust-lang/crates.io-index" 1815 | checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" 1816 | dependencies = [ 1817 | "cfg-if", 1818 | "libc", 1819 | "redox_syscall", 1820 | "smallvec", 1821 | "windows-targets 0.48.5", 1822 | ] 1823 | 1824 | [[package]] 1825 | name = "password-hash" 1826 | version = "0.5.0" 1827 | source = "registry+https://github.com/rust-lang/crates.io-index" 1828 | checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" 1829 | dependencies = [ 1830 | "base64ct", 1831 | "rand_core", 1832 | "subtle", 1833 | ] 1834 | 1835 | [[package]] 1836 | name = "path-clean" 1837 | version = "1.0.1" 1838 | source = "registry+https://github.com/rust-lang/crates.io-index" 1839 | checksum = "17359afc20d7ab31fdb42bb844c8b3bb1dabd7dcf7e68428492da7f16966fcef" 1840 | 1841 | [[package]] 1842 | name = "pbkdf2" 1843 | version = "0.12.2" 1844 | source = "registry+https://github.com/rust-lang/crates.io-index" 1845 | checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" 1846 | dependencies = [ 1847 | "digest", 1848 | "hmac", 1849 | "password-hash", 1850 | "sha2", 1851 | ] 1852 | 1853 | [[package]] 1854 | name = "pem" 1855 | version = "2.0.1" 1856 | source = "registry+https://github.com/rust-lang/crates.io-index" 1857 | checksum = "6b13fe415cdf3c8e44518e18a7c95a13431d9bdf6d15367d82b23c377fdd441a" 1858 | dependencies = [ 1859 | "base64 0.21.5", 1860 | "serde", 1861 | ] 1862 | 1863 | [[package]] 1864 | name = "pem-rfc7468" 1865 | version = "0.7.0" 1866 | source = "registry+https://github.com/rust-lang/crates.io-index" 1867 | checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" 1868 | dependencies = [ 1869 | "base64ct", 1870 | ] 1871 | 1872 | [[package]] 1873 | name = "percent-encoding" 1874 | version = "2.3.1" 1875 | source = "registry+https://github.com/rust-lang/crates.io-index" 1876 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1877 | 1878 | [[package]] 1879 | name = "petgraph" 1880 | version = "0.6.4" 1881 | source = "registry+https://github.com/rust-lang/crates.io-index" 1882 | checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" 1883 | dependencies = [ 1884 | "fixedbitset", 1885 | "indexmap 2.1.0", 1886 | ] 1887 | 1888 | [[package]] 1889 | name = "pharos" 1890 | version = "0.5.3" 1891 | source = "registry+https://github.com/rust-lang/crates.io-index" 1892 | checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" 1893 | dependencies = [ 1894 | "futures", 1895 | "rustc_version", 1896 | ] 1897 | 1898 | [[package]] 1899 | name = "phf_shared" 1900 | version = "0.10.0" 1901 | source = "registry+https://github.com/rust-lang/crates.io-index" 1902 | checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" 1903 | dependencies = [ 1904 | "siphasher", 1905 | ] 1906 | 1907 | [[package]] 1908 | name = "pico-args" 1909 | version = "0.5.0" 1910 | source = "registry+https://github.com/rust-lang/crates.io-index" 1911 | checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" 1912 | 1913 | [[package]] 1914 | name = "pin-project" 1915 | version = "1.1.3" 1916 | source = "registry+https://github.com/rust-lang/crates.io-index" 1917 | checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" 1918 | dependencies = [ 1919 | "pin-project-internal", 1920 | ] 1921 | 1922 | [[package]] 1923 | name = "pin-project-internal" 1924 | version = "1.1.3" 1925 | source = "registry+https://github.com/rust-lang/crates.io-index" 1926 | checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" 1927 | dependencies = [ 1928 | "proc-macro2", 1929 | "quote", 1930 | "syn 2.0.40", 1931 | ] 1932 | 1933 | [[package]] 1934 | name = "pin-project-lite" 1935 | version = "0.2.13" 1936 | source = "registry+https://github.com/rust-lang/crates.io-index" 1937 | checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" 1938 | 1939 | [[package]] 1940 | name = "pin-utils" 1941 | version = "0.1.0" 1942 | source = "registry+https://github.com/rust-lang/crates.io-index" 1943 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1944 | 1945 | [[package]] 1946 | name = "pkcs1" 1947 | version = "0.7.5" 1948 | source = "registry+https://github.com/rust-lang/crates.io-index" 1949 | checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" 1950 | dependencies = [ 1951 | "der", 1952 | "pkcs8", 1953 | "spki", 1954 | ] 1955 | 1956 | [[package]] 1957 | name = "pkcs8" 1958 | version = "0.10.2" 1959 | source = "registry+https://github.com/rust-lang/crates.io-index" 1960 | checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" 1961 | dependencies = [ 1962 | "der", 1963 | "spki", 1964 | ] 1965 | 1966 | [[package]] 1967 | name = "powerfmt" 1968 | version = "0.2.0" 1969 | source = "registry+https://github.com/rust-lang/crates.io-index" 1970 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 1971 | 1972 | [[package]] 1973 | name = "ppv-lite86" 1974 | version = "0.2.17" 1975 | source = "registry+https://github.com/rust-lang/crates.io-index" 1976 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 1977 | 1978 | [[package]] 1979 | name = "precomputed-hash" 1980 | version = "0.1.1" 1981 | source = "registry+https://github.com/rust-lang/crates.io-index" 1982 | checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" 1983 | 1984 | [[package]] 1985 | name = "proc-macro-crate" 1986 | version = "2.0.1" 1987 | source = "registry+https://github.com/rust-lang/crates.io-index" 1988 | checksum = "97dc5fea232fc28d2f597b37c4876b348a40e33f3b02cc975c8d006d78d94b1a" 1989 | dependencies = [ 1990 | "toml_datetime", 1991 | "toml_edit", 1992 | ] 1993 | 1994 | [[package]] 1995 | name = "proc-macro-error" 1996 | version = "1.0.4" 1997 | source = "registry+https://github.com/rust-lang/crates.io-index" 1998 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 1999 | dependencies = [ 2000 | "proc-macro-error-attr", 2001 | "proc-macro2", 2002 | "quote", 2003 | "syn 1.0.109", 2004 | "version_check", 2005 | ] 2006 | 2007 | [[package]] 2008 | name = "proc-macro-error-attr" 2009 | version = "1.0.4" 2010 | source = "registry+https://github.com/rust-lang/crates.io-index" 2011 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 2012 | dependencies = [ 2013 | "proc-macro2", 2014 | "quote", 2015 | "version_check", 2016 | ] 2017 | 2018 | [[package]] 2019 | name = "proc-macro2" 2020 | version = "1.0.70" 2021 | source = "registry+https://github.com/rust-lang/crates.io-index" 2022 | checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" 2023 | dependencies = [ 2024 | "unicode-ident", 2025 | ] 2026 | 2027 | [[package]] 2028 | name = "psl-types" 2029 | version = "2.0.11" 2030 | source = "registry+https://github.com/rust-lang/crates.io-index" 2031 | checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" 2032 | 2033 | [[package]] 2034 | name = "psm" 2035 | version = "0.1.21" 2036 | source = "registry+https://github.com/rust-lang/crates.io-index" 2037 | checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" 2038 | dependencies = [ 2039 | "cc", 2040 | ] 2041 | 2042 | [[package]] 2043 | name = "ptr_meta" 2044 | version = "0.1.4" 2045 | source = "registry+https://github.com/rust-lang/crates.io-index" 2046 | checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" 2047 | dependencies = [ 2048 | "ptr_meta_derive", 2049 | ] 2050 | 2051 | [[package]] 2052 | name = "ptr_meta_derive" 2053 | version = "0.1.4" 2054 | source = "registry+https://github.com/rust-lang/crates.io-index" 2055 | checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" 2056 | dependencies = [ 2057 | "proc-macro2", 2058 | "quote", 2059 | "syn 1.0.109", 2060 | ] 2061 | 2062 | [[package]] 2063 | name = "quote" 2064 | version = "1.0.33" 2065 | source = "registry+https://github.com/rust-lang/crates.io-index" 2066 | checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" 2067 | dependencies = [ 2068 | "proc-macro2", 2069 | ] 2070 | 2071 | [[package]] 2072 | name = "radium" 2073 | version = "0.7.0" 2074 | source = "registry+https://github.com/rust-lang/crates.io-index" 2075 | checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" 2076 | 2077 | [[package]] 2078 | name = "radix_trie" 2079 | version = "0.2.1" 2080 | source = "registry+https://github.com/rust-lang/crates.io-index" 2081 | checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" 2082 | dependencies = [ 2083 | "endian-type", 2084 | "nibble_vec", 2085 | "serde", 2086 | ] 2087 | 2088 | [[package]] 2089 | name = "rand" 2090 | version = "0.8.5" 2091 | source = "registry+https://github.com/rust-lang/crates.io-index" 2092 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2093 | dependencies = [ 2094 | "libc", 2095 | "rand_chacha", 2096 | "rand_core", 2097 | ] 2098 | 2099 | [[package]] 2100 | name = "rand_chacha" 2101 | version = "0.3.1" 2102 | source = "registry+https://github.com/rust-lang/crates.io-index" 2103 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2104 | dependencies = [ 2105 | "ppv-lite86", 2106 | "rand_core", 2107 | ] 2108 | 2109 | [[package]] 2110 | name = "rand_core" 2111 | version = "0.6.4" 2112 | source = "registry+https://github.com/rust-lang/crates.io-index" 2113 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2114 | dependencies = [ 2115 | "getrandom", 2116 | ] 2117 | 2118 | [[package]] 2119 | name = "redox_syscall" 2120 | version = "0.4.1" 2121 | source = "registry+https://github.com/rust-lang/crates.io-index" 2122 | checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" 2123 | dependencies = [ 2124 | "bitflags 1.3.2", 2125 | ] 2126 | 2127 | [[package]] 2128 | name = "redox_users" 2129 | version = "0.4.4" 2130 | source = "registry+https://github.com/rust-lang/crates.io-index" 2131 | checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" 2132 | dependencies = [ 2133 | "getrandom", 2134 | "libredox", 2135 | "thiserror", 2136 | ] 2137 | 2138 | [[package]] 2139 | name = "ref-cast" 2140 | version = "1.0.20" 2141 | source = "registry+https://github.com/rust-lang/crates.io-index" 2142 | checksum = "acde58d073e9c79da00f2b5b84eed919c8326832648a5b109b3fce1bb1175280" 2143 | dependencies = [ 2144 | "ref-cast-impl", 2145 | ] 2146 | 2147 | [[package]] 2148 | name = "ref-cast-impl" 2149 | version = "1.0.20" 2150 | source = "registry+https://github.com/rust-lang/crates.io-index" 2151 | checksum = "7f7473c2cfcf90008193dd0e3e16599455cb601a9fce322b5bb55de799664925" 2152 | dependencies = [ 2153 | "proc-macro2", 2154 | "quote", 2155 | "syn 2.0.40", 2156 | ] 2157 | 2158 | [[package]] 2159 | name = "regex" 2160 | version = "1.10.2" 2161 | source = "registry+https://github.com/rust-lang/crates.io-index" 2162 | checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" 2163 | dependencies = [ 2164 | "aho-corasick", 2165 | "memchr", 2166 | "regex-automata", 2167 | "regex-syntax 0.8.2", 2168 | ] 2169 | 2170 | [[package]] 2171 | name = "regex-automata" 2172 | version = "0.4.3" 2173 | source = "registry+https://github.com/rust-lang/crates.io-index" 2174 | checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" 2175 | dependencies = [ 2176 | "aho-corasick", 2177 | "memchr", 2178 | "regex-syntax 0.8.2", 2179 | ] 2180 | 2181 | [[package]] 2182 | name = "regex-syntax" 2183 | version = "0.7.5" 2184 | source = "registry+https://github.com/rust-lang/crates.io-index" 2185 | checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" 2186 | 2187 | [[package]] 2188 | name = "regex-syntax" 2189 | version = "0.8.2" 2190 | source = "registry+https://github.com/rust-lang/crates.io-index" 2191 | checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" 2192 | 2193 | [[package]] 2194 | name = "rend" 2195 | version = "0.4.1" 2196 | source = "registry+https://github.com/rust-lang/crates.io-index" 2197 | checksum = "a2571463863a6bd50c32f94402933f03457a3fbaf697a707c5be741e459f08fd" 2198 | dependencies = [ 2199 | "bytecheck", 2200 | ] 2201 | 2202 | [[package]] 2203 | name = "reqwest" 2204 | version = "0.11.22" 2205 | source = "registry+https://github.com/rust-lang/crates.io-index" 2206 | checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" 2207 | dependencies = [ 2208 | "base64 0.21.5", 2209 | "bytes", 2210 | "encoding_rs", 2211 | "futures-core", 2212 | "futures-util", 2213 | "h2 0.3.22", 2214 | "http 0.2.11", 2215 | "http-body 0.4.6", 2216 | "hyper 0.14.27", 2217 | "hyper-rustls", 2218 | "ipnet", 2219 | "js-sys", 2220 | "log", 2221 | "mime", 2222 | "mime_guess", 2223 | "once_cell", 2224 | "percent-encoding", 2225 | "pin-project-lite", 2226 | "rustls 0.21.10", 2227 | "rustls-pemfile", 2228 | "serde", 2229 | "serde_json", 2230 | "serde_urlencoded", 2231 | "system-configuration", 2232 | "tokio", 2233 | "tokio-rustls 0.24.1", 2234 | "tokio-util", 2235 | "tower-service", 2236 | "url", 2237 | "wasm-bindgen", 2238 | "wasm-bindgen-futures", 2239 | "wasm-streams", 2240 | "web-sys", 2241 | "webpki-roots 0.25.3", 2242 | "winreg", 2243 | ] 2244 | 2245 | [[package]] 2246 | name = "retain_mut" 2247 | version = "0.1.7" 2248 | source = "registry+https://github.com/rust-lang/crates.io-index" 2249 | checksum = "8c31b5c4033f8fdde8700e4657be2c497e7288f01515be52168c631e2e4d4086" 2250 | 2251 | [[package]] 2252 | name = "revision" 2253 | version = "0.5.0" 2254 | source = "registry+https://github.com/rust-lang/crates.io-index" 2255 | checksum = "87eb86913082f8976b06d07a59f17df9120e6f38b882cf3fc5a45b4499e224b6" 2256 | dependencies = [ 2257 | "bincode", 2258 | "chrono", 2259 | "geo 0.26.0", 2260 | "regex", 2261 | "revision-derive", 2262 | "roaring", 2263 | "rust_decimal", 2264 | "serde", 2265 | "thiserror", 2266 | "uuid", 2267 | ] 2268 | 2269 | [[package]] 2270 | name = "revision-derive" 2271 | version = "0.5.0" 2272 | source = "registry+https://github.com/rust-lang/crates.io-index" 2273 | checksum = "bf996fc5f61f1dbec35799b5c00c6dda12e8862e8cb782ed24e10d0292e60ed3" 2274 | dependencies = [ 2275 | "darling", 2276 | "proc-macro-error", 2277 | "proc-macro2", 2278 | "quote", 2279 | "syn 2.0.40", 2280 | ] 2281 | 2282 | [[package]] 2283 | name = "ring" 2284 | version = "0.16.20" 2285 | source = "registry+https://github.com/rust-lang/crates.io-index" 2286 | checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" 2287 | dependencies = [ 2288 | "cc", 2289 | "libc", 2290 | "once_cell", 2291 | "spin 0.5.2", 2292 | "untrusted 0.7.1", 2293 | "web-sys", 2294 | "winapi", 2295 | ] 2296 | 2297 | [[package]] 2298 | name = "ring" 2299 | version = "0.17.7" 2300 | source = "registry+https://github.com/rust-lang/crates.io-index" 2301 | checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" 2302 | dependencies = [ 2303 | "cc", 2304 | "getrandom", 2305 | "libc", 2306 | "spin 0.9.8", 2307 | "untrusted 0.9.0", 2308 | "windows-sys 0.48.0", 2309 | ] 2310 | 2311 | [[package]] 2312 | name = "rkyv" 2313 | version = "0.7.42" 2314 | source = "registry+https://github.com/rust-lang/crates.io-index" 2315 | checksum = "0200c8230b013893c0b2d6213d6ec64ed2b9be2e0e016682b7224ff82cff5c58" 2316 | dependencies = [ 2317 | "bitvec", 2318 | "bytecheck", 2319 | "hashbrown 0.12.3", 2320 | "ptr_meta", 2321 | "rend", 2322 | "rkyv_derive", 2323 | "seahash", 2324 | "tinyvec", 2325 | "uuid", 2326 | ] 2327 | 2328 | [[package]] 2329 | name = "rkyv_derive" 2330 | version = "0.7.42" 2331 | source = "registry+https://github.com/rust-lang/crates.io-index" 2332 | checksum = "b2e06b915b5c230a17d7a736d1e2e63ee753c256a8614ef3f5147b13a4f5541d" 2333 | dependencies = [ 2334 | "proc-macro2", 2335 | "quote", 2336 | "syn 1.0.109", 2337 | ] 2338 | 2339 | [[package]] 2340 | name = "roaring" 2341 | version = "0.10.2" 2342 | source = "registry+https://github.com/rust-lang/crates.io-index" 2343 | checksum = "6106b5cf8587f5834158895e9715a3c6c9716c8aefab57f1f7680917191c7873" 2344 | dependencies = [ 2345 | "bytemuck", 2346 | "byteorder", 2347 | "retain_mut", 2348 | "serde", 2349 | ] 2350 | 2351 | [[package]] 2352 | name = "robust" 2353 | version = "0.2.3" 2354 | source = "registry+https://github.com/rust-lang/crates.io-index" 2355 | checksum = "e5864e7ef1a6b7bcf1d6ca3f655e65e724ed3b52546a0d0a663c991522f552ea" 2356 | 2357 | [[package]] 2358 | name = "robust" 2359 | version = "1.1.0" 2360 | source = "registry+https://github.com/rust-lang/crates.io-index" 2361 | checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30" 2362 | 2363 | [[package]] 2364 | name = "rsa" 2365 | version = "0.9.6" 2366 | source = "registry+https://github.com/rust-lang/crates.io-index" 2367 | checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" 2368 | dependencies = [ 2369 | "const-oid", 2370 | "digest", 2371 | "num-bigint-dig", 2372 | "num-integer", 2373 | "num-traits", 2374 | "pkcs1", 2375 | "pkcs8", 2376 | "rand_core", 2377 | "signature", 2378 | "spki", 2379 | "subtle", 2380 | "zeroize", 2381 | ] 2382 | 2383 | [[package]] 2384 | name = "rstar" 2385 | version = "0.10.0" 2386 | source = "registry+https://github.com/rust-lang/crates.io-index" 2387 | checksum = "1f39465655a1e3d8ae79c6d9e007f4953bfc5d55297602df9dc38f9ae9f1359a" 2388 | dependencies = [ 2389 | "heapless", 2390 | "num-traits", 2391 | "smallvec", 2392 | ] 2393 | 2394 | [[package]] 2395 | name = "rstar" 2396 | version = "0.11.0" 2397 | source = "registry+https://github.com/rust-lang/crates.io-index" 2398 | checksum = "73111312eb7a2287d229f06c00ff35b51ddee180f017ab6dec1f69d62ac098d6" 2399 | dependencies = [ 2400 | "heapless", 2401 | "num-traits", 2402 | "smallvec", 2403 | ] 2404 | 2405 | [[package]] 2406 | name = "rust-stemmers" 2407 | version = "1.2.0" 2408 | source = "registry+https://github.com/rust-lang/crates.io-index" 2409 | checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54" 2410 | dependencies = [ 2411 | "serde", 2412 | "serde_derive", 2413 | ] 2414 | 2415 | [[package]] 2416 | name = "rust_decimal" 2417 | version = "1.33.1" 2418 | source = "registry+https://github.com/rust-lang/crates.io-index" 2419 | checksum = "06676aec5ccb8fc1da723cc8c0f9a46549f21ebb8753d3915c6c41db1e7f1dc4" 2420 | dependencies = [ 2421 | "arrayvec", 2422 | "borsh", 2423 | "bytes", 2424 | "num-traits", 2425 | "rand", 2426 | "rkyv", 2427 | "serde", 2428 | "serde_json", 2429 | ] 2430 | 2431 | [[package]] 2432 | name = "rustc-demangle" 2433 | version = "0.1.23" 2434 | source = "registry+https://github.com/rust-lang/crates.io-index" 2435 | checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" 2436 | 2437 | [[package]] 2438 | name = "rustc_lexer" 2439 | version = "0.1.0" 2440 | source = "registry+https://github.com/rust-lang/crates.io-index" 2441 | checksum = "c86aae0c77166108c01305ee1a36a1e77289d7dc6ca0a3cd91ff4992de2d16a5" 2442 | dependencies = [ 2443 | "unicode-xid", 2444 | ] 2445 | 2446 | [[package]] 2447 | name = "rustc_version" 2448 | version = "0.4.0" 2449 | source = "registry+https://github.com/rust-lang/crates.io-index" 2450 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 2451 | dependencies = [ 2452 | "semver", 2453 | ] 2454 | 2455 | [[package]] 2456 | name = "rustix" 2457 | version = "0.38.28" 2458 | source = "registry+https://github.com/rust-lang/crates.io-index" 2459 | checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" 2460 | dependencies = [ 2461 | "bitflags 2.4.1", 2462 | "errno", 2463 | "libc", 2464 | "linux-raw-sys", 2465 | "windows-sys 0.52.0", 2466 | ] 2467 | 2468 | [[package]] 2469 | name = "rustls" 2470 | version = "0.20.9" 2471 | source = "registry+https://github.com/rust-lang/crates.io-index" 2472 | checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" 2473 | dependencies = [ 2474 | "log", 2475 | "ring 0.16.20", 2476 | "sct", 2477 | "webpki", 2478 | ] 2479 | 2480 | [[package]] 2481 | name = "rustls" 2482 | version = "0.21.10" 2483 | source = "registry+https://github.com/rust-lang/crates.io-index" 2484 | checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" 2485 | dependencies = [ 2486 | "log", 2487 | "ring 0.17.7", 2488 | "rustls-webpki", 2489 | "sct", 2490 | ] 2491 | 2492 | [[package]] 2493 | name = "rustls-pemfile" 2494 | version = "1.0.4" 2495 | source = "registry+https://github.com/rust-lang/crates.io-index" 2496 | checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" 2497 | dependencies = [ 2498 | "base64 0.21.5", 2499 | ] 2500 | 2501 | [[package]] 2502 | name = "rustls-webpki" 2503 | version = "0.101.7" 2504 | source = "registry+https://github.com/rust-lang/crates.io-index" 2505 | checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" 2506 | dependencies = [ 2507 | "ring 0.17.7", 2508 | "untrusted 0.9.0", 2509 | ] 2510 | 2511 | [[package]] 2512 | name = "rustversion" 2513 | version = "1.0.14" 2514 | source = "registry+https://github.com/rust-lang/crates.io-index" 2515 | checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" 2516 | 2517 | [[package]] 2518 | name = "ryu" 2519 | version = "1.0.16" 2520 | source = "registry+https://github.com/rust-lang/crates.io-index" 2521 | checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" 2522 | 2523 | [[package]] 2524 | name = "salsa20" 2525 | version = "0.10.2" 2526 | source = "registry+https://github.com/rust-lang/crates.io-index" 2527 | checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" 2528 | dependencies = [ 2529 | "cipher", 2530 | ] 2531 | 2532 | [[package]] 2533 | name = "scopeguard" 2534 | version = "1.2.0" 2535 | source = "registry+https://github.com/rust-lang/crates.io-index" 2536 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2537 | 2538 | [[package]] 2539 | name = "scrypt" 2540 | version = "0.11.0" 2541 | source = "registry+https://github.com/rust-lang/crates.io-index" 2542 | checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" 2543 | dependencies = [ 2544 | "password-hash", 2545 | "pbkdf2", 2546 | "salsa20", 2547 | "sha2", 2548 | ] 2549 | 2550 | [[package]] 2551 | name = "sct" 2552 | version = "0.7.1" 2553 | source = "registry+https://github.com/rust-lang/crates.io-index" 2554 | checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" 2555 | dependencies = [ 2556 | "ring 0.17.7", 2557 | "untrusted 0.9.0", 2558 | ] 2559 | 2560 | [[package]] 2561 | name = "seahash" 2562 | version = "4.1.0" 2563 | source = "registry+https://github.com/rust-lang/crates.io-index" 2564 | checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" 2565 | 2566 | [[package]] 2567 | name = "semver" 2568 | version = "1.0.20" 2569 | source = "registry+https://github.com/rust-lang/crates.io-index" 2570 | checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" 2571 | dependencies = [ 2572 | "serde", 2573 | ] 2574 | 2575 | [[package]] 2576 | name = "send_wrapper" 2577 | version = "0.6.0" 2578 | source = "registry+https://github.com/rust-lang/crates.io-index" 2579 | checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" 2580 | 2581 | [[package]] 2582 | name = "serde" 2583 | version = "1.0.193" 2584 | source = "registry+https://github.com/rust-lang/crates.io-index" 2585 | checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" 2586 | dependencies = [ 2587 | "serde_derive", 2588 | ] 2589 | 2590 | [[package]] 2591 | name = "serde_derive" 2592 | version = "1.0.193" 2593 | source = "registry+https://github.com/rust-lang/crates.io-index" 2594 | checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" 2595 | dependencies = [ 2596 | "proc-macro2", 2597 | "quote", 2598 | "syn 2.0.40", 2599 | ] 2600 | 2601 | [[package]] 2602 | name = "serde_json" 2603 | version = "1.0.108" 2604 | source = "registry+https://github.com/rust-lang/crates.io-index" 2605 | checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" 2606 | dependencies = [ 2607 | "indexmap 2.1.0", 2608 | "itoa", 2609 | "ryu", 2610 | "serde", 2611 | ] 2612 | 2613 | [[package]] 2614 | name = "serde_path_to_error" 2615 | version = "0.1.14" 2616 | source = "registry+https://github.com/rust-lang/crates.io-index" 2617 | checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335" 2618 | dependencies = [ 2619 | "itoa", 2620 | "serde", 2621 | ] 2622 | 2623 | [[package]] 2624 | name = "serde_urlencoded" 2625 | version = "0.7.1" 2626 | source = "registry+https://github.com/rust-lang/crates.io-index" 2627 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 2628 | dependencies = [ 2629 | "form_urlencoded", 2630 | "itoa", 2631 | "ryu", 2632 | "serde", 2633 | ] 2634 | 2635 | [[package]] 2636 | name = "serde_with" 2637 | version = "3.4.0" 2638 | source = "registry+https://github.com/rust-lang/crates.io-index" 2639 | checksum = "64cd236ccc1b7a29e7e2739f27c0b2dd199804abc4290e32f59f3b68d6405c23" 2640 | dependencies = [ 2641 | "base64 0.21.5", 2642 | "chrono", 2643 | "hex", 2644 | "indexmap 1.9.3", 2645 | "indexmap 2.1.0", 2646 | "serde", 2647 | "serde_json", 2648 | "serde_with_macros", 2649 | "time", 2650 | ] 2651 | 2652 | [[package]] 2653 | name = "serde_with_macros" 2654 | version = "3.4.0" 2655 | source = "registry+https://github.com/rust-lang/crates.io-index" 2656 | checksum = "93634eb5f75a2323b16de4748022ac4297f9e76b6dced2be287a099f41b5e788" 2657 | dependencies = [ 2658 | "darling", 2659 | "proc-macro2", 2660 | "quote", 2661 | "syn 2.0.40", 2662 | ] 2663 | 2664 | [[package]] 2665 | name = "sha-1" 2666 | version = "0.10.1" 2667 | source = "registry+https://github.com/rust-lang/crates.io-index" 2668 | checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" 2669 | dependencies = [ 2670 | "cfg-if", 2671 | "cpufeatures", 2672 | "digest", 2673 | ] 2674 | 2675 | [[package]] 2676 | name = "sha1" 2677 | version = "0.10.6" 2678 | source = "registry+https://github.com/rust-lang/crates.io-index" 2679 | checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 2680 | dependencies = [ 2681 | "cfg-if", 2682 | "cpufeatures", 2683 | "digest", 2684 | ] 2685 | 2686 | [[package]] 2687 | name = "sha2" 2688 | version = "0.10.8" 2689 | source = "registry+https://github.com/rust-lang/crates.io-index" 2690 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 2691 | dependencies = [ 2692 | "cfg-if", 2693 | "cpufeatures", 2694 | "digest", 2695 | ] 2696 | 2697 | [[package]] 2698 | name = "signal-hook-registry" 2699 | version = "1.4.1" 2700 | source = "registry+https://github.com/rust-lang/crates.io-index" 2701 | checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" 2702 | dependencies = [ 2703 | "libc", 2704 | ] 2705 | 2706 | [[package]] 2707 | name = "signature" 2708 | version = "2.2.0" 2709 | source = "registry+https://github.com/rust-lang/crates.io-index" 2710 | checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" 2711 | dependencies = [ 2712 | "digest", 2713 | "rand_core", 2714 | ] 2715 | 2716 | [[package]] 2717 | name = "simdutf8" 2718 | version = "0.1.4" 2719 | source = "registry+https://github.com/rust-lang/crates.io-index" 2720 | checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" 2721 | 2722 | [[package]] 2723 | name = "simple_asn1" 2724 | version = "0.6.2" 2725 | source = "registry+https://github.com/rust-lang/crates.io-index" 2726 | checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" 2727 | dependencies = [ 2728 | "num-bigint", 2729 | "num-traits", 2730 | "thiserror", 2731 | "time", 2732 | ] 2733 | 2734 | [[package]] 2735 | name = "siphasher" 2736 | version = "0.3.11" 2737 | source = "registry+https://github.com/rust-lang/crates.io-index" 2738 | checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" 2739 | 2740 | [[package]] 2741 | name = "slab" 2742 | version = "0.4.9" 2743 | source = "registry+https://github.com/rust-lang/crates.io-index" 2744 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 2745 | dependencies = [ 2746 | "autocfg", 2747 | ] 2748 | 2749 | [[package]] 2750 | name = "smallvec" 2751 | version = "1.11.2" 2752 | source = "registry+https://github.com/rust-lang/crates.io-index" 2753 | checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" 2754 | 2755 | [[package]] 2756 | name = "smol_str" 2757 | version = "0.2.0" 2758 | source = "registry+https://github.com/rust-lang/crates.io-index" 2759 | checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c" 2760 | dependencies = [ 2761 | "serde", 2762 | ] 2763 | 2764 | [[package]] 2765 | name = "snap" 2766 | version = "1.1.1" 2767 | source = "registry+https://github.com/rust-lang/crates.io-index" 2768 | checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" 2769 | 2770 | [[package]] 2771 | name = "socket2" 2772 | version = "0.4.10" 2773 | source = "registry+https://github.com/rust-lang/crates.io-index" 2774 | checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" 2775 | dependencies = [ 2776 | "libc", 2777 | "winapi", 2778 | ] 2779 | 2780 | [[package]] 2781 | name = "socket2" 2782 | version = "0.5.5" 2783 | source = "registry+https://github.com/rust-lang/crates.io-index" 2784 | checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" 2785 | dependencies = [ 2786 | "libc", 2787 | "windows-sys 0.48.0", 2788 | ] 2789 | 2790 | [[package]] 2791 | name = "spin" 2792 | version = "0.5.2" 2793 | source = "registry+https://github.com/rust-lang/crates.io-index" 2794 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" 2795 | 2796 | [[package]] 2797 | name = "spin" 2798 | version = "0.9.8" 2799 | source = "registry+https://github.com/rust-lang/crates.io-index" 2800 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 2801 | dependencies = [ 2802 | "lock_api", 2803 | ] 2804 | 2805 | [[package]] 2806 | name = "spki" 2807 | version = "0.7.3" 2808 | source = "registry+https://github.com/rust-lang/crates.io-index" 2809 | checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" 2810 | dependencies = [ 2811 | "base64ct", 2812 | "der", 2813 | ] 2814 | 2815 | [[package]] 2816 | name = "stable_deref_trait" 2817 | version = "1.2.0" 2818 | source = "registry+https://github.com/rust-lang/crates.io-index" 2819 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 2820 | 2821 | [[package]] 2822 | name = "stacker" 2823 | version = "0.1.15" 2824 | source = "registry+https://github.com/rust-lang/crates.io-index" 2825 | checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" 2826 | dependencies = [ 2827 | "cc", 2828 | "cfg-if", 2829 | "libc", 2830 | "psm", 2831 | "winapi", 2832 | ] 2833 | 2834 | [[package]] 2835 | name = "storekey" 2836 | version = "0.5.0" 2837 | source = "registry+https://github.com/rust-lang/crates.io-index" 2838 | checksum = "43c42833834a5d23b344f71d87114e0cc9994766a5c42938f4b50e7b2aef85b2" 2839 | dependencies = [ 2840 | "byteorder", 2841 | "memchr", 2842 | "serde", 2843 | "thiserror", 2844 | ] 2845 | 2846 | [[package]] 2847 | name = "string_cache" 2848 | version = "0.8.7" 2849 | source = "registry+https://github.com/rust-lang/crates.io-index" 2850 | checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" 2851 | dependencies = [ 2852 | "new_debug_unreachable", 2853 | "once_cell", 2854 | "parking_lot", 2855 | "phf_shared", 2856 | "precomputed-hash", 2857 | ] 2858 | 2859 | [[package]] 2860 | name = "strsim" 2861 | version = "0.10.0" 2862 | source = "registry+https://github.com/rust-lang/crates.io-index" 2863 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 2864 | 2865 | [[package]] 2866 | name = "subtle" 2867 | version = "2.5.0" 2868 | source = "registry+https://github.com/rust-lang/crates.io-index" 2869 | checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" 2870 | 2871 | [[package]] 2872 | name = "surrealdb" 2873 | version = "1.0.0" 2874 | source = "registry+https://github.com/rust-lang/crates.io-index" 2875 | checksum = "46fb62fbf4b5f0f28c52e919c7a0f5eb4aa4cd6b92b1e25f2e71a7f2d9f92524" 2876 | dependencies = [ 2877 | "addr", 2878 | "any_ascii", 2879 | "argon2", 2880 | "async-channel", 2881 | "async-executor", 2882 | "async-recursion", 2883 | "base64 0.21.5", 2884 | "bcrypt", 2885 | "bincode", 2886 | "bytes", 2887 | "cedar-policy", 2888 | "chrono", 2889 | "deunicode", 2890 | "dmp", 2891 | "flume", 2892 | "fst", 2893 | "futures", 2894 | "futures-concurrency", 2895 | "fuzzy-matcher", 2896 | "geo 0.25.1", 2897 | "indexmap 1.9.3", 2898 | "ipnet", 2899 | "lexicmp", 2900 | "lru", 2901 | "md-5", 2902 | "nanoid", 2903 | "nom", 2904 | "once_cell", 2905 | "path-clean", 2906 | "pbkdf2", 2907 | "pharos", 2908 | "pin-project-lite", 2909 | "radix_trie", 2910 | "rand", 2911 | "regex", 2912 | "reqwest", 2913 | "revision", 2914 | "roaring", 2915 | "rust-stemmers", 2916 | "rust_decimal", 2917 | "rustls 0.20.9", 2918 | "scrypt", 2919 | "semver", 2920 | "serde", 2921 | "serde_json", 2922 | "sha-1", 2923 | "sha2", 2924 | "snap", 2925 | "storekey", 2926 | "surrealdb-derive", 2927 | "surrealdb-jsonwebtoken", 2928 | "thiserror", 2929 | "tokio", 2930 | "tokio-tungstenite", 2931 | "tracing", 2932 | "trice", 2933 | "ulid", 2934 | "url", 2935 | "uuid", 2936 | "wasm-bindgen-futures", 2937 | "wasmtimer", 2938 | "ws_stream_wasm", 2939 | ] 2940 | 2941 | [[package]] 2942 | name = "surrealdb-derive" 2943 | version = "0.12.0" 2944 | source = "registry+https://github.com/rust-lang/crates.io-index" 2945 | checksum = "aacdb4c58b9ebef0291310afcd63af0012d85610d361f3785952c61b6f1dddf4" 2946 | dependencies = [ 2947 | "quote", 2948 | "syn 1.0.109", 2949 | ] 2950 | 2951 | [[package]] 2952 | name = "surrealdb-jsonwebtoken" 2953 | version = "8.3.0-surreal.1" 2954 | source = "registry+https://github.com/rust-lang/crates.io-index" 2955 | checksum = "02d4f759c65df8a8cf2d83c99db7fdd3ae5b8fff05fa7fe69a8612f29dd5f99b" 2956 | dependencies = [ 2957 | "base64 0.21.5", 2958 | "getrandom", 2959 | "hmac", 2960 | "pem", 2961 | "rand", 2962 | "ring 0.16.20", 2963 | "rsa", 2964 | "serde", 2965 | "serde_json", 2966 | "sha2", 2967 | "simple_asn1", 2968 | ] 2969 | 2970 | [[package]] 2971 | name = "syn" 2972 | version = "1.0.109" 2973 | source = "registry+https://github.com/rust-lang/crates.io-index" 2974 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2975 | dependencies = [ 2976 | "proc-macro2", 2977 | "quote", 2978 | "unicode-ident", 2979 | ] 2980 | 2981 | [[package]] 2982 | name = "syn" 2983 | version = "2.0.40" 2984 | source = "registry+https://github.com/rust-lang/crates.io-index" 2985 | checksum = "13fa70a4ee923979ffb522cacce59d34421ebdea5625e1073c4326ef9d2dd42e" 2986 | dependencies = [ 2987 | "proc-macro2", 2988 | "quote", 2989 | "unicode-ident", 2990 | ] 2991 | 2992 | [[package]] 2993 | name = "syn_derive" 2994 | version = "0.1.8" 2995 | source = "registry+https://github.com/rust-lang/crates.io-index" 2996 | checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" 2997 | dependencies = [ 2998 | "proc-macro-error", 2999 | "proc-macro2", 3000 | "quote", 3001 | "syn 2.0.40", 3002 | ] 3003 | 3004 | [[package]] 3005 | name = "sync_wrapper" 3006 | version = "0.1.2" 3007 | source = "registry+https://github.com/rust-lang/crates.io-index" 3008 | checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" 3009 | 3010 | [[package]] 3011 | name = "system-configuration" 3012 | version = "0.5.1" 3013 | source = "registry+https://github.com/rust-lang/crates.io-index" 3014 | checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" 3015 | dependencies = [ 3016 | "bitflags 1.3.2", 3017 | "core-foundation", 3018 | "system-configuration-sys", 3019 | ] 3020 | 3021 | [[package]] 3022 | name = "system-configuration-sys" 3023 | version = "0.5.0" 3024 | source = "registry+https://github.com/rust-lang/crates.io-index" 3025 | checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" 3026 | dependencies = [ 3027 | "core-foundation-sys", 3028 | "libc", 3029 | ] 3030 | 3031 | [[package]] 3032 | name = "tap" 3033 | version = "1.0.1" 3034 | source = "registry+https://github.com/rust-lang/crates.io-index" 3035 | checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" 3036 | 3037 | [[package]] 3038 | name = "term" 3039 | version = "0.7.0" 3040 | source = "registry+https://github.com/rust-lang/crates.io-index" 3041 | checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" 3042 | dependencies = [ 3043 | "dirs-next", 3044 | "rustversion", 3045 | "winapi", 3046 | ] 3047 | 3048 | [[package]] 3049 | name = "thiserror" 3050 | version = "1.0.50" 3051 | source = "registry+https://github.com/rust-lang/crates.io-index" 3052 | checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" 3053 | dependencies = [ 3054 | "thiserror-impl", 3055 | ] 3056 | 3057 | [[package]] 3058 | name = "thiserror-impl" 3059 | version = "1.0.50" 3060 | source = "registry+https://github.com/rust-lang/crates.io-index" 3061 | checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" 3062 | dependencies = [ 3063 | "proc-macro2", 3064 | "quote", 3065 | "syn 2.0.40", 3066 | ] 3067 | 3068 | [[package]] 3069 | name = "thread_local" 3070 | version = "1.1.7" 3071 | source = "registry+https://github.com/rust-lang/crates.io-index" 3072 | checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" 3073 | dependencies = [ 3074 | "cfg-if", 3075 | "once_cell", 3076 | ] 3077 | 3078 | [[package]] 3079 | name = "time" 3080 | version = "0.3.30" 3081 | source = "registry+https://github.com/rust-lang/crates.io-index" 3082 | checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" 3083 | dependencies = [ 3084 | "deranged", 3085 | "itoa", 3086 | "powerfmt", 3087 | "serde", 3088 | "time-core", 3089 | "time-macros", 3090 | ] 3091 | 3092 | [[package]] 3093 | name = "time-core" 3094 | version = "0.1.2" 3095 | source = "registry+https://github.com/rust-lang/crates.io-index" 3096 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 3097 | 3098 | [[package]] 3099 | name = "time-macros" 3100 | version = "0.2.15" 3101 | source = "registry+https://github.com/rust-lang/crates.io-index" 3102 | checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" 3103 | dependencies = [ 3104 | "time-core", 3105 | ] 3106 | 3107 | [[package]] 3108 | name = "tiny-keccak" 3109 | version = "2.0.2" 3110 | source = "registry+https://github.com/rust-lang/crates.io-index" 3111 | checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" 3112 | dependencies = [ 3113 | "crunchy", 3114 | ] 3115 | 3116 | [[package]] 3117 | name = "tinyvec" 3118 | version = "1.6.0" 3119 | source = "registry+https://github.com/rust-lang/crates.io-index" 3120 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 3121 | dependencies = [ 3122 | "tinyvec_macros", 3123 | ] 3124 | 3125 | [[package]] 3126 | name = "tinyvec_macros" 3127 | version = "0.1.1" 3128 | source = "registry+https://github.com/rust-lang/crates.io-index" 3129 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 3130 | 3131 | [[package]] 3132 | name = "tokio" 3133 | version = "1.35.0" 3134 | source = "registry+https://github.com/rust-lang/crates.io-index" 3135 | checksum = "841d45b238a16291a4e1584e61820b8ae57d696cc5015c459c229ccc6990cc1c" 3136 | dependencies = [ 3137 | "backtrace", 3138 | "bytes", 3139 | "libc", 3140 | "mio", 3141 | "num_cpus", 3142 | "parking_lot", 3143 | "pin-project-lite", 3144 | "signal-hook-registry", 3145 | "socket2 0.5.5", 3146 | "tokio-macros", 3147 | "windows-sys 0.48.0", 3148 | ] 3149 | 3150 | [[package]] 3151 | name = "tokio-macros" 3152 | version = "2.2.0" 3153 | source = "registry+https://github.com/rust-lang/crates.io-index" 3154 | checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" 3155 | dependencies = [ 3156 | "proc-macro2", 3157 | "quote", 3158 | "syn 2.0.40", 3159 | ] 3160 | 3161 | [[package]] 3162 | name = "tokio-rustls" 3163 | version = "0.23.4" 3164 | source = "registry+https://github.com/rust-lang/crates.io-index" 3165 | checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" 3166 | dependencies = [ 3167 | "rustls 0.20.9", 3168 | "tokio", 3169 | "webpki", 3170 | ] 3171 | 3172 | [[package]] 3173 | name = "tokio-rustls" 3174 | version = "0.24.1" 3175 | source = "registry+https://github.com/rust-lang/crates.io-index" 3176 | checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" 3177 | dependencies = [ 3178 | "rustls 0.21.10", 3179 | "tokio", 3180 | ] 3181 | 3182 | [[package]] 3183 | name = "tokio-tungstenite" 3184 | version = "0.18.0" 3185 | source = "registry+https://github.com/rust-lang/crates.io-index" 3186 | checksum = "54319c93411147bced34cb5609a80e0a8e44c5999c93903a81cd866630ec0bfd" 3187 | dependencies = [ 3188 | "futures-util", 3189 | "log", 3190 | "rustls 0.20.9", 3191 | "tokio", 3192 | "tokio-rustls 0.23.4", 3193 | "tungstenite", 3194 | "webpki", 3195 | "webpki-roots 0.22.6", 3196 | ] 3197 | 3198 | [[package]] 3199 | name = "tokio-util" 3200 | version = "0.7.10" 3201 | source = "registry+https://github.com/rust-lang/crates.io-index" 3202 | checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" 3203 | dependencies = [ 3204 | "bytes", 3205 | "futures-core", 3206 | "futures-sink", 3207 | "pin-project-lite", 3208 | "tokio", 3209 | "tracing", 3210 | ] 3211 | 3212 | [[package]] 3213 | name = "toml_datetime" 3214 | version = "0.6.3" 3215 | source = "registry+https://github.com/rust-lang/crates.io-index" 3216 | checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" 3217 | 3218 | [[package]] 3219 | name = "toml_edit" 3220 | version = "0.20.2" 3221 | source = "registry+https://github.com/rust-lang/crates.io-index" 3222 | checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" 3223 | dependencies = [ 3224 | "indexmap 2.1.0", 3225 | "toml_datetime", 3226 | "winnow", 3227 | ] 3228 | 3229 | [[package]] 3230 | name = "tower" 3231 | version = "0.4.13" 3232 | source = "registry+https://github.com/rust-lang/crates.io-index" 3233 | checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" 3234 | dependencies = [ 3235 | "futures-core", 3236 | "futures-util", 3237 | "pin-project", 3238 | "pin-project-lite", 3239 | "tokio", 3240 | "tower-layer", 3241 | "tower-service", 3242 | "tracing", 3243 | ] 3244 | 3245 | [[package]] 3246 | name = "tower-http" 3247 | version = "0.5.0" 3248 | source = "registry+https://github.com/rust-lang/crates.io-index" 3249 | checksum = "09e12e6351354851911bdf8c2b8f2ab15050c567d70a8b9a37ae7b8301a4080d" 3250 | dependencies = [ 3251 | "bitflags 2.4.1", 3252 | "bytes", 3253 | "http 1.0.0", 3254 | "http-body 1.0.0", 3255 | "http-body-util", 3256 | "pin-project-lite", 3257 | "tower-layer", 3258 | "tower-service", 3259 | ] 3260 | 3261 | [[package]] 3262 | name = "tower-layer" 3263 | version = "0.3.2" 3264 | source = "registry+https://github.com/rust-lang/crates.io-index" 3265 | checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" 3266 | 3267 | [[package]] 3268 | name = "tower-service" 3269 | version = "0.3.2" 3270 | source = "registry+https://github.com/rust-lang/crates.io-index" 3271 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" 3272 | 3273 | [[package]] 3274 | name = "tracing" 3275 | version = "0.1.40" 3276 | source = "registry+https://github.com/rust-lang/crates.io-index" 3277 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 3278 | dependencies = [ 3279 | "log", 3280 | "pin-project-lite", 3281 | "tracing-attributes", 3282 | "tracing-core", 3283 | ] 3284 | 3285 | [[package]] 3286 | name = "tracing-attributes" 3287 | version = "0.1.27" 3288 | source = "registry+https://github.com/rust-lang/crates.io-index" 3289 | checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" 3290 | dependencies = [ 3291 | "proc-macro2", 3292 | "quote", 3293 | "syn 2.0.40", 3294 | ] 3295 | 3296 | [[package]] 3297 | name = "tracing-core" 3298 | version = "0.1.32" 3299 | source = "registry+https://github.com/rust-lang/crates.io-index" 3300 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 3301 | dependencies = [ 3302 | "once_cell", 3303 | ] 3304 | 3305 | [[package]] 3306 | name = "trice" 3307 | version = "0.3.1" 3308 | source = "registry+https://github.com/rust-lang/crates.io-index" 3309 | checksum = "61aa4cd1c1dca57255b92cb9e53d5b3ac5a22da6d8a63045337eb3da1a065d43" 3310 | dependencies = [ 3311 | "js-sys", 3312 | "wasm-bindgen", 3313 | "web-sys", 3314 | ] 3315 | 3316 | [[package]] 3317 | name = "try-lock" 3318 | version = "0.2.5" 3319 | source = "registry+https://github.com/rust-lang/crates.io-index" 3320 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 3321 | 3322 | [[package]] 3323 | name = "tungstenite" 3324 | version = "0.18.0" 3325 | source = "registry+https://github.com/rust-lang/crates.io-index" 3326 | checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788" 3327 | dependencies = [ 3328 | "base64 0.13.1", 3329 | "byteorder", 3330 | "bytes", 3331 | "http 0.2.11", 3332 | "httparse", 3333 | "log", 3334 | "rand", 3335 | "rustls 0.20.9", 3336 | "sha1", 3337 | "thiserror", 3338 | "url", 3339 | "utf-8", 3340 | "webpki", 3341 | ] 3342 | 3343 | [[package]] 3344 | name = "typenum" 3345 | version = "1.17.0" 3346 | source = "registry+https://github.com/rust-lang/crates.io-index" 3347 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 3348 | 3349 | [[package]] 3350 | name = "ulid" 3351 | version = "1.1.0" 3352 | source = "registry+https://github.com/rust-lang/crates.io-index" 3353 | checksum = "7e37c4b6cbcc59a8dcd09a6429fbc7890286bcbb79215cea7b38a3c4c0921d93" 3354 | dependencies = [ 3355 | "rand", 3356 | "serde", 3357 | ] 3358 | 3359 | [[package]] 3360 | name = "unicase" 3361 | version = "2.7.0" 3362 | source = "registry+https://github.com/rust-lang/crates.io-index" 3363 | checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" 3364 | dependencies = [ 3365 | "version_check", 3366 | ] 3367 | 3368 | [[package]] 3369 | name = "unicode-bidi" 3370 | version = "0.3.14" 3371 | source = "registry+https://github.com/rust-lang/crates.io-index" 3372 | checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" 3373 | 3374 | [[package]] 3375 | name = "unicode-ident" 3376 | version = "1.0.12" 3377 | source = "registry+https://github.com/rust-lang/crates.io-index" 3378 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 3379 | 3380 | [[package]] 3381 | name = "unicode-normalization" 3382 | version = "0.1.22" 3383 | source = "registry+https://github.com/rust-lang/crates.io-index" 3384 | checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" 3385 | dependencies = [ 3386 | "tinyvec", 3387 | ] 3388 | 3389 | [[package]] 3390 | name = "unicode-script" 3391 | version = "0.5.5" 3392 | source = "registry+https://github.com/rust-lang/crates.io-index" 3393 | checksum = "7d817255e1bed6dfd4ca47258685d14d2bdcfbc64fdc9e3819bd5848057b8ecc" 3394 | 3395 | [[package]] 3396 | name = "unicode-security" 3397 | version = "0.1.0" 3398 | source = "registry+https://github.com/rust-lang/crates.io-index" 3399 | checksum = "9ef5756b3097992b934b06608c69f48448a0fbe804bb1e72b982f6d7983e9e63" 3400 | dependencies = [ 3401 | "unicode-normalization", 3402 | "unicode-script", 3403 | ] 3404 | 3405 | [[package]] 3406 | name = "unicode-width" 3407 | version = "0.1.11" 3408 | source = "registry+https://github.com/rust-lang/crates.io-index" 3409 | checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" 3410 | 3411 | [[package]] 3412 | name = "unicode-xid" 3413 | version = "0.2.4" 3414 | source = "registry+https://github.com/rust-lang/crates.io-index" 3415 | checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" 3416 | 3417 | [[package]] 3418 | name = "untrusted" 3419 | version = "0.7.1" 3420 | source = "registry+https://github.com/rust-lang/crates.io-index" 3421 | checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" 3422 | 3423 | [[package]] 3424 | name = "untrusted" 3425 | version = "0.9.0" 3426 | source = "registry+https://github.com/rust-lang/crates.io-index" 3427 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 3428 | 3429 | [[package]] 3430 | name = "url" 3431 | version = "2.5.0" 3432 | source = "registry+https://github.com/rust-lang/crates.io-index" 3433 | checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" 3434 | dependencies = [ 3435 | "form_urlencoded", 3436 | "idna", 3437 | "percent-encoding", 3438 | ] 3439 | 3440 | [[package]] 3441 | name = "urlencoding" 3442 | version = "2.1.3" 3443 | source = "registry+https://github.com/rust-lang/crates.io-index" 3444 | checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" 3445 | 3446 | [[package]] 3447 | name = "utf-8" 3448 | version = "0.7.6" 3449 | source = "registry+https://github.com/rust-lang/crates.io-index" 3450 | checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 3451 | 3452 | [[package]] 3453 | name = "uuid" 3454 | version = "1.6.1" 3455 | source = "registry+https://github.com/rust-lang/crates.io-index" 3456 | checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" 3457 | dependencies = [ 3458 | "atomic", 3459 | "getrandom", 3460 | "serde", 3461 | "wasm-bindgen", 3462 | ] 3463 | 3464 | [[package]] 3465 | name = "version_check" 3466 | version = "0.9.4" 3467 | source = "registry+https://github.com/rust-lang/crates.io-index" 3468 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 3469 | 3470 | [[package]] 3471 | name = "want" 3472 | version = "0.3.1" 3473 | source = "registry+https://github.com/rust-lang/crates.io-index" 3474 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 3475 | dependencies = [ 3476 | "try-lock", 3477 | ] 3478 | 3479 | [[package]] 3480 | name = "wasi" 3481 | version = "0.11.0+wasi-snapshot-preview1" 3482 | source = "registry+https://github.com/rust-lang/crates.io-index" 3483 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 3484 | 3485 | [[package]] 3486 | name = "wasm-bindgen" 3487 | version = "0.2.89" 3488 | source = "registry+https://github.com/rust-lang/crates.io-index" 3489 | checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" 3490 | dependencies = [ 3491 | "cfg-if", 3492 | "wasm-bindgen-macro", 3493 | ] 3494 | 3495 | [[package]] 3496 | name = "wasm-bindgen-backend" 3497 | version = "0.2.89" 3498 | source = "registry+https://github.com/rust-lang/crates.io-index" 3499 | checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" 3500 | dependencies = [ 3501 | "bumpalo", 3502 | "log", 3503 | "once_cell", 3504 | "proc-macro2", 3505 | "quote", 3506 | "syn 2.0.40", 3507 | "wasm-bindgen-shared", 3508 | ] 3509 | 3510 | [[package]] 3511 | name = "wasm-bindgen-futures" 3512 | version = "0.4.39" 3513 | source = "registry+https://github.com/rust-lang/crates.io-index" 3514 | checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" 3515 | dependencies = [ 3516 | "cfg-if", 3517 | "js-sys", 3518 | "wasm-bindgen", 3519 | "web-sys", 3520 | ] 3521 | 3522 | [[package]] 3523 | name = "wasm-bindgen-macro" 3524 | version = "0.2.89" 3525 | source = "registry+https://github.com/rust-lang/crates.io-index" 3526 | checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" 3527 | dependencies = [ 3528 | "quote", 3529 | "wasm-bindgen-macro-support", 3530 | ] 3531 | 3532 | [[package]] 3533 | name = "wasm-bindgen-macro-support" 3534 | version = "0.2.89" 3535 | source = "registry+https://github.com/rust-lang/crates.io-index" 3536 | checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" 3537 | dependencies = [ 3538 | "proc-macro2", 3539 | "quote", 3540 | "syn 2.0.40", 3541 | "wasm-bindgen-backend", 3542 | "wasm-bindgen-shared", 3543 | ] 3544 | 3545 | [[package]] 3546 | name = "wasm-bindgen-shared" 3547 | version = "0.2.89" 3548 | source = "registry+https://github.com/rust-lang/crates.io-index" 3549 | checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" 3550 | 3551 | [[package]] 3552 | name = "wasm-streams" 3553 | version = "0.3.0" 3554 | source = "registry+https://github.com/rust-lang/crates.io-index" 3555 | checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7" 3556 | dependencies = [ 3557 | "futures-util", 3558 | "js-sys", 3559 | "wasm-bindgen", 3560 | "wasm-bindgen-futures", 3561 | "web-sys", 3562 | ] 3563 | 3564 | [[package]] 3565 | name = "wasmtimer" 3566 | version = "0.2.0" 3567 | source = "registry+https://github.com/rust-lang/crates.io-index" 3568 | checksum = "5f656cd8858a5164932d8a90f936700860976ec21eb00e0fe2aa8cab13f6b4cf" 3569 | dependencies = [ 3570 | "futures", 3571 | "js-sys", 3572 | "parking_lot", 3573 | "pin-utils", 3574 | "wasm-bindgen", 3575 | ] 3576 | 3577 | [[package]] 3578 | name = "web-sys" 3579 | version = "0.3.66" 3580 | source = "registry+https://github.com/rust-lang/crates.io-index" 3581 | checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" 3582 | dependencies = [ 3583 | "js-sys", 3584 | "wasm-bindgen", 3585 | ] 3586 | 3587 | [[package]] 3588 | name = "webpki" 3589 | version = "0.22.4" 3590 | source = "registry+https://github.com/rust-lang/crates.io-index" 3591 | checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" 3592 | dependencies = [ 3593 | "ring 0.17.7", 3594 | "untrusted 0.9.0", 3595 | ] 3596 | 3597 | [[package]] 3598 | name = "webpki-roots" 3599 | version = "0.22.6" 3600 | source = "registry+https://github.com/rust-lang/crates.io-index" 3601 | checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" 3602 | dependencies = [ 3603 | "webpki", 3604 | ] 3605 | 3606 | [[package]] 3607 | name = "webpki-roots" 3608 | version = "0.25.3" 3609 | source = "registry+https://github.com/rust-lang/crates.io-index" 3610 | checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" 3611 | 3612 | [[package]] 3613 | name = "winapi" 3614 | version = "0.3.9" 3615 | source = "registry+https://github.com/rust-lang/crates.io-index" 3616 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3617 | dependencies = [ 3618 | "winapi-i686-pc-windows-gnu", 3619 | "winapi-x86_64-pc-windows-gnu", 3620 | ] 3621 | 3622 | [[package]] 3623 | name = "winapi-i686-pc-windows-gnu" 3624 | version = "0.4.0" 3625 | source = "registry+https://github.com/rust-lang/crates.io-index" 3626 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3627 | 3628 | [[package]] 3629 | name = "winapi-x86_64-pc-windows-gnu" 3630 | version = "0.4.0" 3631 | source = "registry+https://github.com/rust-lang/crates.io-index" 3632 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3633 | 3634 | [[package]] 3635 | name = "windows-core" 3636 | version = "0.51.1" 3637 | source = "registry+https://github.com/rust-lang/crates.io-index" 3638 | checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" 3639 | dependencies = [ 3640 | "windows-targets 0.48.5", 3641 | ] 3642 | 3643 | [[package]] 3644 | name = "windows-sys" 3645 | version = "0.48.0" 3646 | source = "registry+https://github.com/rust-lang/crates.io-index" 3647 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 3648 | dependencies = [ 3649 | "windows-targets 0.48.5", 3650 | ] 3651 | 3652 | [[package]] 3653 | name = "windows-sys" 3654 | version = "0.52.0" 3655 | source = "registry+https://github.com/rust-lang/crates.io-index" 3656 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 3657 | dependencies = [ 3658 | "windows-targets 0.52.0", 3659 | ] 3660 | 3661 | [[package]] 3662 | name = "windows-targets" 3663 | version = "0.48.5" 3664 | source = "registry+https://github.com/rust-lang/crates.io-index" 3665 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 3666 | dependencies = [ 3667 | "windows_aarch64_gnullvm 0.48.5", 3668 | "windows_aarch64_msvc 0.48.5", 3669 | "windows_i686_gnu 0.48.5", 3670 | "windows_i686_msvc 0.48.5", 3671 | "windows_x86_64_gnu 0.48.5", 3672 | "windows_x86_64_gnullvm 0.48.5", 3673 | "windows_x86_64_msvc 0.48.5", 3674 | ] 3675 | 3676 | [[package]] 3677 | name = "windows-targets" 3678 | version = "0.52.0" 3679 | source = "registry+https://github.com/rust-lang/crates.io-index" 3680 | checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" 3681 | dependencies = [ 3682 | "windows_aarch64_gnullvm 0.52.0", 3683 | "windows_aarch64_msvc 0.52.0", 3684 | "windows_i686_gnu 0.52.0", 3685 | "windows_i686_msvc 0.52.0", 3686 | "windows_x86_64_gnu 0.52.0", 3687 | "windows_x86_64_gnullvm 0.52.0", 3688 | "windows_x86_64_msvc 0.52.0", 3689 | ] 3690 | 3691 | [[package]] 3692 | name = "windows_aarch64_gnullvm" 3693 | version = "0.48.5" 3694 | source = "registry+https://github.com/rust-lang/crates.io-index" 3695 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 3696 | 3697 | [[package]] 3698 | name = "windows_aarch64_gnullvm" 3699 | version = "0.52.0" 3700 | source = "registry+https://github.com/rust-lang/crates.io-index" 3701 | checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" 3702 | 3703 | [[package]] 3704 | name = "windows_aarch64_msvc" 3705 | version = "0.48.5" 3706 | source = "registry+https://github.com/rust-lang/crates.io-index" 3707 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 3708 | 3709 | [[package]] 3710 | name = "windows_aarch64_msvc" 3711 | version = "0.52.0" 3712 | source = "registry+https://github.com/rust-lang/crates.io-index" 3713 | checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" 3714 | 3715 | [[package]] 3716 | name = "windows_i686_gnu" 3717 | version = "0.48.5" 3718 | source = "registry+https://github.com/rust-lang/crates.io-index" 3719 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 3720 | 3721 | [[package]] 3722 | name = "windows_i686_gnu" 3723 | version = "0.52.0" 3724 | source = "registry+https://github.com/rust-lang/crates.io-index" 3725 | checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" 3726 | 3727 | [[package]] 3728 | name = "windows_i686_msvc" 3729 | version = "0.48.5" 3730 | source = "registry+https://github.com/rust-lang/crates.io-index" 3731 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 3732 | 3733 | [[package]] 3734 | name = "windows_i686_msvc" 3735 | version = "0.52.0" 3736 | source = "registry+https://github.com/rust-lang/crates.io-index" 3737 | checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" 3738 | 3739 | [[package]] 3740 | name = "windows_x86_64_gnu" 3741 | version = "0.48.5" 3742 | source = "registry+https://github.com/rust-lang/crates.io-index" 3743 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 3744 | 3745 | [[package]] 3746 | name = "windows_x86_64_gnu" 3747 | version = "0.52.0" 3748 | source = "registry+https://github.com/rust-lang/crates.io-index" 3749 | checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" 3750 | 3751 | [[package]] 3752 | name = "windows_x86_64_gnullvm" 3753 | version = "0.48.5" 3754 | source = "registry+https://github.com/rust-lang/crates.io-index" 3755 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 3756 | 3757 | [[package]] 3758 | name = "windows_x86_64_gnullvm" 3759 | version = "0.52.0" 3760 | source = "registry+https://github.com/rust-lang/crates.io-index" 3761 | checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" 3762 | 3763 | [[package]] 3764 | name = "windows_x86_64_msvc" 3765 | version = "0.48.5" 3766 | source = "registry+https://github.com/rust-lang/crates.io-index" 3767 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 3768 | 3769 | [[package]] 3770 | name = "windows_x86_64_msvc" 3771 | version = "0.52.0" 3772 | source = "registry+https://github.com/rust-lang/crates.io-index" 3773 | checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" 3774 | 3775 | [[package]] 3776 | name = "winnow" 3777 | version = "0.5.28" 3778 | source = "registry+https://github.com/rust-lang/crates.io-index" 3779 | checksum = "6c830786f7720c2fd27a1a0e27a709dbd3c4d009b56d098fc742d4f4eab91fe2" 3780 | dependencies = [ 3781 | "memchr", 3782 | ] 3783 | 3784 | [[package]] 3785 | name = "winreg" 3786 | version = "0.50.0" 3787 | source = "registry+https://github.com/rust-lang/crates.io-index" 3788 | checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 3789 | dependencies = [ 3790 | "cfg-if", 3791 | "windows-sys 0.48.0", 3792 | ] 3793 | 3794 | [[package]] 3795 | name = "ws_stream_wasm" 3796 | version = "0.7.4" 3797 | source = "registry+https://github.com/rust-lang/crates.io-index" 3798 | checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" 3799 | dependencies = [ 3800 | "async_io_stream", 3801 | "futures", 3802 | "js-sys", 3803 | "log", 3804 | "pharos", 3805 | "rustc_version", 3806 | "send_wrapper", 3807 | "thiserror", 3808 | "wasm-bindgen", 3809 | "wasm-bindgen-futures", 3810 | "web-sys", 3811 | ] 3812 | 3813 | [[package]] 3814 | name = "wyz" 3815 | version = "0.5.1" 3816 | source = "registry+https://github.com/rust-lang/crates.io-index" 3817 | checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" 3818 | dependencies = [ 3819 | "tap", 3820 | ] 3821 | 3822 | [[package]] 3823 | name = "zerocopy" 3824 | version = "0.7.30" 3825 | source = "registry+https://github.com/rust-lang/crates.io-index" 3826 | checksum = "306dca4455518f1f31635ec308b6b3e4eb1b11758cefafc782827d0aa7acb5c7" 3827 | dependencies = [ 3828 | "zerocopy-derive", 3829 | ] 3830 | 3831 | [[package]] 3832 | name = "zerocopy-derive" 3833 | version = "0.7.30" 3834 | source = "registry+https://github.com/rust-lang/crates.io-index" 3835 | checksum = "be912bf68235a88fbefd1b73415cb218405958d1655b2ece9035a19920bdf6ba" 3836 | dependencies = [ 3837 | "proc-macro2", 3838 | "quote", 3839 | "syn 2.0.40", 3840 | ] 3841 | 3842 | [[package]] 3843 | name = "zeroize" 3844 | version = "1.7.0" 3845 | source = "registry+https://github.com/rust-lang/crates.io-index" 3846 | checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" 3847 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "article_api" 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 | axum = "0.7.1" 10 | chrono = { version = "0.4.31", features = ["serde"] } 11 | once_cell = "1.19.0" 12 | serde = { version = "1.0.193", features = ["derive"] } 13 | serde_json = "1.0.108" 14 | surrealdb = "1.0.0" 15 | tokio = { version = "1.34.0", features = ["full"] } 16 | tower-http = { version = "0.5.0", features = ["cors"] } 17 | -------------------------------------------------------------------------------- /README.MD: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | 13 | 14 | 15 | 22 | [![Contributors][contributors-shield]][contributors-url] 23 | [![Forks][forks-shield]][forks-url] 24 | [![Stargazers][stars-shield]][stars-url] 25 | [![Issues][issues-shield]][issues-url] 26 | [![LinkedIn][linkedin-shield]][linkedin-url] 27 | 28 | 29 | 30 |
31 |
32 | 33 |

Rust Clean Architecture Api

34 | 35 |

36 | An simple project template to demonstrate a api with clean architecure in Rust 37 |
38 | Report Bug 39 | · 40 | Request Feature 41 |

42 |
43 | 44 | 45 | 46 | 47 |
48 | Table of Contents 49 |
    50 |
  1. 51 | About The Project 52 | 55 |
  2. 56 |
  3. 57 | Getting Started 58 | 62 |
  4. 63 |
  5. Roadmap
  6. 64 |
  7. Contributing
  8. 65 |
  9. License
  10. 66 |
  11. Contact
  12. 67 |
  13. Acknowledgments
  14. 68 |
69 |
70 | 71 | 72 | 73 | 74 | ## About The Project 75 | 76 | This project was born out of a passion for exploring the intricacies of crafting APIs with Rust, delving into the clean architecture paradigm. It's not just about code; it's a journey into the heart of Rust's capabilities, all in the name of honing my skills and understanding the artistry behind clean and efficient API design. 77 | 78 |

(back to top)

79 | 80 | 81 | 82 | ### Built With 83 | 84 | * [![Rust][Rust]][Rust-url] 85 | * [![Axum][Axum]][Axum-url] 86 | * [![SurrealDB][SurrealDB]][SurrealDB-url] 87 | 88 | 89 | ## Getting Started 90 | ### Prerequisites 91 | 92 | If you to want the feature to run in watch mode, install `cargo-watch` 93 | * cargo-watch 94 | ```sh 95 | cargo install cargo-watch 96 | ``` 97 | 98 | ### Installation 99 | 1. Clone the repo 100 | ```sh 101 | git clone https://github.com/vitorlfaria/rust_clean_api.git 102 | ``` 103 | 2. Build the project to install the dependecies 104 | ```sh 105 | cargo build 106 | ``` 107 | 4. Run with 108 | ```sh 109 | cargo run 110 | ``` 111 | Or, for more dynamic development, run in watch mode 112 | ```sh 113 | cargo watch -q -c -w src/ -x run 114 | ``` 115 | `-q` quiet mode
116 | `-c` clear the console on reload
117 | `-w` watch all change to files under `src/`
118 | `-x` executes `run` command 119 | 120 |

(back to top)

121 | 122 | 123 | 124 | ## Roadmap 125 | 126 | - [x] Working api structure 127 | - [x] Clean Architecure 128 | - [x] Database 129 | - [ ] Authentication 130 | - [ ] Create user 131 | - [ ] Authenticate with JWT 132 | 133 | See the [open issues](https://github.com/vitorlfaria/rust_clean_api/issues) for a full list of proposed features (and known issues). 134 | 135 |

(back to top)

136 | 137 | 138 | 139 | 140 | ## Contributing 141 | 142 | Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. 143 | 144 | If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". 145 | Don't forget to give the project a star! Thanks again! 146 | 147 | 1. Fork the Project 148 | 2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) 149 | 3. Commit your Changes (`git commit -m 'feat: add some AmazingFeature'`) 150 | 4. Push to the Branch (`git push origin feature/AmazingFeature`) 151 | 5. Open a Pull Request 152 | 153 |

(back to top)

154 | 155 | 156 | 157 | 158 | ## License 159 | 160 | Distributed under the MIT License. See `LICENSE.txt` for more information. 161 | 162 |

(back to top)

163 | 164 | 165 | 166 | 167 | ## Contact 168 | 169 | Vitor Lacerda - [@vitorlacerdaf](https://instagram.com/vitorlacerdaf) - vitorlacerdafaria7@gmail.com 170 | 171 | Project Link: [https://github.com/vitorlfaria/rust_clean_api](https://github.com/vitorlfaria/rust_clean_api) 172 | 173 |

(back to top)

174 | 175 | 176 | 177 | 178 | ## Acknowledgments 179 | 180 | * [Axum](https://github.com/tokio-rs/axum) 181 | * [SurrealDB](https://surrealdb.com/) 182 | * [Serde](https://serde.rs/) 183 | * [Chrono](https://docs.rs/chrono/latest/chrono/) 184 | 185 |

(back to top)

186 | 187 | 188 | 189 | 190 | 191 | [contributors-shield]: https://img.shields.io/github/contributors/vitorlfaria/rust_clean_api.svg?style=for-the-badge 192 | [contributors-url]: https://github.com/vitorlfaria/rust_clean_api/graphs/contributors 193 | [forks-shield]: https://img.shields.io/github/forks/vitorlfaria/rust_clean_api.svg?style=for-the-badge 194 | [forks-url]: https://github.com/vitorlfaria/rust_clean_api/network/members 195 | [stars-shield]: https://img.shields.io/github/stars/vitorlfaria/rust_clean_api.svg?style=for-the-badge 196 | [stars-url]: https://github.com/vitorlfaria/rust_clean_api/stargazers 197 | [issues-shield]: https://img.shields.io/github/issues/vitorlfaria/rust_clean_api.svg?style=for-the-badge 198 | [issues-url]: https://github.com/vitorlfaria/rust_clean_api/issues 199 | [linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge&logo=linkedin&colorB=555 200 | [linkedin-url]: https://linkedin.com/in/vitor-lacerda-faria 201 | [product-screenshot]: images/screenshot.png 202 | [Rust]: https://img.shields.io/badge/Rust-000000?style=for-the-badge&logo=rust&logoColor=white 203 | [Rust-url]: https://rust-lang.org/ 204 | [Axum]: https://img.shields.io/badge/Axum-d97d0d?style=for-the-badge 205 | [Axum-url]: https://github.com/tokio-rs/axum 206 | [SurrealDB]: https://img.shields.io/badge/SurrealDB-cc108d?style=for-the-badge 207 | [SurrealDB-url]: https://surrealdb.com/ 208 | -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) [year] [fullname] 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /src/api/mod.rs: -------------------------------------------------------------------------------- 1 | use axum::{response::IntoResponse, Json}; 2 | 3 | pub mod router; 4 | 5 | pub async fn health_checker_handler() -> impl IntoResponse { 6 | const MESSAGE: &str = "Working fine, thanks!"; 7 | 8 | let json_response = serde_json::json!({ 9 | "status": "success", 10 | "message": MESSAGE 11 | }); 12 | 13 | Json(json_response) 14 | } 15 | -------------------------------------------------------------------------------- /src/api/router.rs: -------------------------------------------------------------------------------- 1 | use axum::{ 2 | routing::{get, post}, 3 | Router, 4 | }; 5 | 6 | use crate::application::{commands::{create_todo_command::create_todo_command, update_todo_command::update_todo_command, delete_todo_command::delete_todo_command}, queries::{get_all_todos_query::get_all_todos_query, get_todo_by_id_query::get_todo_by_id_query}}; 7 | 8 | use super::health_checker_handler; 9 | 10 | pub fn create_router() -> Router { 11 | Router::new() 12 | .route("/api/healthchecker", get(health_checker_handler)) 13 | .route( 14 | "/api/todos", 15 | post(create_todo_command) 16 | .get(get_all_todos_query), 17 | ) 18 | .route( 19 | "/api/todos/:id", 20 | get(get_todo_by_id_query) 21 | .put(update_todo_command) 22 | .delete(delete_todo_command) 23 | ) 24 | } 25 | -------------------------------------------------------------------------------- /src/application/commands/create_todo_command.rs: -------------------------------------------------------------------------------- 1 | use axum::{http::StatusCode, response::IntoResponse, Json}; 2 | use chrono::Local; 3 | 4 | use crate::{domain::models::todo::Todo, infrastructure::data::repositories::todo_repository::TodoRepository}; 5 | 6 | pub async fn create_todo_command( 7 | Json(mut body): Json, 8 | ) -> Result)> { 9 | let repository = TodoRepository::new(); 10 | 11 | if let Ok(todo) = repository.get_by_title(body.title.clone()).await { 12 | let json_response = serde_json::json!({ 13 | "status": "error".to_string(), 14 | "message": "Todo already exists".to_string(), 15 | "data": todo, 16 | }); 17 | 18 | return Err((StatusCode::BAD_REQUEST, Json(json_response))); 19 | } 20 | 21 | let datetime = Local::now(); 22 | body.completed = Some(false); 23 | body.createdAt = Some(datetime); 24 | body.updatedAt = Some(datetime); 25 | 26 | let todo = body.to_owned(); 27 | 28 | let todo = repository.create_todo(todo.clone()).await.unwrap()[0].to_owned(); 29 | 30 | let json_response = serde_json::json!({ 31 | "status": "success".to_string(), 32 | "data": todo, 33 | }); 34 | 35 | Ok((StatusCode::CREATED, Json(json_response))) 36 | } 37 | -------------------------------------------------------------------------------- /src/application/commands/delete_todo_command.rs: -------------------------------------------------------------------------------- 1 | use axum::{extract::Path, response::IntoResponse, http::StatusCode, Json}; 2 | 3 | use crate::infrastructure::data::repositories::todo_repository::TodoRepository; 4 | 5 | pub async fn delete_todo_command( 6 | Path(id): Path, 7 | ) -> Result)> { 8 | let repository = TodoRepository::new(); 9 | let id = id.to_string(); 10 | 11 | if let Ok(_) = repository.get_by_id(id.clone()).await { 12 | let _ = repository.delete_todo(id.clone()).await.unwrap(); 13 | 14 | return Ok(StatusCode::NO_CONTENT); 15 | } 16 | 17 | let error_response = serde_json::json!({ 18 | "status": "error", 19 | "message": format!("Todo with ID: {} not found", id) 20 | }); 21 | 22 | Err((StatusCode::NOT_FOUND, Json(error_response))) 23 | } -------------------------------------------------------------------------------- /src/application/commands/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod create_todo_command; 2 | pub mod delete_todo_command; 3 | pub mod update_todo_command; 4 | pub mod requests; 5 | -------------------------------------------------------------------------------- /src/application/commands/requests/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod update_todo_request; -------------------------------------------------------------------------------- /src/application/commands/requests/update_todo_request.rs: -------------------------------------------------------------------------------- 1 | use serde::{Deserialize, Serialize}; 2 | 3 | #[derive(Debug, Deserialize, Serialize, Clone)] 4 | pub struct UpdateTodoRequest { 5 | pub title: String, 6 | pub content: String, 7 | pub completed: Option, 8 | } 9 | -------------------------------------------------------------------------------- /src/application/commands/update_todo_command.rs: -------------------------------------------------------------------------------- 1 | use axum::{extract::Path, http::StatusCode, response::IntoResponse, Json}; 2 | use chrono::Local; 3 | 4 | use crate::{ 5 | infrastructure::data::repositories::todo_repository::TodoRepository, domain::models::todo::Todo, 6 | }; 7 | 8 | use super::requests::update_todo_request::UpdateTodoRequest; 9 | 10 | 11 | pub async fn update_todo_command( 12 | Path(id): Path, 13 | Json(body): Json, 14 | ) -> Result)> { 15 | let repository = TodoRepository::new(); 16 | 17 | match repository.get_by_id(id.clone()).await { 18 | Ok(todo) => { 19 | let datetime = Local::now(); 20 | let title = body.title.to_owned(); 21 | let content = body.content.to_owned(); 22 | let completed = body.completed.unwrap_or(todo.completed.unwrap()); 23 | let payload = Todo { 24 | id: todo.id.to_owned(), 25 | title: if !title.is_empty() { 26 | title 27 | } else { 28 | todo.title.to_owned() 29 | }, 30 | content: if !content.is_empty() { 31 | content 32 | } else { 33 | todo.content.to_owned() 34 | }, 35 | completed: Some(completed), 36 | createdAt: todo.createdAt, 37 | updatedAt: Some(datetime), 38 | }; 39 | 40 | let todo_response = repository.update_todo(id, payload).await.unwrap(); 41 | 42 | let json_response = serde_json::json!({ 43 | "status": "success", 44 | "data": todo_response, 45 | }); 46 | 47 | Ok((StatusCode::OK, Json(json_response))) 48 | } 49 | Err(_) => { 50 | let error_response = serde_json::json!({ 51 | "status": "error", 52 | "message": format!("Todo with ID: {} not found", id) 53 | }); 54 | 55 | Err((StatusCode::NOT_FOUND, Json(error_response))) 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/application/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod commands; 2 | pub mod queries; 3 | -------------------------------------------------------------------------------- /src/application/queries/get_all_todos_query.rs: -------------------------------------------------------------------------------- 1 | use axum::{response::IntoResponse, Json}; 2 | 3 | use crate::{ 4 | infrastructure::data::repositories::todo_repository::TodoRepository, domain::models::todo::Todo, 5 | }; 6 | 7 | pub async fn get_all_todos_query() -> impl IntoResponse { 8 | let repository = TodoRepository::new(); 9 | 10 | let mut todos: Vec = Vec::new(); 11 | if let Ok(result) = repository.get_all().await { 12 | todos = result; 13 | } 14 | 15 | let json_response = serde_json::json!({ 16 | "status": "success".to_string(), 17 | "results": todos.len(), 18 | "todos": todos, 19 | }); 20 | 21 | Json(json_response) 22 | } 23 | -------------------------------------------------------------------------------- /src/application/queries/get_todo_by_id_query.rs: -------------------------------------------------------------------------------- 1 | use axum::{extract::Path, response::IntoResponse, Json, http::StatusCode}; 2 | 3 | use crate::infrastructure::data::repositories::todo_repository::TodoRepository; 4 | 5 | pub async fn get_todo_by_id_query( 6 | Path(id): Path, 7 | ) -> Result)> { 8 | let repository = TodoRepository::new(); 9 | let id = id.to_string(); 10 | 11 | let todo = repository.get_by_id(id).await; 12 | 13 | return Ok((StatusCode::OK, Json(todo))); 14 | } 15 | -------------------------------------------------------------------------------- /src/application/queries/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod get_all_todos_query; 2 | pub mod get_todo_by_id_query; 3 | -------------------------------------------------------------------------------- /src/domain/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod models; 2 | -------------------------------------------------------------------------------- /src/domain/models/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod todo; 2 | -------------------------------------------------------------------------------- /src/domain/models/todo.rs: -------------------------------------------------------------------------------- 1 | use chrono::{DateTime, Local}; 2 | use serde::{Deserialize, Serialize}; 3 | use surrealdb::sql::Thing; 4 | 5 | #[allow(non_snake_case)] 6 | #[derive(Debug, Deserialize, Serialize, Clone)] 7 | pub struct Todo { 8 | pub id: Option, 9 | pub title: String, 10 | pub content: String, 11 | pub completed: Option, 12 | pub createdAt: Option>, 13 | pub updatedAt: Option>, 14 | } 15 | -------------------------------------------------------------------------------- /src/infrastructure/data/db_context/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod surreal_context; -------------------------------------------------------------------------------- /src/infrastructure/data/db_context/surreal_context.rs: -------------------------------------------------------------------------------- 1 | use once_cell::sync::Lazy; 2 | use surrealdb::{ 3 | engine::remote::ws::{Client, Ws}, 4 | opt::auth::Root, 5 | Result, Surreal, 6 | }; 7 | 8 | pub static DB: Lazy> = Lazy::new(Surreal::init); 9 | 10 | pub async fn connect_db() -> Result<()> { 11 | let _ = DB.connect::("localhost:8000").await?; 12 | let _ = DB 13 | .signin(Root { 14 | username: "root", 15 | password: "root", 16 | }) 17 | .await; 18 | let _ = DB.use_ns("todo").use_db("todo").await?; 19 | Ok(()) 20 | } 21 | -------------------------------------------------------------------------------- /src/infrastructure/data/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod db_context; 2 | pub mod repositories; -------------------------------------------------------------------------------- /src/infrastructure/data/repositories/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod todo_repository; -------------------------------------------------------------------------------- /src/infrastructure/data/repositories/todo_repository.rs: -------------------------------------------------------------------------------- 1 | use crate::{domain::models::todo::Todo, infrastructure::data::db_context::surreal_context::DB}; 2 | use surrealdb::{error::Db::Thrown, Error}; 3 | 4 | pub struct TodoRepository { 5 | table: String, 6 | } 7 | 8 | impl TodoRepository { 9 | pub fn new() -> Self { 10 | TodoRepository { 11 | table: String::from("todo"), 12 | } 13 | } 14 | 15 | pub async fn get_all(&self) -> Result, Error> { 16 | let records = DB.select(&self.table).await?; 17 | Ok(records) 18 | } 19 | 20 | pub async fn get_by_id(&self, id: String) -> Result { 21 | if let Some(record) = DB.select((&self.table, id.clone())).await? { 22 | return Ok(record); 23 | } 24 | 25 | let error = Error::Db( 26 | Thrown( 27 | format!("Todo with id {} not found", id) 28 | ) 29 | ); 30 | Err(error) 31 | } 32 | 33 | pub async fn get_by_title(&self, title: String) -> Result { 34 | if let Some(record) = DB 35 | .query("SELECT * FROM todo WHERE title = $title") 36 | .bind(("title", title.clone())) 37 | .await? 38 | .take(0)? 39 | { 40 | return Ok(record); 41 | } 42 | 43 | let error = Error::Db(Thrown(format!("Todo with title {} not found", title))); 44 | Err(error) 45 | } 46 | 47 | pub async fn create_todo(&self, content: Todo) -> Result, Error> { 48 | let record = DB.create(&self.table).content(content).await?; 49 | Ok(record) 50 | } 51 | 52 | pub async fn update_todo(&self, id: String, content: Todo) -> Result { 53 | let record = DB 54 | .update((&self.table, id)) 55 | .content(content) 56 | .await? 57 | .unwrap(); 58 | Ok(record) 59 | } 60 | 61 | pub async fn delete_todo(&self, id: String) -> Result { 62 | let result = DB.delete((&self.table, id)).await?.unwrap(); 63 | Ok(result) 64 | } 65 | } -------------------------------------------------------------------------------- /src/infrastructure/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod data; -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod api; 2 | pub mod application; 3 | pub mod domain; 4 | pub mod infrastructure; 5 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use article_api::{api::router::create_router, infrastructure::data::db_context::surreal_context::connect_db}; 2 | use axum::http::{ 3 | header::{ACCEPT, AUTHORIZATION, CONTENT_TYPE}, 4 | HeaderValue, Method, 5 | }; 6 | use tower_http::cors::CorsLayer; 7 | 8 | #[tokio::main] 9 | async fn main() { 10 | connect_db().await.unwrap(); 11 | 12 | let cors = CorsLayer::new() 13 | .allow_origin("http://localhost:3000".parse::().unwrap()) 14 | .allow_methods([Method::GET, Method::POST, Method::PATCH, Method::DELETE]) 15 | .allow_credentials(true) 16 | .allow_headers([AUTHORIZATION, ACCEPT, CONTENT_TYPE]); 17 | 18 | let app = create_router().layer(cors); 19 | 20 | println!("🚀 Server started successfully"); 21 | let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await.unwrap(); 22 | axum::serve(listener, app).await.unwrap(); 23 | } 24 | --------------------------------------------------------------------------------