Server tools to backfill, tail, mirror, and verify PLC logs

i guess this technically works

+2648 -3
+2421
Cargo.lock
··· 1 + # This file is automatically @generated by Cargo. 2 + # It is not intended for manual editing. 3 + version = 4 4 + 5 + [[package]] 6 + name = "addr2line" 7 + version = "0.24.2" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 + dependencies = [ 11 + "gimli", 12 + ] 13 + 14 + [[package]] 15 + name = "adler2" 16 + version = "2.0.1" 17 + source = "registry+https://github.com/rust-lang/crates.io-index" 18 + checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" 19 + 20 + [[package]] 21 + name = "aho-corasick" 22 + version = "1.1.3" 23 + source = "registry+https://github.com/rust-lang/crates.io-index" 24 + checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 25 + dependencies = [ 26 + "memchr", 27 + ] 28 + 29 + [[package]] 30 + name = "allegedly" 31 + version = "0.1.0" 32 + dependencies = [ 33 + "anyhow", 34 + "chrono", 35 + "clap", 36 + "env_logger", 37 + "flume", 38 + "log", 39 + "reqwest", 40 + "serde", 41 + "serde_json", 42 + "tokio", 43 + "tokio-postgres", 44 + "url", 45 + ] 46 + 47 + [[package]] 48 + name = "android_system_properties" 49 + version = "0.1.5" 50 + source = "registry+https://github.com/rust-lang/crates.io-index" 51 + checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 52 + dependencies = [ 53 + "libc", 54 + ] 55 + 56 + [[package]] 57 + name = "anstream" 58 + version = "0.6.20" 59 + source = "registry+https://github.com/rust-lang/crates.io-index" 60 + checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" 61 + dependencies = [ 62 + "anstyle", 63 + "anstyle-parse", 64 + "anstyle-query", 65 + "anstyle-wincon", 66 + "colorchoice", 67 + "is_terminal_polyfill", 68 + "utf8parse", 69 + ] 70 + 71 + [[package]] 72 + name = "anstyle" 73 + version = "1.0.11" 74 + source = "registry+https://github.com/rust-lang/crates.io-index" 75 + checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" 76 + 77 + [[package]] 78 + name = "anstyle-parse" 79 + version = "0.2.7" 80 + source = "registry+https://github.com/rust-lang/crates.io-index" 81 + checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" 82 + dependencies = [ 83 + "utf8parse", 84 + ] 85 + 86 + [[package]] 87 + name = "anstyle-query" 88 + version = "1.1.4" 89 + source = "registry+https://github.com/rust-lang/crates.io-index" 90 + checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" 91 + dependencies = [ 92 + "windows-sys 0.60.2", 93 + ] 94 + 95 + [[package]] 96 + name = "anstyle-wincon" 97 + version = "3.0.10" 98 + source = "registry+https://github.com/rust-lang/crates.io-index" 99 + checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" 100 + dependencies = [ 101 + "anstyle", 102 + "once_cell_polyfill", 103 + "windows-sys 0.60.2", 104 + ] 105 + 106 + [[package]] 107 + name = "anyhow" 108 + version = "1.0.99" 109 + source = "registry+https://github.com/rust-lang/crates.io-index" 110 + checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" 111 + 112 + [[package]] 113 + name = "async-trait" 114 + version = "0.1.89" 115 + source = "registry+https://github.com/rust-lang/crates.io-index" 116 + checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" 117 + dependencies = [ 118 + "proc-macro2", 119 + "quote", 120 + "syn", 121 + ] 122 + 123 + [[package]] 124 + name = "atomic-waker" 125 + version = "1.1.2" 126 + source = "registry+https://github.com/rust-lang/crates.io-index" 127 + checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 128 + 129 + [[package]] 130 + name = "autocfg" 131 + version = "1.5.0" 132 + source = "registry+https://github.com/rust-lang/crates.io-index" 133 + checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 134 + 135 + [[package]] 136 + name = "backtrace" 137 + version = "0.3.75" 138 + source = "registry+https://github.com/rust-lang/crates.io-index" 139 + checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" 140 + dependencies = [ 141 + "addr2line", 142 + "cfg-if", 143 + "libc", 144 + "miniz_oxide", 145 + "object", 146 + "rustc-demangle", 147 + "windows-targets 0.52.6", 148 + ] 149 + 150 + [[package]] 151 + name = "base64" 152 + version = "0.22.1" 153 + source = "registry+https://github.com/rust-lang/crates.io-index" 154 + checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 155 + 156 + [[package]] 157 + name = "bitflags" 158 + version = "2.9.4" 159 + source = "registry+https://github.com/rust-lang/crates.io-index" 160 + checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" 161 + 162 + [[package]] 163 + name = "block-buffer" 164 + version = "0.10.4" 165 + source = "registry+https://github.com/rust-lang/crates.io-index" 166 + checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 167 + dependencies = [ 168 + "generic-array", 169 + ] 170 + 171 + [[package]] 172 + name = "bumpalo" 173 + version = "3.19.0" 174 + source = "registry+https://github.com/rust-lang/crates.io-index" 175 + checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" 176 + 177 + [[package]] 178 + name = "byteorder" 179 + version = "1.5.0" 180 + source = "registry+https://github.com/rust-lang/crates.io-index" 181 + checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 182 + 183 + [[package]] 184 + name = "bytes" 185 + version = "1.10.1" 186 + source = "registry+https://github.com/rust-lang/crates.io-index" 187 + checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 188 + 189 + [[package]] 190 + name = "cc" 191 + version = "1.2.37" 192 + source = "registry+https://github.com/rust-lang/crates.io-index" 193 + checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" 194 + dependencies = [ 195 + "find-msvc-tools", 196 + "shlex", 197 + ] 198 + 199 + [[package]] 200 + name = "cfg-if" 201 + version = "1.0.3" 202 + source = "registry+https://github.com/rust-lang/crates.io-index" 203 + checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" 204 + 205 + [[package]] 206 + name = "chrono" 207 + version = "0.4.42" 208 + source = "registry+https://github.com/rust-lang/crates.io-index" 209 + checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" 210 + dependencies = [ 211 + "iana-time-zone", 212 + "js-sys", 213 + "num-traits", 214 + "serde", 215 + "wasm-bindgen", 216 + "windows-link 0.2.0", 217 + ] 218 + 219 + [[package]] 220 + name = "clap" 221 + version = "4.5.47" 222 + source = "registry+https://github.com/rust-lang/crates.io-index" 223 + checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931" 224 + dependencies = [ 225 + "clap_builder", 226 + "clap_derive", 227 + ] 228 + 229 + [[package]] 230 + name = "clap_builder" 231 + version = "4.5.47" 232 + source = "registry+https://github.com/rust-lang/crates.io-index" 233 + checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6" 234 + dependencies = [ 235 + "anstream", 236 + "anstyle", 237 + "clap_lex", 238 + "strsim", 239 + ] 240 + 241 + [[package]] 242 + name = "clap_derive" 243 + version = "4.5.47" 244 + source = "registry+https://github.com/rust-lang/crates.io-index" 245 + checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" 246 + dependencies = [ 247 + "heck", 248 + "proc-macro2", 249 + "quote", 250 + "syn", 251 + ] 252 + 253 + [[package]] 254 + name = "clap_lex" 255 + version = "0.7.5" 256 + source = "registry+https://github.com/rust-lang/crates.io-index" 257 + checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" 258 + 259 + [[package]] 260 + name = "colorchoice" 261 + version = "1.0.4" 262 + source = "registry+https://github.com/rust-lang/crates.io-index" 263 + checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 264 + 265 + [[package]] 266 + name = "core-foundation" 267 + version = "0.9.4" 268 + source = "registry+https://github.com/rust-lang/crates.io-index" 269 + checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 270 + dependencies = [ 271 + "core-foundation-sys", 272 + "libc", 273 + ] 274 + 275 + [[package]] 276 + name = "core-foundation-sys" 277 + version = "0.8.7" 278 + source = "registry+https://github.com/rust-lang/crates.io-index" 279 + checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 280 + 281 + [[package]] 282 + name = "cpufeatures" 283 + version = "0.2.17" 284 + source = "registry+https://github.com/rust-lang/crates.io-index" 285 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 286 + dependencies = [ 287 + "libc", 288 + ] 289 + 290 + [[package]] 291 + name = "crypto-common" 292 + version = "0.1.6" 293 + source = "registry+https://github.com/rust-lang/crates.io-index" 294 + checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 295 + dependencies = [ 296 + "generic-array", 297 + "typenum", 298 + ] 299 + 300 + [[package]] 301 + name = "digest" 302 + version = "0.10.7" 303 + source = "registry+https://github.com/rust-lang/crates.io-index" 304 + checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 305 + dependencies = [ 306 + "block-buffer", 307 + "crypto-common", 308 + "subtle", 309 + ] 310 + 311 + [[package]] 312 + name = "displaydoc" 313 + version = "0.2.5" 314 + source = "registry+https://github.com/rust-lang/crates.io-index" 315 + checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 316 + dependencies = [ 317 + "proc-macro2", 318 + "quote", 319 + "syn", 320 + ] 321 + 322 + [[package]] 323 + name = "encoding_rs" 324 + version = "0.8.35" 325 + source = "registry+https://github.com/rust-lang/crates.io-index" 326 + checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 327 + dependencies = [ 328 + "cfg-if", 329 + ] 330 + 331 + [[package]] 332 + name = "env_filter" 333 + version = "0.1.3" 334 + source = "registry+https://github.com/rust-lang/crates.io-index" 335 + checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" 336 + dependencies = [ 337 + "log", 338 + "regex", 339 + ] 340 + 341 + [[package]] 342 + name = "env_logger" 343 + version = "0.11.8" 344 + source = "registry+https://github.com/rust-lang/crates.io-index" 345 + checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" 346 + dependencies = [ 347 + "anstream", 348 + "anstyle", 349 + "env_filter", 350 + "jiff", 351 + "log", 352 + ] 353 + 354 + [[package]] 355 + name = "equivalent" 356 + version = "1.0.2" 357 + source = "registry+https://github.com/rust-lang/crates.io-index" 358 + checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 359 + 360 + [[package]] 361 + name = "errno" 362 + version = "0.3.14" 363 + source = "registry+https://github.com/rust-lang/crates.io-index" 364 + checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" 365 + dependencies = [ 366 + "libc", 367 + "windows-sys 0.61.0", 368 + ] 369 + 370 + [[package]] 371 + name = "fallible-iterator" 372 + version = "0.2.0" 373 + source = "registry+https://github.com/rust-lang/crates.io-index" 374 + checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" 375 + 376 + [[package]] 377 + name = "fastrand" 378 + version = "2.3.0" 379 + source = "registry+https://github.com/rust-lang/crates.io-index" 380 + checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 381 + 382 + [[package]] 383 + name = "find-msvc-tools" 384 + version = "0.1.1" 385 + source = "registry+https://github.com/rust-lang/crates.io-index" 386 + checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" 387 + 388 + [[package]] 389 + name = "flume" 390 + version = "0.11.1" 391 + source = "registry+https://github.com/rust-lang/crates.io-index" 392 + checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" 393 + dependencies = [ 394 + "futures-core", 395 + "futures-sink", 396 + "nanorand", 397 + "spin", 398 + ] 399 + 400 + [[package]] 401 + name = "fnv" 402 + version = "1.0.7" 403 + source = "registry+https://github.com/rust-lang/crates.io-index" 404 + checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 405 + 406 + [[package]] 407 + name = "foreign-types" 408 + version = "0.3.2" 409 + source = "registry+https://github.com/rust-lang/crates.io-index" 410 + checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 411 + dependencies = [ 412 + "foreign-types-shared", 413 + ] 414 + 415 + [[package]] 416 + name = "foreign-types-shared" 417 + version = "0.1.1" 418 + source = "registry+https://github.com/rust-lang/crates.io-index" 419 + checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 420 + 421 + [[package]] 422 + name = "form_urlencoded" 423 + version = "1.2.2" 424 + source = "registry+https://github.com/rust-lang/crates.io-index" 425 + checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" 426 + dependencies = [ 427 + "percent-encoding", 428 + ] 429 + 430 + [[package]] 431 + name = "futures-channel" 432 + version = "0.3.31" 433 + source = "registry+https://github.com/rust-lang/crates.io-index" 434 + checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 435 + dependencies = [ 436 + "futures-core", 437 + "futures-sink", 438 + ] 439 + 440 + [[package]] 441 + name = "futures-core" 442 + version = "0.3.31" 443 + source = "registry+https://github.com/rust-lang/crates.io-index" 444 + checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 445 + 446 + [[package]] 447 + name = "futures-macro" 448 + version = "0.3.31" 449 + source = "registry+https://github.com/rust-lang/crates.io-index" 450 + checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 451 + dependencies = [ 452 + "proc-macro2", 453 + "quote", 454 + "syn", 455 + ] 456 + 457 + [[package]] 458 + name = "futures-sink" 459 + version = "0.3.31" 460 + source = "registry+https://github.com/rust-lang/crates.io-index" 461 + checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 462 + 463 + [[package]] 464 + name = "futures-task" 465 + version = "0.3.31" 466 + source = "registry+https://github.com/rust-lang/crates.io-index" 467 + checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 468 + 469 + [[package]] 470 + name = "futures-util" 471 + version = "0.3.31" 472 + source = "registry+https://github.com/rust-lang/crates.io-index" 473 + checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 474 + dependencies = [ 475 + "futures-core", 476 + "futures-macro", 477 + "futures-sink", 478 + "futures-task", 479 + "pin-project-lite", 480 + "pin-utils", 481 + "slab", 482 + ] 483 + 484 + [[package]] 485 + name = "generic-array" 486 + version = "0.14.7" 487 + source = "registry+https://github.com/rust-lang/crates.io-index" 488 + checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 489 + dependencies = [ 490 + "typenum", 491 + "version_check", 492 + ] 493 + 494 + [[package]] 495 + name = "getrandom" 496 + version = "0.2.16" 497 + source = "registry+https://github.com/rust-lang/crates.io-index" 498 + checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 499 + dependencies = [ 500 + "cfg-if", 501 + "js-sys", 502 + "libc", 503 + "wasi 0.11.1+wasi-snapshot-preview1", 504 + "wasm-bindgen", 505 + ] 506 + 507 + [[package]] 508 + name = "getrandom" 509 + version = "0.3.3" 510 + source = "registry+https://github.com/rust-lang/crates.io-index" 511 + checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 512 + dependencies = [ 513 + "cfg-if", 514 + "libc", 515 + "r-efi", 516 + "wasi 0.14.5+wasi-0.2.4", 517 + ] 518 + 519 + [[package]] 520 + name = "gimli" 521 + version = "0.31.1" 522 + source = "registry+https://github.com/rust-lang/crates.io-index" 523 + checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 524 + 525 + [[package]] 526 + name = "h2" 527 + version = "0.4.12" 528 + source = "registry+https://github.com/rust-lang/crates.io-index" 529 + checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" 530 + dependencies = [ 531 + "atomic-waker", 532 + "bytes", 533 + "fnv", 534 + "futures-core", 535 + "futures-sink", 536 + "http", 537 + "indexmap", 538 + "slab", 539 + "tokio", 540 + "tokio-util", 541 + "tracing", 542 + ] 543 + 544 + [[package]] 545 + name = "hashbrown" 546 + version = "0.15.5" 547 + source = "registry+https://github.com/rust-lang/crates.io-index" 548 + checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" 549 + 550 + [[package]] 551 + name = "heck" 552 + version = "0.5.0" 553 + source = "registry+https://github.com/rust-lang/crates.io-index" 554 + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 555 + 556 + [[package]] 557 + name = "hmac" 558 + version = "0.12.1" 559 + source = "registry+https://github.com/rust-lang/crates.io-index" 560 + checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 561 + dependencies = [ 562 + "digest", 563 + ] 564 + 565 + [[package]] 566 + name = "http" 567 + version = "1.3.1" 568 + source = "registry+https://github.com/rust-lang/crates.io-index" 569 + checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" 570 + dependencies = [ 571 + "bytes", 572 + "fnv", 573 + "itoa", 574 + ] 575 + 576 + [[package]] 577 + name = "http-body" 578 + version = "1.0.1" 579 + source = "registry+https://github.com/rust-lang/crates.io-index" 580 + checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 581 + dependencies = [ 582 + "bytes", 583 + "http", 584 + ] 585 + 586 + [[package]] 587 + name = "http-body-util" 588 + version = "0.1.3" 589 + source = "registry+https://github.com/rust-lang/crates.io-index" 590 + checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" 591 + dependencies = [ 592 + "bytes", 593 + "futures-core", 594 + "http", 595 + "http-body", 596 + "pin-project-lite", 597 + ] 598 + 599 + [[package]] 600 + name = "httparse" 601 + version = "1.10.1" 602 + source = "registry+https://github.com/rust-lang/crates.io-index" 603 + checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 604 + 605 + [[package]] 606 + name = "hyper" 607 + version = "1.7.0" 608 + source = "registry+https://github.com/rust-lang/crates.io-index" 609 + checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" 610 + dependencies = [ 611 + "atomic-waker", 612 + "bytes", 613 + "futures-channel", 614 + "futures-core", 615 + "h2", 616 + "http", 617 + "http-body", 618 + "httparse", 619 + "itoa", 620 + "pin-project-lite", 621 + "pin-utils", 622 + "smallvec", 623 + "tokio", 624 + "want", 625 + ] 626 + 627 + [[package]] 628 + name = "hyper-rustls" 629 + version = "0.27.7" 630 + source = "registry+https://github.com/rust-lang/crates.io-index" 631 + checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" 632 + dependencies = [ 633 + "http", 634 + "hyper", 635 + "hyper-util", 636 + "rustls", 637 + "rustls-pki-types", 638 + "tokio", 639 + "tokio-rustls", 640 + "tower-service", 641 + ] 642 + 643 + [[package]] 644 + name = "hyper-tls" 645 + version = "0.6.0" 646 + source = "registry+https://github.com/rust-lang/crates.io-index" 647 + checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" 648 + dependencies = [ 649 + "bytes", 650 + "http-body-util", 651 + "hyper", 652 + "hyper-util", 653 + "native-tls", 654 + "tokio", 655 + "tokio-native-tls", 656 + "tower-service", 657 + ] 658 + 659 + [[package]] 660 + name = "hyper-util" 661 + version = "0.1.16" 662 + source = "registry+https://github.com/rust-lang/crates.io-index" 663 + checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" 664 + dependencies = [ 665 + "base64", 666 + "bytes", 667 + "futures-channel", 668 + "futures-core", 669 + "futures-util", 670 + "http", 671 + "http-body", 672 + "hyper", 673 + "ipnet", 674 + "libc", 675 + "percent-encoding", 676 + "pin-project-lite", 677 + "socket2 0.6.0", 678 + "system-configuration", 679 + "tokio", 680 + "tower-service", 681 + "tracing", 682 + "windows-registry", 683 + ] 684 + 685 + [[package]] 686 + name = "iana-time-zone" 687 + version = "0.1.63" 688 + source = "registry+https://github.com/rust-lang/crates.io-index" 689 + checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" 690 + dependencies = [ 691 + "android_system_properties", 692 + "core-foundation-sys", 693 + "iana-time-zone-haiku", 694 + "js-sys", 695 + "log", 696 + "wasm-bindgen", 697 + "windows-core", 698 + ] 699 + 700 + [[package]] 701 + name = "iana-time-zone-haiku" 702 + version = "0.1.2" 703 + source = "registry+https://github.com/rust-lang/crates.io-index" 704 + checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 705 + dependencies = [ 706 + "cc", 707 + ] 708 + 709 + [[package]] 710 + name = "icu_collections" 711 + version = "2.0.0" 712 + source = "registry+https://github.com/rust-lang/crates.io-index" 713 + checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 714 + dependencies = [ 715 + "displaydoc", 716 + "potential_utf", 717 + "yoke", 718 + "zerofrom", 719 + "zerovec", 720 + ] 721 + 722 + [[package]] 723 + name = "icu_locale_core" 724 + version = "2.0.0" 725 + source = "registry+https://github.com/rust-lang/crates.io-index" 726 + checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 727 + dependencies = [ 728 + "displaydoc", 729 + "litemap", 730 + "tinystr", 731 + "writeable", 732 + "zerovec", 733 + ] 734 + 735 + [[package]] 736 + name = "icu_normalizer" 737 + version = "2.0.0" 738 + source = "registry+https://github.com/rust-lang/crates.io-index" 739 + checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 740 + dependencies = [ 741 + "displaydoc", 742 + "icu_collections", 743 + "icu_normalizer_data", 744 + "icu_properties", 745 + "icu_provider", 746 + "smallvec", 747 + "zerovec", 748 + ] 749 + 750 + [[package]] 751 + name = "icu_normalizer_data" 752 + version = "2.0.0" 753 + source = "registry+https://github.com/rust-lang/crates.io-index" 754 + checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 755 + 756 + [[package]] 757 + name = "icu_properties" 758 + version = "2.0.1" 759 + source = "registry+https://github.com/rust-lang/crates.io-index" 760 + checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" 761 + dependencies = [ 762 + "displaydoc", 763 + "icu_collections", 764 + "icu_locale_core", 765 + "icu_properties_data", 766 + "icu_provider", 767 + "potential_utf", 768 + "zerotrie", 769 + "zerovec", 770 + ] 771 + 772 + [[package]] 773 + name = "icu_properties_data" 774 + version = "2.0.1" 775 + source = "registry+https://github.com/rust-lang/crates.io-index" 776 + checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" 777 + 778 + [[package]] 779 + name = "icu_provider" 780 + version = "2.0.0" 781 + source = "registry+https://github.com/rust-lang/crates.io-index" 782 + checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 783 + dependencies = [ 784 + "displaydoc", 785 + "icu_locale_core", 786 + "stable_deref_trait", 787 + "tinystr", 788 + "writeable", 789 + "yoke", 790 + "zerofrom", 791 + "zerotrie", 792 + "zerovec", 793 + ] 794 + 795 + [[package]] 796 + name = "idna" 797 + version = "1.1.0" 798 + source = "registry+https://github.com/rust-lang/crates.io-index" 799 + checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" 800 + dependencies = [ 801 + "idna_adapter", 802 + "smallvec", 803 + "utf8_iter", 804 + ] 805 + 806 + [[package]] 807 + name = "idna_adapter" 808 + version = "1.2.1" 809 + source = "registry+https://github.com/rust-lang/crates.io-index" 810 + checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 811 + dependencies = [ 812 + "icu_normalizer", 813 + "icu_properties", 814 + ] 815 + 816 + [[package]] 817 + name = "indexmap" 818 + version = "2.11.1" 819 + source = "registry+https://github.com/rust-lang/crates.io-index" 820 + checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921" 821 + dependencies = [ 822 + "equivalent", 823 + "hashbrown", 824 + ] 825 + 826 + [[package]] 827 + name = "io-uring" 828 + version = "0.7.10" 829 + source = "registry+https://github.com/rust-lang/crates.io-index" 830 + checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" 831 + dependencies = [ 832 + "bitflags", 833 + "cfg-if", 834 + "libc", 835 + ] 836 + 837 + [[package]] 838 + name = "ipnet" 839 + version = "2.11.0" 840 + source = "registry+https://github.com/rust-lang/crates.io-index" 841 + checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" 842 + 843 + [[package]] 844 + name = "iri-string" 845 + version = "0.7.8" 846 + source = "registry+https://github.com/rust-lang/crates.io-index" 847 + checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" 848 + dependencies = [ 849 + "memchr", 850 + "serde", 851 + ] 852 + 853 + [[package]] 854 + name = "is_terminal_polyfill" 855 + version = "1.70.1" 856 + source = "registry+https://github.com/rust-lang/crates.io-index" 857 + checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 858 + 859 + [[package]] 860 + name = "itoa" 861 + version = "1.0.15" 862 + source = "registry+https://github.com/rust-lang/crates.io-index" 863 + checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 864 + 865 + [[package]] 866 + name = "jiff" 867 + version = "0.2.15" 868 + source = "registry+https://github.com/rust-lang/crates.io-index" 869 + checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" 870 + dependencies = [ 871 + "jiff-static", 872 + "log", 873 + "portable-atomic", 874 + "portable-atomic-util", 875 + "serde", 876 + ] 877 + 878 + [[package]] 879 + name = "jiff-static" 880 + version = "0.2.15" 881 + source = "registry+https://github.com/rust-lang/crates.io-index" 882 + checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" 883 + dependencies = [ 884 + "proc-macro2", 885 + "quote", 886 + "syn", 887 + ] 888 + 889 + [[package]] 890 + name = "js-sys" 891 + version = "0.3.78" 892 + source = "registry+https://github.com/rust-lang/crates.io-index" 893 + checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" 894 + dependencies = [ 895 + "once_cell", 896 + "wasm-bindgen", 897 + ] 898 + 899 + [[package]] 900 + name = "libc" 901 + version = "0.2.175" 902 + source = "registry+https://github.com/rust-lang/crates.io-index" 903 + checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" 904 + 905 + [[package]] 906 + name = "libredox" 907 + version = "0.1.9" 908 + source = "registry+https://github.com/rust-lang/crates.io-index" 909 + checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" 910 + dependencies = [ 911 + "bitflags", 912 + "libc", 913 + "redox_syscall", 914 + ] 915 + 916 + [[package]] 917 + name = "linux-raw-sys" 918 + version = "0.11.0" 919 + source = "registry+https://github.com/rust-lang/crates.io-index" 920 + checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" 921 + 922 + [[package]] 923 + name = "litemap" 924 + version = "0.8.0" 925 + source = "registry+https://github.com/rust-lang/crates.io-index" 926 + checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 927 + 928 + [[package]] 929 + name = "lock_api" 930 + version = "0.4.13" 931 + source = "registry+https://github.com/rust-lang/crates.io-index" 932 + checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" 933 + dependencies = [ 934 + "autocfg", 935 + "scopeguard", 936 + ] 937 + 938 + [[package]] 939 + name = "log" 940 + version = "0.4.28" 941 + source = "registry+https://github.com/rust-lang/crates.io-index" 942 + checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 943 + 944 + [[package]] 945 + name = "md-5" 946 + version = "0.10.6" 947 + source = "registry+https://github.com/rust-lang/crates.io-index" 948 + checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" 949 + dependencies = [ 950 + "cfg-if", 951 + "digest", 952 + ] 953 + 954 + [[package]] 955 + name = "memchr" 956 + version = "2.7.5" 957 + source = "registry+https://github.com/rust-lang/crates.io-index" 958 + checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" 959 + 960 + [[package]] 961 + name = "mime" 962 + version = "0.3.17" 963 + source = "registry+https://github.com/rust-lang/crates.io-index" 964 + checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 965 + 966 + [[package]] 967 + name = "miniz_oxide" 968 + version = "0.8.9" 969 + source = "registry+https://github.com/rust-lang/crates.io-index" 970 + checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" 971 + dependencies = [ 972 + "adler2", 973 + ] 974 + 975 + [[package]] 976 + name = "mio" 977 + version = "1.0.4" 978 + source = "registry+https://github.com/rust-lang/crates.io-index" 979 + checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" 980 + dependencies = [ 981 + "libc", 982 + "wasi 0.11.1+wasi-snapshot-preview1", 983 + "windows-sys 0.59.0", 984 + ] 985 + 986 + [[package]] 987 + name = "nanorand" 988 + version = "0.7.0" 989 + source = "registry+https://github.com/rust-lang/crates.io-index" 990 + checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" 991 + dependencies = [ 992 + "getrandom 0.2.16", 993 + ] 994 + 995 + [[package]] 996 + name = "native-tls" 997 + version = "0.2.14" 998 + source = "registry+https://github.com/rust-lang/crates.io-index" 999 + checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" 1000 + dependencies = [ 1001 + "libc", 1002 + "log", 1003 + "openssl", 1004 + "openssl-probe", 1005 + "openssl-sys", 1006 + "schannel", 1007 + "security-framework", 1008 + "security-framework-sys", 1009 + "tempfile", 1010 + ] 1011 + 1012 + [[package]] 1013 + name = "num-traits" 1014 + version = "0.2.19" 1015 + source = "registry+https://github.com/rust-lang/crates.io-index" 1016 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1017 + dependencies = [ 1018 + "autocfg", 1019 + ] 1020 + 1021 + [[package]] 1022 + name = "object" 1023 + version = "0.36.7" 1024 + source = "registry+https://github.com/rust-lang/crates.io-index" 1025 + checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 1026 + dependencies = [ 1027 + "memchr", 1028 + ] 1029 + 1030 + [[package]] 1031 + name = "once_cell" 1032 + version = "1.21.3" 1033 + source = "registry+https://github.com/rust-lang/crates.io-index" 1034 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 1035 + 1036 + [[package]] 1037 + name = "once_cell_polyfill" 1038 + version = "1.70.1" 1039 + source = "registry+https://github.com/rust-lang/crates.io-index" 1040 + checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" 1041 + 1042 + [[package]] 1043 + name = "openssl" 1044 + version = "0.10.73" 1045 + source = "registry+https://github.com/rust-lang/crates.io-index" 1046 + checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" 1047 + dependencies = [ 1048 + "bitflags", 1049 + "cfg-if", 1050 + "foreign-types", 1051 + "libc", 1052 + "once_cell", 1053 + "openssl-macros", 1054 + "openssl-sys", 1055 + ] 1056 + 1057 + [[package]] 1058 + name = "openssl-macros" 1059 + version = "0.1.1" 1060 + source = "registry+https://github.com/rust-lang/crates.io-index" 1061 + checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 1062 + dependencies = [ 1063 + "proc-macro2", 1064 + "quote", 1065 + "syn", 1066 + ] 1067 + 1068 + [[package]] 1069 + name = "openssl-probe" 1070 + version = "0.1.6" 1071 + source = "registry+https://github.com/rust-lang/crates.io-index" 1072 + checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" 1073 + 1074 + [[package]] 1075 + name = "openssl-sys" 1076 + version = "0.9.109" 1077 + source = "registry+https://github.com/rust-lang/crates.io-index" 1078 + checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" 1079 + dependencies = [ 1080 + "cc", 1081 + "libc", 1082 + "pkg-config", 1083 + "vcpkg", 1084 + ] 1085 + 1086 + [[package]] 1087 + name = "parking_lot" 1088 + version = "0.12.4" 1089 + source = "registry+https://github.com/rust-lang/crates.io-index" 1090 + checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" 1091 + dependencies = [ 1092 + "lock_api", 1093 + "parking_lot_core", 1094 + ] 1095 + 1096 + [[package]] 1097 + name = "parking_lot_core" 1098 + version = "0.9.11" 1099 + source = "registry+https://github.com/rust-lang/crates.io-index" 1100 + checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" 1101 + dependencies = [ 1102 + "cfg-if", 1103 + "libc", 1104 + "redox_syscall", 1105 + "smallvec", 1106 + "windows-targets 0.52.6", 1107 + ] 1108 + 1109 + [[package]] 1110 + name = "percent-encoding" 1111 + version = "2.3.2" 1112 + source = "registry+https://github.com/rust-lang/crates.io-index" 1113 + checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 1114 + 1115 + [[package]] 1116 + name = "phf" 1117 + version = "0.11.3" 1118 + source = "registry+https://github.com/rust-lang/crates.io-index" 1119 + checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 1120 + dependencies = [ 1121 + "phf_shared", 1122 + ] 1123 + 1124 + [[package]] 1125 + name = "phf_shared" 1126 + version = "0.11.3" 1127 + source = "registry+https://github.com/rust-lang/crates.io-index" 1128 + checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 1129 + dependencies = [ 1130 + "siphasher", 1131 + ] 1132 + 1133 + [[package]] 1134 + name = "pin-project-lite" 1135 + version = "0.2.16" 1136 + source = "registry+https://github.com/rust-lang/crates.io-index" 1137 + checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 1138 + 1139 + [[package]] 1140 + name = "pin-utils" 1141 + version = "0.1.0" 1142 + source = "registry+https://github.com/rust-lang/crates.io-index" 1143 + checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1144 + 1145 + [[package]] 1146 + name = "pkg-config" 1147 + version = "0.3.32" 1148 + source = "registry+https://github.com/rust-lang/crates.io-index" 1149 + checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 1150 + 1151 + [[package]] 1152 + name = "portable-atomic" 1153 + version = "1.11.1" 1154 + source = "registry+https://github.com/rust-lang/crates.io-index" 1155 + checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" 1156 + 1157 + [[package]] 1158 + name = "portable-atomic-util" 1159 + version = "0.2.4" 1160 + source = "registry+https://github.com/rust-lang/crates.io-index" 1161 + checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" 1162 + dependencies = [ 1163 + "portable-atomic", 1164 + ] 1165 + 1166 + [[package]] 1167 + name = "postgres-protocol" 1168 + version = "0.6.8" 1169 + source = "registry+https://github.com/rust-lang/crates.io-index" 1170 + checksum = "76ff0abab4a9b844b93ef7b81f1efc0a366062aaef2cd702c76256b5dc075c54" 1171 + dependencies = [ 1172 + "base64", 1173 + "byteorder", 1174 + "bytes", 1175 + "fallible-iterator", 1176 + "hmac", 1177 + "md-5", 1178 + "memchr", 1179 + "rand", 1180 + "sha2", 1181 + "stringprep", 1182 + ] 1183 + 1184 + [[package]] 1185 + name = "postgres-types" 1186 + version = "0.2.9" 1187 + source = "registry+https://github.com/rust-lang/crates.io-index" 1188 + checksum = "613283563cd90e1dfc3518d548caee47e0e725455ed619881f5cf21f36de4b48" 1189 + dependencies = [ 1190 + "bytes", 1191 + "chrono", 1192 + "fallible-iterator", 1193 + "postgres-protocol", 1194 + "serde", 1195 + "serde_json", 1196 + ] 1197 + 1198 + [[package]] 1199 + name = "potential_utf" 1200 + version = "0.1.3" 1201 + source = "registry+https://github.com/rust-lang/crates.io-index" 1202 + checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" 1203 + dependencies = [ 1204 + "zerovec", 1205 + ] 1206 + 1207 + [[package]] 1208 + name = "ppv-lite86" 1209 + version = "0.2.21" 1210 + source = "registry+https://github.com/rust-lang/crates.io-index" 1211 + checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 1212 + dependencies = [ 1213 + "zerocopy", 1214 + ] 1215 + 1216 + [[package]] 1217 + name = "proc-macro2" 1218 + version = "1.0.101" 1219 + source = "registry+https://github.com/rust-lang/crates.io-index" 1220 + checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" 1221 + dependencies = [ 1222 + "unicode-ident", 1223 + ] 1224 + 1225 + [[package]] 1226 + name = "quote" 1227 + version = "1.0.40" 1228 + source = "registry+https://github.com/rust-lang/crates.io-index" 1229 + checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 1230 + dependencies = [ 1231 + "proc-macro2", 1232 + ] 1233 + 1234 + [[package]] 1235 + name = "r-efi" 1236 + version = "5.3.0" 1237 + source = "registry+https://github.com/rust-lang/crates.io-index" 1238 + checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 1239 + 1240 + [[package]] 1241 + name = "rand" 1242 + version = "0.9.2" 1243 + source = "registry+https://github.com/rust-lang/crates.io-index" 1244 + checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" 1245 + dependencies = [ 1246 + "rand_chacha", 1247 + "rand_core", 1248 + ] 1249 + 1250 + [[package]] 1251 + name = "rand_chacha" 1252 + version = "0.9.0" 1253 + source = "registry+https://github.com/rust-lang/crates.io-index" 1254 + checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 1255 + dependencies = [ 1256 + "ppv-lite86", 1257 + "rand_core", 1258 + ] 1259 + 1260 + [[package]] 1261 + name = "rand_core" 1262 + version = "0.9.3" 1263 + source = "registry+https://github.com/rust-lang/crates.io-index" 1264 + checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" 1265 + dependencies = [ 1266 + "getrandom 0.3.3", 1267 + ] 1268 + 1269 + [[package]] 1270 + name = "redox_syscall" 1271 + version = "0.5.17" 1272 + source = "registry+https://github.com/rust-lang/crates.io-index" 1273 + checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" 1274 + dependencies = [ 1275 + "bitflags", 1276 + ] 1277 + 1278 + [[package]] 1279 + name = "regex" 1280 + version = "1.11.2" 1281 + source = "registry+https://github.com/rust-lang/crates.io-index" 1282 + checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" 1283 + dependencies = [ 1284 + "aho-corasick", 1285 + "memchr", 1286 + "regex-automata", 1287 + "regex-syntax", 1288 + ] 1289 + 1290 + [[package]] 1291 + name = "regex-automata" 1292 + version = "0.4.10" 1293 + source = "registry+https://github.com/rust-lang/crates.io-index" 1294 + checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" 1295 + dependencies = [ 1296 + "aho-corasick", 1297 + "memchr", 1298 + "regex-syntax", 1299 + ] 1300 + 1301 + [[package]] 1302 + name = "regex-syntax" 1303 + version = "0.8.6" 1304 + source = "registry+https://github.com/rust-lang/crates.io-index" 1305 + checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" 1306 + 1307 + [[package]] 1308 + name = "reqwest" 1309 + version = "0.12.23" 1310 + source = "registry+https://github.com/rust-lang/crates.io-index" 1311 + checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" 1312 + dependencies = [ 1313 + "base64", 1314 + "bytes", 1315 + "encoding_rs", 1316 + "futures-core", 1317 + "h2", 1318 + "http", 1319 + "http-body", 1320 + "http-body-util", 1321 + "hyper", 1322 + "hyper-rustls", 1323 + "hyper-tls", 1324 + "hyper-util", 1325 + "js-sys", 1326 + "log", 1327 + "mime", 1328 + "native-tls", 1329 + "percent-encoding", 1330 + "pin-project-lite", 1331 + "rustls-pki-types", 1332 + "serde", 1333 + "serde_json", 1334 + "serde_urlencoded", 1335 + "sync_wrapper", 1336 + "tokio", 1337 + "tokio-native-tls", 1338 + "tower", 1339 + "tower-http", 1340 + "tower-service", 1341 + "url", 1342 + "wasm-bindgen", 1343 + "wasm-bindgen-futures", 1344 + "web-sys", 1345 + ] 1346 + 1347 + [[package]] 1348 + name = "ring" 1349 + version = "0.17.14" 1350 + source = "registry+https://github.com/rust-lang/crates.io-index" 1351 + checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 1352 + dependencies = [ 1353 + "cc", 1354 + "cfg-if", 1355 + "getrandom 0.2.16", 1356 + "libc", 1357 + "untrusted", 1358 + "windows-sys 0.52.0", 1359 + ] 1360 + 1361 + [[package]] 1362 + name = "rustc-demangle" 1363 + version = "0.1.26" 1364 + source = "registry+https://github.com/rust-lang/crates.io-index" 1365 + checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" 1366 + 1367 + [[package]] 1368 + name = "rustix" 1369 + version = "1.1.2" 1370 + source = "registry+https://github.com/rust-lang/crates.io-index" 1371 + checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" 1372 + dependencies = [ 1373 + "bitflags", 1374 + "errno", 1375 + "libc", 1376 + "linux-raw-sys", 1377 + "windows-sys 0.61.0", 1378 + ] 1379 + 1380 + [[package]] 1381 + name = "rustls" 1382 + version = "0.23.31" 1383 + source = "registry+https://github.com/rust-lang/crates.io-index" 1384 + checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" 1385 + dependencies = [ 1386 + "once_cell", 1387 + "rustls-pki-types", 1388 + "rustls-webpki", 1389 + "subtle", 1390 + "zeroize", 1391 + ] 1392 + 1393 + [[package]] 1394 + name = "rustls-pki-types" 1395 + version = "1.12.0" 1396 + source = "registry+https://github.com/rust-lang/crates.io-index" 1397 + checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" 1398 + dependencies = [ 1399 + "zeroize", 1400 + ] 1401 + 1402 + [[package]] 1403 + name = "rustls-webpki" 1404 + version = "0.103.5" 1405 + source = "registry+https://github.com/rust-lang/crates.io-index" 1406 + checksum = "b5a37813727b78798e53c2bec3f5e8fe12a6d6f8389bf9ca7802add4c9905ad8" 1407 + dependencies = [ 1408 + "ring", 1409 + "rustls-pki-types", 1410 + "untrusted", 1411 + ] 1412 + 1413 + [[package]] 1414 + name = "rustversion" 1415 + version = "1.0.22" 1416 + source = "registry+https://github.com/rust-lang/crates.io-index" 1417 + checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 1418 + 1419 + [[package]] 1420 + name = "ryu" 1421 + version = "1.0.20" 1422 + source = "registry+https://github.com/rust-lang/crates.io-index" 1423 + checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 1424 + 1425 + [[package]] 1426 + name = "schannel" 1427 + version = "0.1.28" 1428 + source = "registry+https://github.com/rust-lang/crates.io-index" 1429 + checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" 1430 + dependencies = [ 1431 + "windows-sys 0.61.0", 1432 + ] 1433 + 1434 + [[package]] 1435 + name = "scopeguard" 1436 + version = "1.2.0" 1437 + source = "registry+https://github.com/rust-lang/crates.io-index" 1438 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1439 + 1440 + [[package]] 1441 + name = "security-framework" 1442 + version = "2.11.1" 1443 + source = "registry+https://github.com/rust-lang/crates.io-index" 1444 + checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 1445 + dependencies = [ 1446 + "bitflags", 1447 + "core-foundation", 1448 + "core-foundation-sys", 1449 + "libc", 1450 + "security-framework-sys", 1451 + ] 1452 + 1453 + [[package]] 1454 + name = "security-framework-sys" 1455 + version = "2.15.0" 1456 + source = "registry+https://github.com/rust-lang/crates.io-index" 1457 + checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" 1458 + dependencies = [ 1459 + "core-foundation-sys", 1460 + "libc", 1461 + ] 1462 + 1463 + [[package]] 1464 + name = "serde" 1465 + version = "1.0.219" 1466 + source = "registry+https://github.com/rust-lang/crates.io-index" 1467 + checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 1468 + dependencies = [ 1469 + "serde_derive", 1470 + ] 1471 + 1472 + [[package]] 1473 + name = "serde_derive" 1474 + version = "1.0.219" 1475 + source = "registry+https://github.com/rust-lang/crates.io-index" 1476 + checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 1477 + dependencies = [ 1478 + "proc-macro2", 1479 + "quote", 1480 + "syn", 1481 + ] 1482 + 1483 + [[package]] 1484 + name = "serde_json" 1485 + version = "1.0.143" 1486 + source = "registry+https://github.com/rust-lang/crates.io-index" 1487 + checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" 1488 + dependencies = [ 1489 + "itoa", 1490 + "memchr", 1491 + "ryu", 1492 + "serde", 1493 + ] 1494 + 1495 + [[package]] 1496 + name = "serde_urlencoded" 1497 + version = "0.7.1" 1498 + source = "registry+https://github.com/rust-lang/crates.io-index" 1499 + checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1500 + dependencies = [ 1501 + "form_urlencoded", 1502 + "itoa", 1503 + "ryu", 1504 + "serde", 1505 + ] 1506 + 1507 + [[package]] 1508 + name = "sha2" 1509 + version = "0.10.9" 1510 + source = "registry+https://github.com/rust-lang/crates.io-index" 1511 + checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 1512 + dependencies = [ 1513 + "cfg-if", 1514 + "cpufeatures", 1515 + "digest", 1516 + ] 1517 + 1518 + [[package]] 1519 + name = "shlex" 1520 + version = "1.3.0" 1521 + source = "registry+https://github.com/rust-lang/crates.io-index" 1522 + checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1523 + 1524 + [[package]] 1525 + name = "signal-hook-registry" 1526 + version = "1.4.6" 1527 + source = "registry+https://github.com/rust-lang/crates.io-index" 1528 + checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" 1529 + dependencies = [ 1530 + "libc", 1531 + ] 1532 + 1533 + [[package]] 1534 + name = "siphasher" 1535 + version = "1.0.1" 1536 + source = "registry+https://github.com/rust-lang/crates.io-index" 1537 + checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" 1538 + 1539 + [[package]] 1540 + name = "slab" 1541 + version = "0.4.11" 1542 + source = "registry+https://github.com/rust-lang/crates.io-index" 1543 + checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" 1544 + 1545 + [[package]] 1546 + name = "smallvec" 1547 + version = "1.15.1" 1548 + source = "registry+https://github.com/rust-lang/crates.io-index" 1549 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 1550 + 1551 + [[package]] 1552 + name = "socket2" 1553 + version = "0.5.10" 1554 + source = "registry+https://github.com/rust-lang/crates.io-index" 1555 + checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" 1556 + dependencies = [ 1557 + "libc", 1558 + "windows-sys 0.52.0", 1559 + ] 1560 + 1561 + [[package]] 1562 + name = "socket2" 1563 + version = "0.6.0" 1564 + source = "registry+https://github.com/rust-lang/crates.io-index" 1565 + checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" 1566 + dependencies = [ 1567 + "libc", 1568 + "windows-sys 0.59.0", 1569 + ] 1570 + 1571 + [[package]] 1572 + name = "spin" 1573 + version = "0.9.8" 1574 + source = "registry+https://github.com/rust-lang/crates.io-index" 1575 + checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 1576 + dependencies = [ 1577 + "lock_api", 1578 + ] 1579 + 1580 + [[package]] 1581 + name = "stable_deref_trait" 1582 + version = "1.2.0" 1583 + source = "registry+https://github.com/rust-lang/crates.io-index" 1584 + checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1585 + 1586 + [[package]] 1587 + name = "stringprep" 1588 + version = "0.1.5" 1589 + source = "registry+https://github.com/rust-lang/crates.io-index" 1590 + checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" 1591 + dependencies = [ 1592 + "unicode-bidi", 1593 + "unicode-normalization", 1594 + "unicode-properties", 1595 + ] 1596 + 1597 + [[package]] 1598 + name = "strsim" 1599 + version = "0.11.1" 1600 + source = "registry+https://github.com/rust-lang/crates.io-index" 1601 + checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 1602 + 1603 + [[package]] 1604 + name = "subtle" 1605 + version = "2.6.1" 1606 + source = "registry+https://github.com/rust-lang/crates.io-index" 1607 + checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 1608 + 1609 + [[package]] 1610 + name = "syn" 1611 + version = "2.0.106" 1612 + source = "registry+https://github.com/rust-lang/crates.io-index" 1613 + checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" 1614 + dependencies = [ 1615 + "proc-macro2", 1616 + "quote", 1617 + "unicode-ident", 1618 + ] 1619 + 1620 + [[package]] 1621 + name = "sync_wrapper" 1622 + version = "1.0.2" 1623 + source = "registry+https://github.com/rust-lang/crates.io-index" 1624 + checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 1625 + dependencies = [ 1626 + "futures-core", 1627 + ] 1628 + 1629 + [[package]] 1630 + name = "synstructure" 1631 + version = "0.13.2" 1632 + source = "registry+https://github.com/rust-lang/crates.io-index" 1633 + checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 1634 + dependencies = [ 1635 + "proc-macro2", 1636 + "quote", 1637 + "syn", 1638 + ] 1639 + 1640 + [[package]] 1641 + name = "system-configuration" 1642 + version = "0.6.1" 1643 + source = "registry+https://github.com/rust-lang/crates.io-index" 1644 + checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 1645 + dependencies = [ 1646 + "bitflags", 1647 + "core-foundation", 1648 + "system-configuration-sys", 1649 + ] 1650 + 1651 + [[package]] 1652 + name = "system-configuration-sys" 1653 + version = "0.6.0" 1654 + source = "registry+https://github.com/rust-lang/crates.io-index" 1655 + checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" 1656 + dependencies = [ 1657 + "core-foundation-sys", 1658 + "libc", 1659 + ] 1660 + 1661 + [[package]] 1662 + name = "tempfile" 1663 + version = "3.22.0" 1664 + source = "registry+https://github.com/rust-lang/crates.io-index" 1665 + checksum = "84fa4d11fadde498443cca10fd3ac23c951f0dc59e080e9f4b93d4df4e4eea53" 1666 + dependencies = [ 1667 + "fastrand", 1668 + "getrandom 0.3.3", 1669 + "once_cell", 1670 + "rustix", 1671 + "windows-sys 0.61.0", 1672 + ] 1673 + 1674 + [[package]] 1675 + name = "tinystr" 1676 + version = "0.8.1" 1677 + source = "registry+https://github.com/rust-lang/crates.io-index" 1678 + checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 1679 + dependencies = [ 1680 + "displaydoc", 1681 + "zerovec", 1682 + ] 1683 + 1684 + [[package]] 1685 + name = "tinyvec" 1686 + version = "1.10.0" 1687 + source = "registry+https://github.com/rust-lang/crates.io-index" 1688 + checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" 1689 + dependencies = [ 1690 + "tinyvec_macros", 1691 + ] 1692 + 1693 + [[package]] 1694 + name = "tinyvec_macros" 1695 + version = "0.1.1" 1696 + source = "registry+https://github.com/rust-lang/crates.io-index" 1697 + checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 1698 + 1699 + [[package]] 1700 + name = "tokio" 1701 + version = "1.47.1" 1702 + source = "registry+https://github.com/rust-lang/crates.io-index" 1703 + checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" 1704 + dependencies = [ 1705 + "backtrace", 1706 + "bytes", 1707 + "io-uring", 1708 + "libc", 1709 + "mio", 1710 + "parking_lot", 1711 + "pin-project-lite", 1712 + "signal-hook-registry", 1713 + "slab", 1714 + "socket2 0.6.0", 1715 + "tokio-macros", 1716 + "windows-sys 0.59.0", 1717 + ] 1718 + 1719 + [[package]] 1720 + name = "tokio-macros" 1721 + version = "2.5.0" 1722 + source = "registry+https://github.com/rust-lang/crates.io-index" 1723 + checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 1724 + dependencies = [ 1725 + "proc-macro2", 1726 + "quote", 1727 + "syn", 1728 + ] 1729 + 1730 + [[package]] 1731 + name = "tokio-native-tls" 1732 + version = "0.3.1" 1733 + source = "registry+https://github.com/rust-lang/crates.io-index" 1734 + checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 1735 + dependencies = [ 1736 + "native-tls", 1737 + "tokio", 1738 + ] 1739 + 1740 + [[package]] 1741 + name = "tokio-postgres" 1742 + version = "0.7.13" 1743 + source = "registry+https://github.com/rust-lang/crates.io-index" 1744 + checksum = "6c95d533c83082bb6490e0189acaa0bbeef9084e60471b696ca6988cd0541fb0" 1745 + dependencies = [ 1746 + "async-trait", 1747 + "byteorder", 1748 + "bytes", 1749 + "fallible-iterator", 1750 + "futures-channel", 1751 + "futures-util", 1752 + "log", 1753 + "parking_lot", 1754 + "percent-encoding", 1755 + "phf", 1756 + "pin-project-lite", 1757 + "postgres-protocol", 1758 + "postgres-types", 1759 + "rand", 1760 + "socket2 0.5.10", 1761 + "tokio", 1762 + "tokio-util", 1763 + "whoami", 1764 + ] 1765 + 1766 + [[package]] 1767 + name = "tokio-rustls" 1768 + version = "0.26.2" 1769 + source = "registry+https://github.com/rust-lang/crates.io-index" 1770 + checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" 1771 + dependencies = [ 1772 + "rustls", 1773 + "tokio", 1774 + ] 1775 + 1776 + [[package]] 1777 + name = "tokio-util" 1778 + version = "0.7.16" 1779 + source = "registry+https://github.com/rust-lang/crates.io-index" 1780 + checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" 1781 + dependencies = [ 1782 + "bytes", 1783 + "futures-core", 1784 + "futures-sink", 1785 + "pin-project-lite", 1786 + "tokio", 1787 + ] 1788 + 1789 + [[package]] 1790 + name = "tower" 1791 + version = "0.5.2" 1792 + source = "registry+https://github.com/rust-lang/crates.io-index" 1793 + checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 1794 + dependencies = [ 1795 + "futures-core", 1796 + "futures-util", 1797 + "pin-project-lite", 1798 + "sync_wrapper", 1799 + "tokio", 1800 + "tower-layer", 1801 + "tower-service", 1802 + ] 1803 + 1804 + [[package]] 1805 + name = "tower-http" 1806 + version = "0.6.6" 1807 + source = "registry+https://github.com/rust-lang/crates.io-index" 1808 + checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" 1809 + dependencies = [ 1810 + "bitflags", 1811 + "bytes", 1812 + "futures-util", 1813 + "http", 1814 + "http-body", 1815 + "iri-string", 1816 + "pin-project-lite", 1817 + "tower", 1818 + "tower-layer", 1819 + "tower-service", 1820 + ] 1821 + 1822 + [[package]] 1823 + name = "tower-layer" 1824 + version = "0.3.3" 1825 + source = "registry+https://github.com/rust-lang/crates.io-index" 1826 + checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 1827 + 1828 + [[package]] 1829 + name = "tower-service" 1830 + version = "0.3.3" 1831 + source = "registry+https://github.com/rust-lang/crates.io-index" 1832 + checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 1833 + 1834 + [[package]] 1835 + name = "tracing" 1836 + version = "0.1.41" 1837 + source = "registry+https://github.com/rust-lang/crates.io-index" 1838 + checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 1839 + dependencies = [ 1840 + "pin-project-lite", 1841 + "tracing-core", 1842 + ] 1843 + 1844 + [[package]] 1845 + name = "tracing-core" 1846 + version = "0.1.34" 1847 + source = "registry+https://github.com/rust-lang/crates.io-index" 1848 + checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" 1849 + dependencies = [ 1850 + "once_cell", 1851 + ] 1852 + 1853 + [[package]] 1854 + name = "try-lock" 1855 + version = "0.2.5" 1856 + source = "registry+https://github.com/rust-lang/crates.io-index" 1857 + checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 1858 + 1859 + [[package]] 1860 + name = "typenum" 1861 + version = "1.18.0" 1862 + source = "registry+https://github.com/rust-lang/crates.io-index" 1863 + checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 1864 + 1865 + [[package]] 1866 + name = "unicode-bidi" 1867 + version = "0.3.18" 1868 + source = "registry+https://github.com/rust-lang/crates.io-index" 1869 + checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" 1870 + 1871 + [[package]] 1872 + name = "unicode-ident" 1873 + version = "1.0.19" 1874 + source = "registry+https://github.com/rust-lang/crates.io-index" 1875 + checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" 1876 + 1877 + [[package]] 1878 + name = "unicode-normalization" 1879 + version = "0.1.24" 1880 + source = "registry+https://github.com/rust-lang/crates.io-index" 1881 + checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" 1882 + dependencies = [ 1883 + "tinyvec", 1884 + ] 1885 + 1886 + [[package]] 1887 + name = "unicode-properties" 1888 + version = "0.1.3" 1889 + source = "registry+https://github.com/rust-lang/crates.io-index" 1890 + checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" 1891 + 1892 + [[package]] 1893 + name = "untrusted" 1894 + version = "0.9.0" 1895 + source = "registry+https://github.com/rust-lang/crates.io-index" 1896 + checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 1897 + 1898 + [[package]] 1899 + name = "url" 1900 + version = "2.5.7" 1901 + source = "registry+https://github.com/rust-lang/crates.io-index" 1902 + checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" 1903 + dependencies = [ 1904 + "form_urlencoded", 1905 + "idna", 1906 + "percent-encoding", 1907 + "serde", 1908 + ] 1909 + 1910 + [[package]] 1911 + name = "utf8_iter" 1912 + version = "1.0.4" 1913 + source = "registry+https://github.com/rust-lang/crates.io-index" 1914 + checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 1915 + 1916 + [[package]] 1917 + name = "utf8parse" 1918 + version = "0.2.2" 1919 + source = "registry+https://github.com/rust-lang/crates.io-index" 1920 + checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 1921 + 1922 + [[package]] 1923 + name = "vcpkg" 1924 + version = "0.2.15" 1925 + source = "registry+https://github.com/rust-lang/crates.io-index" 1926 + checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 1927 + 1928 + [[package]] 1929 + name = "version_check" 1930 + version = "0.9.5" 1931 + source = "registry+https://github.com/rust-lang/crates.io-index" 1932 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 1933 + 1934 + [[package]] 1935 + name = "want" 1936 + version = "0.3.1" 1937 + source = "registry+https://github.com/rust-lang/crates.io-index" 1938 + checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 1939 + dependencies = [ 1940 + "try-lock", 1941 + ] 1942 + 1943 + [[package]] 1944 + name = "wasi" 1945 + version = "0.11.1+wasi-snapshot-preview1" 1946 + source = "registry+https://github.com/rust-lang/crates.io-index" 1947 + checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 1948 + 1949 + [[package]] 1950 + name = "wasi" 1951 + version = "0.14.5+wasi-0.2.4" 1952 + source = "registry+https://github.com/rust-lang/crates.io-index" 1953 + checksum = "a4494f6290a82f5fe584817a676a34b9d6763e8d9d18204009fb31dceca98fd4" 1954 + dependencies = [ 1955 + "wasip2", 1956 + ] 1957 + 1958 + [[package]] 1959 + name = "wasip2" 1960 + version = "1.0.0+wasi-0.2.4" 1961 + source = "registry+https://github.com/rust-lang/crates.io-index" 1962 + checksum = "03fa2761397e5bd52002cd7e73110c71af2109aca4e521a9f40473fe685b0a24" 1963 + dependencies = [ 1964 + "wit-bindgen", 1965 + ] 1966 + 1967 + [[package]] 1968 + name = "wasite" 1969 + version = "0.1.0" 1970 + source = "registry+https://github.com/rust-lang/crates.io-index" 1971 + checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" 1972 + 1973 + [[package]] 1974 + name = "wasm-bindgen" 1975 + version = "0.2.101" 1976 + source = "registry+https://github.com/rust-lang/crates.io-index" 1977 + checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" 1978 + dependencies = [ 1979 + "cfg-if", 1980 + "once_cell", 1981 + "rustversion", 1982 + "wasm-bindgen-macro", 1983 + "wasm-bindgen-shared", 1984 + ] 1985 + 1986 + [[package]] 1987 + name = "wasm-bindgen-backend" 1988 + version = "0.2.101" 1989 + source = "registry+https://github.com/rust-lang/crates.io-index" 1990 + checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" 1991 + dependencies = [ 1992 + "bumpalo", 1993 + "log", 1994 + "proc-macro2", 1995 + "quote", 1996 + "syn", 1997 + "wasm-bindgen-shared", 1998 + ] 1999 + 2000 + [[package]] 2001 + name = "wasm-bindgen-futures" 2002 + version = "0.4.51" 2003 + source = "registry+https://github.com/rust-lang/crates.io-index" 2004 + checksum = "0ca85039a9b469b38336411d6d6ced91f3fc87109a2a27b0c197663f5144dffe" 2005 + dependencies = [ 2006 + "cfg-if", 2007 + "js-sys", 2008 + "once_cell", 2009 + "wasm-bindgen", 2010 + "web-sys", 2011 + ] 2012 + 2013 + [[package]] 2014 + name = "wasm-bindgen-macro" 2015 + version = "0.2.101" 2016 + source = "registry+https://github.com/rust-lang/crates.io-index" 2017 + checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" 2018 + dependencies = [ 2019 + "quote", 2020 + "wasm-bindgen-macro-support", 2021 + ] 2022 + 2023 + [[package]] 2024 + name = "wasm-bindgen-macro-support" 2025 + version = "0.2.101" 2026 + source = "registry+https://github.com/rust-lang/crates.io-index" 2027 + checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" 2028 + dependencies = [ 2029 + "proc-macro2", 2030 + "quote", 2031 + "syn", 2032 + "wasm-bindgen-backend", 2033 + "wasm-bindgen-shared", 2034 + ] 2035 + 2036 + [[package]] 2037 + name = "wasm-bindgen-shared" 2038 + version = "0.2.101" 2039 + source = "registry+https://github.com/rust-lang/crates.io-index" 2040 + checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" 2041 + dependencies = [ 2042 + "unicode-ident", 2043 + ] 2044 + 2045 + [[package]] 2046 + name = "web-sys" 2047 + version = "0.3.78" 2048 + source = "registry+https://github.com/rust-lang/crates.io-index" 2049 + checksum = "77e4b637749ff0d92b8fad63aa1f7cff3cbe125fd49c175cd6345e7272638b12" 2050 + dependencies = [ 2051 + "js-sys", 2052 + "wasm-bindgen", 2053 + ] 2054 + 2055 + [[package]] 2056 + name = "whoami" 2057 + version = "1.6.1" 2058 + source = "registry+https://github.com/rust-lang/crates.io-index" 2059 + checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" 2060 + dependencies = [ 2061 + "libredox", 2062 + "wasite", 2063 + "web-sys", 2064 + ] 2065 + 2066 + [[package]] 2067 + name = "windows-core" 2068 + version = "0.61.2" 2069 + source = "registry+https://github.com/rust-lang/crates.io-index" 2070 + checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 2071 + dependencies = [ 2072 + "windows-implement", 2073 + "windows-interface", 2074 + "windows-link 0.1.3", 2075 + "windows-result", 2076 + "windows-strings", 2077 + ] 2078 + 2079 + [[package]] 2080 + name = "windows-implement" 2081 + version = "0.60.0" 2082 + source = "registry+https://github.com/rust-lang/crates.io-index" 2083 + checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" 2084 + dependencies = [ 2085 + "proc-macro2", 2086 + "quote", 2087 + "syn", 2088 + ] 2089 + 2090 + [[package]] 2091 + name = "windows-interface" 2092 + version = "0.59.1" 2093 + source = "registry+https://github.com/rust-lang/crates.io-index" 2094 + checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" 2095 + dependencies = [ 2096 + "proc-macro2", 2097 + "quote", 2098 + "syn", 2099 + ] 2100 + 2101 + [[package]] 2102 + name = "windows-link" 2103 + version = "0.1.3" 2104 + source = "registry+https://github.com/rust-lang/crates.io-index" 2105 + checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 2106 + 2107 + [[package]] 2108 + name = "windows-link" 2109 + version = "0.2.0" 2110 + source = "registry+https://github.com/rust-lang/crates.io-index" 2111 + checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" 2112 + 2113 + [[package]] 2114 + name = "windows-registry" 2115 + version = "0.5.3" 2116 + source = "registry+https://github.com/rust-lang/crates.io-index" 2117 + checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" 2118 + dependencies = [ 2119 + "windows-link 0.1.3", 2120 + "windows-result", 2121 + "windows-strings", 2122 + ] 2123 + 2124 + [[package]] 2125 + name = "windows-result" 2126 + version = "0.3.4" 2127 + source = "registry+https://github.com/rust-lang/crates.io-index" 2128 + checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 2129 + dependencies = [ 2130 + "windows-link 0.1.3", 2131 + ] 2132 + 2133 + [[package]] 2134 + name = "windows-strings" 2135 + version = "0.4.2" 2136 + source = "registry+https://github.com/rust-lang/crates.io-index" 2137 + checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 2138 + dependencies = [ 2139 + "windows-link 0.1.3", 2140 + ] 2141 + 2142 + [[package]] 2143 + name = "windows-sys" 2144 + version = "0.52.0" 2145 + source = "registry+https://github.com/rust-lang/crates.io-index" 2146 + checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2147 + dependencies = [ 2148 + "windows-targets 0.52.6", 2149 + ] 2150 + 2151 + [[package]] 2152 + name = "windows-sys" 2153 + version = "0.59.0" 2154 + source = "registry+https://github.com/rust-lang/crates.io-index" 2155 + checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 2156 + dependencies = [ 2157 + "windows-targets 0.52.6", 2158 + ] 2159 + 2160 + [[package]] 2161 + name = "windows-sys" 2162 + version = "0.60.2" 2163 + source = "registry+https://github.com/rust-lang/crates.io-index" 2164 + checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 2165 + dependencies = [ 2166 + "windows-targets 0.53.3", 2167 + ] 2168 + 2169 + [[package]] 2170 + name = "windows-sys" 2171 + version = "0.61.0" 2172 + source = "registry+https://github.com/rust-lang/crates.io-index" 2173 + checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" 2174 + dependencies = [ 2175 + "windows-link 0.2.0", 2176 + ] 2177 + 2178 + [[package]] 2179 + name = "windows-targets" 2180 + version = "0.52.6" 2181 + source = "registry+https://github.com/rust-lang/crates.io-index" 2182 + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 2183 + dependencies = [ 2184 + "windows_aarch64_gnullvm 0.52.6", 2185 + "windows_aarch64_msvc 0.52.6", 2186 + "windows_i686_gnu 0.52.6", 2187 + "windows_i686_gnullvm 0.52.6", 2188 + "windows_i686_msvc 0.52.6", 2189 + "windows_x86_64_gnu 0.52.6", 2190 + "windows_x86_64_gnullvm 0.52.6", 2191 + "windows_x86_64_msvc 0.52.6", 2192 + ] 2193 + 2194 + [[package]] 2195 + name = "windows-targets" 2196 + version = "0.53.3" 2197 + source = "registry+https://github.com/rust-lang/crates.io-index" 2198 + checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" 2199 + dependencies = [ 2200 + "windows-link 0.1.3", 2201 + "windows_aarch64_gnullvm 0.53.0", 2202 + "windows_aarch64_msvc 0.53.0", 2203 + "windows_i686_gnu 0.53.0", 2204 + "windows_i686_gnullvm 0.53.0", 2205 + "windows_i686_msvc 0.53.0", 2206 + "windows_x86_64_gnu 0.53.0", 2207 + "windows_x86_64_gnullvm 0.53.0", 2208 + "windows_x86_64_msvc 0.53.0", 2209 + ] 2210 + 2211 + [[package]] 2212 + name = "windows_aarch64_gnullvm" 2213 + version = "0.52.6" 2214 + source = "registry+https://github.com/rust-lang/crates.io-index" 2215 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 2216 + 2217 + [[package]] 2218 + name = "windows_aarch64_gnullvm" 2219 + version = "0.53.0" 2220 + source = "registry+https://github.com/rust-lang/crates.io-index" 2221 + checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" 2222 + 2223 + [[package]] 2224 + name = "windows_aarch64_msvc" 2225 + version = "0.52.6" 2226 + source = "registry+https://github.com/rust-lang/crates.io-index" 2227 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 2228 + 2229 + [[package]] 2230 + name = "windows_aarch64_msvc" 2231 + version = "0.53.0" 2232 + source = "registry+https://github.com/rust-lang/crates.io-index" 2233 + checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" 2234 + 2235 + [[package]] 2236 + name = "windows_i686_gnu" 2237 + version = "0.52.6" 2238 + source = "registry+https://github.com/rust-lang/crates.io-index" 2239 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 2240 + 2241 + [[package]] 2242 + name = "windows_i686_gnu" 2243 + version = "0.53.0" 2244 + source = "registry+https://github.com/rust-lang/crates.io-index" 2245 + checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" 2246 + 2247 + [[package]] 2248 + name = "windows_i686_gnullvm" 2249 + version = "0.52.6" 2250 + source = "registry+https://github.com/rust-lang/crates.io-index" 2251 + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 2252 + 2253 + [[package]] 2254 + name = "windows_i686_gnullvm" 2255 + version = "0.53.0" 2256 + source = "registry+https://github.com/rust-lang/crates.io-index" 2257 + checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" 2258 + 2259 + [[package]] 2260 + name = "windows_i686_msvc" 2261 + version = "0.52.6" 2262 + source = "registry+https://github.com/rust-lang/crates.io-index" 2263 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 2264 + 2265 + [[package]] 2266 + name = "windows_i686_msvc" 2267 + version = "0.53.0" 2268 + source = "registry+https://github.com/rust-lang/crates.io-index" 2269 + checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" 2270 + 2271 + [[package]] 2272 + name = "windows_x86_64_gnu" 2273 + version = "0.52.6" 2274 + source = "registry+https://github.com/rust-lang/crates.io-index" 2275 + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 2276 + 2277 + [[package]] 2278 + name = "windows_x86_64_gnu" 2279 + version = "0.53.0" 2280 + source = "registry+https://github.com/rust-lang/crates.io-index" 2281 + checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" 2282 + 2283 + [[package]] 2284 + name = "windows_x86_64_gnullvm" 2285 + version = "0.52.6" 2286 + source = "registry+https://github.com/rust-lang/crates.io-index" 2287 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 2288 + 2289 + [[package]] 2290 + name = "windows_x86_64_gnullvm" 2291 + version = "0.53.0" 2292 + source = "registry+https://github.com/rust-lang/crates.io-index" 2293 + checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" 2294 + 2295 + [[package]] 2296 + name = "windows_x86_64_msvc" 2297 + version = "0.52.6" 2298 + source = "registry+https://github.com/rust-lang/crates.io-index" 2299 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 2300 + 2301 + [[package]] 2302 + name = "windows_x86_64_msvc" 2303 + version = "0.53.0" 2304 + source = "registry+https://github.com/rust-lang/crates.io-index" 2305 + checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" 2306 + 2307 + [[package]] 2308 + name = "wit-bindgen" 2309 + version = "0.45.1" 2310 + source = "registry+https://github.com/rust-lang/crates.io-index" 2311 + checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36" 2312 + 2313 + [[package]] 2314 + name = "writeable" 2315 + version = "0.6.1" 2316 + source = "registry+https://github.com/rust-lang/crates.io-index" 2317 + checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 2318 + 2319 + [[package]] 2320 + name = "yoke" 2321 + version = "0.8.0" 2322 + source = "registry+https://github.com/rust-lang/crates.io-index" 2323 + checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 2324 + dependencies = [ 2325 + "serde", 2326 + "stable_deref_trait", 2327 + "yoke-derive", 2328 + "zerofrom", 2329 + ] 2330 + 2331 + [[package]] 2332 + name = "yoke-derive" 2333 + version = "0.8.0" 2334 + source = "registry+https://github.com/rust-lang/crates.io-index" 2335 + checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 2336 + dependencies = [ 2337 + "proc-macro2", 2338 + "quote", 2339 + "syn", 2340 + "synstructure", 2341 + ] 2342 + 2343 + [[package]] 2344 + name = "zerocopy" 2345 + version = "0.8.27" 2346 + source = "registry+https://github.com/rust-lang/crates.io-index" 2347 + checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" 2348 + dependencies = [ 2349 + "zerocopy-derive", 2350 + ] 2351 + 2352 + [[package]] 2353 + name = "zerocopy-derive" 2354 + version = "0.8.27" 2355 + source = "registry+https://github.com/rust-lang/crates.io-index" 2356 + checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" 2357 + dependencies = [ 2358 + "proc-macro2", 2359 + "quote", 2360 + "syn", 2361 + ] 2362 + 2363 + [[package]] 2364 + name = "zerofrom" 2365 + version = "0.1.6" 2366 + source = "registry+https://github.com/rust-lang/crates.io-index" 2367 + checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 2368 + dependencies = [ 2369 + "zerofrom-derive", 2370 + ] 2371 + 2372 + [[package]] 2373 + name = "zerofrom-derive" 2374 + version = "0.1.6" 2375 + source = "registry+https://github.com/rust-lang/crates.io-index" 2376 + checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 2377 + dependencies = [ 2378 + "proc-macro2", 2379 + "quote", 2380 + "syn", 2381 + "synstructure", 2382 + ] 2383 + 2384 + [[package]] 2385 + name = "zeroize" 2386 + version = "1.8.1" 2387 + source = "registry+https://github.com/rust-lang/crates.io-index" 2388 + checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 2389 + 2390 + [[package]] 2391 + name = "zerotrie" 2392 + version = "0.2.2" 2393 + source = "registry+https://github.com/rust-lang/crates.io-index" 2394 + checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 2395 + dependencies = [ 2396 + "displaydoc", 2397 + "yoke", 2398 + "zerofrom", 2399 + ] 2400 + 2401 + [[package]] 2402 + name = "zerovec" 2403 + version = "0.11.4" 2404 + source = "registry+https://github.com/rust-lang/crates.io-index" 2405 + checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" 2406 + dependencies = [ 2407 + "yoke", 2408 + "zerofrom", 2409 + "zerovec-derive", 2410 + ] 2411 + 2412 + [[package]] 2413 + name = "zerovec-derive" 2414 + version = "0.11.1" 2415 + source = "registry+https://github.com/rust-lang/crates.io-index" 2416 + checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 2417 + dependencies = [ 2418 + "proc-macro2", 2419 + "quote", 2420 + "syn", 2421 + ]
+13 -1
Cargo.toml
··· 1 1 [package] 2 - name = "alleged" 2 + name = "allegedly" 3 3 version = "0.1.0" 4 4 edition = "2024" 5 5 6 6 [dependencies] 7 + anyhow = "1.0.99" 8 + chrono = { version = "0.4.42", features = ["serde"] } 9 + clap = { version = "4.5.47", features = ["derive", "env"] } 10 + env_logger = "0.11.8" 11 + flume = "0.11.1" 12 + log = "0.4.28" 13 + reqwest = "0.12.23" 14 + serde = "1.0.219" 15 + serde_json = "1.0.143" 16 + tokio = { version = "1.47.1", features = ["full"] } 17 + tokio-postgres = { version = "0.7.13", features = ["with-chrono-0_4", "with-serde_json-1"] } 18 + url = "2.5.7"
+214 -2
src/main.rs
··· 1 - fn main() { 2 - println!("Hello, world!"); 1 + use clap::Parser; 2 + use serde::Deserialize; 3 + use std::time::Duration; 4 + use tokio_postgres::NoTls; 5 + use url::Url; 6 + 7 + const EXPORT_PAGE_QUEUE_SIZE: usize = 32; 8 + const UPSTREAM_REQUEST_INTERVAL: Duration = Duration::from_millis(500); 9 + 10 + #[derive(Parser)] 11 + struct Args { 12 + /// Upstream PLC server to mirror 13 + /// 14 + /// default: plc.directory 15 + #[arg(long, env)] 16 + #[clap(default_value = "https://plc.directory")] 17 + upstream: Url, 18 + /// Mirror PLC's postgres database 19 + /// 20 + /// URI string with credentials etc 21 + #[arg(long, env)] 22 + postgres: String, 23 + } 24 + 25 + /// One page of PLC export 26 + /// 27 + /// should have maximum length of 1000 lines. 28 + /// A bulk export consumer should chunk ops into pages of max 1000 ops. 29 + /// 30 + /// leading and trailing whitespace should be trimmed. 31 + struct ExportPage { 32 + pub ops: String, 33 + } 34 + 35 + #[derive(Deserialize)] 36 + #[serde(rename_all = "camelCase")] 37 + struct OpPeek { 38 + pub created_at: chrono::DateTime<chrono::Utc>, 39 + } 40 + 41 + #[derive(Deserialize)] 42 + #[serde(rename_all = "camelCase")] 43 + struct Op<'a> { 44 + pub did: &'a str, 45 + pub cid: &'a str, 46 + pub created_at: chrono::DateTime<chrono::Utc>, 47 + pub nullified: bool, 48 + pub operation: serde_json::Value, 49 + } 50 + 51 + async fn export_upstream( 52 + upstream: Url, 53 + tx: flume::Sender<ExportPage>, 54 + latest: Option<chrono::DateTime<chrono::Utc>>, 55 + ) { 56 + let mut upstream = upstream; 57 + upstream.set_path("/export"); 58 + let mut after = latest; 59 + let mut tick = tokio::time::interval(UPSTREAM_REQUEST_INTERVAL); 60 + let client = reqwest::Client::builder() 61 + .user_agent(concat!( 62 + "allegedly v", 63 + env!("CARGO_PKG_VERSION"), 64 + " (part of @microcosm.blue; contact @bad-example.com)" 65 + )) 66 + .timeout(Duration::from_secs(4)) 67 + .build() 68 + .unwrap(); 69 + 70 + loop { 71 + tick.tick().await; 72 + let mut url = upstream.clone(); 73 + if let Some(ref after) = after { 74 + url.query_pairs_mut() 75 + .append_pair("after", &after.to_rfc3339()); 76 + } 77 + let ops = client 78 + .get(url) 79 + .send() 80 + .await 81 + .unwrap() 82 + .error_for_status() 83 + .unwrap() 84 + .text() 85 + .await 86 + .unwrap() 87 + .trim() 88 + .to_string(); 89 + 90 + let Some((_, last_line)) = ops.rsplit_once('\n') else { 91 + log::trace!("no ops in response page, nothing to do"); 92 + continue; 93 + }; 94 + 95 + let op: OpPeek = serde_json::from_str(last_line).unwrap(); 96 + after = Some(op.created_at); 97 + 98 + log::trace!("got {} ops until {after:?}, sending them...", ops.len()); 99 + tx.send_async(ExportPage { ops }).await.unwrap(); 100 + } 101 + } 102 + 103 + async fn write_pages( 104 + rx: flume::Receiver<ExportPage>, 105 + mut pg_client: tokio_postgres::Client, 106 + ) -> Result<(), anyhow::Error> { 107 + let upsert_did = &pg_client 108 + .prepare( 109 + r#" 110 + INSERT INTO dids (did) VALUES ($1) 111 + ON CONFLICT DO NOTHING"#, 112 + ) 113 + .await 114 + .unwrap(); 115 + 116 + let insert_op = &pg_client 117 + .prepare( 118 + r#" 119 + INSERT INTO operations (did, operation, cid, nullified, "createdAt") 120 + VALUES ($1, $2, $3, $4, $5)"#, 121 + ) // TODO: check that it hasn't changed 122 + .await 123 + .unwrap(); 124 + 125 + while let Ok(page) = rx.recv_async().await { 126 + log::info!("got a page..."); 127 + 128 + let mut tx = pg_client.transaction().await.unwrap(); 129 + 130 + // TODO: probably figure out postgres COPY IN 131 + // for now just write everything into a transaction 132 + 133 + log::info!("setting up inserts..."); 134 + for op_line in page.ops.lines() { 135 + let op: Op = serde_json::from_str(op_line).unwrap(); 136 + let client = &tx; 137 + 138 + client.execute(upsert_did, &[&op.did]).await.unwrap(); 139 + 140 + let sp = tx.savepoint("op").await.unwrap(); 141 + if let Err(e) = sp 142 + .execute( 143 + insert_op, 144 + &[ 145 + &op.did, 146 + &op.operation, 147 + &op.cid, 148 + &op.nullified, 149 + &op.created_at, 150 + ], 151 + ) 152 + .await 153 + { 154 + if e.code() != Some(&tokio_postgres::error::SqlState::UNIQUE_VIOLATION) { 155 + anyhow::bail!(e); 156 + } 157 + // TODO: assert that the row has not changed 158 + log::warn!("ignoring dup"); 159 + } else { 160 + sp.commit().await.unwrap(); 161 + } 162 + } 163 + 164 + tx.commit().await.unwrap(); 165 + 166 + log::info!("hi from writer! (done page)"); 167 + } 168 + Ok(()) 169 + } 170 + 171 + #[tokio::main] 172 + async fn main() { 173 + env_logger::init(); 174 + log::info!(concat!("📜 Allegedly v", env!("CARGO_PKG_VERSION"))); 175 + 176 + let args = Args::parse(); 177 + 178 + log::trace!("connecting postgres..."); 179 + let (pg_client, connection) = tokio_postgres::connect(&args.postgres, NoTls) 180 + .await 181 + .unwrap(); 182 + 183 + // send the connection away to do the actual communication work 184 + // TODO: error and shutdown handling 185 + let conn_task = tokio::task::spawn(async move { 186 + if let Err(e) = connection.await { 187 + eprintln!("connection error: {e}"); 188 + } 189 + }); 190 + 191 + let latest = pg_client 192 + .query_opt( 193 + r#"SELECT "createdAt" FROM operations 194 + ORDER BY "createdAt" DESC LIMIT 1"#, 195 + &[], 196 + ) 197 + .await 198 + .unwrap() 199 + .map(|r| r.get(0)); 200 + 201 + log::info!("connected! latest: {latest:?}"); 202 + 203 + let (tx, rx) = flume::bounded::<ExportPage>(EXPORT_PAGE_QUEUE_SIZE); 204 + 205 + let export_task = tokio::task::spawn(export_upstream(args.upstream, tx, latest)); 206 + let writer_task = tokio::task::spawn(write_pages(rx, pg_client)); 207 + 208 + tokio::select! { 209 + z = conn_task => log::warn!("connection task ended: {z:?}"), 210 + z = export_task => log::warn!("export task ended: {z:?}"), 211 + z = writer_task => log::warn!("writer task ended: {z:?}"), 212 + }; 213 + 214 + log::error!("todo: shutdown"); 3 215 }