Prepare, configure, and manage Firecracker microVMs in seconds!
virtualization linux microvm firecracker

persist microvm informations into database

+2517 -81
+2123 -23
Cargo.lock
··· 3 3 version = 4 4 4 5 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]] 6 21 name = "aho-corasick" 7 22 version = "1.1.3" 8 23 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 12 27 ] 13 28 14 29 [[package]] 30 + name = "allocator-api2" 31 + version = "0.2.21" 32 + source = "registry+https://github.com/rust-lang/crates.io-index" 33 + checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" 34 + 35 + [[package]] 36 + name = "android-tzdata" 37 + version = "0.1.1" 38 + source = "registry+https://github.com/rust-lang/crates.io-index" 39 + checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 40 + 41 + [[package]] 42 + name = "android_system_properties" 43 + version = "0.1.5" 44 + source = "registry+https://github.com/rust-lang/crates.io-index" 45 + checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 46 + dependencies = [ 47 + "libc", 48 + ] 49 + 50 + [[package]] 15 51 name = "anstream" 16 52 version = "0.6.19" 17 53 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 47 83 source = "registry+https://github.com/rust-lang/crates.io-index" 48 84 checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" 49 85 dependencies = [ 50 - "windows-sys", 86 + "windows-sys 0.59.0", 51 87 ] 52 88 53 89 [[package]] ··· 58 94 dependencies = [ 59 95 "anstyle", 60 96 "once_cell_polyfill", 61 - "windows-sys", 97 + "windows-sys 0.59.0", 62 98 ] 63 99 64 100 [[package]] ··· 68 104 checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" 69 105 70 106 [[package]] 107 + name = "atoi" 108 + version = "2.0.0" 109 + source = "registry+https://github.com/rust-lang/crates.io-index" 110 + checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" 111 + dependencies = [ 112 + "num-traits", 113 + ] 114 + 115 + [[package]] 116 + name = "atty" 117 + version = "0.2.14" 118 + source = "registry+https://github.com/rust-lang/crates.io-index" 119 + checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 120 + dependencies = [ 121 + "hermit-abi 0.1.19", 122 + "libc", 123 + "winapi", 124 + ] 125 + 126 + [[package]] 127 + name = "autocfg" 128 + version = "1.5.0" 129 + source = "registry+https://github.com/rust-lang/crates.io-index" 130 + checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 131 + 132 + [[package]] 133 + name = "backtrace" 134 + version = "0.3.75" 135 + source = "registry+https://github.com/rust-lang/crates.io-index" 136 + checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" 137 + dependencies = [ 138 + "addr2line", 139 + "cfg-if", 140 + "libc", 141 + "miniz_oxide", 142 + "object", 143 + "rustc-demangle", 144 + "windows-targets 0.52.6", 145 + ] 146 + 147 + [[package]] 148 + name = "base64" 149 + version = "0.22.1" 150 + source = "registry+https://github.com/rust-lang/crates.io-index" 151 + checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 152 + 153 + [[package]] 154 + name = "base64ct" 155 + version = "1.8.0" 156 + source = "registry+https://github.com/rust-lang/crates.io-index" 157 + checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" 158 + 159 + [[package]] 160 + name = "bitflags" 161 + version = "1.3.2" 162 + source = "registry+https://github.com/rust-lang/crates.io-index" 163 + checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 164 + 165 + [[package]] 71 166 name = "bitflags" 72 167 version = "2.9.1" 73 168 source = "registry+https://github.com/rust-lang/crates.io-index" 74 169 checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" 170 + dependencies = [ 171 + "serde", 172 + ] 173 + 174 + [[package]] 175 + name = "block-buffer" 176 + version = "0.10.4" 177 + source = "registry+https://github.com/rust-lang/crates.io-index" 178 + checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 179 + dependencies = [ 180 + "generic-array", 181 + ] 182 + 183 + [[package]] 184 + name = "bumpalo" 185 + version = "3.19.0" 186 + source = "registry+https://github.com/rust-lang/crates.io-index" 187 + checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" 188 + 189 + [[package]] 190 + name = "byteorder" 191 + version = "1.5.0" 192 + source = "registry+https://github.com/rust-lang/crates.io-index" 193 + checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 194 + 195 + [[package]] 196 + name = "bytes" 197 + version = "1.10.1" 198 + source = "registry+https://github.com/rust-lang/crates.io-index" 199 + checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 200 + 201 + [[package]] 202 + name = "cc" 203 + version = "1.2.30" 204 + source = "registry+https://github.com/rust-lang/crates.io-index" 205 + checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" 206 + dependencies = [ 207 + "shlex", 208 + ] 75 209 76 210 [[package]] 77 211 name = "cfg-if" ··· 80 214 checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" 81 215 82 216 [[package]] 217 + name = "chrono" 218 + version = "0.4.41" 219 + source = "registry+https://github.com/rust-lang/crates.io-index" 220 + checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" 221 + dependencies = [ 222 + "android-tzdata", 223 + "iana-time-zone", 224 + "js-sys", 225 + "num-traits", 226 + "serde", 227 + "wasm-bindgen", 228 + "windows-link", 229 + ] 230 + 231 + [[package]] 232 + name = "clap" 233 + version = "3.2.25" 234 + source = "registry+https://github.com/rust-lang/crates.io-index" 235 + checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" 236 + dependencies = [ 237 + "atty", 238 + "bitflags 1.3.2", 239 + "clap_derive", 240 + "clap_lex 0.2.4", 241 + "indexmap 1.9.3", 242 + "once_cell", 243 + "strsim 0.10.0", 244 + "termcolor", 245 + "textwrap", 246 + ] 247 + 248 + [[package]] 83 249 name = "clap" 84 250 version = "4.5.41" 85 251 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 96 262 dependencies = [ 97 263 "anstream", 98 264 "anstyle", 99 - "clap_lex", 100 - "strsim", 265 + "clap_lex 0.7.5", 266 + "strsim 0.11.1", 267 + ] 268 + 269 + [[package]] 270 + name = "clap_derive" 271 + version = "3.2.25" 272 + source = "registry+https://github.com/rust-lang/crates.io-index" 273 + checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" 274 + dependencies = [ 275 + "heck 0.4.1", 276 + "proc-macro-error", 277 + "proc-macro2", 278 + "quote", 279 + "syn 1.0.109", 280 + ] 281 + 282 + [[package]] 283 + name = "clap_lex" 284 + version = "0.2.4" 285 + source = "registry+https://github.com/rust-lang/crates.io-index" 286 + checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" 287 + dependencies = [ 288 + "os_str_bytes", 101 289 ] 102 290 103 291 [[package]] ··· 113 301 checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 114 302 115 303 [[package]] 304 + name = "concurrent-queue" 305 + version = "2.5.0" 306 + source = "registry+https://github.com/rust-lang/crates.io-index" 307 + checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 308 + dependencies = [ 309 + "crossbeam-utils", 310 + ] 311 + 312 + [[package]] 313 + name = "const-oid" 314 + version = "0.9.6" 315 + source = "registry+https://github.com/rust-lang/crates.io-index" 316 + checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" 317 + 318 + [[package]] 319 + name = "core-foundation-sys" 320 + version = "0.8.7" 321 + source = "registry+https://github.com/rust-lang/crates.io-index" 322 + checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 323 + 324 + [[package]] 325 + name = "cpufeatures" 326 + version = "0.2.17" 327 + source = "registry+https://github.com/rust-lang/crates.io-index" 328 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 329 + dependencies = [ 330 + "libc", 331 + ] 332 + 333 + [[package]] 334 + name = "crc" 335 + version = "3.3.0" 336 + source = "registry+https://github.com/rust-lang/crates.io-index" 337 + checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" 338 + dependencies = [ 339 + "crc-catalog", 340 + ] 341 + 342 + [[package]] 343 + name = "crc-catalog" 344 + version = "2.4.0" 345 + source = "registry+https://github.com/rust-lang/crates.io-index" 346 + checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" 347 + 348 + [[package]] 349 + name = "crc32fast" 350 + version = "1.5.0" 351 + source = "registry+https://github.com/rust-lang/crates.io-index" 352 + checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" 353 + dependencies = [ 354 + "cfg-if", 355 + ] 356 + 357 + [[package]] 358 + name = "crossbeam-queue" 359 + version = "0.3.12" 360 + source = "registry+https://github.com/rust-lang/crates.io-index" 361 + checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" 362 + dependencies = [ 363 + "crossbeam-utils", 364 + ] 365 + 366 + [[package]] 367 + name = "crossbeam-utils" 368 + version = "0.8.21" 369 + source = "registry+https://github.com/rust-lang/crates.io-index" 370 + checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 371 + 372 + [[package]] 373 + name = "crypto-common" 374 + version = "0.1.6" 375 + source = "registry+https://github.com/rust-lang/crates.io-index" 376 + checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 377 + dependencies = [ 378 + "generic-array", 379 + "typenum", 380 + ] 381 + 382 + [[package]] 383 + name = "der" 384 + version = "0.7.10" 385 + source = "registry+https://github.com/rust-lang/crates.io-index" 386 + checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" 387 + dependencies = [ 388 + "const-oid", 389 + "pem-rfc7468", 390 + "zeroize", 391 + ] 392 + 393 + [[package]] 394 + name = "digest" 395 + version = "0.10.7" 396 + source = "registry+https://github.com/rust-lang/crates.io-index" 397 + checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 398 + dependencies = [ 399 + "block-buffer", 400 + "const-oid", 401 + "crypto-common", 402 + "subtle", 403 + ] 404 + 405 + [[package]] 116 406 name = "dirs" 117 407 version = "6.0.0" 118 408 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 130 420 "libc", 131 421 "option-ext", 132 422 "redox_users", 133 - "windows-sys", 423 + "windows-sys 0.59.0", 424 + ] 425 + 426 + [[package]] 427 + name = "displaydoc" 428 + version = "0.2.5" 429 + source = "registry+https://github.com/rust-lang/crates.io-index" 430 + checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 431 + dependencies = [ 432 + "proc-macro2", 433 + "quote", 434 + "syn 2.0.104", 435 + ] 436 + 437 + [[package]] 438 + name = "dotenvy" 439 + version = "0.15.7" 440 + source = "registry+https://github.com/rust-lang/crates.io-index" 441 + checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" 442 + 443 + [[package]] 444 + name = "either" 445 + version = "1.15.0" 446 + source = "registry+https://github.com/rust-lang/crates.io-index" 447 + checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 448 + dependencies = [ 449 + "serde", 134 450 ] 135 451 136 452 [[package]] ··· 140 456 checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 141 457 142 458 [[package]] 459 + name = "etcetera" 460 + version = "0.8.0" 461 + source = "registry+https://github.com/rust-lang/crates.io-index" 462 + checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" 463 + dependencies = [ 464 + "cfg-if", 465 + "home", 466 + "windows-sys 0.48.0", 467 + ] 468 + 469 + [[package]] 470 + name = "event-listener" 471 + version = "5.4.1" 472 + source = "registry+https://github.com/rust-lang/crates.io-index" 473 + checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" 474 + dependencies = [ 475 + "concurrent-queue", 476 + "parking", 477 + "pin-project-lite", 478 + ] 479 + 480 + [[package]] 143 481 name = "fire-config" 144 482 version = "0.1.0" 145 483 dependencies = [ ··· 175 513 ] 176 514 177 515 [[package]] 516 + name = "firecracker-state" 517 + version = "0.1.0" 518 + dependencies = [ 519 + "anyhow", 520 + "chrono", 521 + "dirs", 522 + "names", 523 + "serde", 524 + "sqlx", 525 + "tokio", 526 + "xid", 527 + ] 528 + 529 + [[package]] 178 530 name = "firecracker-vm" 179 531 version = "0.1.0" 180 532 dependencies = [ ··· 182 534 "dirs", 183 535 "fire-config", 184 536 "firecracker-prepare", 537 + "firecracker-state", 185 538 "glob", 186 539 "libc", 540 + "names", 187 541 "num_cpus", 188 542 "owo-colors", 543 + "rand", 189 544 "serde_json", 190 545 ] 191 546 ··· 194 549 version = "0.4.1" 195 550 dependencies = [ 196 551 "anyhow", 197 - "clap", 552 + "clap 4.5.41", 198 553 "dirs", 199 554 "fire-config", 200 555 "firecracker-prepare", 201 556 "firecracker-process", 557 + "firecracker-state", 202 558 "firecracker-vm", 203 559 "glob", 560 + "names", 204 561 "num_cpus", 205 562 "owo-colors", 563 + "sqlx", 564 + "tokio", 565 + ] 566 + 567 + [[package]] 568 + name = "flume" 569 + version = "0.11.1" 570 + source = "registry+https://github.com/rust-lang/crates.io-index" 571 + checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" 572 + dependencies = [ 573 + "futures-core", 574 + "futures-sink", 575 + "spin", 576 + ] 577 + 578 + [[package]] 579 + name = "foldhash" 580 + version = "0.1.5" 581 + source = "registry+https://github.com/rust-lang/crates.io-index" 582 + checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 583 + 584 + [[package]] 585 + name = "form_urlencoded" 586 + version = "1.2.1" 587 + source = "registry+https://github.com/rust-lang/crates.io-index" 588 + checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 589 + dependencies = [ 590 + "percent-encoding", 591 + ] 592 + 593 + [[package]] 594 + name = "futures-channel" 595 + version = "0.3.31" 596 + source = "registry+https://github.com/rust-lang/crates.io-index" 597 + checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 598 + dependencies = [ 599 + "futures-core", 600 + "futures-sink", 601 + ] 602 + 603 + [[package]] 604 + name = "futures-core" 605 + version = "0.3.31" 606 + source = "registry+https://github.com/rust-lang/crates.io-index" 607 + checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 608 + 609 + [[package]] 610 + name = "futures-executor" 611 + version = "0.3.31" 612 + source = "registry+https://github.com/rust-lang/crates.io-index" 613 + checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 614 + dependencies = [ 615 + "futures-core", 616 + "futures-task", 617 + "futures-util", 618 + ] 619 + 620 + [[package]] 621 + name = "futures-intrusive" 622 + version = "0.5.0" 623 + source = "registry+https://github.com/rust-lang/crates.io-index" 624 + checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" 625 + dependencies = [ 626 + "futures-core", 627 + "lock_api", 628 + "parking_lot", 629 + ] 630 + 631 + [[package]] 632 + name = "futures-io" 633 + version = "0.3.31" 634 + source = "registry+https://github.com/rust-lang/crates.io-index" 635 + checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 636 + 637 + [[package]] 638 + name = "futures-sink" 639 + version = "0.3.31" 640 + source = "registry+https://github.com/rust-lang/crates.io-index" 641 + checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 642 + 643 + [[package]] 644 + name = "futures-task" 645 + version = "0.3.31" 646 + source = "registry+https://github.com/rust-lang/crates.io-index" 647 + checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 648 + 649 + [[package]] 650 + name = "futures-util" 651 + version = "0.3.31" 652 + source = "registry+https://github.com/rust-lang/crates.io-index" 653 + checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 654 + dependencies = [ 655 + "futures-core", 656 + "futures-io", 657 + "futures-sink", 658 + "futures-task", 659 + "memchr", 660 + "pin-project-lite", 661 + "pin-utils", 662 + "slab", 663 + ] 664 + 665 + [[package]] 666 + name = "generic-array" 667 + version = "0.14.7" 668 + source = "registry+https://github.com/rust-lang/crates.io-index" 669 + checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 670 + dependencies = [ 671 + "typenum", 672 + "version_check", 206 673 ] 207 674 208 675 [[package]] ··· 217 684 ] 218 685 219 686 [[package]] 687 + name = "gimli" 688 + version = "0.31.1" 689 + source = "registry+https://github.com/rust-lang/crates.io-index" 690 + checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 691 + 692 + [[package]] 220 693 name = "glob" 221 694 version = "0.3.2" 222 695 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 224 697 225 698 [[package]] 226 699 name = "hashbrown" 700 + version = "0.12.3" 701 + source = "registry+https://github.com/rust-lang/crates.io-index" 702 + checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 703 + 704 + [[package]] 705 + name = "hashbrown" 227 706 version = "0.15.4" 228 707 source = "registry+https://github.com/rust-lang/crates.io-index" 229 708 checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" 709 + dependencies = [ 710 + "allocator-api2", 711 + "equivalent", 712 + "foldhash", 713 + ] 714 + 715 + [[package]] 716 + name = "hashlink" 717 + version = "0.10.0" 718 + source = "registry+https://github.com/rust-lang/crates.io-index" 719 + checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" 720 + dependencies = [ 721 + "hashbrown 0.15.4", 722 + ] 723 + 724 + [[package]] 725 + name = "heck" 726 + version = "0.4.1" 727 + source = "registry+https://github.com/rust-lang/crates.io-index" 728 + checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 729 + 730 + [[package]] 731 + name = "heck" 732 + version = "0.5.0" 733 + source = "registry+https://github.com/rust-lang/crates.io-index" 734 + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 735 + 736 + [[package]] 737 + name = "hermit-abi" 738 + version = "0.1.19" 739 + source = "registry+https://github.com/rust-lang/crates.io-index" 740 + checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 741 + dependencies = [ 742 + "libc", 743 + ] 230 744 231 745 [[package]] 232 746 name = "hermit-abi" ··· 235 749 checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" 236 750 237 751 [[package]] 752 + name = "hex" 753 + version = "0.4.3" 754 + source = "registry+https://github.com/rust-lang/crates.io-index" 755 + checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 756 + 757 + [[package]] 758 + name = "hkdf" 759 + version = "0.12.4" 760 + source = "registry+https://github.com/rust-lang/crates.io-index" 761 + checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" 762 + dependencies = [ 763 + "hmac", 764 + ] 765 + 766 + [[package]] 767 + name = "hmac" 768 + version = "0.12.1" 769 + source = "registry+https://github.com/rust-lang/crates.io-index" 770 + checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 771 + dependencies = [ 772 + "digest", 773 + ] 774 + 775 + [[package]] 776 + name = "home" 777 + version = "0.5.11" 778 + source = "registry+https://github.com/rust-lang/crates.io-index" 779 + checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" 780 + dependencies = [ 781 + "windows-sys 0.59.0", 782 + ] 783 + 784 + [[package]] 785 + name = "hostname" 786 + version = "0.3.1" 787 + source = "registry+https://github.com/rust-lang/crates.io-index" 788 + checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" 789 + dependencies = [ 790 + "libc", 791 + "match_cfg", 792 + "winapi", 793 + ] 794 + 795 + [[package]] 796 + name = "iana-time-zone" 797 + version = "0.1.63" 798 + source = "registry+https://github.com/rust-lang/crates.io-index" 799 + checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" 800 + dependencies = [ 801 + "android_system_properties", 802 + "core-foundation-sys", 803 + "iana-time-zone-haiku", 804 + "js-sys", 805 + "log", 806 + "wasm-bindgen", 807 + "windows-core", 808 + ] 809 + 810 + [[package]] 811 + name = "iana-time-zone-haiku" 812 + version = "0.1.2" 813 + source = "registry+https://github.com/rust-lang/crates.io-index" 814 + checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 815 + dependencies = [ 816 + "cc", 817 + ] 818 + 819 + [[package]] 820 + name = "icu_collections" 821 + version = "2.0.0" 822 + source = "registry+https://github.com/rust-lang/crates.io-index" 823 + checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 824 + dependencies = [ 825 + "displaydoc", 826 + "potential_utf", 827 + "yoke", 828 + "zerofrom", 829 + "zerovec", 830 + ] 831 + 832 + [[package]] 833 + name = "icu_locale_core" 834 + version = "2.0.0" 835 + source = "registry+https://github.com/rust-lang/crates.io-index" 836 + checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 837 + dependencies = [ 838 + "displaydoc", 839 + "litemap", 840 + "tinystr", 841 + "writeable", 842 + "zerovec", 843 + ] 844 + 845 + [[package]] 846 + name = "icu_normalizer" 847 + version = "2.0.0" 848 + source = "registry+https://github.com/rust-lang/crates.io-index" 849 + checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 850 + dependencies = [ 851 + "displaydoc", 852 + "icu_collections", 853 + "icu_normalizer_data", 854 + "icu_properties", 855 + "icu_provider", 856 + "smallvec", 857 + "zerovec", 858 + ] 859 + 860 + [[package]] 861 + name = "icu_normalizer_data" 862 + version = "2.0.0" 863 + source = "registry+https://github.com/rust-lang/crates.io-index" 864 + checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 865 + 866 + [[package]] 867 + name = "icu_properties" 868 + version = "2.0.1" 869 + source = "registry+https://github.com/rust-lang/crates.io-index" 870 + checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" 871 + dependencies = [ 872 + "displaydoc", 873 + "icu_collections", 874 + "icu_locale_core", 875 + "icu_properties_data", 876 + "icu_provider", 877 + "potential_utf", 878 + "zerotrie", 879 + "zerovec", 880 + ] 881 + 882 + [[package]] 883 + name = "icu_properties_data" 884 + version = "2.0.1" 885 + source = "registry+https://github.com/rust-lang/crates.io-index" 886 + checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" 887 + 888 + [[package]] 889 + name = "icu_provider" 890 + version = "2.0.0" 891 + source = "registry+https://github.com/rust-lang/crates.io-index" 892 + checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 893 + dependencies = [ 894 + "displaydoc", 895 + "icu_locale_core", 896 + "stable_deref_trait", 897 + "tinystr", 898 + "writeable", 899 + "yoke", 900 + "zerofrom", 901 + "zerotrie", 902 + "zerovec", 903 + ] 904 + 905 + [[package]] 906 + name = "idna" 907 + version = "1.0.3" 908 + source = "registry+https://github.com/rust-lang/crates.io-index" 909 + checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 910 + dependencies = [ 911 + "idna_adapter", 912 + "smallvec", 913 + "utf8_iter", 914 + ] 915 + 916 + [[package]] 917 + name = "idna_adapter" 918 + version = "1.2.1" 919 + source = "registry+https://github.com/rust-lang/crates.io-index" 920 + checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 921 + dependencies = [ 922 + "icu_normalizer", 923 + "icu_properties", 924 + ] 925 + 926 + [[package]] 927 + name = "indexmap" 928 + version = "1.9.3" 929 + source = "registry+https://github.com/rust-lang/crates.io-index" 930 + checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 931 + dependencies = [ 932 + "autocfg", 933 + "hashbrown 0.12.3", 934 + ] 935 + 936 + [[package]] 238 937 name = "indexmap" 239 938 version = "2.10.0" 240 939 source = "registry+https://github.com/rust-lang/crates.io-index" 241 940 checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" 242 941 dependencies = [ 243 942 "equivalent", 244 - "hashbrown", 943 + "hashbrown 0.15.4", 944 + ] 945 + 946 + [[package]] 947 + name = "io-uring" 948 + version = "0.7.9" 949 + source = "registry+https://github.com/rust-lang/crates.io-index" 950 + checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" 951 + dependencies = [ 952 + "bitflags 2.9.1", 953 + "cfg-if", 954 + "libc", 245 955 ] 246 956 247 957 [[package]] ··· 257 967 checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 258 968 259 969 [[package]] 970 + name = "js-sys" 971 + version = "0.3.77" 972 + source = "registry+https://github.com/rust-lang/crates.io-index" 973 + checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 974 + dependencies = [ 975 + "once_cell", 976 + "wasm-bindgen", 977 + ] 978 + 979 + [[package]] 980 + name = "lazy_static" 981 + version = "1.5.0" 982 + source = "registry+https://github.com/rust-lang/crates.io-index" 983 + checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 984 + dependencies = [ 985 + "spin", 986 + ] 987 + 988 + [[package]] 260 989 name = "libc" 261 990 version = "0.2.174" 262 991 source = "registry+https://github.com/rust-lang/crates.io-index" 263 992 checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" 264 993 265 994 [[package]] 995 + name = "libm" 996 + version = "0.2.15" 997 + source = "registry+https://github.com/rust-lang/crates.io-index" 998 + checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" 999 + 1000 + [[package]] 266 1001 name = "libredox" 267 1002 version = "0.1.8" 268 1003 source = "registry+https://github.com/rust-lang/crates.io-index" 269 1004 checksum = "360e552c93fa0e8152ab463bc4c4837fce76a225df11dfaeea66c313de5e61f7" 270 1005 dependencies = [ 271 - "bitflags", 1006 + "bitflags 2.9.1", 272 1007 "libc", 273 1008 ] 274 1009 275 1010 [[package]] 1011 + name = "libsqlite3-sys" 1012 + version = "0.30.1" 1013 + source = "registry+https://github.com/rust-lang/crates.io-index" 1014 + checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" 1015 + dependencies = [ 1016 + "cc", 1017 + "pkg-config", 1018 + "vcpkg", 1019 + ] 1020 + 1021 + [[package]] 276 1022 name = "libyml" 277 1023 version = "0.0.5" 278 1024 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 283 1029 ] 284 1030 285 1031 [[package]] 1032 + name = "litemap" 1033 + version = "0.8.0" 1034 + source = "registry+https://github.com/rust-lang/crates.io-index" 1035 + checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 1036 + 1037 + [[package]] 1038 + name = "lock_api" 1039 + version = "0.4.13" 1040 + source = "registry+https://github.com/rust-lang/crates.io-index" 1041 + checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" 1042 + dependencies = [ 1043 + "autocfg", 1044 + "scopeguard", 1045 + ] 1046 + 1047 + [[package]] 1048 + name = "log" 1049 + version = "0.4.27" 1050 + source = "registry+https://github.com/rust-lang/crates.io-index" 1051 + checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 1052 + 1053 + [[package]] 1054 + name = "match_cfg" 1055 + version = "0.1.0" 1056 + source = "registry+https://github.com/rust-lang/crates.io-index" 1057 + checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" 1058 + 1059 + [[package]] 1060 + name = "md-5" 1061 + version = "0.10.6" 1062 + source = "registry+https://github.com/rust-lang/crates.io-index" 1063 + checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" 1064 + dependencies = [ 1065 + "cfg-if", 1066 + "digest", 1067 + ] 1068 + 1069 + [[package]] 1070 + name = "md5" 1071 + version = "0.7.0" 1072 + source = "registry+https://github.com/rust-lang/crates.io-index" 1073 + checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" 1074 + 1075 + [[package]] 286 1076 name = "memchr" 287 1077 version = "2.7.5" 288 1078 source = "registry+https://github.com/rust-lang/crates.io-index" 289 1079 checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" 290 1080 291 1081 [[package]] 1082 + name = "miniz_oxide" 1083 + version = "0.8.9" 1084 + source = "registry+https://github.com/rust-lang/crates.io-index" 1085 + checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" 1086 + dependencies = [ 1087 + "adler2", 1088 + ] 1089 + 1090 + [[package]] 1091 + name = "mio" 1092 + version = "1.0.4" 1093 + source = "registry+https://github.com/rust-lang/crates.io-index" 1094 + checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" 1095 + dependencies = [ 1096 + "libc", 1097 + "wasi", 1098 + "windows-sys 0.59.0", 1099 + ] 1100 + 1101 + [[package]] 1102 + name = "names" 1103 + version = "0.14.0" 1104 + source = "registry+https://github.com/rust-lang/crates.io-index" 1105 + checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc" 1106 + dependencies = [ 1107 + "clap 3.2.25", 1108 + "rand", 1109 + ] 1110 + 1111 + [[package]] 1112 + name = "num-bigint-dig" 1113 + version = "0.8.4" 1114 + source = "registry+https://github.com/rust-lang/crates.io-index" 1115 + checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" 1116 + dependencies = [ 1117 + "byteorder", 1118 + "lazy_static", 1119 + "libm", 1120 + "num-integer", 1121 + "num-iter", 1122 + "num-traits", 1123 + "rand", 1124 + "smallvec", 1125 + "zeroize", 1126 + ] 1127 + 1128 + [[package]] 1129 + name = "num-integer" 1130 + version = "0.1.46" 1131 + source = "registry+https://github.com/rust-lang/crates.io-index" 1132 + checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 1133 + dependencies = [ 1134 + "num-traits", 1135 + ] 1136 + 1137 + [[package]] 1138 + name = "num-iter" 1139 + version = "0.1.45" 1140 + source = "registry+https://github.com/rust-lang/crates.io-index" 1141 + checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" 1142 + dependencies = [ 1143 + "autocfg", 1144 + "num-integer", 1145 + "num-traits", 1146 + ] 1147 + 1148 + [[package]] 1149 + name = "num-traits" 1150 + version = "0.2.19" 1151 + source = "registry+https://github.com/rust-lang/crates.io-index" 1152 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1153 + dependencies = [ 1154 + "autocfg", 1155 + "libm", 1156 + ] 1157 + 1158 + [[package]] 292 1159 name = "num_cpus" 293 1160 version = "1.17.0" 294 1161 source = "registry+https://github.com/rust-lang/crates.io-index" 295 1162 checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" 296 1163 dependencies = [ 297 - "hermit-abi", 1164 + "hermit-abi 0.5.2", 298 1165 "libc", 299 1166 ] 300 1167 301 1168 [[package]] 1169 + name = "object" 1170 + version = "0.36.7" 1171 + source = "registry+https://github.com/rust-lang/crates.io-index" 1172 + checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 1173 + dependencies = [ 1174 + "memchr", 1175 + ] 1176 + 1177 + [[package]] 1178 + name = "once_cell" 1179 + version = "1.21.3" 1180 + source = "registry+https://github.com/rust-lang/crates.io-index" 1181 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 1182 + 1183 + [[package]] 302 1184 name = "once_cell_polyfill" 303 1185 version = "1.70.1" 304 1186 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 309 1191 version = "0.2.0" 310 1192 source = "registry+https://github.com/rust-lang/crates.io-index" 311 1193 checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" 1194 + 1195 + [[package]] 1196 + name = "os_str_bytes" 1197 + version = "6.6.1" 1198 + source = "registry+https://github.com/rust-lang/crates.io-index" 1199 + checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" 312 1200 313 1201 [[package]] 314 1202 name = "owo-colors" ··· 317 1205 checksum = "48dd4f4a2c8405440fd0462561f0e5806bd0f77e86f51c761481bdd4018b545e" 318 1206 319 1207 [[package]] 1208 + name = "parking" 1209 + version = "2.2.1" 1210 + source = "registry+https://github.com/rust-lang/crates.io-index" 1211 + checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 1212 + 1213 + [[package]] 1214 + name = "parking_lot" 1215 + version = "0.12.4" 1216 + source = "registry+https://github.com/rust-lang/crates.io-index" 1217 + checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" 1218 + dependencies = [ 1219 + "lock_api", 1220 + "parking_lot_core", 1221 + ] 1222 + 1223 + [[package]] 1224 + name = "parking_lot_core" 1225 + version = "0.9.11" 1226 + source = "registry+https://github.com/rust-lang/crates.io-index" 1227 + checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" 1228 + dependencies = [ 1229 + "cfg-if", 1230 + "libc", 1231 + "redox_syscall", 1232 + "smallvec", 1233 + "windows-targets 0.52.6", 1234 + ] 1235 + 1236 + [[package]] 1237 + name = "pem-rfc7468" 1238 + version = "0.7.0" 1239 + source = "registry+https://github.com/rust-lang/crates.io-index" 1240 + checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" 1241 + dependencies = [ 1242 + "base64ct", 1243 + ] 1244 + 1245 + [[package]] 1246 + name = "percent-encoding" 1247 + version = "2.3.1" 1248 + source = "registry+https://github.com/rust-lang/crates.io-index" 1249 + checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1250 + 1251 + [[package]] 1252 + name = "pin-project-lite" 1253 + version = "0.2.16" 1254 + source = "registry+https://github.com/rust-lang/crates.io-index" 1255 + checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 1256 + 1257 + [[package]] 1258 + name = "pin-utils" 1259 + version = "0.1.0" 1260 + source = "registry+https://github.com/rust-lang/crates.io-index" 1261 + checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1262 + 1263 + [[package]] 1264 + name = "pkcs1" 1265 + version = "0.7.5" 1266 + source = "registry+https://github.com/rust-lang/crates.io-index" 1267 + checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" 1268 + dependencies = [ 1269 + "der", 1270 + "pkcs8", 1271 + "spki", 1272 + ] 1273 + 1274 + [[package]] 1275 + name = "pkcs8" 1276 + version = "0.10.2" 1277 + source = "registry+https://github.com/rust-lang/crates.io-index" 1278 + checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" 1279 + dependencies = [ 1280 + "der", 1281 + "spki", 1282 + ] 1283 + 1284 + [[package]] 1285 + name = "pkg-config" 1286 + version = "0.3.32" 1287 + source = "registry+https://github.com/rust-lang/crates.io-index" 1288 + checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 1289 + 1290 + [[package]] 1291 + name = "potential_utf" 1292 + version = "0.1.2" 1293 + source = "registry+https://github.com/rust-lang/crates.io-index" 1294 + checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" 1295 + dependencies = [ 1296 + "zerovec", 1297 + ] 1298 + 1299 + [[package]] 1300 + name = "ppv-lite86" 1301 + version = "0.2.21" 1302 + source = "registry+https://github.com/rust-lang/crates.io-index" 1303 + checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 1304 + dependencies = [ 1305 + "zerocopy", 1306 + ] 1307 + 1308 + [[package]] 1309 + name = "proc-macro-error" 1310 + version = "1.0.4" 1311 + source = "registry+https://github.com/rust-lang/crates.io-index" 1312 + checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 1313 + dependencies = [ 1314 + "proc-macro-error-attr", 1315 + "proc-macro2", 1316 + "quote", 1317 + "syn 1.0.109", 1318 + "version_check", 1319 + ] 1320 + 1321 + [[package]] 1322 + name = "proc-macro-error-attr" 1323 + version = "1.0.4" 1324 + source = "registry+https://github.com/rust-lang/crates.io-index" 1325 + checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 1326 + dependencies = [ 1327 + "proc-macro2", 1328 + "quote", 1329 + "version_check", 1330 + ] 1331 + 1332 + [[package]] 320 1333 name = "proc-macro2" 321 1334 version = "1.0.95" 322 1335 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 335 1348 ] 336 1349 337 1350 [[package]] 1351 + name = "rand" 1352 + version = "0.8.5" 1353 + source = "registry+https://github.com/rust-lang/crates.io-index" 1354 + checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1355 + dependencies = [ 1356 + "libc", 1357 + "rand_chacha", 1358 + "rand_core", 1359 + ] 1360 + 1361 + [[package]] 1362 + name = "rand_chacha" 1363 + version = "0.3.1" 1364 + source = "registry+https://github.com/rust-lang/crates.io-index" 1365 + checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1366 + dependencies = [ 1367 + "ppv-lite86", 1368 + "rand_core", 1369 + ] 1370 + 1371 + [[package]] 1372 + name = "rand_core" 1373 + version = "0.6.4" 1374 + source = "registry+https://github.com/rust-lang/crates.io-index" 1375 + checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1376 + dependencies = [ 1377 + "getrandom", 1378 + ] 1379 + 1380 + [[package]] 1381 + name = "redox_syscall" 1382 + version = "0.5.17" 1383 + source = "registry+https://github.com/rust-lang/crates.io-index" 1384 + checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" 1385 + dependencies = [ 1386 + "bitflags 2.9.1", 1387 + ] 1388 + 1389 + [[package]] 338 1390 name = "redox_users" 339 1391 version = "0.5.0" 340 1392 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 342 1394 dependencies = [ 343 1395 "getrandom", 344 1396 "libredox", 345 - "thiserror", 1397 + "thiserror 2.0.12", 346 1398 ] 347 1399 348 1400 [[package]] ··· 375 1427 checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 376 1428 377 1429 [[package]] 1430 + name = "ring" 1431 + version = "0.17.14" 1432 + source = "registry+https://github.com/rust-lang/crates.io-index" 1433 + checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 1434 + dependencies = [ 1435 + "cc", 1436 + "cfg-if", 1437 + "getrandom", 1438 + "libc", 1439 + "untrusted", 1440 + "windows-sys 0.52.0", 1441 + ] 1442 + 1443 + [[package]] 1444 + name = "rsa" 1445 + version = "0.9.8" 1446 + source = "registry+https://github.com/rust-lang/crates.io-index" 1447 + checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" 1448 + dependencies = [ 1449 + "const-oid", 1450 + "digest", 1451 + "num-bigint-dig", 1452 + "num-integer", 1453 + "num-traits", 1454 + "pkcs1", 1455 + "pkcs8", 1456 + "rand_core", 1457 + "signature", 1458 + "spki", 1459 + "subtle", 1460 + "zeroize", 1461 + ] 1462 + 1463 + [[package]] 1464 + name = "rustc-demangle" 1465 + version = "0.1.26" 1466 + source = "registry+https://github.com/rust-lang/crates.io-index" 1467 + checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" 1468 + 1469 + [[package]] 1470 + name = "rustls" 1471 + version = "0.23.29" 1472 + source = "registry+https://github.com/rust-lang/crates.io-index" 1473 + checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" 1474 + dependencies = [ 1475 + "once_cell", 1476 + "ring", 1477 + "rustls-pki-types", 1478 + "rustls-webpki", 1479 + "subtle", 1480 + "zeroize", 1481 + ] 1482 + 1483 + [[package]] 1484 + name = "rustls-pki-types" 1485 + version = "1.12.0" 1486 + source = "registry+https://github.com/rust-lang/crates.io-index" 1487 + checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" 1488 + dependencies = [ 1489 + "zeroize", 1490 + ] 1491 + 1492 + [[package]] 1493 + name = "rustls-webpki" 1494 + version = "0.103.4" 1495 + source = "registry+https://github.com/rust-lang/crates.io-index" 1496 + checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" 1497 + dependencies = [ 1498 + "ring", 1499 + "rustls-pki-types", 1500 + "untrusted", 1501 + ] 1502 + 1503 + [[package]] 1504 + name = "rustversion" 1505 + version = "1.0.21" 1506 + source = "registry+https://github.com/rust-lang/crates.io-index" 1507 + checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" 1508 + 1509 + [[package]] 378 1510 name = "ryu" 379 1511 version = "1.0.20" 380 1512 source = "registry+https://github.com/rust-lang/crates.io-index" 381 1513 checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 382 1514 383 1515 [[package]] 1516 + name = "same-file" 1517 + version = "1.0.6" 1518 + source = "registry+https://github.com/rust-lang/crates.io-index" 1519 + checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 1520 + dependencies = [ 1521 + "winapi-util", 1522 + ] 1523 + 1524 + [[package]] 1525 + name = "scopeguard" 1526 + version = "1.2.0" 1527 + source = "registry+https://github.com/rust-lang/crates.io-index" 1528 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1529 + 1530 + [[package]] 384 1531 name = "serde" 385 1532 version = "1.0.219" 386 1533 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 397 1544 dependencies = [ 398 1545 "proc-macro2", 399 1546 "quote", 400 - "syn", 1547 + "syn 2.0.104", 401 1548 ] 402 1549 403 1550 [[package]] ··· 422 1569 ] 423 1570 424 1571 [[package]] 1572 + name = "serde_urlencoded" 1573 + version = "0.7.1" 1574 + source = "registry+https://github.com/rust-lang/crates.io-index" 1575 + checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1576 + dependencies = [ 1577 + "form_urlencoded", 1578 + "itoa", 1579 + "ryu", 1580 + "serde", 1581 + ] 1582 + 1583 + [[package]] 425 1584 name = "serde_yml" 426 1585 version = "0.0.12" 427 1586 source = "registry+https://github.com/rust-lang/crates.io-index" 428 1587 checksum = "59e2dd588bf1597a252c3b920e0143eb99b0f76e4e082f4c92ce34fbc9e71ddd" 429 1588 dependencies = [ 430 - "indexmap", 1589 + "indexmap 2.10.0", 431 1590 "itoa", 432 1591 "libyml", 433 1592 "memchr", ··· 437 1596 ] 438 1597 439 1598 [[package]] 1599 + name = "sha1" 1600 + version = "0.10.6" 1601 + source = "registry+https://github.com/rust-lang/crates.io-index" 1602 + checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 1603 + dependencies = [ 1604 + "cfg-if", 1605 + "cpufeatures", 1606 + "digest", 1607 + ] 1608 + 1609 + [[package]] 1610 + name = "sha2" 1611 + version = "0.10.9" 1612 + source = "registry+https://github.com/rust-lang/crates.io-index" 1613 + checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 1614 + dependencies = [ 1615 + "cfg-if", 1616 + "cpufeatures", 1617 + "digest", 1618 + ] 1619 + 1620 + [[package]] 1621 + name = "shlex" 1622 + version = "1.3.0" 1623 + source = "registry+https://github.com/rust-lang/crates.io-index" 1624 + checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1625 + 1626 + [[package]] 1627 + name = "signal-hook-registry" 1628 + version = "1.4.5" 1629 + source = "registry+https://github.com/rust-lang/crates.io-index" 1630 + checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" 1631 + dependencies = [ 1632 + "libc", 1633 + ] 1634 + 1635 + [[package]] 1636 + name = "signature" 1637 + version = "2.2.0" 1638 + source = "registry+https://github.com/rust-lang/crates.io-index" 1639 + checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" 1640 + dependencies = [ 1641 + "digest", 1642 + "rand_core", 1643 + ] 1644 + 1645 + [[package]] 1646 + name = "slab" 1647 + version = "0.4.10" 1648 + source = "registry+https://github.com/rust-lang/crates.io-index" 1649 + checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" 1650 + 1651 + [[package]] 1652 + name = "smallvec" 1653 + version = "1.15.1" 1654 + source = "registry+https://github.com/rust-lang/crates.io-index" 1655 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 1656 + dependencies = [ 1657 + "serde", 1658 + ] 1659 + 1660 + [[package]] 1661 + name = "socket2" 1662 + version = "0.6.0" 1663 + source = "registry+https://github.com/rust-lang/crates.io-index" 1664 + checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" 1665 + dependencies = [ 1666 + "libc", 1667 + "windows-sys 0.59.0", 1668 + ] 1669 + 1670 + [[package]] 1671 + name = "spin" 1672 + version = "0.9.8" 1673 + source = "registry+https://github.com/rust-lang/crates.io-index" 1674 + checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 1675 + dependencies = [ 1676 + "lock_api", 1677 + ] 1678 + 1679 + [[package]] 1680 + name = "spki" 1681 + version = "0.7.3" 1682 + source = "registry+https://github.com/rust-lang/crates.io-index" 1683 + checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" 1684 + dependencies = [ 1685 + "base64ct", 1686 + "der", 1687 + ] 1688 + 1689 + [[package]] 1690 + name = "sqlx" 1691 + version = "0.8.6" 1692 + source = "registry+https://github.com/rust-lang/crates.io-index" 1693 + checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" 1694 + dependencies = [ 1695 + "sqlx-core", 1696 + "sqlx-macros", 1697 + "sqlx-mysql", 1698 + "sqlx-postgres", 1699 + "sqlx-sqlite", 1700 + ] 1701 + 1702 + [[package]] 1703 + name = "sqlx-core" 1704 + version = "0.8.6" 1705 + source = "registry+https://github.com/rust-lang/crates.io-index" 1706 + checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" 1707 + dependencies = [ 1708 + "base64", 1709 + "bytes", 1710 + "chrono", 1711 + "crc", 1712 + "crossbeam-queue", 1713 + "either", 1714 + "event-listener", 1715 + "futures-core", 1716 + "futures-intrusive", 1717 + "futures-io", 1718 + "futures-util", 1719 + "hashbrown 0.15.4", 1720 + "hashlink", 1721 + "indexmap 2.10.0", 1722 + "log", 1723 + "memchr", 1724 + "once_cell", 1725 + "percent-encoding", 1726 + "rustls", 1727 + "serde", 1728 + "serde_json", 1729 + "sha2", 1730 + "smallvec", 1731 + "thiserror 2.0.12", 1732 + "tokio", 1733 + "tokio-stream", 1734 + "tracing", 1735 + "url", 1736 + "webpki-roots 0.26.11", 1737 + ] 1738 + 1739 + [[package]] 1740 + name = "sqlx-macros" 1741 + version = "0.8.6" 1742 + source = "registry+https://github.com/rust-lang/crates.io-index" 1743 + checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" 1744 + dependencies = [ 1745 + "proc-macro2", 1746 + "quote", 1747 + "sqlx-core", 1748 + "sqlx-macros-core", 1749 + "syn 2.0.104", 1750 + ] 1751 + 1752 + [[package]] 1753 + name = "sqlx-macros-core" 1754 + version = "0.8.6" 1755 + source = "registry+https://github.com/rust-lang/crates.io-index" 1756 + checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" 1757 + dependencies = [ 1758 + "dotenvy", 1759 + "either", 1760 + "heck 0.5.0", 1761 + "hex", 1762 + "once_cell", 1763 + "proc-macro2", 1764 + "quote", 1765 + "serde", 1766 + "serde_json", 1767 + "sha2", 1768 + "sqlx-core", 1769 + "sqlx-mysql", 1770 + "sqlx-postgres", 1771 + "sqlx-sqlite", 1772 + "syn 2.0.104", 1773 + "tokio", 1774 + "url", 1775 + ] 1776 + 1777 + [[package]] 1778 + name = "sqlx-mysql" 1779 + version = "0.8.6" 1780 + source = "registry+https://github.com/rust-lang/crates.io-index" 1781 + checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" 1782 + dependencies = [ 1783 + "atoi", 1784 + "base64", 1785 + "bitflags 2.9.1", 1786 + "byteorder", 1787 + "bytes", 1788 + "chrono", 1789 + "crc", 1790 + "digest", 1791 + "dotenvy", 1792 + "either", 1793 + "futures-channel", 1794 + "futures-core", 1795 + "futures-io", 1796 + "futures-util", 1797 + "generic-array", 1798 + "hex", 1799 + "hkdf", 1800 + "hmac", 1801 + "itoa", 1802 + "log", 1803 + "md-5", 1804 + "memchr", 1805 + "once_cell", 1806 + "percent-encoding", 1807 + "rand", 1808 + "rsa", 1809 + "serde", 1810 + "sha1", 1811 + "sha2", 1812 + "smallvec", 1813 + "sqlx-core", 1814 + "stringprep", 1815 + "thiserror 2.0.12", 1816 + "tracing", 1817 + "whoami", 1818 + ] 1819 + 1820 + [[package]] 1821 + name = "sqlx-postgres" 1822 + version = "0.8.6" 1823 + source = "registry+https://github.com/rust-lang/crates.io-index" 1824 + checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" 1825 + dependencies = [ 1826 + "atoi", 1827 + "base64", 1828 + "bitflags 2.9.1", 1829 + "byteorder", 1830 + "chrono", 1831 + "crc", 1832 + "dotenvy", 1833 + "etcetera", 1834 + "futures-channel", 1835 + "futures-core", 1836 + "futures-util", 1837 + "hex", 1838 + "hkdf", 1839 + "hmac", 1840 + "home", 1841 + "itoa", 1842 + "log", 1843 + "md-5", 1844 + "memchr", 1845 + "once_cell", 1846 + "rand", 1847 + "serde", 1848 + "serde_json", 1849 + "sha2", 1850 + "smallvec", 1851 + "sqlx-core", 1852 + "stringprep", 1853 + "thiserror 2.0.12", 1854 + "tracing", 1855 + "whoami", 1856 + ] 1857 + 1858 + [[package]] 1859 + name = "sqlx-sqlite" 1860 + version = "0.8.6" 1861 + source = "registry+https://github.com/rust-lang/crates.io-index" 1862 + checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" 1863 + dependencies = [ 1864 + "atoi", 1865 + "chrono", 1866 + "flume", 1867 + "futures-channel", 1868 + "futures-core", 1869 + "futures-executor", 1870 + "futures-intrusive", 1871 + "futures-util", 1872 + "libsqlite3-sys", 1873 + "log", 1874 + "percent-encoding", 1875 + "serde", 1876 + "serde_urlencoded", 1877 + "sqlx-core", 1878 + "thiserror 2.0.12", 1879 + "tracing", 1880 + "url", 1881 + ] 1882 + 1883 + [[package]] 1884 + name = "stable_deref_trait" 1885 + version = "1.2.0" 1886 + source = "registry+https://github.com/rust-lang/crates.io-index" 1887 + checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1888 + 1889 + [[package]] 1890 + name = "stringprep" 1891 + version = "0.1.5" 1892 + source = "registry+https://github.com/rust-lang/crates.io-index" 1893 + checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" 1894 + dependencies = [ 1895 + "unicode-bidi", 1896 + "unicode-normalization", 1897 + "unicode-properties", 1898 + ] 1899 + 1900 + [[package]] 1901 + name = "strsim" 1902 + version = "0.10.0" 1903 + source = "registry+https://github.com/rust-lang/crates.io-index" 1904 + checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 1905 + 1906 + [[package]] 440 1907 name = "strsim" 441 1908 version = "0.11.1" 442 1909 source = "registry+https://github.com/rust-lang/crates.io-index" 443 1910 checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 444 1911 445 1912 [[package]] 1913 + name = "subtle" 1914 + version = "2.6.1" 1915 + source = "registry+https://github.com/rust-lang/crates.io-index" 1916 + checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 1917 + 1918 + [[package]] 1919 + name = "syn" 1920 + version = "1.0.109" 1921 + source = "registry+https://github.com/rust-lang/crates.io-index" 1922 + checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 1923 + dependencies = [ 1924 + "proc-macro2", 1925 + "quote", 1926 + "unicode-ident", 1927 + ] 1928 + 1929 + [[package]] 446 1930 name = "syn" 447 1931 version = "2.0.104" 448 1932 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 454 1938 ] 455 1939 456 1940 [[package]] 1941 + name = "synstructure" 1942 + version = "0.13.2" 1943 + source = "registry+https://github.com/rust-lang/crates.io-index" 1944 + checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 1945 + dependencies = [ 1946 + "proc-macro2", 1947 + "quote", 1948 + "syn 2.0.104", 1949 + ] 1950 + 1951 + [[package]] 1952 + name = "sysctl" 1953 + version = "0.4.6" 1954 + source = "registry+https://github.com/rust-lang/crates.io-index" 1955 + checksum = "225e483f02d0ad107168dc57381a8a40c3aeea6abe47f37506931f861643cfa8" 1956 + dependencies = [ 1957 + "bitflags 1.3.2", 1958 + "byteorder", 1959 + "libc", 1960 + "thiserror 1.0.69", 1961 + "walkdir", 1962 + ] 1963 + 1964 + [[package]] 1965 + name = "termcolor" 1966 + version = "1.4.1" 1967 + source = "registry+https://github.com/rust-lang/crates.io-index" 1968 + checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" 1969 + dependencies = [ 1970 + "winapi-util", 1971 + ] 1972 + 1973 + [[package]] 1974 + name = "textwrap" 1975 + version = "0.16.2" 1976 + source = "registry+https://github.com/rust-lang/crates.io-index" 1977 + checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" 1978 + 1979 + [[package]] 1980 + name = "thiserror" 1981 + version = "1.0.69" 1982 + source = "registry+https://github.com/rust-lang/crates.io-index" 1983 + checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 1984 + dependencies = [ 1985 + "thiserror-impl 1.0.69", 1986 + ] 1987 + 1988 + [[package]] 457 1989 name = "thiserror" 458 1990 version = "2.0.12" 459 1991 source = "registry+https://github.com/rust-lang/crates.io-index" 460 1992 checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 461 1993 dependencies = [ 462 - "thiserror-impl", 1994 + "thiserror-impl 2.0.12", 1995 + ] 1996 + 1997 + [[package]] 1998 + name = "thiserror-impl" 1999 + version = "1.0.69" 2000 + source = "registry+https://github.com/rust-lang/crates.io-index" 2001 + checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 2002 + dependencies = [ 2003 + "proc-macro2", 2004 + "quote", 2005 + "syn 2.0.104", 463 2006 ] 464 2007 465 2008 [[package]] ··· 470 2013 dependencies = [ 471 2014 "proc-macro2", 472 2015 "quote", 473 - "syn", 2016 + "syn 2.0.104", 2017 + ] 2018 + 2019 + [[package]] 2020 + name = "tinystr" 2021 + version = "0.8.1" 2022 + source = "registry+https://github.com/rust-lang/crates.io-index" 2023 + checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 2024 + dependencies = [ 2025 + "displaydoc", 2026 + "zerovec", 2027 + ] 2028 + 2029 + [[package]] 2030 + name = "tinyvec" 2031 + version = "1.9.0" 2032 + source = "registry+https://github.com/rust-lang/crates.io-index" 2033 + checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" 2034 + dependencies = [ 2035 + "tinyvec_macros", 2036 + ] 2037 + 2038 + [[package]] 2039 + name = "tinyvec_macros" 2040 + version = "0.1.1" 2041 + source = "registry+https://github.com/rust-lang/crates.io-index" 2042 + checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 2043 + 2044 + [[package]] 2045 + name = "tokio" 2046 + version = "1.47.1" 2047 + source = "registry+https://github.com/rust-lang/crates.io-index" 2048 + checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" 2049 + dependencies = [ 2050 + "backtrace", 2051 + "bytes", 2052 + "io-uring", 2053 + "libc", 2054 + "mio", 2055 + "parking_lot", 2056 + "pin-project-lite", 2057 + "signal-hook-registry", 2058 + "slab", 2059 + "socket2", 2060 + "tokio-macros", 2061 + "windows-sys 0.59.0", 2062 + ] 2063 + 2064 + [[package]] 2065 + name = "tokio-macros" 2066 + version = "2.5.0" 2067 + source = "registry+https://github.com/rust-lang/crates.io-index" 2068 + checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 2069 + dependencies = [ 2070 + "proc-macro2", 2071 + "quote", 2072 + "syn 2.0.104", 2073 + ] 2074 + 2075 + [[package]] 2076 + name = "tokio-stream" 2077 + version = "0.1.17" 2078 + source = "registry+https://github.com/rust-lang/crates.io-index" 2079 + checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" 2080 + dependencies = [ 2081 + "futures-core", 2082 + "pin-project-lite", 2083 + "tokio", 474 2084 ] 475 2085 476 2086 [[package]] ··· 479 2089 source = "registry+https://github.com/rust-lang/crates.io-index" 480 2090 checksum = "41ae868b5a0f67631c14589f7e250c1ea2c574ee5ba21c6c8dd4b1485705a5a1" 481 2091 dependencies = [ 482 - "indexmap", 2092 + "indexmap 2.10.0", 483 2093 "serde", 484 2094 "serde_spanned", 485 2095 "toml_datetime", ··· 513 2123 checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64" 514 2124 515 2125 [[package]] 2126 + name = "tracing" 2127 + version = "0.1.41" 2128 + source = "registry+https://github.com/rust-lang/crates.io-index" 2129 + checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 2130 + dependencies = [ 2131 + "log", 2132 + "pin-project-lite", 2133 + "tracing-attributes", 2134 + "tracing-core", 2135 + ] 2136 + 2137 + [[package]] 2138 + name = "tracing-attributes" 2139 + version = "0.1.30" 2140 + source = "registry+https://github.com/rust-lang/crates.io-index" 2141 + checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" 2142 + dependencies = [ 2143 + "proc-macro2", 2144 + "quote", 2145 + "syn 2.0.104", 2146 + ] 2147 + 2148 + [[package]] 2149 + name = "tracing-core" 2150 + version = "0.1.34" 2151 + source = "registry+https://github.com/rust-lang/crates.io-index" 2152 + checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" 2153 + dependencies = [ 2154 + "once_cell", 2155 + ] 2156 + 2157 + [[package]] 2158 + name = "typenum" 2159 + version = "1.18.0" 2160 + source = "registry+https://github.com/rust-lang/crates.io-index" 2161 + checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 2162 + 2163 + [[package]] 2164 + name = "unicode-bidi" 2165 + version = "0.3.18" 2166 + source = "registry+https://github.com/rust-lang/crates.io-index" 2167 + checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" 2168 + 2169 + [[package]] 516 2170 name = "unicode-ident" 517 2171 version = "1.0.18" 518 2172 source = "registry+https://github.com/rust-lang/crates.io-index" 519 2173 checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 520 2174 521 2175 [[package]] 2176 + name = "unicode-normalization" 2177 + version = "0.1.24" 2178 + source = "registry+https://github.com/rust-lang/crates.io-index" 2179 + checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" 2180 + dependencies = [ 2181 + "tinyvec", 2182 + ] 2183 + 2184 + [[package]] 2185 + name = "unicode-properties" 2186 + version = "0.1.3" 2187 + source = "registry+https://github.com/rust-lang/crates.io-index" 2188 + checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" 2189 + 2190 + [[package]] 2191 + name = "untrusted" 2192 + version = "0.9.0" 2193 + source = "registry+https://github.com/rust-lang/crates.io-index" 2194 + checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 2195 + 2196 + [[package]] 2197 + name = "url" 2198 + version = "2.5.4" 2199 + source = "registry+https://github.com/rust-lang/crates.io-index" 2200 + checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 2201 + dependencies = [ 2202 + "form_urlencoded", 2203 + "idna", 2204 + "percent-encoding", 2205 + ] 2206 + 2207 + [[package]] 2208 + name = "utf8_iter" 2209 + version = "1.0.4" 2210 + source = "registry+https://github.com/rust-lang/crates.io-index" 2211 + checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 2212 + 2213 + [[package]] 522 2214 name = "utf8parse" 523 2215 version = "0.2.2" 524 2216 source = "registry+https://github.com/rust-lang/crates.io-index" 525 2217 checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 2218 + 2219 + [[package]] 2220 + name = "vcpkg" 2221 + version = "0.2.15" 2222 + source = "registry+https://github.com/rust-lang/crates.io-index" 2223 + checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 526 2224 527 2225 [[package]] 528 2226 name = "version_check" ··· 531 2229 checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 532 2230 533 2231 [[package]] 2232 + name = "walkdir" 2233 + version = "2.5.0" 2234 + source = "registry+https://github.com/rust-lang/crates.io-index" 2235 + checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 2236 + dependencies = [ 2237 + "same-file", 2238 + "winapi-util", 2239 + ] 2240 + 2241 + [[package]] 534 2242 name = "wasi" 535 2243 version = "0.11.1+wasi-snapshot-preview1" 536 2244 source = "registry+https://github.com/rust-lang/crates.io-index" 537 2245 checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 538 2246 539 2247 [[package]] 2248 + name = "wasite" 2249 + version = "0.1.0" 2250 + source = "registry+https://github.com/rust-lang/crates.io-index" 2251 + checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" 2252 + 2253 + [[package]] 2254 + name = "wasm-bindgen" 2255 + version = "0.2.100" 2256 + source = "registry+https://github.com/rust-lang/crates.io-index" 2257 + checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 2258 + dependencies = [ 2259 + "cfg-if", 2260 + "once_cell", 2261 + "rustversion", 2262 + "wasm-bindgen-macro", 2263 + ] 2264 + 2265 + [[package]] 2266 + name = "wasm-bindgen-backend" 2267 + version = "0.2.100" 2268 + source = "registry+https://github.com/rust-lang/crates.io-index" 2269 + checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 2270 + dependencies = [ 2271 + "bumpalo", 2272 + "log", 2273 + "proc-macro2", 2274 + "quote", 2275 + "syn 2.0.104", 2276 + "wasm-bindgen-shared", 2277 + ] 2278 + 2279 + [[package]] 2280 + name = "wasm-bindgen-macro" 2281 + version = "0.2.100" 2282 + source = "registry+https://github.com/rust-lang/crates.io-index" 2283 + checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 2284 + dependencies = [ 2285 + "quote", 2286 + "wasm-bindgen-macro-support", 2287 + ] 2288 + 2289 + [[package]] 2290 + name = "wasm-bindgen-macro-support" 2291 + version = "0.2.100" 2292 + source = "registry+https://github.com/rust-lang/crates.io-index" 2293 + checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 2294 + dependencies = [ 2295 + "proc-macro2", 2296 + "quote", 2297 + "syn 2.0.104", 2298 + "wasm-bindgen-backend", 2299 + "wasm-bindgen-shared", 2300 + ] 2301 + 2302 + [[package]] 2303 + name = "wasm-bindgen-shared" 2304 + version = "0.2.100" 2305 + source = "registry+https://github.com/rust-lang/crates.io-index" 2306 + checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 2307 + dependencies = [ 2308 + "unicode-ident", 2309 + ] 2310 + 2311 + [[package]] 2312 + name = "webpki-roots" 2313 + version = "0.26.11" 2314 + source = "registry+https://github.com/rust-lang/crates.io-index" 2315 + checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" 2316 + dependencies = [ 2317 + "webpki-roots 1.0.2", 2318 + ] 2319 + 2320 + [[package]] 2321 + name = "webpki-roots" 2322 + version = "1.0.2" 2323 + source = "registry+https://github.com/rust-lang/crates.io-index" 2324 + checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" 2325 + dependencies = [ 2326 + "rustls-pki-types", 2327 + ] 2328 + 2329 + [[package]] 2330 + name = "whoami" 2331 + version = "1.6.0" 2332 + source = "registry+https://github.com/rust-lang/crates.io-index" 2333 + checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7" 2334 + dependencies = [ 2335 + "redox_syscall", 2336 + "wasite", 2337 + ] 2338 + 2339 + [[package]] 2340 + name = "winapi" 2341 + version = "0.3.9" 2342 + source = "registry+https://github.com/rust-lang/crates.io-index" 2343 + checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2344 + dependencies = [ 2345 + "winapi-i686-pc-windows-gnu", 2346 + "winapi-x86_64-pc-windows-gnu", 2347 + ] 2348 + 2349 + [[package]] 2350 + name = "winapi-i686-pc-windows-gnu" 2351 + version = "0.4.0" 2352 + source = "registry+https://github.com/rust-lang/crates.io-index" 2353 + checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2354 + 2355 + [[package]] 2356 + name = "winapi-util" 2357 + version = "0.1.9" 2358 + source = "registry+https://github.com/rust-lang/crates.io-index" 2359 + checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 2360 + dependencies = [ 2361 + "windows-sys 0.59.0", 2362 + ] 2363 + 2364 + [[package]] 2365 + name = "winapi-x86_64-pc-windows-gnu" 2366 + version = "0.4.0" 2367 + source = "registry+https://github.com/rust-lang/crates.io-index" 2368 + checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2369 + 2370 + [[package]] 2371 + name = "windows-core" 2372 + version = "0.61.2" 2373 + source = "registry+https://github.com/rust-lang/crates.io-index" 2374 + checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 2375 + dependencies = [ 2376 + "windows-implement", 2377 + "windows-interface", 2378 + "windows-link", 2379 + "windows-result", 2380 + "windows-strings", 2381 + ] 2382 + 2383 + [[package]] 2384 + name = "windows-implement" 2385 + version = "0.60.0" 2386 + source = "registry+https://github.com/rust-lang/crates.io-index" 2387 + checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" 2388 + dependencies = [ 2389 + "proc-macro2", 2390 + "quote", 2391 + "syn 2.0.104", 2392 + ] 2393 + 2394 + [[package]] 2395 + name = "windows-interface" 2396 + version = "0.59.1" 2397 + source = "registry+https://github.com/rust-lang/crates.io-index" 2398 + checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" 2399 + dependencies = [ 2400 + "proc-macro2", 2401 + "quote", 2402 + "syn 2.0.104", 2403 + ] 2404 + 2405 + [[package]] 2406 + name = "windows-link" 2407 + version = "0.1.3" 2408 + source = "registry+https://github.com/rust-lang/crates.io-index" 2409 + checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 2410 + 2411 + [[package]] 2412 + name = "windows-result" 2413 + version = "0.3.4" 2414 + source = "registry+https://github.com/rust-lang/crates.io-index" 2415 + checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 2416 + dependencies = [ 2417 + "windows-link", 2418 + ] 2419 + 2420 + [[package]] 2421 + name = "windows-strings" 2422 + version = "0.4.2" 2423 + source = "registry+https://github.com/rust-lang/crates.io-index" 2424 + checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 2425 + dependencies = [ 2426 + "windows-link", 2427 + ] 2428 + 2429 + [[package]] 2430 + name = "windows-sys" 2431 + version = "0.48.0" 2432 + source = "registry+https://github.com/rust-lang/crates.io-index" 2433 + checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 2434 + dependencies = [ 2435 + "windows-targets 0.48.5", 2436 + ] 2437 + 2438 + [[package]] 2439 + name = "windows-sys" 2440 + version = "0.52.0" 2441 + source = "registry+https://github.com/rust-lang/crates.io-index" 2442 + checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2443 + dependencies = [ 2444 + "windows-targets 0.52.6", 2445 + ] 2446 + 2447 + [[package]] 540 2448 name = "windows-sys" 541 2449 version = "0.59.0" 542 2450 source = "registry+https://github.com/rust-lang/crates.io-index" 543 2451 checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 544 2452 dependencies = [ 545 - "windows-targets", 2453 + "windows-targets 0.52.6", 2454 + ] 2455 + 2456 + [[package]] 2457 + name = "windows-targets" 2458 + version = "0.48.5" 2459 + source = "registry+https://github.com/rust-lang/crates.io-index" 2460 + checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 2461 + dependencies = [ 2462 + "windows_aarch64_gnullvm 0.48.5", 2463 + "windows_aarch64_msvc 0.48.5", 2464 + "windows_i686_gnu 0.48.5", 2465 + "windows_i686_msvc 0.48.5", 2466 + "windows_x86_64_gnu 0.48.5", 2467 + "windows_x86_64_gnullvm 0.48.5", 2468 + "windows_x86_64_msvc 0.48.5", 546 2469 ] 547 2470 548 2471 [[package]] ··· 551 2474 source = "registry+https://github.com/rust-lang/crates.io-index" 552 2475 checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 553 2476 dependencies = [ 554 - "windows_aarch64_gnullvm", 555 - "windows_aarch64_msvc", 556 - "windows_i686_gnu", 2477 + "windows_aarch64_gnullvm 0.52.6", 2478 + "windows_aarch64_msvc 0.52.6", 2479 + "windows_i686_gnu 0.52.6", 557 2480 "windows_i686_gnullvm", 558 - "windows_i686_msvc", 559 - "windows_x86_64_gnu", 560 - "windows_x86_64_gnullvm", 561 - "windows_x86_64_msvc", 2481 + "windows_i686_msvc 0.52.6", 2482 + "windows_x86_64_gnu 0.52.6", 2483 + "windows_x86_64_gnullvm 0.52.6", 2484 + "windows_x86_64_msvc 0.52.6", 562 2485 ] 563 2486 564 2487 [[package]] 565 2488 name = "windows_aarch64_gnullvm" 2489 + version = "0.48.5" 2490 + source = "registry+https://github.com/rust-lang/crates.io-index" 2491 + checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 2492 + 2493 + [[package]] 2494 + name = "windows_aarch64_gnullvm" 566 2495 version = "0.52.6" 567 2496 source = "registry+https://github.com/rust-lang/crates.io-index" 568 2497 checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 569 2498 570 2499 [[package]] 571 2500 name = "windows_aarch64_msvc" 2501 + version = "0.48.5" 2502 + source = "registry+https://github.com/rust-lang/crates.io-index" 2503 + checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 2504 + 2505 + [[package]] 2506 + name = "windows_aarch64_msvc" 572 2507 version = "0.52.6" 573 2508 source = "registry+https://github.com/rust-lang/crates.io-index" 574 2509 checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 2510 + 2511 + [[package]] 2512 + name = "windows_i686_gnu" 2513 + version = "0.48.5" 2514 + source = "registry+https://github.com/rust-lang/crates.io-index" 2515 + checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 575 2516 576 2517 [[package]] 577 2518 name = "windows_i686_gnu" ··· 587 2528 588 2529 [[package]] 589 2530 name = "windows_i686_msvc" 2531 + version = "0.48.5" 2532 + source = "registry+https://github.com/rust-lang/crates.io-index" 2533 + checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 2534 + 2535 + [[package]] 2536 + name = "windows_i686_msvc" 590 2537 version = "0.52.6" 591 2538 source = "registry+https://github.com/rust-lang/crates.io-index" 592 2539 checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 593 2540 594 2541 [[package]] 595 2542 name = "windows_x86_64_gnu" 2543 + version = "0.48.5" 2544 + source = "registry+https://github.com/rust-lang/crates.io-index" 2545 + checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 2546 + 2547 + [[package]] 2548 + name = "windows_x86_64_gnu" 596 2549 version = "0.52.6" 597 2550 source = "registry+https://github.com/rust-lang/crates.io-index" 598 2551 checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 599 2552 600 2553 [[package]] 601 2554 name = "windows_x86_64_gnullvm" 2555 + version = "0.48.5" 2556 + source = "registry+https://github.com/rust-lang/crates.io-index" 2557 + checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 2558 + 2559 + [[package]] 2560 + name = "windows_x86_64_gnullvm" 602 2561 version = "0.52.6" 603 2562 source = "registry+https://github.com/rust-lang/crates.io-index" 604 2563 checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 2564 + 2565 + [[package]] 2566 + name = "windows_x86_64_msvc" 2567 + version = "0.48.5" 2568 + source = "registry+https://github.com/rust-lang/crates.io-index" 2569 + checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 605 2570 606 2571 [[package]] 607 2572 name = "windows_x86_64_msvc" ··· 614 2579 version = "0.7.12" 615 2580 source = "registry+https://github.com/rust-lang/crates.io-index" 616 2581 checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" 2582 + 2583 + [[package]] 2584 + name = "winreg" 2585 + version = "0.8.0" 2586 + source = "registry+https://github.com/rust-lang/crates.io-index" 2587 + checksum = "d107f8c6e916235c4c01cabb3e8acf7bea8ef6a63ca2e7fa0527c049badfc48c" 2588 + dependencies = [ 2589 + "winapi", 2590 + ] 2591 + 2592 + [[package]] 2593 + name = "writeable" 2594 + version = "0.6.1" 2595 + source = "registry+https://github.com/rust-lang/crates.io-index" 2596 + checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 2597 + 2598 + [[package]] 2599 + name = "xid" 2600 + version = "1.1.1" 2601 + source = "registry+https://github.com/rust-lang/crates.io-index" 2602 + checksum = "3752a194518cdee5d019812fb7978c51d8f0b7cfe9ace5983df1780964bb84c0" 2603 + dependencies = [ 2604 + "crc32fast", 2605 + "hostname", 2606 + "md5", 2607 + "once_cell", 2608 + "rand", 2609 + "sysctl", 2610 + "thiserror 1.0.69", 2611 + "winreg", 2612 + ] 2613 + 2614 + [[package]] 2615 + name = "yoke" 2616 + version = "0.8.0" 2617 + source = "registry+https://github.com/rust-lang/crates.io-index" 2618 + checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 2619 + dependencies = [ 2620 + "serde", 2621 + "stable_deref_trait", 2622 + "yoke-derive", 2623 + "zerofrom", 2624 + ] 2625 + 2626 + [[package]] 2627 + name = "yoke-derive" 2628 + version = "0.8.0" 2629 + source = "registry+https://github.com/rust-lang/crates.io-index" 2630 + checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 2631 + dependencies = [ 2632 + "proc-macro2", 2633 + "quote", 2634 + "syn 2.0.104", 2635 + "synstructure", 2636 + ] 2637 + 2638 + [[package]] 2639 + name = "zerocopy" 2640 + version = "0.8.26" 2641 + source = "registry+https://github.com/rust-lang/crates.io-index" 2642 + checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" 2643 + dependencies = [ 2644 + "zerocopy-derive", 2645 + ] 2646 + 2647 + [[package]] 2648 + name = "zerocopy-derive" 2649 + version = "0.8.26" 2650 + source = "registry+https://github.com/rust-lang/crates.io-index" 2651 + checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" 2652 + dependencies = [ 2653 + "proc-macro2", 2654 + "quote", 2655 + "syn 2.0.104", 2656 + ] 2657 + 2658 + [[package]] 2659 + name = "zerofrom" 2660 + version = "0.1.6" 2661 + source = "registry+https://github.com/rust-lang/crates.io-index" 2662 + checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 2663 + dependencies = [ 2664 + "zerofrom-derive", 2665 + ] 2666 + 2667 + [[package]] 2668 + name = "zerofrom-derive" 2669 + version = "0.1.6" 2670 + source = "registry+https://github.com/rust-lang/crates.io-index" 2671 + checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 2672 + dependencies = [ 2673 + "proc-macro2", 2674 + "quote", 2675 + "syn 2.0.104", 2676 + "synstructure", 2677 + ] 2678 + 2679 + [[package]] 2680 + name = "zeroize" 2681 + version = "1.8.1" 2682 + source = "registry+https://github.com/rust-lang/crates.io-index" 2683 + checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 2684 + 2685 + [[package]] 2686 + name = "zerotrie" 2687 + version = "0.2.2" 2688 + source = "registry+https://github.com/rust-lang/crates.io-index" 2689 + checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 2690 + dependencies = [ 2691 + "displaydoc", 2692 + "yoke", 2693 + "zerofrom", 2694 + ] 2695 + 2696 + [[package]] 2697 + name = "zerovec" 2698 + version = "0.11.2" 2699 + source = "registry+https://github.com/rust-lang/crates.io-index" 2700 + checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" 2701 + dependencies = [ 2702 + "yoke", 2703 + "zerofrom", 2704 + "zerovec-derive", 2705 + ] 2706 + 2707 + [[package]] 2708 + name = "zerovec-derive" 2709 + version = "0.11.1" 2710 + source = "registry+https://github.com/rust-lang/crates.io-index" 2711 + checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 2712 + dependencies = [ 2713 + "proc-macro2", 2714 + "quote", 2715 + "syn 2.0.104", 2716 + ]
+18 -2
crates/firecracker-process/src/command.rs
··· 1 1 use anyhow::{anyhow, Context, Error, Result}; 2 + use owo_colors::OwoColorize; 2 3 use std::{ 3 4 process::{Command, Output, Stdio}, 4 5 thread, ··· 49 50 Ok(output) 50 51 } 51 52 52 - pub fn run_command_in_background(command: &str, args: &[&str], use_sudo: bool) -> Result<()> { 53 + pub fn run_command_in_background(command: &str, args: &[&str], use_sudo: bool) -> Result<u32> { 53 54 let mut cmd = if use_sudo { 54 55 if !has_sudo() && !is_root() { 55 56 return Err(anyhow!( ··· 71 72 let command_owned = command.to_string(); 72 73 let args_owned: Vec<String> = args.iter().map(|s| s.to_string()).collect(); 73 74 75 + let (tx, rx) = std::sync::mpsc::channel::<u32>(); 76 + 74 77 thread::spawn(move || { 75 78 let mut child = cmd 76 79 .args(&args_owned) ··· 80 83 .spawn() 81 84 .with_context(|| format!("Failed to execute {}", command_owned))?; 82 85 86 + let pid = child.id(); 87 + tx.send(pid) 88 + .with_context(|| format!("Failed to send PID for command {}", command_owned))?; 89 + println!( 90 + "[+] Started command {} with PID {}", 91 + command_owned.bright_cyan(), 92 + pid.bright_cyan() 93 + ); 94 + 83 95 child 84 96 .wait() 85 97 .with_context(|| format!("Failed to wait for command {}", command_owned))?; 86 98 Ok::<(), Error>(()) 87 99 }); 88 100 89 - Ok(()) 101 + let pid = rx 102 + .recv() 103 + .with_context(|| format!("Failed to receive PID for command {}", command))?; 104 + 105 + Ok(pid) 90 106 }
+3 -3
crates/firecracker-process/src/lib.rs
··· 5 5 6 6 pub mod command; 7 7 8 - pub fn start(config: &VmOptions) -> Result<()> { 8 + pub fn start(config: &VmOptions) -> Result<u32> { 9 9 stop(config)?; 10 10 println!("[+] Starting Firecracker..."); 11 - run_command_in_background("firecracker", &["--api-sock", &config.api_socket], true)?; 12 - Ok(()) 11 + let pid = run_command_in_background("firecracker", &["--api-sock", &config.api_socket], true)?; 12 + Ok(pid) 13 13 } 14 14 15 15 pub fn stop(config: &VmOptions) -> Result<()> {
+24
crates/firecracker-state/Cargo.toml
··· 1 + [package] 2 + name = "firecracker-state" 3 + version = "0.1.0" 4 + authors.workspace = true 5 + edition.workspace = true 6 + license.workspace = true 7 + repository.workspace = true 8 + 9 + [dependencies] 10 + anyhow = "1.0.98" 11 + chrono = { version = "0.4.41", features = ["serde"] } 12 + dirs = "6.0.0" 13 + names = "0.14.0" 14 + serde = { version = "1.0.219", features = ["serde_derive", "derive"] } 15 + sqlx = { version = "0.8.6", features = [ 16 + "runtime-tokio", 17 + "tls-rustls", 18 + "sqlite", 19 + "chrono", 20 + "derive", 21 + "macros", 22 + ] } 23 + tokio = { version = "1.47.1", features = ["full"] } 24 + xid = "1.1.1"
+17
crates/firecracker-state/migrations/20250804092946_init.sql
··· 1 + -- Add migration script here 2 + CREATE TABLE IF NOT EXISTS virtual_machines ( 3 + id VARCHAR(255) PRIMARY KEY, 4 + name VARCHAR(255) UNIQUE NOT NULL, 5 + status VARCHAR(255) NOT NULL, 6 + vcpu INT NOT NULL, 7 + memory INT NOT NULL, 8 + distro VARCHAR(255) NOT NULL, 9 + pid INT, 10 + mac_address VARCHAR(255) NOT NULL, 11 + bridge VARCHAR(255) NOT NULL, 12 + tap VARCHAR(255) NOT NULL, 13 + api_socket VARCHAR(255) UNIQUE NOT NULL, 14 + project_dir VARCHAR(255) UNIQUE, 15 + created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 16 + updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP 17 + );
+1
crates/firecracker-state/src/entity/mod.rs
··· 1 + pub mod virtual_machine;
+22
crates/firecracker-state/src/entity/virtual_machine.rs
··· 1 + use chrono::{DateTime, Utc}; 2 + use serde::{Deserialize, Serialize}; 3 + 4 + #[derive(sqlx::FromRow, Default, Debug, Clone, Serialize, Deserialize)] 5 + pub struct VirtualMachine { 6 + pub id: String, 7 + pub name: String, 8 + pub status: String, 9 + pub vcpu: u16, 10 + pub memory: u16, 11 + pub distro: String, 12 + pub pid: Option<u32>, 13 + pub mac_address: String, 14 + pub bridge: String, 15 + pub tap: String, 16 + pub api_socket: String, 17 + pub project_dir: Option<String>, 18 + #[serde(with = "chrono::serde::ts_seconds")] 19 + pub created_at: DateTime<Utc>, 20 + #[serde(with = "chrono::serde::ts_seconds")] 21 + pub updated_at: DateTime<Utc>, 22 + }
+34
crates/firecracker-state/src/lib.rs
··· 1 + use anyhow::{anyhow, Context, Error}; 2 + use sqlx::{sqlite::SqliteConnectOptions, Executor, Pool, Sqlite, SqlitePool}; 3 + use std::fs; 4 + 5 + pub mod entity; 6 + pub mod repo; 7 + 8 + pub async fn create_connection_pool() -> Result<Pool<Sqlite>, Error> { 9 + let config_dir = get_config_dir()?; 10 + let db_path = format!("{}/firecracker_state.db", config_dir); 11 + let options = SqliteConnectOptions::new() 12 + .filename(db_path) 13 + .create_if_missing(true); 14 + let pool = SqlitePool::connect_with(options).await?; 15 + 16 + pool.execute(include_str!("../migrations/20250804092946_init.sql")) 17 + .await?; 18 + 19 + sqlx::query("PRAGMA journal_mode=WAL") 20 + .execute(&pool) 21 + .await?; 22 + 23 + Ok(pool) 24 + } 25 + 26 + fn get_config_dir() -> Result<String, Error> { 27 + let app_dir = dirs::home_dir() 28 + .ok_or_else(|| anyhow!("Failed to get home directory"))? 29 + .join(".fireup"); 30 + fs::create_dir_all(&app_dir) 31 + .with_context(|| format!("Failed to create app directory: {}", app_dir.display()))?; 32 + 33 + Ok(app_dir.display().to_string()) 34 + }
+1
crates/firecracker-state/src/repo/mod.rs
··· 1 + pub mod virtual_machine;
+110
crates/firecracker-state/src/repo/virtual_machine.rs
··· 1 + use std::path::Path; 2 + 3 + use anyhow::{Context, Error}; 4 + use sqlx::{Pool, Sqlite}; 5 + 6 + use crate::entity::virtual_machine::VirtualMachine; 7 + 8 + pub async fn all(pool: Pool<Sqlite>) -> Result<Vec<VirtualMachine>, Error> { 9 + let result: Vec<VirtualMachine> = sqlx::query_as("SELECT * FROM virtual_machines") 10 + .fetch_all(&pool) 11 + .await 12 + .with_context(|| "Failed to fetch virtual machines")?; 13 + Ok(result) 14 + } 15 + 16 + pub async fn find(pool: Pool<Sqlite>, name: &str) -> Result<Option<VirtualMachine>, Error> { 17 + let result: Option<VirtualMachine> = 18 + sqlx::query_as("SELECT * FROM virtual_machines WHERE name = ? OR id = ?") 19 + .bind(name) 20 + .fetch_optional(&pool) 21 + .await 22 + .with_context(|| { 23 + format!("Failed to find virtual machine with name or id '{}'", name) 24 + })?; 25 + Ok(result) 26 + } 27 + 28 + pub async fn find_by_project_dir( 29 + pool: Pool<Sqlite>, 30 + path: &str, 31 + ) -> Result<Option<VirtualMachine>, Error> { 32 + let result: Option<VirtualMachine> = 33 + sqlx::query_as("SELECT * FROM virtual_machines WHERE project_dir = ?") 34 + .bind(path) 35 + .fetch_optional(&pool) 36 + .await 37 + .with_context(|| { 38 + format!("Failed to find virtual machine with project_dir '{}'", path) 39 + })?; 40 + Ok(result) 41 + } 42 + 43 + pub async fn create(pool: Pool<Sqlite>, vm: VirtualMachine) -> Result<(), Error> { 44 + let id = xid::new().to_string(); 45 + let project_dir = match Path::exists(Path::new("fire.toml")) { 46 + true => Some(std::env::current_dir()?.display().to_string()), 47 + false => None, 48 + }; 49 + sqlx::query("INSERT INTO virtual_machines ( 50 + name, 51 + id, 52 + project_dir, 53 + bridge, 54 + tap, 55 + api_socket, 56 + mac_address, 57 + vcpu, 58 + memory, 59 + distro, 60 + pid, 61 + status 62 + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") 63 + .bind(&vm.name) 64 + .bind(&id) 65 + .bind(project_dir) 66 + .bind(&vm.bridge) 67 + .bind(&vm.tap) 68 + .bind(&vm.api_socket) 69 + .bind(&vm.mac_address) 70 + .bind(&vm.vcpu) 71 + .bind(&vm.memory) 72 + .bind(&vm.distro) 73 + .bind(&vm.pid) 74 + .bind("RUNNING") 75 + .execute(&pool) 76 + .await 77 + .with_context(|| "Failed to create virtual machine")?; 78 + Ok(()) 79 + } 80 + 81 + pub async fn delete(pool: Pool<Sqlite>, name: &str) -> Result<(), Error> { 82 + sqlx::query("DELETE FROM virtual_machines WHERE name = ? OR id = ?") 83 + .bind(name) 84 + .bind(name) 85 + .execute(&pool) 86 + .await 87 + .with_context(|| { 88 + format!( 89 + "Failed to delete virtual machine with name or id '{}'", 90 + name 91 + ) 92 + })?; 93 + Ok(()) 94 + } 95 + 96 + pub async fn update(pool: Pool<Sqlite>, vm: VirtualMachine, status: &str) -> Result<(), Error> { 97 + sqlx::query("UPDATE virtual_machines SET project_dir = ?, bridge = ?, tap = ?, api_socket = ?, mac_address = ? WHERE name = ? OR id = ?") 98 + .bind(&vm.project_dir) 99 + .bind(&vm.bridge) 100 + .bind(&vm.tap) 101 + .bind(&vm.api_socket) 102 + .bind(&vm.mac_address) 103 + .bind(&vm.name) 104 + .bind(&vm.id) 105 + .bind(status) 106 + .execute(&pool) 107 + .await 108 + .with_context(|| format!("Failed to update virtual machine with name or id '{}'", vm.name))?; 109 + Ok(()) 110 + }
+11
crates/firecracker-up/Cargo.toml
··· 11 11 firecracker-vm = { path = "../firecracker-vm" } 12 12 firecracker-prepare = { path = "../firecracker-prepare" } 13 13 firecracker-process = { path = "../firecracker-process" } 14 + firecracker-state = { path = "../firecracker-state" } 14 15 fire-config = { path = "../fire-config" } 15 16 clap = "4.5.41" 16 17 owo-colors = "4.2.2" 17 18 glob = "0.3.2" 18 19 dirs = "6.0.0" 19 20 num_cpus = "1.17.0" 21 + tokio = { version = "1.47.1", features = ["full"] } 22 + names = "0.14.0" 23 + sqlx = { version = "0.8.6", features = [ 24 + "runtime-tokio", 25 + "tls-rustls", 26 + "sqlite", 27 + "chrono", 28 + "derive", 29 + "macros", 30 + ] }
+18 -4
crates/firecracker-up/src/cmd/ssh.rs
··· 1 1 use crate::{command::run_command, config::get_config_dir}; 2 2 use anyhow::Error; 3 + use firecracker_state::repo; 3 4 use glob::glob; 5 + use sqlx::{Pool, Sqlite}; 4 6 5 - const GUEST_IP: &str = "vm0.firecracker.local"; 6 - 7 - pub fn ssh() -> Result<(), Error> { 7 + pub async fn ssh(pool: Pool<Sqlite>, name: Option<String>) -> Result<(), Error> { 8 + let guest_ip = match name { 9 + Some(name) => format!("{}.firecracker.local", name), 10 + None => { 11 + let current_dir = std::env::current_dir() 12 + .map_err(|e| Error::msg(format!("Failed to get current directory: {}", e)))? 13 + .display() 14 + .to_string(); 15 + let vm = repo::virtual_machine::find_by_project_dir(pool, &current_dir).await?; 16 + match vm { 17 + Some(vm) => format!("{}.firecracker.local", vm.name), 18 + None => return Err(Error::msg("No virtual machine found with the given name or project directory.")), 19 + } 20 + }, 21 + }; 8 22 let app_dir = get_config_dir()?; 9 23 let private_key = glob(format!("{}/id_rsa", app_dir).as_str()) 10 24 .map_err(|e| Error::msg(format!("Failed to find SSH key: {}", e)))? ··· 19 33 "StrictHostKeyChecking=no", 20 34 "-o", 21 35 "UserKnownHostsFile=/dev/null", 22 - &format!("root@{}", GUEST_IP), 36 + &format!("root@{}", guest_ip), 23 37 ], 24 38 true, 25 39 )?;
+3 -3
crates/firecracker-up/src/cmd/up.rs
··· 7 7 8 8 use crate::command::run_command; 9 9 10 - pub fn up(options: VmOptions) -> Result<(), Error> { 10 + pub async fn up(options: VmOptions) -> Result<(), Error> { 11 11 check_kvm_support()?; 12 12 13 13 let options = match read_config() { ··· 15 15 Err(_) => options.clone(), 16 16 }; 17 17 18 - firecracker_process::start(&options)?; 18 + let pid = firecracker_process::start(&options)?; 19 19 20 20 loop { 21 21 thread::sleep(std::time::Duration::from_secs(1)); ··· 26 26 } 27 27 28 28 firecracker_prepare::prepare(options.clone().into())?; 29 - firecracker_vm::setup(&options)?; 29 + firecracker_vm::setup(&options, pid).await?; 30 30 Ok(()) 31 31 } 32 32
+29 -27
crates/firecracker-up/src/main.rs
··· 1 1 use anyhow::Result; 2 2 use clap::{arg, Arg, Command}; 3 3 use firecracker_vm::{ 4 - constants::{BRIDGE_DEV, FC_MAC, FIRECRACKER_SOCKET, TAP_DEV}, 5 - types::VmOptions, 4 + constants::{BRIDGE_DEV, TAP_DEV}, mac::generate_unique_mac, types::VmOptions 6 5 }; 7 6 use owo_colors::OwoColorize; 8 7 ··· 50 49 Arg::new("mac-address") 51 50 .long("mac-address") 52 51 .value_name("MAC") 53 - .default_value(FC_MAC) 54 52 .help("MAC address for the network interface"), 55 53 ) 56 54 .arg( 57 55 Arg::new("api-socket") 58 56 .long("api-socket") 59 57 .value_name("path") 60 - .default_value(FIRECRACKER_SOCKET) 61 58 .help("Path to the Firecracker API socket"), 62 59 ) 63 60 .arg( ··· 71 68 .subcommand( 72 69 Command::new("down") 73 70 .arg( 74 - Arg::new("api-socket") 75 - .long("api-socket") 76 - .value_name("path") 77 - .default_value(FIRECRACKER_SOCKET) 78 - .help("Path to the Firecracker API socket"), 71 + arg!([name] "Name of the Firecracker MicroVM to reset") 72 + .required(false), 79 73 ) 80 74 .about("Stop Firecracker MicroVM"), 81 75 ) ··· 90 84 ) 91 85 .about("View the logs of the Firecracker MicroVM"), 92 86 ) 93 - .subcommand(Command::new("ssh").about("SSH into the Firecracker MicroVM")) 87 + .subcommand(Command::new("ssh") 88 + .arg(arg!([name] "Name of the Firecracker MicroVM to SSH into")) 89 + .about("SSH into the Firecracker MicroVM")) 94 90 .subcommand( 95 91 Command::new("reset") 96 92 .arg( 97 - Arg::new("api-socket") 98 - .long("api-socket") 99 - .value_name("path") 100 - .default_value(FIRECRACKER_SOCKET) 101 - .help("Path to the Firecracker API socket"), 93 + arg!([name] "Name of the Firecracker MicroVM to reset") 94 + .required(false), 102 95 ) 103 96 .about("Reset the Firecracker MicroVM"), 104 97 ) ··· 116 109 Arg::new("mac-address") 117 110 .long("mac-address") 118 111 .value_name("MAC") 119 - .default_value(FC_MAC) 120 112 .help("MAC address for the network interface"), 121 113 ) 122 114 .arg( 123 115 Arg::new("api-socket") 124 116 .long("api-socket") 125 117 .value_name("path") 126 - .default_value(FIRECRACKER_SOCKET) 127 118 .help("Path to the Firecracker API socket"), 128 119 ) 129 120 .arg( ··· 134 125 ) 135 126 } 136 127 137 - fn main() -> Result<()> { 128 + #[tokio::main] 129 + async fn main() -> Result<()> { 138 130 let matches = cli().get_matches(); 139 131 132 + let pool = firecracker_state::create_connection_pool().await?; 133 + let vm_name = names::Generator::default().next().unwrap(); 134 + let default_socket = format!("/tmp/firecracker-{}.sock", vm_name); 135 + let default_mac = generate_unique_mac(); 136 + 140 137 match matches.subcommand() { 141 138 Some(("init", _)) => init()?, 142 139 Some(("up", args)) => { ··· 153 150 let bootargs = matches.get_one::<String>("boot-args").cloned(); 154 151 let bridge = args.get_one::<String>("bridge").cloned().unwrap(); 155 152 let tap = args.get_one::<String>("tap").cloned().unwrap(); 156 - let api_socket = args.get_one::<String>("api-socket").cloned().unwrap(); 157 - let mac_address = args.get_one::<String>("mac-address").cloned().unwrap(); 153 + let api_socket = args.get_one::<String>("api-socket").cloned().unwrap_or(default_socket); 154 + let mac_address = args.get_one::<String>("mac-address").cloned().unwrap_or(default_mac); 158 155 let options = VmOptions { 159 156 debian: args.get_one::<bool>("debian").copied(), 160 157 alpine: args.get_one::<bool>("alpine").copied(), ··· 170 167 api_socket, 171 168 mac_address, 172 169 }; 173 - up(options)? 170 + up(options).await? 174 171 } 175 172 Some(("down", args)) => { 176 - let api_socket = args.get_one::<String>("api-socket").cloned().unwrap(); 173 + let name = args.get_one::<String>("name").cloned().unwrap(); 174 + let api_socket = format!("/tmp/firecracker-{}.sock", name); 177 175 down(&VmOptions { 178 176 api_socket, 179 177 ..Default::default() ··· 184 182 let follow = args.get_one::<bool>("follow").copied().unwrap_or(false); 185 183 logs(follow)?; 186 184 } 187 - Some(("ssh", _)) => ssh()?, 185 + Some(("ssh", args)) => { 186 + let name = args.get_one::<String>("name").cloned(); 187 + ssh(pool, name).await? 188 + }, 188 189 Some(("reset", args)) => { 189 - let api_socket = args.get_one::<String>("api-socket").cloned().unwrap(); 190 + let name = args.get_one::<String>("name").cloned().unwrap(); 191 + let api_socket = format!("/tmp/firecracker-{}.sock", name); 190 192 reset(VmOptions { 191 193 api_socket, 192 194 ..Default::default() ··· 210 212 let bootargs = matches.get_one::<String>("boot-args").cloned(); 211 213 let bridge = matches.get_one::<String>("bridge").cloned().unwrap(); 212 214 let tap = matches.get_one::<String>("tap").cloned().unwrap(); 213 - let api_socket = matches.get_one::<String>("api-socket").cloned().unwrap(); 214 - let mac_address = matches.get_one::<String>("mac-address").cloned().unwrap(); 215 + let api_socket = matches.get_one::<String>("api-socket").cloned().unwrap_or(default_socket); 216 + let mac_address = matches.get_one::<String>("mac-address").cloned().unwrap_or(default_mac); 215 217 216 218 let options = VmOptions { 217 219 debian: Some(debian), ··· 228 230 api_socket, 229 231 mac_address, 230 232 }; 231 - up(options)? 233 + up(options).await? 232 234 } 233 235 } 234 236
+3
crates/firecracker-vm/Cargo.toml
··· 8 8 9 9 [dependencies] 10 10 firecracker-prepare = { path = "../firecracker-prepare" } 11 + firecracker-state = { path = "../firecracker-state" } 11 12 fire-config = { path = "../fire-config" } 12 13 anyhow = "1.0.98" 13 14 dirs = "6.0.0" ··· 16 17 num_cpus = "1.17.0" 17 18 owo-colors = "4.2.2" 18 19 serde_json = "1.0.141" 20 + rand = "0.8" 21 + names = "0.14.0"
+10 -6
crates/firecracker-vm/src/dnsmasq.rs
··· 13 13 process::exit(1); 14 14 } 15 15 16 - if std::path::Path::new(DNSMASQ_CONFIG_PATH).exists() { 17 - println!("[✓] DNSMasq configuration already exists. Skipping setup."); 18 - return Ok(()); 19 - } 20 16 println!("[+] Setting up DNSMasq configuration..."); 21 17 run_command("mkdir", &["-p", "/etc/dnsmasq.d"], true)?; 22 18 19 + let name = config 20 + .api_socket 21 + .split('/') 22 + .last() 23 + .ok_or_else(|| anyhow::anyhow!("Failed to extract VM name from API socket path"))? 24 + .replace("firecracker-", "") 25 + .replace(".sock", ""); 26 + 23 27 let dnsmasq_config: &str = &format!( 24 28 r#" 25 29 interface={} ··· 28 32 dhcp-option=option:router,{} 29 33 dhcp-option=option:dns-server,{} 30 34 dhcp-range=172.16.0.2,172.16.0.150,12h 31 - dhcp-host={},vm0 35 + dhcp-host={},{} 32 36 server=8.8.8.8 33 37 server=8.8.4.4 34 38 server=1.1.1.1 35 39 "#, 36 - &config.bridge, BRIDGE_IP, BRIDGE_IP, &config.mac_address 40 + &config.bridge, BRIDGE_IP, BRIDGE_IP, &config.mac_address, name 37 41 ); 38 42 39 43 run_command(
+3 -6
crates/firecracker-vm/src/guest.rs
··· 1 - use crate::{ 2 - command::run_command, 3 - constants::{BRIDGE_IP, GUEST_IP}, 4 - }; 1 + use crate::{command::run_command, constants::BRIDGE_IP}; 5 2 use anyhow::Result; 6 3 7 - pub fn configure_guest_network(key_name: &str) -> Result<()> { 4 + pub fn configure_guest_network(key_name: &str, guest_ip: &str) -> Result<()> { 8 5 println!("[+] Configuring network in guest..."); 9 6 const MAX_RETRIES: u32 = 20; 10 7 let mut retries = 0; ··· 16 13 key_name, 17 14 "-o", 18 15 "StrictHostKeyChecking=no", 19 - &format!("root@{}", GUEST_IP), 16 + &format!("root@{}", guest_ip), 20 17 &format!("echo 'nameserver {}' > /etc/resolv.conf", BRIDGE_IP), 21 18 ], 22 19 false,
+42 -4
crates/firecracker-vm/src/lib.rs
··· 1 1 use anyhow::{anyhow, Context, Result}; 2 2 use firecracker_prepare::Distro; 3 + use firecracker_state::{entity::virtual_machine::VirtualMachine, repo}; 3 4 use owo_colors::OwoColorize; 4 5 use std::fs; 5 6 ··· 11 12 mod dnsmasq; 12 13 mod firecracker; 13 14 mod guest; 15 + pub mod mac; 14 16 mod network; 15 17 pub mod types; 16 18 17 - pub fn setup(options: &VmOptions) -> Result<()> { 19 + pub async fn setup(options: &VmOptions, pid: u32) -> Result<()> { 18 20 let distro: Distro = options.clone().into(); 19 21 let app_dir = get_config_dir().with_context(|| "Failed to get configuration directory")?; 20 22 21 - let logfile = format!("{}/firecracker.log", app_dir); 23 + let name = options.api_socket 24 + .split('/') 25 + .last() 26 + .ok_or_else(|| anyhow!("Failed to extract VM name from API socket path"))? 27 + .replace("firecracker-", "") 28 + .replace(".sock", "") 29 + .to_string(); 30 + let name = match name.is_empty() { 31 + true => names::Generator::default().next().unwrap(), 32 + false => name, 33 + }; 34 + 35 + fs::create_dir_all(format!("{}/logs", app_dir)) 36 + .with_context(|| format!("Failed to create logs directory: {}", app_dir))?; 37 + 38 + let logfile = format!("{}/logs/firecracker-{}.log", app_dir, name); 22 39 fs::File::create(&logfile) 23 40 .with_context(|| format!("Failed to create log file: {}", logfile))?; 24 41 ··· 76 93 let arch = command::run_command("uname", &["-m"], false)?.stdout; 77 94 let arch = String::from_utf8_lossy(&arch).trim().to_string(); 78 95 network::setup_network(options)?; 96 + dnsmasq::setup_dnsmasq(options)?; 79 97 80 98 firecracker::configure(&logfile, &kernel, &rootfs, &arch, &options, distro)?; 81 99 82 100 if distro != Distro::NixOS { 83 - guest::configure_guest_network(&key_name)?; 101 + let guest_ip = format!("{}.firecracker.local", name); 102 + guest::configure_guest_network(&key_name, &guest_ip)?; 84 103 } 104 + let pool = firecracker_state::create_connection_pool().await?; 105 + let distro = match distro { 106 + Distro::Debian => "debian".into(), 107 + Distro::Alpine => "alpine".into(), 108 + Distro::NixOS => "nixos".into(), 109 + Distro::Ubuntu => "ubuntu".into(), 110 + }; 111 + repo::virtual_machine::create(pool, VirtualMachine { 112 + vcpu: options.vcpu, 113 + memory: options.memory, 114 + api_socket: options.api_socket.clone(), 115 + bridge: options.bridge.clone(), 116 + tap: options.tap.clone(), 117 + mac_address: options.mac_address.clone(), 118 + name: name.clone(), 119 + pid: Some(pid), 120 + distro, 121 + ..Default::default() 122 + }).await?; 85 123 86 124 println!("[✓] MicroVM booted and network is configured 🎉"); 87 125 88 126 println!("SSH into the VM using the following command:"); 89 - println!("{}", "fireup ssh".bright_green()); 127 + println!("{} {}", "fireup ssh".bright_green(), name.bright_green()); 90 128 91 129 Ok(()) 92 130 }
+45
crates/firecracker-vm/src/mac.rs
··· 1 + use rand::Rng; 2 + 3 + pub fn generate_unique_mac() -> String { 4 + let mut rng = rand::thread_rng(); 5 + 6 + // First byte must have the least significant bit set to 0 (unicast) 7 + // and the second least significant bit set to 0 (globally unique) 8 + let first_byte = (rng.gen::<u8>() & 0xFC) | 0x02; // Set locally administered bit 9 + 10 + // Generate the remaining 5 bytes 11 + let mut mac_bytes = [0u8; 6]; 12 + mac_bytes[0] = first_byte; 13 + for i in 1..6 { 14 + mac_bytes[i] = rng.gen::<u8>(); 15 + } 16 + 17 + // Format as a MAC address (XX:XX:XX:XX:XX:XX) 18 + format!( 19 + "{:02X}:{:02X}:{:02X}:{:02X}:{:02X}:{:02X}", 20 + mac_bytes[0], mac_bytes[1], mac_bytes[2], mac_bytes[3], mac_bytes[4], mac_bytes[5] 21 + ) 22 + } 23 + 24 + #[cfg(test)] 25 + mod tests { 26 + use super::*; 27 + 28 + #[test] 29 + fn test_generate_unique_mac() { 30 + let mac1 = generate_unique_mac(); 31 + let mac2 = generate_unique_mac(); 32 + 33 + // Check format (6 pairs of 2 hex digits separated by colons) 34 + assert!(mac1.chars().count() == 17); 35 + assert!(mac1.split(':').count() == 6); 36 + 37 + // Check that the MAC is locally administered (second bit of first byte is 1) 38 + let first_byte = u8::from_str_radix(&mac1[0..2], 16).unwrap(); 39 + assert_eq!(first_byte & 0x02, 0x02); 40 + assert_eq!(first_byte & 0x01, 0x00); // Unicast 41 + 42 + // Check uniqueness 43 + assert_ne!(mac1, mac2); 44 + } 45 + }
-3
crates/firecracker-vm/src/network.rs
··· 1 1 use crate::{ 2 2 constants::{BRIDGE_IP, MASK_SHORT}, 3 - dnsmasq::setup_dnsmasq, 4 3 types::VmOptions, 5 4 }; 6 5 use anyhow::{anyhow, Context, Result}; ··· 116 115 } 117 116 118 117 run_command("iptables", &["-P", "FORWARD", "ACCEPT"], true)?; 119 - 120 - setup_dnsmasq(config)?; 121 118 122 119 Ok(()) 123 120 }