My personal-knowledge-system, with deeply integrated task tracking and long term goal planning capabilities.

feat/tui: create TUI abstraction #4

closed opened by suri.codes targeting main from tui
Labels

None yet.

assignee

None yet.

Participants 1
AT URI
at://did:plc:nxdjlcnomw44wvso6myag2e6/sh.tangled.repo.pull/3mgl5nipbes22
+1903 -86
Diff #0
+1619 -85
Cargo.lock
··· 17 17 source = "registry+https://github.com/rust-lang/crates.io-index" 18 18 checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" 19 19 20 + [[package]] 21 + name = "aho-corasick" 22 + version = "1.1.4" 23 + source = "registry+https://github.com/rust-lang/crates.io-index" 24 + checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" 25 + dependencies = [ 26 + "memchr", 27 + ] 28 + 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 + 20 35 [[package]] 21 36 name = "anstream" 22 37 version = "0.6.21" ··· 73 88 source = "registry+https://github.com/rust-lang/crates.io-index" 74 89 checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" 75 90 91 + [[package]] 92 + name = "atomic" 93 + version = "0.6.1" 94 + source = "registry+https://github.com/rust-lang/crates.io-index" 95 + checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340" 96 + dependencies = [ 97 + "bytemuck", 98 + ] 99 + 100 + [[package]] 101 + name = "autocfg" 102 + version = "1.5.0" 103 + source = "registry+https://github.com/rust-lang/crates.io-index" 104 + checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 105 + 76 106 [[package]] 77 107 name = "backtrace" 78 108 version = "0.3.76" ··· 88 118 "windows-link 0.2.1", 89 119 ] 90 120 121 + [[package]] 122 + name = "base64" 123 + version = "0.22.1" 124 + source = "registry+https://github.com/rust-lang/crates.io-index" 125 + checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 126 + 91 127 [[package]] 92 128 name = "better-panic" 93 129 version = "0.3.0" ··· 98 134 "console", 99 135 ] 100 136 137 + [[package]] 138 + name = "bit-set" 139 + version = "0.5.3" 140 + source = "registry+https://github.com/rust-lang/crates.io-index" 141 + checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" 142 + dependencies = [ 143 + "bit-vec", 144 + ] 145 + 146 + [[package]] 147 + name = "bit-vec" 148 + version = "0.6.3" 149 + source = "registry+https://github.com/rust-lang/crates.io-index" 150 + checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" 151 + 152 + [[package]] 153 + name = "bitflags" 154 + version = "1.3.2" 155 + source = "registry+https://github.com/rust-lang/crates.io-index" 156 + checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 157 + 101 158 [[package]] 102 159 name = "bitflags" 103 160 version = "2.11.0" 104 161 source = "registry+https://github.com/rust-lang/crates.io-index" 105 162 checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" 106 163 164 + [[package]] 165 + name = "block-buffer" 166 + version = "0.10.4" 167 + source = "registry+https://github.com/rust-lang/crates.io-index" 168 + checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 169 + dependencies = [ 170 + "generic-array", 171 + ] 172 + 173 + [[package]] 174 + name = "bumpalo" 175 + version = "3.20.2" 176 + source = "registry+https://github.com/rust-lang/crates.io-index" 177 + checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" 178 + 179 + [[package]] 180 + name = "bytemuck" 181 + version = "1.25.0" 182 + source = "registry+https://github.com/rust-lang/crates.io-index" 183 + checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" 184 + 185 + [[package]] 186 + name = "bytes" 187 + version = "1.11.1" 188 + source = "registry+https://github.com/rust-lang/crates.io-index" 189 + checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" 190 + 191 + [[package]] 192 + name = "castaway" 193 + version = "0.2.4" 194 + source = "registry+https://github.com/rust-lang/crates.io-index" 195 + checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" 196 + dependencies = [ 197 + "rustversion", 198 + ] 199 + 107 200 [[package]] 108 201 name = "cfg-if" 109 202 version = "1.0.4" 110 203 source = "registry+https://github.com/rust-lang/crates.io-index" 111 204 checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" 112 205 206 + [[package]] 207 + name = "cfg_aliases" 208 + version = "0.2.1" 209 + source = "registry+https://github.com/rust-lang/crates.io-index" 210 + checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 211 + 113 212 [[package]] 114 213 name = "color-eyre" 115 214 version = "0.6.5" ··· 143 242 source = "registry+https://github.com/rust-lang/crates.io-index" 144 243 checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 145 244 245 + [[package]] 246 + name = "compact_str" 247 + version = "0.9.0" 248 + source = "registry+https://github.com/rust-lang/crates.io-index" 249 + checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a" 250 + dependencies = [ 251 + "castaway", 252 + "cfg-if", 253 + "itoa", 254 + "rustversion", 255 + "ryu", 256 + "static_assertions", 257 + ] 258 + 146 259 [[package]] 147 260 name = "console" 148 261 version = "0.15.11" ··· 155 268 "windows-sys 0.59.0", 156 269 ] 157 270 271 + [[package]] 272 + name = "convert_case" 273 + version = "0.10.0" 274 + source = "registry+https://github.com/rust-lang/crates.io-index" 275 + checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" 276 + dependencies = [ 277 + "unicode-segmentation", 278 + ] 279 + 280 + [[package]] 281 + name = "cpufeatures" 282 + version = "0.2.17" 283 + source = "registry+https://github.com/rust-lang/crates.io-index" 284 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 285 + dependencies = [ 286 + "libc", 287 + ] 288 + 289 + [[package]] 290 + name = "crossterm" 291 + version = "0.29.0" 292 + source = "registry+https://github.com/rust-lang/crates.io-index" 293 + checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" 294 + dependencies = [ 295 + "bitflags 2.11.0", 296 + "crossterm_winapi", 297 + "derive_more", 298 + "document-features", 299 + "futures-core", 300 + "mio", 301 + "parking_lot", 302 + "rustix", 303 + "signal-hook 0.3.18", 304 + "signal-hook-mio", 305 + "winapi", 306 + ] 307 + 308 + [[package]] 309 + name = "crossterm_winapi" 310 + version = "0.9.1" 311 + source = "registry+https://github.com/rust-lang/crates.io-index" 312 + checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" 313 + dependencies = [ 314 + "winapi", 315 + ] 316 + 317 + [[package]] 318 + name = "crypto-common" 319 + version = "0.1.7" 320 + source = "registry+https://github.com/rust-lang/crates.io-index" 321 + checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" 322 + dependencies = [ 323 + "generic-array", 324 + "typenum", 325 + ] 326 + 327 + [[package]] 328 + name = "csscolorparser" 329 + version = "0.6.2" 330 + source = "registry+https://github.com/rust-lang/crates.io-index" 331 + checksum = "eb2a7d3066da2de787b7f032c736763eb7ae5d355f81a68bab2675a96008b0bf" 332 + dependencies = [ 333 + "lab", 334 + "phf", 335 + ] 336 + 337 + [[package]] 338 + name = "darling" 339 + version = "0.23.0" 340 + source = "registry+https://github.com/rust-lang/crates.io-index" 341 + checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" 342 + dependencies = [ 343 + "darling_core", 344 + "darling_macro", 345 + ] 346 + 347 + [[package]] 348 + name = "darling_core" 349 + version = "0.23.0" 350 + source = "registry+https://github.com/rust-lang/crates.io-index" 351 + checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" 352 + dependencies = [ 353 + "ident_case", 354 + "proc-macro2", 355 + "quote", 356 + "strsim", 357 + "syn 2.0.117", 358 + ] 359 + 360 + [[package]] 361 + name = "darling_macro" 362 + version = "0.23.0" 363 + source = "registry+https://github.com/rust-lang/crates.io-index" 364 + checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" 365 + dependencies = [ 366 + "darling_core", 367 + "quote", 368 + "syn 2.0.117", 369 + ] 370 + 371 + [[package]] 372 + name = "deltae" 373 + version = "0.3.2" 374 + source = "registry+https://github.com/rust-lang/crates.io-index" 375 + checksum = "5729f5117e208430e437df2f4843f5e5952997175992d1414f94c57d61e270b4" 376 + 377 + [[package]] 378 + name = "deranged" 379 + version = "0.5.8" 380 + source = "registry+https://github.com/rust-lang/crates.io-index" 381 + checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" 382 + dependencies = [ 383 + "powerfmt", 384 + ] 385 + 386 + [[package]] 387 + name = "derive_more" 388 + version = "2.1.1" 389 + source = "registry+https://github.com/rust-lang/crates.io-index" 390 + checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" 391 + dependencies = [ 392 + "derive_more-impl", 393 + ] 394 + 395 + [[package]] 396 + name = "derive_more-impl" 397 + version = "2.1.1" 398 + source = "registry+https://github.com/rust-lang/crates.io-index" 399 + checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" 400 + dependencies = [ 401 + "convert_case", 402 + "proc-macro2", 403 + "quote", 404 + "rustc_version", 405 + "syn 2.0.117", 406 + ] 407 + 408 + [[package]] 409 + name = "digest" 410 + version = "0.10.7" 411 + source = "registry+https://github.com/rust-lang/crates.io-index" 412 + checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 413 + dependencies = [ 414 + "block-buffer", 415 + "crypto-common", 416 + ] 417 + 418 + [[package]] 419 + name = "document-features" 420 + version = "0.2.12" 421 + source = "registry+https://github.com/rust-lang/crates.io-index" 422 + checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" 423 + dependencies = [ 424 + "litrs", 425 + ] 426 + 427 + [[package]] 428 + name = "either" 429 + version = "1.15.0" 430 + source = "registry+https://github.com/rust-lang/crates.io-index" 431 + checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 432 + 158 433 [[package]] 159 434 name = "encode_unicode" 160 435 version = "1.0.0" ··· 167 442 source = "registry+https://github.com/rust-lang/crates.io-index" 168 443 checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 169 444 445 + [[package]] 446 + name = "errno" 447 + version = "0.3.14" 448 + source = "registry+https://github.com/rust-lang/crates.io-index" 449 + checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" 450 + dependencies = [ 451 + "libc", 452 + "windows-sys 0.61.2", 453 + ] 454 + 455 + [[package]] 456 + name = "euclid" 457 + version = "0.22.13" 458 + source = "registry+https://github.com/rust-lang/crates.io-index" 459 + checksum = "df61bf483e837f88d5c2291dcf55c67be7e676b3a51acc48db3a7b163b91ed63" 460 + dependencies = [ 461 + "num-traits", 462 + ] 463 + 170 464 [[package]] 171 465 name = "eyre" 172 466 version = "0.6.12" ··· 177 471 "once_cell", 178 472 ] 179 473 474 + [[package]] 475 + name = "fancy-regex" 476 + version = "0.11.0" 477 + source = "registry+https://github.com/rust-lang/crates.io-index" 478 + checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2" 479 + dependencies = [ 480 + "bit-set", 481 + "regex", 482 + ] 483 + 180 484 [[package]] 181 485 name = "filaments" 182 486 version = "0.1.0" 183 487 dependencies = [ 184 488 "better-panic", 185 489 "color-eyre", 490 + "crossterm", 491 + "futures", 186 492 "human-panic", 493 + "ratatui", 494 + "serde", 495 + "signal-hook 0.4.3", 496 + "tokio", 497 + "tokio-util", 187 498 "tracing", 188 499 ] 189 500 501 + [[package]] 502 + name = "filedescriptor" 503 + version = "0.8.3" 504 + source = "registry+https://github.com/rust-lang/crates.io-index" 505 + checksum = "e40758ed24c9b2eeb76c35fb0aebc66c626084edd827e07e1552279814c6682d" 506 + dependencies = [ 507 + "libc", 508 + "thiserror 1.0.69", 509 + "winapi", 510 + ] 511 + 512 + [[package]] 513 + name = "finl_unicode" 514 + version = "1.4.0" 515 + source = "registry+https://github.com/rust-lang/crates.io-index" 516 + checksum = "9844ddc3a6e533d62bba727eb6c28b5d360921d5175e9ff0f1e621a5c590a4d5" 517 + 518 + [[package]] 519 + name = "fixedbitset" 520 + version = "0.4.2" 521 + source = "registry+https://github.com/rust-lang/crates.io-index" 522 + checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" 523 + 524 + [[package]] 525 + name = "fnv" 526 + version = "1.0.7" 527 + source = "registry+https://github.com/rust-lang/crates.io-index" 528 + checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 529 + 190 530 [[package]] 191 531 name = "foldhash" 192 532 version = "0.1.5" 193 533 source = "registry+https://github.com/rust-lang/crates.io-index" 194 534 checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 195 535 536 + [[package]] 537 + name = "foldhash" 538 + version = "0.2.0" 539 + source = "registry+https://github.com/rust-lang/crates.io-index" 540 + checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" 541 + 542 + [[package]] 543 + name = "futures" 544 + version = "0.3.32" 545 + source = "registry+https://github.com/rust-lang/crates.io-index" 546 + checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" 547 + dependencies = [ 548 + "futures-channel", 549 + "futures-core", 550 + "futures-executor", 551 + "futures-io", 552 + "futures-sink", 553 + "futures-task", 554 + "futures-util", 555 + ] 556 + 557 + [[package]] 558 + name = "futures-channel" 559 + version = "0.3.32" 560 + source = "registry+https://github.com/rust-lang/crates.io-index" 561 + checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" 562 + dependencies = [ 563 + "futures-core", 564 + "futures-sink", 565 + ] 566 + 567 + [[package]] 568 + name = "futures-core" 569 + version = "0.3.32" 570 + source = "registry+https://github.com/rust-lang/crates.io-index" 571 + checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" 572 + 573 + [[package]] 574 + name = "futures-executor" 575 + version = "0.3.32" 576 + source = "registry+https://github.com/rust-lang/crates.io-index" 577 + checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" 578 + dependencies = [ 579 + "futures-core", 580 + "futures-task", 581 + "futures-util", 582 + ] 583 + 584 + [[package]] 585 + name = "futures-io" 586 + version = "0.3.32" 587 + source = "registry+https://github.com/rust-lang/crates.io-index" 588 + checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" 589 + 590 + [[package]] 591 + name = "futures-macro" 592 + version = "0.3.32" 593 + source = "registry+https://github.com/rust-lang/crates.io-index" 594 + checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" 595 + dependencies = [ 596 + "proc-macro2", 597 + "quote", 598 + "syn 2.0.117", 599 + ] 600 + 601 + [[package]] 602 + name = "futures-sink" 603 + version = "0.3.32" 604 + source = "registry+https://github.com/rust-lang/crates.io-index" 605 + checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" 606 + 607 + [[package]] 608 + name = "futures-task" 609 + version = "0.3.32" 610 + source = "registry+https://github.com/rust-lang/crates.io-index" 611 + checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" 612 + 613 + [[package]] 614 + name = "futures-util" 615 + version = "0.3.32" 616 + source = "registry+https://github.com/rust-lang/crates.io-index" 617 + checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" 618 + dependencies = [ 619 + "futures-channel", 620 + "futures-core", 621 + "futures-io", 622 + "futures-macro", 623 + "futures-sink", 624 + "futures-task", 625 + "memchr", 626 + "pin-project-lite", 627 + "slab", 628 + ] 629 + 630 + [[package]] 631 + name = "generic-array" 632 + version = "0.14.7" 633 + source = "registry+https://github.com/rust-lang/crates.io-index" 634 + checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 635 + dependencies = [ 636 + "typenum", 637 + "version_check", 638 + ] 639 + 640 + [[package]] 641 + name = "getrandom" 642 + version = "0.3.4" 643 + source = "registry+https://github.com/rust-lang/crates.io-index" 644 + checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" 645 + dependencies = [ 646 + "cfg-if", 647 + "libc", 648 + "r-efi 5.3.0", 649 + "wasip2", 650 + ] 651 + 196 652 [[package]] 197 653 name = "getrandom" 198 654 version = "0.4.2" ··· 201 657 dependencies = [ 202 658 "cfg-if", 203 659 "libc", 204 - "r-efi", 660 + "r-efi 6.0.0", 205 661 "wasip2", 206 662 "wasip3", 207 663 ] ··· 218 674 source = "registry+https://github.com/rust-lang/crates.io-index" 219 675 checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" 220 676 dependencies = [ 221 - "foldhash", 677 + "foldhash 0.1.5", 222 678 ] 223 679 224 680 [[package]] ··· 226 682 version = "0.16.1" 227 683 source = "registry+https://github.com/rust-lang/crates.io-index" 228 684 checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" 685 + dependencies = [ 686 + "allocator-api2", 687 + "equivalent", 688 + "foldhash 0.2.0", 689 + ] 229 690 230 691 [[package]] 231 692 name = "heck" ··· 233 694 source = "registry+https://github.com/rust-lang/crates.io-index" 234 695 checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 235 696 697 + [[package]] 698 + name = "hex" 699 + version = "0.4.3" 700 + source = "registry+https://github.com/rust-lang/crates.io-index" 701 + checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 702 + 236 703 [[package]] 237 704 name = "human-panic" 238 705 version = "2.0.6" ··· 255 722 source = "registry+https://github.com/rust-lang/crates.io-index" 256 723 checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" 257 724 725 + [[package]] 726 + name = "ident_case" 727 + version = "1.0.1" 728 + source = "registry+https://github.com/rust-lang/crates.io-index" 729 + checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 730 + 258 731 [[package]] 259 732 name = "indenter" 260 733 version = "0.3.4" ··· 273 746 "serde_core", 274 747 ] 275 748 749 + [[package]] 750 + name = "indoc" 751 + version = "2.0.7" 752 + source = "registry+https://github.com/rust-lang/crates.io-index" 753 + checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" 754 + dependencies = [ 755 + "rustversion", 756 + ] 757 + 758 + [[package]] 759 + name = "instability" 760 + version = "0.3.11" 761 + source = "registry+https://github.com/rust-lang/crates.io-index" 762 + checksum = "357b7205c6cd18dd2c86ed312d1e70add149aea98e7ef72b9fdf0270e555c11d" 763 + dependencies = [ 764 + "darling", 765 + "indoc", 766 + "proc-macro2", 767 + "quote", 768 + "syn 2.0.117", 769 + ] 770 + 276 771 [[package]] 277 772 name = "is_terminal_polyfill" 278 773 version = "1.70.2" 279 774 source = "registry+https://github.com/rust-lang/crates.io-index" 280 775 checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" 281 776 777 + [[package]] 778 + name = "itertools" 779 + version = "0.14.0" 780 + source = "registry+https://github.com/rust-lang/crates.io-index" 781 + checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" 782 + dependencies = [ 783 + "either", 784 + ] 785 + 282 786 [[package]] 283 787 name = "itoa" 284 788 version = "1.0.17" 285 789 source = "registry+https://github.com/rust-lang/crates.io-index" 286 790 checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" 287 791 792 + [[package]] 793 + name = "js-sys" 794 + version = "0.3.91" 795 + source = "registry+https://github.com/rust-lang/crates.io-index" 796 + checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" 797 + dependencies = [ 798 + "once_cell", 799 + "wasm-bindgen", 800 + ] 801 + 802 + [[package]] 803 + name = "kasuari" 804 + version = "0.4.11" 805 + source = "registry+https://github.com/rust-lang/crates.io-index" 806 + checksum = "8fe90c1150662e858c7d5f945089b7517b0a80d8bf7ba4b1b5ffc984e7230a5b" 807 + dependencies = [ 808 + "hashbrown 0.16.1", 809 + "portable-atomic", 810 + "thiserror 2.0.18", 811 + ] 812 + 813 + [[package]] 814 + name = "lab" 815 + version = "0.11.0" 816 + source = "registry+https://github.com/rust-lang/crates.io-index" 817 + checksum = "bf36173d4167ed999940f804952e6b08197cae5ad5d572eb4db150ce8ad5d58f" 818 + 288 819 [[package]] 289 820 name = "lazy_static" 290 821 version = "1.5.0" ··· 303 834 source = "registry+https://github.com/rust-lang/crates.io-index" 304 835 checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" 305 836 837 + [[package]] 838 + name = "line-clipping" 839 + version = "0.3.5" 840 + source = "registry+https://github.com/rust-lang/crates.io-index" 841 + checksum = "5f4de44e98ddbf09375cbf4d17714d18f39195f4f4894e8524501726fd9a8a4a" 842 + dependencies = [ 843 + "bitflags 2.11.0", 844 + ] 845 + 846 + [[package]] 847 + name = "linux-raw-sys" 848 + version = "0.12.1" 849 + source = "registry+https://github.com/rust-lang/crates.io-index" 850 + checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" 851 + 852 + [[package]] 853 + name = "litrs" 854 + version = "1.0.0" 855 + source = "registry+https://github.com/rust-lang/crates.io-index" 856 + checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" 857 + 858 + [[package]] 859 + name = "lock_api" 860 + version = "0.4.14" 861 + source = "registry+https://github.com/rust-lang/crates.io-index" 862 + checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 863 + dependencies = [ 864 + "scopeguard", 865 + ] 866 + 306 867 [[package]] 307 868 name = "log" 308 869 version = "0.4.29" 309 870 source = "registry+https://github.com/rust-lang/crates.io-index" 310 871 checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" 311 872 873 + [[package]] 874 + name = "lru" 875 + version = "0.16.3" 876 + source = "registry+https://github.com/rust-lang/crates.io-index" 877 + checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" 878 + dependencies = [ 879 + "hashbrown 0.16.1", 880 + ] 881 + 882 + [[package]] 883 + name = "mac_address" 884 + version = "1.1.8" 885 + source = "registry+https://github.com/rust-lang/crates.io-index" 886 + checksum = "c0aeb26bf5e836cc1c341c8106051b573f1766dfa05aa87f0b98be5e51b02303" 887 + dependencies = [ 888 + "nix", 889 + "winapi", 890 + ] 891 + 312 892 [[package]] 313 893 name = "memchr" 314 894 version = "2.8.0" 315 895 source = "registry+https://github.com/rust-lang/crates.io-index" 316 896 checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" 317 897 898 + [[package]] 899 + name = "memmem" 900 + version = "0.1.1" 901 + source = "registry+https://github.com/rust-lang/crates.io-index" 902 + checksum = "a64a92489e2744ce060c349162be1c5f33c6969234104dbd99ddb5feb08b8c15" 903 + 904 + [[package]] 905 + name = "memoffset" 906 + version = "0.9.1" 907 + source = "registry+https://github.com/rust-lang/crates.io-index" 908 + checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" 909 + dependencies = [ 910 + "autocfg", 911 + ] 912 + 913 + [[package]] 914 + name = "minimal-lexical" 915 + version = "0.2.1" 916 + source = "registry+https://github.com/rust-lang/crates.io-index" 917 + checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 918 + 318 919 [[package]] 319 920 name = "miniz_oxide" 320 921 version = "0.8.9" ··· 324 925 "adler2", 325 926 ] 326 927 928 + [[package]] 929 + name = "mio" 930 + version = "1.1.1" 931 + source = "registry+https://github.com/rust-lang/crates.io-index" 932 + checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" 933 + dependencies = [ 934 + "libc", 935 + "log", 936 + "wasi", 937 + "windows-sys 0.61.2", 938 + ] 939 + 940 + [[package]] 941 + name = "nix" 942 + version = "0.29.0" 943 + source = "registry+https://github.com/rust-lang/crates.io-index" 944 + checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" 945 + dependencies = [ 946 + "bitflags 2.11.0", 947 + "cfg-if", 948 + "cfg_aliases", 949 + "libc", 950 + "memoffset", 951 + ] 952 + 953 + [[package]] 954 + name = "nom" 955 + version = "7.1.3" 956 + source = "registry+https://github.com/rust-lang/crates.io-index" 957 + checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 958 + dependencies = [ 959 + "memchr", 960 + "minimal-lexical", 961 + ] 962 + 327 963 [[package]] 328 964 name = "ntapi" 329 965 version = "0.4.3" ··· 333 969 "winapi", 334 970 ] 335 971 972 + [[package]] 973 + name = "num-conv" 974 + version = "0.2.0" 975 + source = "registry+https://github.com/rust-lang/crates.io-index" 976 + checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" 977 + 978 + [[package]] 979 + name = "num-derive" 980 + version = "0.4.2" 981 + source = "registry+https://github.com/rust-lang/crates.io-index" 982 + checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" 983 + dependencies = [ 984 + "proc-macro2", 985 + "quote", 986 + "syn 2.0.117", 987 + ] 988 + 989 + [[package]] 990 + name = "num-traits" 991 + version = "0.2.19" 992 + source = "registry+https://github.com/rust-lang/crates.io-index" 993 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 994 + dependencies = [ 995 + "autocfg", 996 + ] 997 + 998 + [[package]] 999 + name = "num_threads" 1000 + version = "0.1.7" 1001 + source = "registry+https://github.com/rust-lang/crates.io-index" 1002 + checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" 1003 + dependencies = [ 1004 + "libc", 1005 + ] 1006 + 336 1007 [[package]] 337 1008 name = "objc2-core-foundation" 338 1009 version = "0.3.2" 339 1010 source = "registry+https://github.com/rust-lang/crates.io-index" 340 1011 checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" 341 1012 dependencies = [ 342 - "bitflags", 1013 + "bitflags 2.11.0", 343 1014 ] 344 1015 345 1016 [[package]] ··· 373 1044 source = "registry+https://github.com/rust-lang/crates.io-index" 374 1045 checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" 375 1046 1047 + [[package]] 1048 + name = "ordered-float" 1049 + version = "4.6.0" 1050 + source = "registry+https://github.com/rust-lang/crates.io-index" 1051 + checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" 1052 + dependencies = [ 1053 + "num-traits", 1054 + ] 1055 + 376 1056 [[package]] 377 1057 name = "owo-colors" 378 1058 version = "4.3.0" 379 1059 source = "registry+https://github.com/rust-lang/crates.io-index" 380 1060 checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d" 381 1061 1062 + [[package]] 1063 + name = "parking_lot" 1064 + version = "0.12.5" 1065 + source = "registry+https://github.com/rust-lang/crates.io-index" 1066 + checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 1067 + dependencies = [ 1068 + "lock_api", 1069 + "parking_lot_core", 1070 + ] 1071 + 1072 + [[package]] 1073 + name = "parking_lot_core" 1074 + version = "0.9.12" 1075 + source = "registry+https://github.com/rust-lang/crates.io-index" 1076 + checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 1077 + dependencies = [ 1078 + "cfg-if", 1079 + "libc", 1080 + "redox_syscall", 1081 + "smallvec", 1082 + "windows-link 0.2.1", 1083 + ] 1084 + 1085 + [[package]] 1086 + name = "pest" 1087 + version = "2.8.6" 1088 + source = "registry+https://github.com/rust-lang/crates.io-index" 1089 + checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" 1090 + dependencies = [ 1091 + "memchr", 1092 + "ucd-trie", 1093 + ] 1094 + 1095 + [[package]] 1096 + name = "pest_derive" 1097 + version = "2.8.6" 1098 + source = "registry+https://github.com/rust-lang/crates.io-index" 1099 + checksum = "11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77" 1100 + dependencies = [ 1101 + "pest", 1102 + "pest_generator", 1103 + ] 1104 + 1105 + [[package]] 1106 + name = "pest_generator" 1107 + version = "2.8.6" 1108 + source = "registry+https://github.com/rust-lang/crates.io-index" 1109 + checksum = "8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f" 1110 + dependencies = [ 1111 + "pest", 1112 + "pest_meta", 1113 + "proc-macro2", 1114 + "quote", 1115 + "syn 2.0.117", 1116 + ] 1117 + 1118 + [[package]] 1119 + name = "pest_meta" 1120 + version = "2.8.6" 1121 + source = "registry+https://github.com/rust-lang/crates.io-index" 1122 + checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" 1123 + dependencies = [ 1124 + "pest", 1125 + "sha2", 1126 + ] 1127 + 1128 + [[package]] 1129 + name = "phf" 1130 + version = "0.11.3" 1131 + source = "registry+https://github.com/rust-lang/crates.io-index" 1132 + checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 1133 + dependencies = [ 1134 + "phf_macros", 1135 + "phf_shared", 1136 + ] 1137 + 1138 + [[package]] 1139 + name = "phf_codegen" 1140 + version = "0.11.3" 1141 + source = "registry+https://github.com/rust-lang/crates.io-index" 1142 + checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" 1143 + dependencies = [ 1144 + "phf_generator", 1145 + "phf_shared", 1146 + ] 1147 + 1148 + [[package]] 1149 + name = "phf_generator" 1150 + version = "0.11.3" 1151 + source = "registry+https://github.com/rust-lang/crates.io-index" 1152 + checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" 1153 + dependencies = [ 1154 + "phf_shared", 1155 + "rand", 1156 + ] 1157 + 1158 + [[package]] 1159 + name = "phf_macros" 1160 + version = "0.11.3" 1161 + source = "registry+https://github.com/rust-lang/crates.io-index" 1162 + checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" 1163 + dependencies = [ 1164 + "phf_generator", 1165 + "phf_shared", 1166 + "proc-macro2", 1167 + "quote", 1168 + "syn 2.0.117", 1169 + ] 1170 + 1171 + [[package]] 1172 + name = "phf_shared" 1173 + version = "0.11.3" 1174 + source = "registry+https://github.com/rust-lang/crates.io-index" 1175 + checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 1176 + dependencies = [ 1177 + "siphasher", 1178 + ] 1179 + 382 1180 [[package]] 383 1181 name = "pin-project-lite" 384 1182 version = "0.2.17" 385 1183 source = "registry+https://github.com/rust-lang/crates.io-index" 386 1184 checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" 387 1185 1186 + [[package]] 1187 + name = "portable-atomic" 1188 + version = "1.13.1" 1189 + source = "registry+https://github.com/rust-lang/crates.io-index" 1190 + checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" 1191 + 1192 + [[package]] 1193 + name = "powerfmt" 1194 + version = "0.2.0" 1195 + source = "registry+https://github.com/rust-lang/crates.io-index" 1196 + checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 1197 + 388 1198 [[package]] 389 1199 name = "prettyplease" 390 1200 version = "0.2.37" 391 1201 source = "registry+https://github.com/rust-lang/crates.io-index" 392 - checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" 1202 + checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" 1203 + dependencies = [ 1204 + "proc-macro2", 1205 + "syn 2.0.117", 1206 + ] 1207 + 1208 + [[package]] 1209 + name = "proc-macro2" 1210 + version = "1.0.106" 1211 + source = "registry+https://github.com/rust-lang/crates.io-index" 1212 + checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" 1213 + dependencies = [ 1214 + "unicode-ident", 1215 + ] 1216 + 1217 + [[package]] 1218 + name = "quote" 1219 + version = "1.0.45" 1220 + source = "registry+https://github.com/rust-lang/crates.io-index" 1221 + checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" 1222 + dependencies = [ 1223 + "proc-macro2", 1224 + ] 1225 + 1226 + [[package]] 1227 + name = "r-efi" 1228 + version = "5.3.0" 1229 + source = "registry+https://github.com/rust-lang/crates.io-index" 1230 + checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 1231 + 1232 + [[package]] 1233 + name = "r-efi" 1234 + version = "6.0.0" 1235 + source = "registry+https://github.com/rust-lang/crates.io-index" 1236 + checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" 1237 + 1238 + [[package]] 1239 + name = "rand" 1240 + version = "0.8.5" 1241 + source = "registry+https://github.com/rust-lang/crates.io-index" 1242 + checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1243 + dependencies = [ 1244 + "rand_core", 1245 + ] 1246 + 1247 + [[package]] 1248 + name = "rand_core" 1249 + version = "0.6.4" 1250 + source = "registry+https://github.com/rust-lang/crates.io-index" 1251 + checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1252 + 1253 + [[package]] 1254 + name = "ratatui" 1255 + version = "0.30.0" 1256 + source = "registry+https://github.com/rust-lang/crates.io-index" 1257 + checksum = "d1ce67fb8ba4446454d1c8dbaeda0557ff5e94d39d5e5ed7f10a65eb4c8266bc" 1258 + dependencies = [ 1259 + "instability", 1260 + "ratatui-core", 1261 + "ratatui-crossterm", 1262 + "ratatui-macros", 1263 + "ratatui-termwiz", 1264 + "ratatui-widgets", 1265 + ] 1266 + 1267 + [[package]] 1268 + name = "ratatui-core" 1269 + version = "0.1.0" 1270 + source = "registry+https://github.com/rust-lang/crates.io-index" 1271 + checksum = "5ef8dea09a92caaf73bff7adb70b76162e5937524058a7e5bff37869cbbec293" 1272 + dependencies = [ 1273 + "bitflags 2.11.0", 1274 + "compact_str", 1275 + "hashbrown 0.16.1", 1276 + "indoc", 1277 + "itertools", 1278 + "kasuari", 1279 + "lru", 1280 + "strum", 1281 + "thiserror 2.0.18", 1282 + "unicode-segmentation", 1283 + "unicode-truncate", 1284 + "unicode-width", 1285 + ] 1286 + 1287 + [[package]] 1288 + name = "ratatui-crossterm" 1289 + version = "0.1.0" 1290 + source = "registry+https://github.com/rust-lang/crates.io-index" 1291 + checksum = "577c9b9f652b4c121fb25c6a391dd06406d3b092ba68827e6d2f09550edc54b3" 1292 + dependencies = [ 1293 + "cfg-if", 1294 + "crossterm", 1295 + "instability", 1296 + "ratatui-core", 1297 + ] 1298 + 1299 + [[package]] 1300 + name = "ratatui-macros" 1301 + version = "0.7.0" 1302 + source = "registry+https://github.com/rust-lang/crates.io-index" 1303 + checksum = "a7f1342a13e83e4bb9d0b793d0ea762be633f9582048c892ae9041ef39c936f4" 1304 + dependencies = [ 1305 + "ratatui-core", 1306 + "ratatui-widgets", 1307 + ] 1308 + 1309 + [[package]] 1310 + name = "ratatui-termwiz" 1311 + version = "0.1.0" 1312 + source = "registry+https://github.com/rust-lang/crates.io-index" 1313 + checksum = "0f76fe0bd0ed4295f0321b1676732e2454024c15a35d01904ddb315afd3d545c" 1314 + dependencies = [ 1315 + "ratatui-core", 1316 + "termwiz", 1317 + ] 1318 + 1319 + [[package]] 1320 + name = "ratatui-widgets" 1321 + version = "0.3.0" 1322 + source = "registry+https://github.com/rust-lang/crates.io-index" 1323 + checksum = "d7dbfa023cd4e604c2553483820c5fe8aa9d71a42eea5aa77c6e7f35756612db" 1324 + dependencies = [ 1325 + "bitflags 2.11.0", 1326 + "hashbrown 0.16.1", 1327 + "indoc", 1328 + "instability", 1329 + "itertools", 1330 + "line-clipping", 1331 + "ratatui-core", 1332 + "strum", 1333 + "time", 1334 + "unicode-segmentation", 1335 + "unicode-width", 1336 + ] 1337 + 1338 + [[package]] 1339 + name = "redox_syscall" 1340 + version = "0.5.18" 1341 + source = "registry+https://github.com/rust-lang/crates.io-index" 1342 + checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" 1343 + dependencies = [ 1344 + "bitflags 2.11.0", 1345 + ] 1346 + 1347 + [[package]] 1348 + name = "regex" 1349 + version = "1.12.3" 1350 + source = "registry+https://github.com/rust-lang/crates.io-index" 1351 + checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" 1352 + dependencies = [ 1353 + "aho-corasick", 1354 + "memchr", 1355 + "regex-automata", 1356 + "regex-syntax", 1357 + ] 1358 + 1359 + [[package]] 1360 + name = "regex-automata" 1361 + version = "0.4.14" 1362 + source = "registry+https://github.com/rust-lang/crates.io-index" 1363 + checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" 1364 + dependencies = [ 1365 + "aho-corasick", 1366 + "memchr", 1367 + "regex-syntax", 1368 + ] 1369 + 1370 + [[package]] 1371 + name = "regex-syntax" 1372 + version = "0.8.10" 1373 + source = "registry+https://github.com/rust-lang/crates.io-index" 1374 + checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" 1375 + 1376 + [[package]] 1377 + name = "rustc-demangle" 1378 + version = "0.1.27" 1379 + source = "registry+https://github.com/rust-lang/crates.io-index" 1380 + checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" 1381 + 1382 + [[package]] 1383 + name = "rustc_version" 1384 + version = "0.4.1" 1385 + source = "registry+https://github.com/rust-lang/crates.io-index" 1386 + checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 1387 + dependencies = [ 1388 + "semver", 1389 + ] 1390 + 1391 + [[package]] 1392 + name = "rustix" 1393 + version = "1.1.4" 1394 + source = "registry+https://github.com/rust-lang/crates.io-index" 1395 + checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" 1396 + dependencies = [ 1397 + "bitflags 2.11.0", 1398 + "errno", 1399 + "libc", 1400 + "linux-raw-sys", 1401 + "windows-sys 0.61.2", 1402 + ] 1403 + 1404 + [[package]] 1405 + name = "rustversion" 1406 + version = "1.0.22" 1407 + source = "registry+https://github.com/rust-lang/crates.io-index" 1408 + checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 1409 + 1410 + [[package]] 1411 + name = "ryu" 1412 + version = "1.0.23" 1413 + source = "registry+https://github.com/rust-lang/crates.io-index" 1414 + checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" 1415 + 1416 + [[package]] 1417 + name = "scopeguard" 1418 + version = "1.2.0" 1419 + source = "registry+https://github.com/rust-lang/crates.io-index" 1420 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1421 + 1422 + [[package]] 1423 + name = "semver" 1424 + version = "1.0.27" 1425 + source = "registry+https://github.com/rust-lang/crates.io-index" 1426 + checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 1427 + 1428 + [[package]] 1429 + name = "serde" 1430 + version = "1.0.228" 1431 + source = "registry+https://github.com/rust-lang/crates.io-index" 1432 + checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 1433 + dependencies = [ 1434 + "serde_core", 1435 + "serde_derive", 1436 + ] 1437 + 1438 + [[package]] 1439 + name = "serde_core" 1440 + version = "1.0.228" 1441 + source = "registry+https://github.com/rust-lang/crates.io-index" 1442 + checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" 1443 + dependencies = [ 1444 + "serde_derive", 1445 + ] 1446 + 1447 + [[package]] 1448 + name = "serde_derive" 1449 + version = "1.0.228" 1450 + source = "registry+https://github.com/rust-lang/crates.io-index" 1451 + checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 1452 + dependencies = [ 1453 + "proc-macro2", 1454 + "quote", 1455 + "syn 2.0.117", 1456 + ] 1457 + 1458 + [[package]] 1459 + name = "serde_json" 1460 + version = "1.0.149" 1461 + source = "registry+https://github.com/rust-lang/crates.io-index" 1462 + checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" 1463 + dependencies = [ 1464 + "itoa", 1465 + "memchr", 1466 + "serde", 1467 + "serde_core", 1468 + "zmij", 1469 + ] 1470 + 1471 + [[package]] 1472 + name = "serde_spanned" 1473 + version = "1.0.4" 1474 + source = "registry+https://github.com/rust-lang/crates.io-index" 1475 + checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" 1476 + dependencies = [ 1477 + "serde_core", 1478 + ] 1479 + 1480 + [[package]] 1481 + name = "sha2" 1482 + version = "0.10.9" 1483 + source = "registry+https://github.com/rust-lang/crates.io-index" 1484 + checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 1485 + dependencies = [ 1486 + "cfg-if", 1487 + "cpufeatures", 1488 + "digest", 1489 + ] 1490 + 1491 + [[package]] 1492 + name = "sharded-slab" 1493 + version = "0.1.7" 1494 + source = "registry+https://github.com/rust-lang/crates.io-index" 1495 + checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 1496 + dependencies = [ 1497 + "lazy_static", 1498 + ] 1499 + 1500 + [[package]] 1501 + name = "signal-hook" 1502 + version = "0.3.18" 1503 + source = "registry+https://github.com/rust-lang/crates.io-index" 1504 + checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" 1505 + dependencies = [ 1506 + "libc", 1507 + "signal-hook-registry", 1508 + ] 1509 + 1510 + [[package]] 1511 + name = "signal-hook" 1512 + version = "0.4.3" 1513 + source = "registry+https://github.com/rust-lang/crates.io-index" 1514 + checksum = "3b57709da74f9ff9f4a27dce9526eec25ca8407c45a7887243b031a58935fb8e" 1515 + dependencies = [ 1516 + "libc", 1517 + "signal-hook-registry", 1518 + ] 1519 + 1520 + [[package]] 1521 + name = "signal-hook-mio" 1522 + version = "0.2.5" 1523 + source = "registry+https://github.com/rust-lang/crates.io-index" 1524 + checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc" 1525 + dependencies = [ 1526 + "libc", 1527 + "mio", 1528 + "signal-hook 0.3.18", 1529 + ] 1530 + 1531 + [[package]] 1532 + name = "signal-hook-registry" 1533 + version = "1.4.8" 1534 + source = "registry+https://github.com/rust-lang/crates.io-index" 1535 + checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" 1536 + dependencies = [ 1537 + "errno", 1538 + "libc", 1539 + ] 1540 + 1541 + [[package]] 1542 + name = "siphasher" 1543 + version = "1.0.2" 1544 + source = "registry+https://github.com/rust-lang/crates.io-index" 1545 + checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" 1546 + 1547 + [[package]] 1548 + name = "slab" 1549 + version = "0.4.12" 1550 + source = "registry+https://github.com/rust-lang/crates.io-index" 1551 + checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" 1552 + 1553 + [[package]] 1554 + name = "smallvec" 1555 + version = "1.15.1" 1556 + source = "registry+https://github.com/rust-lang/crates.io-index" 1557 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 1558 + 1559 + [[package]] 1560 + name = "socket2" 1561 + version = "0.6.2" 1562 + source = "registry+https://github.com/rust-lang/crates.io-index" 1563 + checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" 1564 + dependencies = [ 1565 + "libc", 1566 + "windows-sys 0.60.2", 1567 + ] 1568 + 1569 + [[package]] 1570 + name = "static_assertions" 1571 + version = "1.1.0" 1572 + source = "registry+https://github.com/rust-lang/crates.io-index" 1573 + checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 1574 + 1575 + [[package]] 1576 + name = "strsim" 1577 + version = "0.11.1" 1578 + source = "registry+https://github.com/rust-lang/crates.io-index" 1579 + checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 1580 + 1581 + [[package]] 1582 + name = "strum" 1583 + version = "0.27.2" 1584 + source = "registry+https://github.com/rust-lang/crates.io-index" 1585 + checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" 1586 + dependencies = [ 1587 + "strum_macros", 1588 + ] 1589 + 1590 + [[package]] 1591 + name = "strum_macros" 1592 + version = "0.27.2" 1593 + source = "registry+https://github.com/rust-lang/crates.io-index" 1594 + checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" 1595 + dependencies = [ 1596 + "heck", 1597 + "proc-macro2", 1598 + "quote", 1599 + "syn 2.0.117", 1600 + ] 1601 + 1602 + [[package]] 1603 + name = "syn" 1604 + version = "1.0.109" 1605 + source = "registry+https://github.com/rust-lang/crates.io-index" 1606 + checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 393 1607 dependencies = [ 394 1608 "proc-macro2", 395 - "syn", 1609 + "quote", 1610 + "unicode-ident", 396 1611 ] 397 1612 398 1613 [[package]] 399 - name = "proc-macro2" 400 - version = "1.0.106" 1614 + name = "syn" 1615 + version = "2.0.117" 401 1616 source = "registry+https://github.com/rust-lang/crates.io-index" 402 - checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" 1617 + checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" 403 1618 dependencies = [ 1619 + "proc-macro2", 1620 + "quote", 404 1621 "unicode-ident", 405 1622 ] 406 1623 407 1624 [[package]] 408 - name = "quote" 409 - version = "1.0.45" 1625 + name = "sysinfo" 1626 + version = "0.37.2" 410 1627 source = "registry+https://github.com/rust-lang/crates.io-index" 411 - checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" 1628 + checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f" 412 1629 dependencies = [ 413 - "proc-macro2", 1630 + "libc", 1631 + "memchr", 1632 + "ntapi", 1633 + "objc2-core-foundation", 1634 + "objc2-io-kit", 1635 + "windows", 414 1636 ] 415 1637 416 1638 [[package]] 417 - name = "r-efi" 418 - version = "6.0.0" 1639 + name = "terminfo" 1640 + version = "0.9.0" 419 1641 source = "registry+https://github.com/rust-lang/crates.io-index" 420 - checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" 1642 + checksum = "d4ea810f0692f9f51b382fff5893887bb4580f5fa246fde546e0b13e7fcee662" 1643 + dependencies = [ 1644 + "fnv", 1645 + "nom", 1646 + "phf", 1647 + "phf_codegen", 1648 + ] 421 1649 422 1650 [[package]] 423 - name = "rustc-demangle" 424 - version = "0.1.27" 1651 + name = "termios" 1652 + version = "0.3.3" 425 1653 source = "registry+https://github.com/rust-lang/crates.io-index" 426 - checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" 1654 + checksum = "411c5bf740737c7918b8b1fe232dca4dc9f8e754b8ad5e20966814001ed0ac6b" 1655 + dependencies = [ 1656 + "libc", 1657 + ] 427 1658 428 1659 [[package]] 429 - name = "semver" 430 - version = "1.0.27" 1660 + name = "termwiz" 1661 + version = "0.23.3" 431 1662 source = "registry+https://github.com/rust-lang/crates.io-index" 432 - checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 1663 + checksum = "4676b37242ccbd1aabf56edb093a4827dc49086c0ffd764a5705899e0f35f8f7" 1664 + dependencies = [ 1665 + "anyhow", 1666 + "base64", 1667 + "bitflags 2.11.0", 1668 + "fancy-regex", 1669 + "filedescriptor", 1670 + "finl_unicode", 1671 + "fixedbitset", 1672 + "hex", 1673 + "lazy_static", 1674 + "libc", 1675 + "log", 1676 + "memmem", 1677 + "nix", 1678 + "num-derive", 1679 + "num-traits", 1680 + "ordered-float", 1681 + "pest", 1682 + "pest_derive", 1683 + "phf", 1684 + "sha2", 1685 + "signal-hook 0.3.18", 1686 + "siphasher", 1687 + "terminfo", 1688 + "termios", 1689 + "thiserror 1.0.69", 1690 + "ucd-trie", 1691 + "unicode-segmentation", 1692 + "vtparse", 1693 + "wezterm-bidi", 1694 + "wezterm-blob-leases", 1695 + "wezterm-color-types", 1696 + "wezterm-dynamic", 1697 + "wezterm-input-types", 1698 + "winapi", 1699 + ] 433 1700 434 1701 [[package]] 435 - name = "serde" 436 - version = "1.0.228" 1702 + name = "thiserror" 1703 + version = "1.0.69" 437 1704 source = "registry+https://github.com/rust-lang/crates.io-index" 438 - checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 1705 + checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 439 1706 dependencies = [ 440 - "serde_core", 1707 + "thiserror-impl 1.0.69", 441 1708 ] 442 1709 443 1710 [[package]] 444 - name = "serde_core" 445 - version = "1.0.228" 1711 + name = "thiserror" 1712 + version = "2.0.18" 446 1713 source = "registry+https://github.com/rust-lang/crates.io-index" 447 - checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" 1714 + checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" 448 1715 dependencies = [ 449 - "serde_derive", 1716 + "thiserror-impl 2.0.18", 450 1717 ] 451 1718 452 1719 [[package]] 453 - name = "serde_derive" 454 - version = "1.0.228" 1720 + name = "thiserror-impl" 1721 + version = "1.0.69" 455 1722 source = "registry+https://github.com/rust-lang/crates.io-index" 456 - checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 1723 + checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 457 1724 dependencies = [ 458 1725 "proc-macro2", 459 1726 "quote", 460 - "syn", 1727 + "syn 2.0.117", 461 1728 ] 462 1729 463 1730 [[package]] 464 - name = "serde_json" 465 - version = "1.0.149" 1731 + name = "thiserror-impl" 1732 + version = "2.0.18" 466 1733 source = "registry+https://github.com/rust-lang/crates.io-index" 467 - checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" 1734 + checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" 468 1735 dependencies = [ 469 - "itoa", 470 - "memchr", 471 - "serde", 472 - "serde_core", 473 - "zmij", 1736 + "proc-macro2", 1737 + "quote", 1738 + "syn 2.0.117", 474 1739 ] 475 1740 476 1741 [[package]] 477 - name = "serde_spanned" 478 - version = "1.0.4" 1742 + name = "thread_local" 1743 + version = "1.1.9" 479 1744 source = "registry+https://github.com/rust-lang/crates.io-index" 480 - checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" 1745 + checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" 481 1746 dependencies = [ 482 - "serde_core", 1747 + "cfg-if", 483 1748 ] 484 1749 485 1750 [[package]] 486 - name = "sharded-slab" 487 - version = "0.1.7" 1751 + name = "time" 1752 + version = "0.3.47" 488 1753 source = "registry+https://github.com/rust-lang/crates.io-index" 489 - checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 1754 + checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" 490 1755 dependencies = [ 491 - "lazy_static", 1756 + "deranged", 1757 + "libc", 1758 + "num-conv", 1759 + "num_threads", 1760 + "powerfmt", 1761 + "serde_core", 1762 + "time-core", 492 1763 ] 493 1764 494 1765 [[package]] 495 - name = "syn" 496 - version = "2.0.117" 1766 + name = "time-core" 1767 + version = "0.1.8" 497 1768 source = "registry+https://github.com/rust-lang/crates.io-index" 498 - checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" 1769 + checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" 1770 + 1771 + [[package]] 1772 + name = "tokio" 1773 + version = "1.50.0" 1774 + source = "registry+https://github.com/rust-lang/crates.io-index" 1775 + checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" 499 1776 dependencies = [ 500 - "proc-macro2", 501 - "quote", 502 - "unicode-ident", 1777 + "bytes", 1778 + "libc", 1779 + "mio", 1780 + "parking_lot", 1781 + "pin-project-lite", 1782 + "signal-hook-registry", 1783 + "socket2", 1784 + "tokio-macros", 1785 + "windows-sys 0.61.2", 503 1786 ] 504 1787 505 1788 [[package]] 506 - name = "sysinfo" 507 - version = "0.37.2" 1789 + name = "tokio-macros" 1790 + version = "2.6.0" 508 1791 source = "registry+https://github.com/rust-lang/crates.io-index" 509 - checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f" 1792 + checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" 510 1793 dependencies = [ 511 - "libc", 512 - "memchr", 513 - "ntapi", 514 - "objc2-core-foundation", 515 - "objc2-io-kit", 516 - "windows", 1794 + "proc-macro2", 1795 + "quote", 1796 + "syn 2.0.117", 517 1797 ] 518 1798 519 1799 [[package]] 520 - name = "thread_local" 521 - version = "1.1.9" 1800 + name = "tokio-util" 1801 + version = "0.7.18" 522 1802 source = "registry+https://github.com/rust-lang/crates.io-index" 523 - checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" 1803 + checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" 524 1804 dependencies = [ 525 - "cfg-if", 1805 + "bytes", 1806 + "futures-core", 1807 + "futures-sink", 1808 + "pin-project-lite", 1809 + "tokio", 526 1810 ] 527 1811 528 1812 [[package]] ··· 571 1855 dependencies = [ 572 1856 "proc-macro2", 573 1857 "quote", 574 - "syn", 1858 + "syn 2.0.117", 575 1859 ] 576 1860 577 1861 [[package]] ··· 605 1889 "tracing-core", 606 1890 ] 607 1891 1892 + [[package]] 1893 + name = "typenum" 1894 + version = "1.19.0" 1895 + source = "registry+https://github.com/rust-lang/crates.io-index" 1896 + checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" 1897 + 1898 + [[package]] 1899 + name = "ucd-trie" 1900 + version = "0.1.7" 1901 + source = "registry+https://github.com/rust-lang/crates.io-index" 1902 + checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" 1903 + 608 1904 [[package]] 609 1905 name = "unicode-ident" 610 1906 version = "1.0.24" 611 1907 source = "registry+https://github.com/rust-lang/crates.io-index" 612 1908 checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" 613 1909 1910 + [[package]] 1911 + name = "unicode-segmentation" 1912 + version = "1.12.0" 1913 + source = "registry+https://github.com/rust-lang/crates.io-index" 1914 + checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 1915 + 1916 + [[package]] 1917 + name = "unicode-truncate" 1918 + version = "2.0.1" 1919 + source = "registry+https://github.com/rust-lang/crates.io-index" 1920 + checksum = "16b380a1238663e5f8a691f9039c73e1cdae598a30e9855f541d29b08b53e9a5" 1921 + dependencies = [ 1922 + "itertools", 1923 + "unicode-segmentation", 1924 + "unicode-width", 1925 + ] 1926 + 1927 + [[package]] 1928 + name = "unicode-width" 1929 + version = "0.2.2" 1930 + source = "registry+https://github.com/rust-lang/crates.io-index" 1931 + checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" 1932 + 614 1933 [[package]] 615 1934 name = "unicode-xid" 616 1935 version = "0.2.6" ··· 629 1948 source = "registry+https://github.com/rust-lang/crates.io-index" 630 1949 checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" 631 1950 dependencies = [ 632 - "getrandom", 1951 + "atomic", 1952 + "getrandom 0.4.2", 1953 + "js-sys", 1954 + "wasm-bindgen", 633 1955 ] 634 1956 635 1957 [[package]] ··· 638 1960 source = "registry+https://github.com/rust-lang/crates.io-index" 639 1961 checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 640 1962 1963 + [[package]] 1964 + name = "version_check" 1965 + version = "0.9.5" 1966 + source = "registry+https://github.com/rust-lang/crates.io-index" 1967 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 1968 + 1969 + [[package]] 1970 + name = "vtparse" 1971 + version = "0.6.2" 1972 + source = "registry+https://github.com/rust-lang/crates.io-index" 1973 + checksum = "6d9b2acfb050df409c972a37d3b8e08cdea3bddb0c09db9d53137e504cfabed0" 1974 + dependencies = [ 1975 + "utf8parse", 1976 + ] 1977 + 1978 + [[package]] 1979 + name = "wasi" 1980 + version = "0.11.1+wasi-snapshot-preview1" 1981 + source = "registry+https://github.com/rust-lang/crates.io-index" 1982 + checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 1983 + 641 1984 [[package]] 642 1985 name = "wasip2" 643 1986 version = "1.0.2+wasi-0.2.9" ··· 656 1999 "wit-bindgen", 657 2000 ] 658 2001 2002 + [[package]] 2003 + name = "wasm-bindgen" 2004 + version = "0.2.114" 2005 + source = "registry+https://github.com/rust-lang/crates.io-index" 2006 + checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" 2007 + dependencies = [ 2008 + "cfg-if", 2009 + "once_cell", 2010 + "rustversion", 2011 + "wasm-bindgen-macro", 2012 + "wasm-bindgen-shared", 2013 + ] 2014 + 2015 + [[package]] 2016 + name = "wasm-bindgen-macro" 2017 + version = "0.2.114" 2018 + source = "registry+https://github.com/rust-lang/crates.io-index" 2019 + checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" 2020 + dependencies = [ 2021 + "quote", 2022 + "wasm-bindgen-macro-support", 2023 + ] 2024 + 2025 + [[package]] 2026 + name = "wasm-bindgen-macro-support" 2027 + version = "0.2.114" 2028 + source = "registry+https://github.com/rust-lang/crates.io-index" 2029 + checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" 2030 + dependencies = [ 2031 + "bumpalo", 2032 + "proc-macro2", 2033 + "quote", 2034 + "syn 2.0.117", 2035 + "wasm-bindgen-shared", 2036 + ] 2037 + 2038 + [[package]] 2039 + name = "wasm-bindgen-shared" 2040 + version = "0.2.114" 2041 + source = "registry+https://github.com/rust-lang/crates.io-index" 2042 + checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" 2043 + dependencies = [ 2044 + "unicode-ident", 2045 + ] 2046 + 659 2047 [[package]] 660 2048 name = "wasm-encoder" 661 2049 version = "0.244.0" ··· 684 2072 source = "registry+https://github.com/rust-lang/crates.io-index" 685 2073 checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" 686 2074 dependencies = [ 687 - "bitflags", 2075 + "bitflags 2.11.0", 688 2076 "hashbrown 0.15.5", 689 2077 "indexmap", 690 2078 "semver", 691 2079 ] 692 2080 2081 + [[package]] 2082 + name = "wezterm-bidi" 2083 + version = "0.2.3" 2084 + source = "registry+https://github.com/rust-lang/crates.io-index" 2085 + checksum = "0c0a6e355560527dd2d1cf7890652f4f09bb3433b6aadade4c9b5ed76de5f3ec" 2086 + dependencies = [ 2087 + "log", 2088 + "wezterm-dynamic", 2089 + ] 2090 + 2091 + [[package]] 2092 + name = "wezterm-blob-leases" 2093 + version = "0.1.1" 2094 + source = "registry+https://github.com/rust-lang/crates.io-index" 2095 + checksum = "692daff6d93d94e29e4114544ef6d5c942a7ed998b37abdc19b17136ea428eb7" 2096 + dependencies = [ 2097 + "getrandom 0.3.4", 2098 + "mac_address", 2099 + "sha2", 2100 + "thiserror 1.0.69", 2101 + "uuid", 2102 + ] 2103 + 2104 + [[package]] 2105 + name = "wezterm-color-types" 2106 + version = "0.3.0" 2107 + source = "registry+https://github.com/rust-lang/crates.io-index" 2108 + checksum = "7de81ef35c9010270d63772bebef2f2d6d1f2d20a983d27505ac850b8c4b4296" 2109 + dependencies = [ 2110 + "csscolorparser", 2111 + "deltae", 2112 + "lazy_static", 2113 + "wezterm-dynamic", 2114 + ] 2115 + 2116 + [[package]] 2117 + name = "wezterm-dynamic" 2118 + version = "0.2.1" 2119 + source = "registry+https://github.com/rust-lang/crates.io-index" 2120 + checksum = "5f2ab60e120fd6eaa68d9567f3226e876684639d22a4219b313ff69ec0ccd5ac" 2121 + dependencies = [ 2122 + "log", 2123 + "ordered-float", 2124 + "strsim", 2125 + "thiserror 1.0.69", 2126 + "wezterm-dynamic-derive", 2127 + ] 2128 + 2129 + [[package]] 2130 + name = "wezterm-dynamic-derive" 2131 + version = "0.1.1" 2132 + source = "registry+https://github.com/rust-lang/crates.io-index" 2133 + checksum = "46c0cf2d539c645b448eaffec9ec494b8b19bd5077d9e58cb1ae7efece8d575b" 2134 + dependencies = [ 2135 + "proc-macro2", 2136 + "quote", 2137 + "syn 1.0.109", 2138 + ] 2139 + 2140 + [[package]] 2141 + name = "wezterm-input-types" 2142 + version = "0.1.0" 2143 + source = "registry+https://github.com/rust-lang/crates.io-index" 2144 + checksum = "7012add459f951456ec9d6c7e6fc340b1ce15d6fc9629f8c42853412c029e57e" 2145 + dependencies = [ 2146 + "bitflags 1.3.2", 2147 + "euclid", 2148 + "lazy_static", 2149 + "serde", 2150 + "wezterm-dynamic", 2151 + ] 2152 + 693 2153 [[package]] 694 2154 name = "winapi" 695 2155 version = "0.3.9" ··· 766 2226 dependencies = [ 767 2227 "proc-macro2", 768 2228 "quote", 769 - "syn", 2229 + "syn 2.0.117", 770 2230 ] 771 2231 772 2232 [[package]] ··· 777 2237 dependencies = [ 778 2238 "proc-macro2", 779 2239 "quote", 780 - "syn", 2240 + "syn 2.0.117", 781 2241 ] 782 2242 783 2243 [[package]] ··· 826 2286 source = "registry+https://github.com/rust-lang/crates.io-index" 827 2287 checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 828 2288 dependencies = [ 829 - "windows-targets", 2289 + "windows-targets 0.52.6", 2290 + ] 2291 + 2292 + [[package]] 2293 + name = "windows-sys" 2294 + version = "0.60.2" 2295 + source = "registry+https://github.com/rust-lang/crates.io-index" 2296 + checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 2297 + dependencies = [ 2298 + "windows-targets 0.53.5", 830 2299 ] 831 2300 832 2301 [[package]] ··· 844 2313 source = "registry+https://github.com/rust-lang/crates.io-index" 845 2314 checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 846 2315 dependencies = [ 847 - "windows_aarch64_gnullvm", 848 - "windows_aarch64_msvc", 849 - "windows_i686_gnu", 850 - "windows_i686_gnullvm", 851 - "windows_i686_msvc", 852 - "windows_x86_64_gnu", 853 - "windows_x86_64_gnullvm", 854 - "windows_x86_64_msvc", 2316 + "windows_aarch64_gnullvm 0.52.6", 2317 + "windows_aarch64_msvc 0.52.6", 2318 + "windows_i686_gnu 0.52.6", 2319 + "windows_i686_gnullvm 0.52.6", 2320 + "windows_i686_msvc 0.52.6", 2321 + "windows_x86_64_gnu 0.52.6", 2322 + "windows_x86_64_gnullvm 0.52.6", 2323 + "windows_x86_64_msvc 0.52.6", 2324 + ] 2325 + 2326 + [[package]] 2327 + name = "windows-targets" 2328 + version = "0.53.5" 2329 + source = "registry+https://github.com/rust-lang/crates.io-index" 2330 + checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" 2331 + dependencies = [ 2332 + "windows-link 0.2.1", 2333 + "windows_aarch64_gnullvm 0.53.1", 2334 + "windows_aarch64_msvc 0.53.1", 2335 + "windows_i686_gnu 0.53.1", 2336 + "windows_i686_gnullvm 0.53.1", 2337 + "windows_i686_msvc 0.53.1", 2338 + "windows_x86_64_gnu 0.53.1", 2339 + "windows_x86_64_gnullvm 0.53.1", 2340 + "windows_x86_64_msvc 0.53.1", 855 2341 ] 856 2342 857 2343 [[package]] ··· 869 2355 source = "registry+https://github.com/rust-lang/crates.io-index" 870 2356 checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 871 2357 2358 + [[package]] 2359 + name = "windows_aarch64_gnullvm" 2360 + version = "0.53.1" 2361 + source = "registry+https://github.com/rust-lang/crates.io-index" 2362 + checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" 2363 + 872 2364 [[package]] 873 2365 name = "windows_aarch64_msvc" 874 2366 version = "0.52.6" 875 2367 source = "registry+https://github.com/rust-lang/crates.io-index" 876 2368 checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 877 2369 2370 + [[package]] 2371 + name = "windows_aarch64_msvc" 2372 + version = "0.53.1" 2373 + source = "registry+https://github.com/rust-lang/crates.io-index" 2374 + checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" 2375 + 878 2376 [[package]] 879 2377 name = "windows_i686_gnu" 880 2378 version = "0.52.6" 881 2379 source = "registry+https://github.com/rust-lang/crates.io-index" 882 2380 checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 883 2381 2382 + [[package]] 2383 + name = "windows_i686_gnu" 2384 + version = "0.53.1" 2385 + source = "registry+https://github.com/rust-lang/crates.io-index" 2386 + checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" 2387 + 884 2388 [[package]] 885 2389 name = "windows_i686_gnullvm" 886 2390 version = "0.52.6" 887 2391 source = "registry+https://github.com/rust-lang/crates.io-index" 888 2392 checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 889 2393 2394 + [[package]] 2395 + name = "windows_i686_gnullvm" 2396 + version = "0.53.1" 2397 + source = "registry+https://github.com/rust-lang/crates.io-index" 2398 + checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" 2399 + 890 2400 [[package]] 891 2401 name = "windows_i686_msvc" 892 2402 version = "0.52.6" 893 2403 source = "registry+https://github.com/rust-lang/crates.io-index" 894 2404 checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 895 2405 2406 + [[package]] 2407 + name = "windows_i686_msvc" 2408 + version = "0.53.1" 2409 + source = "registry+https://github.com/rust-lang/crates.io-index" 2410 + checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" 2411 + 896 2412 [[package]] 897 2413 name = "windows_x86_64_gnu" 898 2414 version = "0.52.6" 899 2415 source = "registry+https://github.com/rust-lang/crates.io-index" 900 2416 checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 901 2417 2418 + [[package]] 2419 + name = "windows_x86_64_gnu" 2420 + version = "0.53.1" 2421 + source = "registry+https://github.com/rust-lang/crates.io-index" 2422 + checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" 2423 + 902 2424 [[package]] 903 2425 name = "windows_x86_64_gnullvm" 904 2426 version = "0.52.6" 905 2427 source = "registry+https://github.com/rust-lang/crates.io-index" 906 2428 checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 907 2429 2430 + [[package]] 2431 + name = "windows_x86_64_gnullvm" 2432 + version = "0.53.1" 2433 + source = "registry+https://github.com/rust-lang/crates.io-index" 2434 + checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" 2435 + 908 2436 [[package]] 909 2437 name = "windows_x86_64_msvc" 910 2438 version = "0.52.6" 911 2439 source = "registry+https://github.com/rust-lang/crates.io-index" 912 2440 checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 913 2441 2442 + [[package]] 2443 + name = "windows_x86_64_msvc" 2444 + version = "0.53.1" 2445 + source = "registry+https://github.com/rust-lang/crates.io-index" 2446 + checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" 2447 + 914 2448 [[package]] 915 2449 name = "wit-bindgen" 916 2450 version = "0.51.0" ··· 941 2475 "heck", 942 2476 "indexmap", 943 2477 "prettyplease", 944 - "syn", 2478 + "syn 2.0.117", 945 2479 "wasm-metadata", 946 2480 "wit-bindgen-core", 947 2481 "wit-component", ··· 957 2491 "prettyplease", 958 2492 "proc-macro2", 959 2493 "quote", 960 - "syn", 2494 + "syn 2.0.117", 961 2495 "wit-bindgen-core", 962 2496 "wit-bindgen-rust", 963 2497 ] ··· 969 2503 checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" 970 2504 dependencies = [ 971 2505 "anyhow", 972 - "bitflags", 2506 + "bitflags 2.11.0", 973 2507 "indexmap", 974 2508 "log", 975 2509 "serde",
+8 -1
Cargo.toml
··· 44 44 workspace = true 45 45 46 46 [dependencies] 47 - tracing = {workspace = true} 47 + tracing.workspace = true 48 48 color-eyre = "0.6.5" 49 49 human-panic = "2.0.6" 50 50 better-panic = "0.3.0" 51 + crossterm = { version = "0.29.0", features = ["event-stream"] } 52 + futures = "0.3.32" 53 + ratatui = "0.30.0" 54 + serde = "1.0.228" 55 + tokio = { version = "1.50.0", features = ["full"] } 56 + tokio-util = "0.7.18" 57 + signal-hook = "0.4.3"
+1
src/main.rs
··· 3 3 //! 4 4 5 5 mod errors; 6 + mod tui; 6 7 7 8 fn main() -> color_eyre::Result<()> { 8 9 errors::init()?;
+275
src/tui.rs
··· 1 + use std::{ 2 + io::{Stdout, stdout}, 3 + ops::{Deref, DerefMut}, 4 + time::Duration, 5 + }; 6 + 7 + use color_eyre::eyre::Result; 8 + use crossterm::{ 9 + cursor, 10 + event::{ 11 + DisableBracketedPaste, DisableMouseCapture, EnableBracketedPaste, EnableMouseCapture, 12 + EventStream, KeyEvent, KeyEventKind, MouseEvent, 13 + }, 14 + terminal::{EnterAlternateScreen, LeaveAlternateScreen, enable_raw_mode}, 15 + }; 16 + use ratatui::{Terminal, prelude::CrosstermBackend}; 17 + use tokio::{ 18 + sync::mpsc::{self, UnboundedReceiver, UnboundedSender}, 19 + task::JoinHandle, 20 + time::interval, 21 + }; 22 + use tokio_util::sync::CancellationToken; 23 + use tracing::error; 24 + 25 + /// Events processed by the whole application. 26 + pub enum Event { 27 + /// Application initialized 28 + Init, 29 + 30 + /// Application quit 31 + Quit, 32 + 33 + /// Application error 34 + Error, 35 + 36 + /// Application closed 37 + Closed, 38 + 39 + /// Tick = input refresh rate 40 + Tick, 41 + 42 + /// Render application 43 + Render, 44 + 45 + /// User enters application 46 + FocusGained, 47 + 48 + /// User leaves application 49 + FocusLost, 50 + 51 + /// Paste buffer 52 + Paste(String), 53 + 54 + /// any key event 55 + Key(KeyEvent), 56 + 57 + /// any mouse event 58 + Mouse(MouseEvent), 59 + 60 + /// Application resize 61 + Resize(u16, u16), 62 + } 63 + 64 + /// A TUI which supports the general things you would want out of a TUI abstraction. 65 + pub struct Tui { 66 + pub terminal: Terminal<CrosstermBackend<Stdout>>, 67 + pub task: JoinHandle<()>, 68 + pub cancellation_token: CancellationToken, 69 + pub event_rx: UnboundedReceiver<Event>, 70 + pub event_tx: UnboundedSender<Event>, 71 + pub frame_rate: f64, 72 + pub tick_rate: f64, 73 + pub mouse_enabled: bool, 74 + pub paste_enabled: bool, 75 + } 76 + 77 + impl Tui { 78 + /// Creates a new TUI. 79 + pub fn new() -> Result<Self> { 80 + let (event_tx, event_rx) = mpsc::unbounded_channel(); 81 + Ok(Self { 82 + terminal: Terminal::new(CrosstermBackend::new(stdout()))?, 83 + task: tokio::spawn(async {}), 84 + cancellation_token: CancellationToken::new(), 85 + event_rx, 86 + event_tx, 87 + frame_rate: 60.0, 88 + tick_rate: 4.0, 89 + mouse_enabled: false, 90 + paste_enabled: false, 91 + }) 92 + } 93 + 94 + /// Set the tick rate, which is how often the TUI should 95 + /// source events per second. 96 + pub const fn with_tick_rate(mut self, tick_rate: f64) -> Self { 97 + self.tick_rate = tick_rate; 98 + self 99 + } 100 + 101 + /// Set the frame rate. 102 + pub const fn with_frame_rate(mut self, frame_rate: f64) -> Self { 103 + self.frame_rate = frame_rate; 104 + self 105 + } 106 + 107 + /// Enable mouse interactions. 108 + pub const fn set_mouse_enable(mut self, mouse_enabled: bool) -> Self { 109 + self.mouse_enabled = mouse_enabled; 110 + self 111 + } 112 + 113 + /// Enable pasting into the TUI. 114 + pub const fn set_paste_enabled(mut self, paste_enabled: bool) -> Self { 115 + self.paste_enabled = paste_enabled; 116 + self 117 + } 118 + 119 + /// Begin the TUI event loop 120 + pub fn start(&mut self) { 121 + self.cancel(); 122 + 123 + self.cancellation_token = CancellationToken::new(); 124 + let event_loop = Self::event_loop( 125 + self.event_tx.clone(), 126 + self.cancellation_token.clone(), 127 + self.tick_rate, 128 + self.frame_rate, 129 + ); 130 + self.task = tokio::spawn(async { 131 + event_loop.await; 132 + }); 133 + } 134 + 135 + /// The event-loop for the TUI which sources events from crossterm. 136 + async fn event_loop( 137 + event_tx: UnboundedSender<Event>, 138 + cancellation_token: CancellationToken, 139 + tick_rate: f64, 140 + frame_rate: f64, 141 + ) { 142 + use crossterm::event::Event as CrosstermEvent; 143 + 144 + let mut event_stream = EventStream::new(); 145 + let mut tick_interval = interval(Duration::from_secs_f64(1.0 / tick_rate)); 146 + let mut render_interval = interval(Duration::from_secs_f64(1.0 / frame_rate)); 147 + 148 + event_tx 149 + .send(Event::Init) 150 + .expect("Tui::event_loop: Failed to send init event."); 151 + loop { 152 + let event = tokio::select! { 153 + _ = cancellation_token.cancelled() => { 154 + break; 155 + } 156 + _ = tick_interval.tick() => Event::Tick, 157 + _ = render_interval.tick() => Event::Render, 158 + crossterm_event = event_stream.next().fuse() => match crossterm_event { 159 + Some(Ok(event)) => match event { 160 + // we only care about press down events, 161 + // not doing anything related to up / down keypresses 162 + CrosstermEvent::Key(key) if key.kind == KeyEventKind::Press => Event::Key(key), 163 + CrosstermEvent::Mouse(mouse) => Event::Mouse(mouse), 164 + CrosstermEvent::Resize(x, y) => Event::Resize(x, y), 165 + CrosstermEvent::FocusLost => {Event::FocusLost }, 166 + CrosstermEvent::FocusGained => {Event::FocusGained }, 167 + CrosstermEvent::Paste(s)=> {Event::Paste(s)}, 168 + _ => continue, 169 + 170 + } 171 + Some(Err(_)) => Event::Error, 172 + None => break, 173 + } 174 + }; 175 + if event_tx.send(event).is_err() { 176 + // no more receiver 177 + break; 178 + } 179 + } 180 + 181 + cancellation_token.cancel(); 182 + } 183 + 184 + /// Stops the TUI by canceling the event-loop. 185 + pub fn stop(&self) { 186 + self.cancel(); 187 + let mut counter = 0; 188 + while !self.task.is_finished() { 189 + std::thread::sleep(Duration::from_millis(1)); 190 + counter += 1; 191 + if counter > 50 { 192 + self.task.abort(); 193 + } 194 + if counter > 100 { 195 + error!("Failed to abort task in 100 milliseconds for some reason"); 196 + break; 197 + } 198 + } 199 + } 200 + 201 + // Enters into the TUI by enabling alternate screen and starting event-loop. 202 + pub fn enter(&mut self) -> Result<()> { 203 + enable_raw_mode()?; 204 + crossterm::execute!(stdout(), EnterAlternateScreen, cursor::Hide)?; 205 + if self.mouse_enabled { 206 + crossterm::execute!(stdout(), EnableMouseCapture)?; 207 + } 208 + if self.paste_enabled { 209 + crossterm::execute!(stdout(), EnableBracketedPaste)?; 210 + } 211 + self.start(); 212 + Ok(()) 213 + } 214 + 215 + /// Exits the tui, by leaving alternate screen. 216 + pub fn exit(&mut self) -> color_eyre::Result<()> { 217 + self.stop(); 218 + if crossterm::terminal::is_raw_mode_enabled()? { 219 + self.flush()?; 220 + if self.paste_enabled { 221 + crossterm::execute!(stdout(), DisableBracketedPaste)?; 222 + } 223 + if self.mouse_enabled { 224 + crossterm::execute!(stdout(), DisableMouseCapture)?; 225 + } 226 + crossterm::execute!(stdout(), LeaveAlternateScreen, cursor::Show)?; 227 + crossterm::terminal::disable_raw_mode()?; 228 + } 229 + Ok(()) 230 + } 231 + 232 + /// Cancel the internal event-loop. 233 + pub fn cancel(&self) { 234 + self.cancellation_token.cancel(); 235 + } 236 + 237 + /// Suspend the TUI. 238 + pub fn suspend(&mut self) -> color_eyre::Result<()> { 239 + self.exit()?; 240 + #[cfg(not(windows))] 241 + signal_hook::low_level::raise(signal_hook::consts::signal::SIGTSTP)?; 242 + Ok(()) 243 + } 244 + 245 + /// Resume the TUI. 246 + pub fn resume(&mut self) -> color_eyre::Result<()> { 247 + self.enter()?; 248 + Ok(()) 249 + } 250 + 251 + /// Get the next event. 252 + pub async fn next_event(&mut self) -> Option<Event> { 253 + self.event_rx.recv().await 254 + } 255 + } 256 + 257 + impl Deref for Tui { 258 + type Target = ratatui::Terminal<CrosstermBackend<Stdout>>; 259 + 260 + fn deref(&self) -> &Self::Target { 261 + &self.terminal 262 + } 263 + } 264 + 265 + impl DerefMut for Tui { 266 + fn deref_mut(&mut self) -> &mut Self::Target { 267 + &mut self.terminal 268 + } 269 + } 270 + 271 + impl Drop for Tui { 272 + fn drop(&mut self) { 273 + self.exit().unwrap(); 274 + } 275 + }

History

1 round 0 comments
sign up or login to add to the discussion
suri.codes submitted #0
1 commit
expand
feat/tui: create TUI abstraction
expand 0 comments
closed without merging