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

tui scaffolding #11

merged 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/3mgl5qimefq22
+4983 -12
Diff #0
+50
.config/config.kdl
··· 1 + scroll_offset 4 2 + 3 + keybindings { 4 + Explorer { 5 + "<q>" Quit // Quit the application 6 + "<Ctrl-d>" Quit // Another way to quit 7 + "<Ctrl-c>" Quit // Yet another way to quit 8 + "<Ctrl-z>" Suspend // Suspend the application 9 + "<2>" switch-to="TodoList" 10 + "<3>" switch-to="Inspector" 11 + f ToggleShowFinished 12 + x Delete 13 + t NewTask 14 + g NewSubGroup 15 + "<Shift-g>" NewGroup 16 + j MoveDown 17 + k MoveUp 18 + l MoveInto 19 + h MoveOutOf 20 + } 21 + 22 + TodoList { 23 + "<q>" Quit // Quit the application 24 + "<Ctrl-d>" Quit // Another way to quit 25 + "<Ctrl-c>" Quit // Yet another way to quit 26 + "<Ctrl-z>" Suspend // Suspend the application 27 + "<1>" switch-to="Explorer" 28 + "<3>" switch-to="Inspector" 29 + j MoveDown 30 + k MoveUp 31 + } 32 + 33 + Inspector { 34 + "<q>" Quit // Quit the application 35 + "<Ctrl-d>" Quit // Another way to quit 36 + "<Ctrl-c>" Quit // Yet another way to quit 37 + "<Ctrl-z>" Suspend // Suspend the application 38 + "<1>" switch-to="Explorer" 39 + "<2>" switch-to="TodoList" 40 + r RandomColor 41 + n EditName 42 + c EditColor 43 + p EditPriority 44 + u EditDue 45 + d EditDescription 46 + f ToggleFinishTask 47 + t NewTask 48 + g NewSubGroup 49 + } 50 + }
+6
.harper-dictionary.txt
··· 1 + Implementers 1 2 Multi-Device 3 + OS 2 4 PKM 5 + clippy 6 + dir 7 + env 8 + eyre
+3987
Cargo.lock
··· 1 + # This file is automatically @generated by Cargo. 2 + # It is not intended for manual editing. 3 + version = 4 4 + 5 + [[package]] 6 + name = "addr2line" 7 + version = "0.25.1" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" 10 + dependencies = [ 11 + "gimli", 12 + ] 13 + 14 + [[package]] 15 + name = "adler2" 16 + version = "2.0.1" 17 + source = "registry+https://github.com/rust-lang/crates.io-index" 18 + checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" 19 + 20 + [[package]] 21 + name = "aho-corasick" 22 + version = "1.1.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 + 35 + [[package]] 36 + name = "anstream" 37 + version = "0.6.21" 38 + source = "registry+https://github.com/rust-lang/crates.io-index" 39 + checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" 40 + dependencies = [ 41 + "anstyle", 42 + "anstyle-parse", 43 + "anstyle-query", 44 + "anstyle-wincon", 45 + "colorchoice", 46 + "is_terminal_polyfill", 47 + "utf8parse", 48 + ] 49 + 50 + [[package]] 51 + name = "anstyle" 52 + version = "1.0.13" 53 + source = "registry+https://github.com/rust-lang/crates.io-index" 54 + checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" 55 + 56 + [[package]] 57 + name = "anstyle-parse" 58 + version = "0.2.7" 59 + source = "registry+https://github.com/rust-lang/crates.io-index" 60 + checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" 61 + dependencies = [ 62 + "utf8parse", 63 + ] 64 + 65 + [[package]] 66 + name = "anstyle-query" 67 + version = "1.1.5" 68 + source = "registry+https://github.com/rust-lang/crates.io-index" 69 + checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" 70 + dependencies = [ 71 + "windows-sys 0.61.2", 72 + ] 73 + 74 + [[package]] 75 + name = "anstyle-wincon" 76 + version = "3.0.11" 77 + source = "registry+https://github.com/rust-lang/crates.io-index" 78 + checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" 79 + dependencies = [ 80 + "anstyle", 81 + "once_cell_polyfill", 82 + "windows-sys 0.61.2", 83 + ] 84 + 85 + [[package]] 86 + name = "anyhow" 87 + version = "1.0.102" 88 + source = "registry+https://github.com/rust-lang/crates.io-index" 89 + checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" 90 + 91 + [[package]] 92 + name = "arc-swap" 93 + version = "1.8.2" 94 + source = "registry+https://github.com/rust-lang/crates.io-index" 95 + checksum = "f9f3647c145568cec02c42054e07bdf9a5a698e15b466fb2341bfc393cd24aa5" 96 + dependencies = [ 97 + "rustversion", 98 + ] 99 + 100 + [[package]] 101 + name = "atomic" 102 + version = "0.6.1" 103 + source = "registry+https://github.com/rust-lang/crates.io-index" 104 + checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340" 105 + dependencies = [ 106 + "bytemuck", 107 + ] 108 + 109 + [[package]] 110 + name = "autocfg" 111 + version = "1.5.0" 112 + source = "registry+https://github.com/rust-lang/crates.io-index" 113 + checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 114 + 115 + [[package]] 116 + name = "backtrace" 117 + version = "0.3.76" 118 + source = "registry+https://github.com/rust-lang/crates.io-index" 119 + checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" 120 + dependencies = [ 121 + "addr2line", 122 + "cfg-if", 123 + "libc", 124 + "miniz_oxide", 125 + "object", 126 + "rustc-demangle", 127 + "windows-link 0.2.1", 128 + ] 129 + 130 + [[package]] 131 + name = "base64" 132 + version = "0.22.1" 133 + source = "registry+https://github.com/rust-lang/crates.io-index" 134 + checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 135 + 136 + [[package]] 137 + name = "better-panic" 138 + version = "0.3.0" 139 + source = "registry+https://github.com/rust-lang/crates.io-index" 140 + checksum = "6fa9e1d11a268684cbd90ed36370d7577afb6c62d912ddff5c15fc34343e5036" 141 + dependencies = [ 142 + "backtrace", 143 + "console", 144 + ] 145 + 146 + [[package]] 147 + name = "bit-set" 148 + version = "0.5.3" 149 + source = "registry+https://github.com/rust-lang/crates.io-index" 150 + checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" 151 + dependencies = [ 152 + "bit-vec", 153 + ] 154 + 155 + [[package]] 156 + name = "bit-vec" 157 + version = "0.6.3" 158 + source = "registry+https://github.com/rust-lang/crates.io-index" 159 + checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" 160 + 161 + [[package]] 162 + name = "bitflags" 163 + version = "1.3.2" 164 + source = "registry+https://github.com/rust-lang/crates.io-index" 165 + checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 166 + 167 + [[package]] 168 + name = "bitflags" 169 + version = "2.11.0" 170 + source = "registry+https://github.com/rust-lang/crates.io-index" 171 + checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" 172 + 173 + [[package]] 174 + name = "block-buffer" 175 + version = "0.10.4" 176 + source = "registry+https://github.com/rust-lang/crates.io-index" 177 + checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 178 + dependencies = [ 179 + "generic-array", 180 + ] 181 + 182 + [[package]] 183 + name = "bstr" 184 + version = "1.12.1" 185 + source = "registry+https://github.com/rust-lang/crates.io-index" 186 + checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" 187 + dependencies = [ 188 + "memchr", 189 + "regex-automata", 190 + "serde", 191 + ] 192 + 193 + [[package]] 194 + name = "bumpalo" 195 + version = "3.20.2" 196 + source = "registry+https://github.com/rust-lang/crates.io-index" 197 + checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" 198 + 199 + [[package]] 200 + name = "bytemuck" 201 + version = "1.25.0" 202 + source = "registry+https://github.com/rust-lang/crates.io-index" 203 + checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" 204 + 205 + [[package]] 206 + name = "byteorder" 207 + version = "1.5.0" 208 + source = "registry+https://github.com/rust-lang/crates.io-index" 209 + checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 210 + 211 + [[package]] 212 + name = "bytes" 213 + version = "1.11.1" 214 + source = "registry+https://github.com/rust-lang/crates.io-index" 215 + checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" 216 + 217 + [[package]] 218 + name = "camino" 219 + version = "1.2.2" 220 + source = "registry+https://github.com/rust-lang/crates.io-index" 221 + checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" 222 + dependencies = [ 223 + "serde_core", 224 + ] 225 + 226 + [[package]] 227 + name = "cargo-platform" 228 + version = "0.3.2" 229 + source = "registry+https://github.com/rust-lang/crates.io-index" 230 + checksum = "87a0c0e6148f11f01f32650a2ea02d532b2ad4e81d8bd41e6e565b5adc5e6082" 231 + dependencies = [ 232 + "serde", 233 + "serde_core", 234 + ] 235 + 236 + [[package]] 237 + name = "cargo_metadata" 238 + version = "0.23.1" 239 + source = "registry+https://github.com/rust-lang/crates.io-index" 240 + checksum = "ef987d17b0a113becdd19d3d0022d04d7ef41f9efe4f3fb63ac44ba61df3ade9" 241 + dependencies = [ 242 + "camino", 243 + "cargo-platform", 244 + "semver", 245 + "serde", 246 + "serde_json", 247 + "thiserror 2.0.18", 248 + ] 249 + 250 + [[package]] 251 + name = "castaway" 252 + version = "0.2.4" 253 + source = "registry+https://github.com/rust-lang/crates.io-index" 254 + checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" 255 + dependencies = [ 256 + "rustversion", 257 + ] 258 + 259 + [[package]] 260 + name = "cfg-if" 261 + version = "1.0.4" 262 + source = "registry+https://github.com/rust-lang/crates.io-index" 263 + checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" 264 + 265 + [[package]] 266 + name = "cfg_aliases" 267 + version = "0.2.1" 268 + source = "registry+https://github.com/rust-lang/crates.io-index" 269 + checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 270 + 271 + [[package]] 272 + name = "clap" 273 + version = "4.5.60" 274 + source = "registry+https://github.com/rust-lang/crates.io-index" 275 + checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" 276 + dependencies = [ 277 + "clap_builder", 278 + "clap_derive", 279 + ] 280 + 281 + [[package]] 282 + name = "clap_builder" 283 + version = "4.5.60" 284 + source = "registry+https://github.com/rust-lang/crates.io-index" 285 + checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" 286 + dependencies = [ 287 + "anstream", 288 + "anstyle", 289 + "clap_lex", 290 + "strsim", 291 + "terminal_size", 292 + "unicase", 293 + "unicode-width", 294 + ] 295 + 296 + [[package]] 297 + name = "clap_derive" 298 + version = "4.5.55" 299 + source = "registry+https://github.com/rust-lang/crates.io-index" 300 + checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" 301 + dependencies = [ 302 + "heck", 303 + "proc-macro2", 304 + "quote", 305 + "syn 2.0.117", 306 + ] 307 + 308 + [[package]] 309 + name = "clap_lex" 310 + version = "1.0.0" 311 + source = "registry+https://github.com/rust-lang/crates.io-index" 312 + checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" 313 + 314 + [[package]] 315 + name = "clru" 316 + version = "0.6.3" 317 + source = "registry+https://github.com/rust-lang/crates.io-index" 318 + checksum = "197fd99cb113a8d5d9b6376f3aa817f32c1078f2343b714fff7d2ca44fdf67d5" 319 + dependencies = [ 320 + "hashbrown 0.16.1", 321 + ] 322 + 323 + [[package]] 324 + name = "color-eyre" 325 + version = "0.6.5" 326 + source = "registry+https://github.com/rust-lang/crates.io-index" 327 + checksum = "e5920befb47832a6d61ee3a3a846565cfa39b331331e68a3b1d1116630f2f26d" 328 + dependencies = [ 329 + "backtrace", 330 + "color-spantrace", 331 + "eyre", 332 + "indenter", 333 + "once_cell", 334 + "owo-colors", 335 + "tracing-error", 336 + ] 337 + 338 + [[package]] 339 + name = "color-spantrace" 340 + version = "0.3.0" 341 + source = "registry+https://github.com/rust-lang/crates.io-index" 342 + checksum = "b8b88ea9df13354b55bc7234ebcce36e6ef896aca2e42a15de9e10edce01b427" 343 + dependencies = [ 344 + "once_cell", 345 + "owo-colors", 346 + "tracing-core", 347 + "tracing-error", 348 + ] 349 + 350 + [[package]] 351 + name = "colorchoice" 352 + version = "1.0.4" 353 + source = "registry+https://github.com/rust-lang/crates.io-index" 354 + checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 355 + 356 + [[package]] 357 + name = "compact_str" 358 + version = "0.9.0" 359 + source = "registry+https://github.com/rust-lang/crates.io-index" 360 + checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a" 361 + dependencies = [ 362 + "castaway", 363 + "cfg-if", 364 + "itoa", 365 + "rustversion", 366 + "ryu", 367 + "static_assertions", 368 + ] 369 + 370 + [[package]] 371 + name = "console" 372 + version = "0.15.11" 373 + source = "registry+https://github.com/rust-lang/crates.io-index" 374 + checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" 375 + dependencies = [ 376 + "encode_unicode", 377 + "libc", 378 + "once_cell", 379 + "windows-sys 0.59.0", 380 + ] 381 + 382 + [[package]] 383 + name = "convert_case" 384 + version = "0.10.0" 385 + source = "registry+https://github.com/rust-lang/crates.io-index" 386 + checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" 387 + dependencies = [ 388 + "unicode-segmentation", 389 + ] 390 + 391 + [[package]] 392 + name = "cpufeatures" 393 + version = "0.2.17" 394 + source = "registry+https://github.com/rust-lang/crates.io-index" 395 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 396 + dependencies = [ 397 + "libc", 398 + ] 399 + 400 + [[package]] 401 + name = "crc32fast" 402 + version = "1.5.0" 403 + source = "registry+https://github.com/rust-lang/crates.io-index" 404 + checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" 405 + dependencies = [ 406 + "cfg-if", 407 + ] 408 + 409 + [[package]] 410 + name = "crossbeam-utils" 411 + version = "0.8.21" 412 + source = "registry+https://github.com/rust-lang/crates.io-index" 413 + checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 414 + 415 + [[package]] 416 + name = "crossterm" 417 + version = "0.29.0" 418 + source = "registry+https://github.com/rust-lang/crates.io-index" 419 + checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" 420 + dependencies = [ 421 + "bitflags 2.11.0", 422 + "crossterm_winapi", 423 + "derive_more", 424 + "document-features", 425 + "futures-core", 426 + "mio", 427 + "parking_lot", 428 + "rustix", 429 + "signal-hook 0.3.18", 430 + "signal-hook-mio", 431 + "winapi", 432 + ] 433 + 434 + [[package]] 435 + name = "crossterm_winapi" 436 + version = "0.9.1" 437 + source = "registry+https://github.com/rust-lang/crates.io-index" 438 + checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" 439 + dependencies = [ 440 + "winapi", 441 + ] 442 + 443 + [[package]] 444 + name = "crypto-common" 445 + version = "0.1.7" 446 + source = "registry+https://github.com/rust-lang/crates.io-index" 447 + checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" 448 + dependencies = [ 449 + "generic-array", 450 + "typenum", 451 + ] 452 + 453 + [[package]] 454 + name = "csscolorparser" 455 + version = "0.6.2" 456 + source = "registry+https://github.com/rust-lang/crates.io-index" 457 + checksum = "eb2a7d3066da2de787b7f032c736763eb7ae5d355f81a68bab2675a96008b0bf" 458 + dependencies = [ 459 + "lab", 460 + "phf", 461 + ] 462 + 463 + [[package]] 464 + name = "darling" 465 + version = "0.20.11" 466 + source = "registry+https://github.com/rust-lang/crates.io-index" 467 + checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" 468 + dependencies = [ 469 + "darling_core 0.20.11", 470 + "darling_macro 0.20.11", 471 + ] 472 + 473 + [[package]] 474 + name = "darling" 475 + version = "0.23.0" 476 + source = "registry+https://github.com/rust-lang/crates.io-index" 477 + checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" 478 + dependencies = [ 479 + "darling_core 0.23.0", 480 + "darling_macro 0.23.0", 481 + ] 482 + 483 + [[package]] 484 + name = "darling_core" 485 + version = "0.20.11" 486 + source = "registry+https://github.com/rust-lang/crates.io-index" 487 + checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" 488 + dependencies = [ 489 + "fnv", 490 + "ident_case", 491 + "proc-macro2", 492 + "quote", 493 + "strsim", 494 + "syn 2.0.117", 495 + ] 496 + 497 + [[package]] 498 + name = "darling_core" 499 + version = "0.23.0" 500 + source = "registry+https://github.com/rust-lang/crates.io-index" 501 + checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" 502 + dependencies = [ 503 + "ident_case", 504 + "proc-macro2", 505 + "quote", 506 + "strsim", 507 + "syn 2.0.117", 508 + ] 509 + 510 + [[package]] 511 + name = "darling_macro" 512 + version = "0.20.11" 513 + source = "registry+https://github.com/rust-lang/crates.io-index" 514 + checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" 515 + dependencies = [ 516 + "darling_core 0.20.11", 517 + "quote", 518 + "syn 2.0.117", 519 + ] 520 + 521 + [[package]] 522 + name = "darling_macro" 523 + version = "0.23.0" 524 + source = "registry+https://github.com/rust-lang/crates.io-index" 525 + checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" 526 + dependencies = [ 527 + "darling_core 0.23.0", 528 + "quote", 529 + "syn 2.0.117", 530 + ] 531 + 532 + [[package]] 533 + name = "dashmap" 534 + version = "6.1.0" 535 + source = "registry+https://github.com/rust-lang/crates.io-index" 536 + checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" 537 + dependencies = [ 538 + "cfg-if", 539 + "crossbeam-utils", 540 + "hashbrown 0.14.5", 541 + "lock_api", 542 + "once_cell", 543 + "parking_lot_core", 544 + ] 545 + 546 + [[package]] 547 + name = "deltae" 548 + version = "0.3.2" 549 + source = "registry+https://github.com/rust-lang/crates.io-index" 550 + checksum = "5729f5117e208430e437df2f4843f5e5952997175992d1414f94c57d61e270b4" 551 + 552 + [[package]] 553 + name = "deranged" 554 + version = "0.5.8" 555 + source = "registry+https://github.com/rust-lang/crates.io-index" 556 + checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" 557 + dependencies = [ 558 + "powerfmt", 559 + ] 560 + 561 + [[package]] 562 + name = "derive_builder" 563 + version = "0.20.2" 564 + source = "registry+https://github.com/rust-lang/crates.io-index" 565 + checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" 566 + dependencies = [ 567 + "derive_builder_macro", 568 + ] 569 + 570 + [[package]] 571 + name = "derive_builder_core" 572 + version = "0.20.2" 573 + source = "registry+https://github.com/rust-lang/crates.io-index" 574 + checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" 575 + dependencies = [ 576 + "darling 0.20.11", 577 + "proc-macro2", 578 + "quote", 579 + "syn 2.0.117", 580 + ] 581 + 582 + [[package]] 583 + name = "derive_builder_macro" 584 + version = "0.20.2" 585 + source = "registry+https://github.com/rust-lang/crates.io-index" 586 + checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" 587 + dependencies = [ 588 + "derive_builder_core", 589 + "syn 2.0.117", 590 + ] 591 + 592 + [[package]] 593 + name = "derive_more" 594 + version = "2.1.1" 595 + source = "registry+https://github.com/rust-lang/crates.io-index" 596 + checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" 597 + dependencies = [ 598 + "derive_more-impl", 599 + ] 600 + 601 + [[package]] 602 + name = "derive_more-impl" 603 + version = "2.1.1" 604 + source = "registry+https://github.com/rust-lang/crates.io-index" 605 + checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" 606 + dependencies = [ 607 + "convert_case", 608 + "proc-macro2", 609 + "quote", 610 + "rustc_version", 611 + "syn 2.0.117", 612 + ] 613 + 614 + [[package]] 615 + name = "digest" 616 + version = "0.10.7" 617 + source = "registry+https://github.com/rust-lang/crates.io-index" 618 + checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 619 + dependencies = [ 620 + "block-buffer", 621 + "crypto-common", 622 + ] 623 + 624 + [[package]] 625 + name = "directories" 626 + version = "6.0.0" 627 + source = "registry+https://github.com/rust-lang/crates.io-index" 628 + checksum = "16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7d" 629 + dependencies = [ 630 + "dirs-sys", 631 + ] 632 + 633 + [[package]] 634 + name = "dirs-sys" 635 + version = "0.5.0" 636 + source = "registry+https://github.com/rust-lang/crates.io-index" 637 + checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" 638 + dependencies = [ 639 + "libc", 640 + "option-ext", 641 + "redox_users", 642 + "windows-sys 0.61.2", 643 + ] 644 + 645 + [[package]] 646 + name = "document-features" 647 + version = "0.2.12" 648 + source = "registry+https://github.com/rust-lang/crates.io-index" 649 + checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" 650 + dependencies = [ 651 + "litrs", 652 + ] 653 + 654 + [[package]] 655 + name = "dunce" 656 + version = "1.0.5" 657 + source = "registry+https://github.com/rust-lang/crates.io-index" 658 + checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" 659 + 660 + [[package]] 661 + name = "either" 662 + version = "1.15.0" 663 + source = "registry+https://github.com/rust-lang/crates.io-index" 664 + checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 665 + 666 + [[package]] 667 + name = "encode_unicode" 668 + version = "1.0.0" 669 + source = "registry+https://github.com/rust-lang/crates.io-index" 670 + checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" 671 + 672 + [[package]] 673 + name = "encoding_rs" 674 + version = "0.8.35" 675 + source = "registry+https://github.com/rust-lang/crates.io-index" 676 + checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 677 + dependencies = [ 678 + "cfg-if", 679 + ] 680 + 681 + [[package]] 682 + name = "equivalent" 683 + version = "1.0.2" 684 + source = "registry+https://github.com/rust-lang/crates.io-index" 685 + checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 686 + 687 + [[package]] 688 + name = "errno" 689 + version = "0.3.14" 690 + source = "registry+https://github.com/rust-lang/crates.io-index" 691 + checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" 692 + dependencies = [ 693 + "libc", 694 + "windows-sys 0.61.2", 695 + ] 696 + 697 + [[package]] 698 + name = "euclid" 699 + version = "0.22.13" 700 + source = "registry+https://github.com/rust-lang/crates.io-index" 701 + checksum = "df61bf483e837f88d5c2291dcf55c67be7e676b3a51acc48db3a7b163b91ed63" 702 + dependencies = [ 703 + "num-traits", 704 + ] 705 + 706 + [[package]] 707 + name = "eyre" 708 + version = "0.6.12" 709 + source = "registry+https://github.com/rust-lang/crates.io-index" 710 + checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" 711 + dependencies = [ 712 + "indenter", 713 + "once_cell", 714 + ] 715 + 716 + [[package]] 717 + name = "fancy-regex" 718 + version = "0.11.0" 719 + source = "registry+https://github.com/rust-lang/crates.io-index" 720 + checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2" 721 + dependencies = [ 722 + "bit-set", 723 + "regex", 724 + ] 725 + 726 + [[package]] 727 + name = "faster-hex" 728 + version = "0.10.0" 729 + source = "registry+https://github.com/rust-lang/crates.io-index" 730 + checksum = "7223ae2d2f179b803433d9c830478527e92b8117eab39460edae7f1614d9fb73" 731 + dependencies = [ 732 + "heapless", 733 + "serde", 734 + ] 735 + 736 + [[package]] 737 + name = "fastrand" 738 + version = "2.3.0" 739 + source = "registry+https://github.com/rust-lang/crates.io-index" 740 + checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 741 + 742 + [[package]] 743 + name = "filaments" 744 + version = "0.1.0" 745 + dependencies = [ 746 + "anyhow", 747 + "better-panic", 748 + "clap", 749 + "color-eyre", 750 + "crossterm", 751 + "directories", 752 + "futures", 753 + "human-panic", 754 + "ratatui", 755 + "serde", 756 + "signal-hook 0.4.3", 757 + "strum 0.28.0", 758 + "tokio", 759 + "tokio-util", 760 + "tracing", 761 + "tracing-error", 762 + "tracing-subscriber", 763 + "vergen-gix", 764 + ] 765 + 766 + [[package]] 767 + name = "filedescriptor" 768 + version = "0.8.3" 769 + source = "registry+https://github.com/rust-lang/crates.io-index" 770 + checksum = "e40758ed24c9b2eeb76c35fb0aebc66c626084edd827e07e1552279814c6682d" 771 + dependencies = [ 772 + "libc", 773 + "thiserror 1.0.69", 774 + "winapi", 775 + ] 776 + 777 + [[package]] 778 + name = "filetime" 779 + version = "0.2.27" 780 + source = "registry+https://github.com/rust-lang/crates.io-index" 781 + checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" 782 + dependencies = [ 783 + "cfg-if", 784 + "libc", 785 + "libredox", 786 + ] 787 + 788 + [[package]] 789 + name = "finl_unicode" 790 + version = "1.4.0" 791 + source = "registry+https://github.com/rust-lang/crates.io-index" 792 + checksum = "9844ddc3a6e533d62bba727eb6c28b5d360921d5175e9ff0f1e621a5c590a4d5" 793 + 794 + [[package]] 795 + name = "fixedbitset" 796 + version = "0.4.2" 797 + source = "registry+https://github.com/rust-lang/crates.io-index" 798 + checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" 799 + 800 + [[package]] 801 + name = "fnv" 802 + version = "1.0.7" 803 + source = "registry+https://github.com/rust-lang/crates.io-index" 804 + checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 805 + 806 + [[package]] 807 + name = "foldhash" 808 + version = "0.1.5" 809 + source = "registry+https://github.com/rust-lang/crates.io-index" 810 + checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 811 + 812 + [[package]] 813 + name = "foldhash" 814 + version = "0.2.0" 815 + source = "registry+https://github.com/rust-lang/crates.io-index" 816 + checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" 817 + 818 + [[package]] 819 + name = "futures" 820 + version = "0.3.32" 821 + source = "registry+https://github.com/rust-lang/crates.io-index" 822 + checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" 823 + dependencies = [ 824 + "futures-channel", 825 + "futures-core", 826 + "futures-executor", 827 + "futures-io", 828 + "futures-sink", 829 + "futures-task", 830 + "futures-util", 831 + ] 832 + 833 + [[package]] 834 + name = "futures-channel" 835 + version = "0.3.32" 836 + source = "registry+https://github.com/rust-lang/crates.io-index" 837 + checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" 838 + dependencies = [ 839 + "futures-core", 840 + "futures-sink", 841 + ] 842 + 843 + [[package]] 844 + name = "futures-core" 845 + version = "0.3.32" 846 + source = "registry+https://github.com/rust-lang/crates.io-index" 847 + checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" 848 + 849 + [[package]] 850 + name = "futures-executor" 851 + version = "0.3.32" 852 + source = "registry+https://github.com/rust-lang/crates.io-index" 853 + checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" 854 + dependencies = [ 855 + "futures-core", 856 + "futures-task", 857 + "futures-util", 858 + ] 859 + 860 + [[package]] 861 + name = "futures-io" 862 + version = "0.3.32" 863 + source = "registry+https://github.com/rust-lang/crates.io-index" 864 + checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" 865 + 866 + [[package]] 867 + name = "futures-macro" 868 + version = "0.3.32" 869 + source = "registry+https://github.com/rust-lang/crates.io-index" 870 + checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" 871 + dependencies = [ 872 + "proc-macro2", 873 + "quote", 874 + "syn 2.0.117", 875 + ] 876 + 877 + [[package]] 878 + name = "futures-sink" 879 + version = "0.3.32" 880 + source = "registry+https://github.com/rust-lang/crates.io-index" 881 + checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" 882 + 883 + [[package]] 884 + name = "futures-task" 885 + version = "0.3.32" 886 + source = "registry+https://github.com/rust-lang/crates.io-index" 887 + checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" 888 + 889 + [[package]] 890 + name = "futures-util" 891 + version = "0.3.32" 892 + source = "registry+https://github.com/rust-lang/crates.io-index" 893 + checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" 894 + dependencies = [ 895 + "futures-channel", 896 + "futures-core", 897 + "futures-io", 898 + "futures-macro", 899 + "futures-sink", 900 + "futures-task", 901 + "memchr", 902 + "pin-project-lite", 903 + "slab", 904 + ] 905 + 906 + [[package]] 907 + name = "generic-array" 908 + version = "0.14.7" 909 + source = "registry+https://github.com/rust-lang/crates.io-index" 910 + checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 911 + dependencies = [ 912 + "typenum", 913 + "version_check", 914 + ] 915 + 916 + [[package]] 917 + name = "getrandom" 918 + version = "0.2.17" 919 + source = "registry+https://github.com/rust-lang/crates.io-index" 920 + checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" 921 + dependencies = [ 922 + "cfg-if", 923 + "libc", 924 + "wasi", 925 + ] 926 + 927 + [[package]] 928 + name = "getrandom" 929 + version = "0.3.4" 930 + source = "registry+https://github.com/rust-lang/crates.io-index" 931 + checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" 932 + dependencies = [ 933 + "cfg-if", 934 + "libc", 935 + "r-efi 5.3.0", 936 + "wasip2", 937 + ] 938 + 939 + [[package]] 940 + name = "getrandom" 941 + version = "0.4.2" 942 + source = "registry+https://github.com/rust-lang/crates.io-index" 943 + checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" 944 + dependencies = [ 945 + "cfg-if", 946 + "libc", 947 + "r-efi 6.0.0", 948 + "wasip2", 949 + "wasip3", 950 + ] 951 + 952 + [[package]] 953 + name = "gimli" 954 + version = "0.32.3" 955 + source = "registry+https://github.com/rust-lang/crates.io-index" 956 + checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" 957 + 958 + [[package]] 959 + name = "gix" 960 + version = "0.77.0" 961 + source = "registry+https://github.com/rust-lang/crates.io-index" 962 + checksum = "3d8284d86a2f5c0987fbf7219a128815cc04af5a18f5fd7eec6a76d83c2b78cc" 963 + dependencies = [ 964 + "gix-actor", 965 + "gix-attributes", 966 + "gix-command", 967 + "gix-commitgraph", 968 + "gix-config", 969 + "gix-date", 970 + "gix-diff", 971 + "gix-dir", 972 + "gix-discover", 973 + "gix-features", 974 + "gix-filter", 975 + "gix-fs", 976 + "gix-glob", 977 + "gix-hash", 978 + "gix-hashtable", 979 + "gix-ignore", 980 + "gix-index", 981 + "gix-lock", 982 + "gix-object", 983 + "gix-odb", 984 + "gix-pack", 985 + "gix-path", 986 + "gix-pathspec", 987 + "gix-protocol", 988 + "gix-ref", 989 + "gix-refspec", 990 + "gix-revision", 991 + "gix-revwalk", 992 + "gix-sec", 993 + "gix-shallow", 994 + "gix-status", 995 + "gix-submodule", 996 + "gix-tempfile", 997 + "gix-trace", 998 + "gix-traverse", 999 + "gix-url", 1000 + "gix-utils", 1001 + "gix-validate", 1002 + "gix-worktree", 1003 + "parking_lot", 1004 + "signal-hook 0.3.18", 1005 + "smallvec", 1006 + "thiserror 2.0.18", 1007 + ] 1008 + 1009 + [[package]] 1010 + name = "gix-actor" 1011 + version = "0.37.1" 1012 + source = "registry+https://github.com/rust-lang/crates.io-index" 1013 + checksum = "c345528d405eab51d20f505f5fe1a4680973953694e0292c6bbe97827daa55c4" 1014 + dependencies = [ 1015 + "bstr", 1016 + "gix-date", 1017 + "gix-utils", 1018 + "itoa", 1019 + "thiserror 2.0.18", 1020 + "winnow", 1021 + ] 1022 + 1023 + [[package]] 1024 + name = "gix-attributes" 1025 + version = "0.29.0" 1026 + source = "registry+https://github.com/rust-lang/crates.io-index" 1027 + checksum = "f47dabf8a50f1558c3a55d978440c7c4f22f87ac897bef03b4edbc96f6115966" 1028 + dependencies = [ 1029 + "bstr", 1030 + "gix-glob", 1031 + "gix-path", 1032 + "gix-quote", 1033 + "gix-trace", 1034 + "kstring", 1035 + "smallvec", 1036 + "thiserror 2.0.18", 1037 + "unicode-bom", 1038 + ] 1039 + 1040 + [[package]] 1041 + name = "gix-bitmap" 1042 + version = "0.2.16" 1043 + source = "registry+https://github.com/rust-lang/crates.io-index" 1044 + checksum = "d982fc7ef0608e669851d0d2a6141dae74c60d5a27e8daa451f2a4857bbf41e2" 1045 + dependencies = [ 1046 + "thiserror 2.0.18", 1047 + ] 1048 + 1049 + [[package]] 1050 + name = "gix-chunk" 1051 + version = "0.4.12" 1052 + source = "registry+https://github.com/rust-lang/crates.io-index" 1053 + checksum = "5c356b3825677cb6ff579551bb8311a81821e184453cbd105e2fc5311b288eeb" 1054 + dependencies = [ 1055 + "thiserror 2.0.18", 1056 + ] 1057 + 1058 + [[package]] 1059 + name = "gix-command" 1060 + version = "0.6.5" 1061 + source = "registry+https://github.com/rust-lang/crates.io-index" 1062 + checksum = "46f9c425730a654835351e6da8c3c69ba1804f8b8d4e96d027254151138d5c64" 1063 + dependencies = [ 1064 + "bstr", 1065 + "gix-path", 1066 + "gix-quote", 1067 + "gix-trace", 1068 + "shell-words", 1069 + ] 1070 + 1071 + [[package]] 1072 + name = "gix-commitgraph" 1073 + version = "0.31.0" 1074 + source = "registry+https://github.com/rust-lang/crates.io-index" 1075 + checksum = "efdcba8048045baf15225daf949d597c3e6183d130245e22a7fbd27084abe63a" 1076 + dependencies = [ 1077 + "bstr", 1078 + "gix-chunk", 1079 + "gix-hash", 1080 + "memmap2", 1081 + "thiserror 2.0.18", 1082 + ] 1083 + 1084 + [[package]] 1085 + name = "gix-config" 1086 + version = "0.50.0" 1087 + source = "registry+https://github.com/rust-lang/crates.io-index" 1088 + checksum = "b58e2ff8eef96b71f2c5e260f02ca0475caff374027c5cc5a29bda69fac67404" 1089 + dependencies = [ 1090 + "bstr", 1091 + "gix-config-value", 1092 + "gix-features", 1093 + "gix-glob", 1094 + "gix-path", 1095 + "gix-ref", 1096 + "gix-sec", 1097 + "memchr", 1098 + "smallvec", 1099 + "thiserror 2.0.18", 1100 + "unicode-bom", 1101 + "winnow", 1102 + ] 1103 + 1104 + [[package]] 1105 + name = "gix-config-value" 1106 + version = "0.16.0" 1107 + source = "registry+https://github.com/rust-lang/crates.io-index" 1108 + checksum = "2409cffa4fe8b303847d5b6ba8df9da9ba65d302fc5ee474ea0cac5afde79840" 1109 + dependencies = [ 1110 + "bitflags 2.11.0", 1111 + "bstr", 1112 + "gix-path", 1113 + "libc", 1114 + "thiserror 2.0.18", 1115 + ] 1116 + 1117 + [[package]] 1118 + name = "gix-date" 1119 + version = "0.12.1" 1120 + source = "registry+https://github.com/rust-lang/crates.io-index" 1121 + checksum = "fe4a31bab8159e233094fa70d2e5fd3ec6f19e593f67e6ae01281daa48f8d8e7" 1122 + dependencies = [ 1123 + "bstr", 1124 + "itoa", 1125 + "jiff", 1126 + "smallvec", 1127 + "thiserror 2.0.18", 1128 + ] 1129 + 1130 + [[package]] 1131 + name = "gix-diff" 1132 + version = "0.57.1" 1133 + source = "registry+https://github.com/rust-lang/crates.io-index" 1134 + checksum = "3506936e63ce14cd54b5f28ed06c8e43b92ef9f41c2238cc0bc271a9259b4e90" 1135 + dependencies = [ 1136 + "bstr", 1137 + "gix-attributes", 1138 + "gix-command", 1139 + "gix-filter", 1140 + "gix-fs", 1141 + "gix-hash", 1142 + "gix-index", 1143 + "gix-object", 1144 + "gix-path", 1145 + "gix-pathspec", 1146 + "gix-tempfile", 1147 + "gix-trace", 1148 + "gix-traverse", 1149 + "gix-worktree", 1150 + "imara-diff", 1151 + "thiserror 2.0.18", 1152 + ] 1153 + 1154 + [[package]] 1155 + name = "gix-dir" 1156 + version = "0.19.0" 1157 + source = "registry+https://github.com/rust-lang/crates.io-index" 1158 + checksum = "709d9fad32d2eb8b0129850874246569e801b6d5877e0c41356c23e9e2501e06" 1159 + dependencies = [ 1160 + "bstr", 1161 + "gix-discover", 1162 + "gix-fs", 1163 + "gix-ignore", 1164 + "gix-index", 1165 + "gix-object", 1166 + "gix-path", 1167 + "gix-pathspec", 1168 + "gix-trace", 1169 + "gix-utils", 1170 + "gix-worktree", 1171 + "thiserror 2.0.18", 1172 + ] 1173 + 1174 + [[package]] 1175 + name = "gix-discover" 1176 + version = "0.45.0" 1177 + source = "registry+https://github.com/rust-lang/crates.io-index" 1178 + checksum = "42ce096dc132533802a09d6fd5d4008858f2038341dfe2e69e0d0239edb359de" 1179 + dependencies = [ 1180 + "bstr", 1181 + "dunce", 1182 + "gix-fs", 1183 + "gix-hash", 1184 + "gix-path", 1185 + "gix-ref", 1186 + "gix-sec", 1187 + "thiserror 2.0.18", 1188 + ] 1189 + 1190 + [[package]] 1191 + name = "gix-features" 1192 + version = "0.45.2" 1193 + source = "registry+https://github.com/rust-lang/crates.io-index" 1194 + checksum = "d56aad357ae016449434705033df644ac6253dfcf1281aad3af3af9e907560d1" 1195 + dependencies = [ 1196 + "crc32fast", 1197 + "gix-path", 1198 + "gix-trace", 1199 + "gix-utils", 1200 + "libc", 1201 + "once_cell", 1202 + "prodash", 1203 + "thiserror 2.0.18", 1204 + "walkdir", 1205 + "zlib-rs", 1206 + ] 1207 + 1208 + [[package]] 1209 + name = "gix-filter" 1210 + version = "0.24.1" 1211 + source = "registry+https://github.com/rust-lang/crates.io-index" 1212 + checksum = "10c02464962482570c1f94ad451a608c4391514f803e8074662d02c5629a25dc" 1213 + dependencies = [ 1214 + "bstr", 1215 + "encoding_rs", 1216 + "gix-attributes", 1217 + "gix-command", 1218 + "gix-hash", 1219 + "gix-object", 1220 + "gix-packetline", 1221 + "gix-path", 1222 + "gix-quote", 1223 + "gix-trace", 1224 + "gix-utils", 1225 + "smallvec", 1226 + "thiserror 2.0.18", 1227 + ] 1228 + 1229 + [[package]] 1230 + name = "gix-fs" 1231 + version = "0.18.2" 1232 + source = "registry+https://github.com/rust-lang/crates.io-index" 1233 + checksum = "785b9c499e46bc78d7b81c148c21b3fca18655379ee729a856ed19ce50d359ec" 1234 + dependencies = [ 1235 + "bstr", 1236 + "fastrand", 1237 + "gix-features", 1238 + "gix-path", 1239 + "gix-utils", 1240 + "thiserror 2.0.18", 1241 + ] 1242 + 1243 + [[package]] 1244 + name = "gix-glob" 1245 + version = "0.23.0" 1246 + source = "registry+https://github.com/rust-lang/crates.io-index" 1247 + checksum = "e8546300aee4c65c5862c22a3e321124a69b654a61a8b60de546a9284812b7e2" 1248 + dependencies = [ 1249 + "bitflags 2.11.0", 1250 + "bstr", 1251 + "gix-features", 1252 + "gix-path", 1253 + ] 1254 + 1255 + [[package]] 1256 + name = "gix-hash" 1257 + version = "0.21.2" 1258 + source = "registry+https://github.com/rust-lang/crates.io-index" 1259 + checksum = "e153930f42ccdab8a3306b1027cd524879f6a8996cd0c474d18b0e56cae7714d" 1260 + dependencies = [ 1261 + "faster-hex", 1262 + "gix-features", 1263 + "sha1-checked", 1264 + "thiserror 2.0.18", 1265 + ] 1266 + 1267 + [[package]] 1268 + name = "gix-hashtable" 1269 + version = "0.11.0" 1270 + source = "registry+https://github.com/rust-lang/crates.io-index" 1271 + checksum = "222f7428636020bef272a87ed833ea48bf5fb3193f99852ae16fbb5a602bd2f0" 1272 + dependencies = [ 1273 + "gix-hash", 1274 + "hashbrown 0.16.1", 1275 + "parking_lot", 1276 + ] 1277 + 1278 + [[package]] 1279 + name = "gix-ignore" 1280 + version = "0.18.0" 1281 + source = "registry+https://github.com/rust-lang/crates.io-index" 1282 + checksum = "dfa727fdf54fd9fb53fa3fbb1a5c17172d3073e8e336bf155f3cac3e25b81b21" 1283 + dependencies = [ 1284 + "bstr", 1285 + "gix-glob", 1286 + "gix-path", 1287 + "gix-trace", 1288 + "unicode-bom", 1289 + ] 1290 + 1291 + [[package]] 1292 + name = "gix-index" 1293 + version = "0.45.1" 1294 + source = "registry+https://github.com/rust-lang/crates.io-index" 1295 + checksum = "9ea6d3e9e11647ba49f441dea0782494cc6d2875ff43fa4ad9094e6957f42051" 1296 + dependencies = [ 1297 + "bitflags 2.11.0", 1298 + "bstr", 1299 + "filetime", 1300 + "fnv", 1301 + "gix-bitmap", 1302 + "gix-features", 1303 + "gix-fs", 1304 + "gix-hash", 1305 + "gix-lock", 1306 + "gix-object", 1307 + "gix-traverse", 1308 + "gix-utils", 1309 + "gix-validate", 1310 + "hashbrown 0.16.1", 1311 + "itoa", 1312 + "libc", 1313 + "memmap2", 1314 + "rustix", 1315 + "smallvec", 1316 + "thiserror 2.0.18", 1317 + ] 1318 + 1319 + [[package]] 1320 + name = "gix-lock" 1321 + version = "20.0.1" 1322 + source = "registry+https://github.com/rust-lang/crates.io-index" 1323 + checksum = "115268ae5e3b3b7bc7fc77260eecee05acca458e45318ca45d35467fa81a3ac5" 1324 + dependencies = [ 1325 + "gix-tempfile", 1326 + "gix-utils", 1327 + "thiserror 2.0.18", 1328 + ] 1329 + 1330 + [[package]] 1331 + name = "gix-object" 1332 + version = "0.54.1" 1333 + source = "registry+https://github.com/rust-lang/crates.io-index" 1334 + checksum = "363d6a879c52e4890180e0ffa7d8c9a364fd0b7e807caa368e860b80e8d0bc81" 1335 + dependencies = [ 1336 + "bstr", 1337 + "gix-actor", 1338 + "gix-date", 1339 + "gix-features", 1340 + "gix-hash", 1341 + "gix-hashtable", 1342 + "gix-path", 1343 + "gix-utils", 1344 + "gix-validate", 1345 + "itoa", 1346 + "smallvec", 1347 + "thiserror 2.0.18", 1348 + "winnow", 1349 + ] 1350 + 1351 + [[package]] 1352 + name = "gix-odb" 1353 + version = "0.74.0" 1354 + source = "registry+https://github.com/rust-lang/crates.io-index" 1355 + checksum = "165a907df369a12ed4330faf8baf7ae597aadb08cfacb4ed8649f93d90bcc0c5" 1356 + dependencies = [ 1357 + "arc-swap", 1358 + "gix-date", 1359 + "gix-features", 1360 + "gix-fs", 1361 + "gix-hash", 1362 + "gix-hashtable", 1363 + "gix-object", 1364 + "gix-pack", 1365 + "gix-path", 1366 + "gix-quote", 1367 + "parking_lot", 1368 + "tempfile", 1369 + "thiserror 2.0.18", 1370 + ] 1371 + 1372 + [[package]] 1373 + name = "gix-pack" 1374 + version = "0.64.1" 1375 + source = "registry+https://github.com/rust-lang/crates.io-index" 1376 + checksum = "b04a73d5ab07ea0faae55e2c0ae6f24e36e365ac8ce140394dee3a2c89cd4366" 1377 + dependencies = [ 1378 + "clru", 1379 + "gix-chunk", 1380 + "gix-features", 1381 + "gix-hash", 1382 + "gix-hashtable", 1383 + "gix-object", 1384 + "gix-path", 1385 + "memmap2", 1386 + "smallvec", 1387 + "thiserror 2.0.18", 1388 + ] 1389 + 1390 + [[package]] 1391 + name = "gix-packetline" 1392 + version = "0.20.0" 1393 + source = "registry+https://github.com/rust-lang/crates.io-index" 1394 + checksum = "fad0ffb982a289888087a165d3e849cbac724f2aa5431236b050dd2cb9c7de31" 1395 + dependencies = [ 1396 + "bstr", 1397 + "faster-hex", 1398 + "gix-trace", 1399 + "thiserror 2.0.18", 1400 + ] 1401 + 1402 + [[package]] 1403 + name = "gix-path" 1404 + version = "0.10.22" 1405 + source = "registry+https://github.com/rust-lang/crates.io-index" 1406 + checksum = "7cb06c3e4f8eed6e24fd915fa93145e28a511f4ea0e768bae16673e05ed3f366" 1407 + dependencies = [ 1408 + "bstr", 1409 + "gix-trace", 1410 + "gix-validate", 1411 + "thiserror 2.0.18", 1412 + ] 1413 + 1414 + [[package]] 1415 + name = "gix-pathspec" 1416 + version = "0.14.0" 1417 + source = "registry+https://github.com/rust-lang/crates.io-index" 1418 + checksum = "ed9e0c881933c37a7ef45288d6c5779c4a7b3ad240b4c37657e1d9829eb90085" 1419 + dependencies = [ 1420 + "bitflags 2.11.0", 1421 + "bstr", 1422 + "gix-attributes", 1423 + "gix-config-value", 1424 + "gix-glob", 1425 + "gix-path", 1426 + "thiserror 2.0.18", 1427 + ] 1428 + 1429 + [[package]] 1430 + name = "gix-protocol" 1431 + version = "0.55.0" 1432 + source = "registry+https://github.com/rust-lang/crates.io-index" 1433 + checksum = "02c5dfd068789442c5709e702ef42d851765f2c09a11bf0a13749d24363f4d07" 1434 + dependencies = [ 1435 + "bstr", 1436 + "gix-date", 1437 + "gix-features", 1438 + "gix-hash", 1439 + "gix-ref", 1440 + "gix-shallow", 1441 + "gix-transport", 1442 + "gix-utils", 1443 + "maybe-async", 1444 + "thiserror 2.0.18", 1445 + "winnow", 1446 + ] 1447 + 1448 + [[package]] 1449 + name = "gix-quote" 1450 + version = "0.6.2" 1451 + source = "registry+https://github.com/rust-lang/crates.io-index" 1452 + checksum = "96fc2ff2ec8cc0c92807f02eab1f00eb02619fc2810d13dc42679492fcc36757" 1453 + dependencies = [ 1454 + "bstr", 1455 + "gix-utils", 1456 + "thiserror 2.0.18", 1457 + ] 1458 + 1459 + [[package]] 1460 + name = "gix-ref" 1461 + version = "0.57.0" 1462 + source = "registry+https://github.com/rust-lang/crates.io-index" 1463 + checksum = "ccb33aa97006e37e9e83fde233569a66b02ed16fd4b0406cdf35834b06cf8a63" 1464 + dependencies = [ 1465 + "gix-actor", 1466 + "gix-features", 1467 + "gix-fs", 1468 + "gix-hash", 1469 + "gix-lock", 1470 + "gix-object", 1471 + "gix-path", 1472 + "gix-tempfile", 1473 + "gix-utils", 1474 + "gix-validate", 1475 + "memmap2", 1476 + "thiserror 2.0.18", 1477 + "winnow", 1478 + ] 1479 + 1480 + [[package]] 1481 + name = "gix-refspec" 1482 + version = "0.35.0" 1483 + source = "registry+https://github.com/rust-lang/crates.io-index" 1484 + checksum = "dcbba6ae5389f4021f73a2d62a4195aace7db1e8bb684b25521d3d685f57da02" 1485 + dependencies = [ 1486 + "bstr", 1487 + "gix-glob", 1488 + "gix-hash", 1489 + "gix-revision", 1490 + "gix-validate", 1491 + "smallvec", 1492 + "thiserror 2.0.18", 1493 + ] 1494 + 1495 + [[package]] 1496 + name = "gix-revision" 1497 + version = "0.39.0" 1498 + source = "registry+https://github.com/rust-lang/crates.io-index" 1499 + checksum = "91898c83b18c635696f7355d171cfa74a52f38022ff89581f567768935ebc4c8" 1500 + dependencies = [ 1501 + "bitflags 2.11.0", 1502 + "bstr", 1503 + "gix-commitgraph", 1504 + "gix-date", 1505 + "gix-hash", 1506 + "gix-hashtable", 1507 + "gix-object", 1508 + "gix-revwalk", 1509 + "gix-trace", 1510 + "thiserror 2.0.18", 1511 + ] 1512 + 1513 + [[package]] 1514 + name = "gix-revwalk" 1515 + version = "0.25.0" 1516 + source = "registry+https://github.com/rust-lang/crates.io-index" 1517 + checksum = "0d063699278485016863d0d2bb0db7609fd2e8ba9a89379717bf06fd96949eb2" 1518 + dependencies = [ 1519 + "gix-commitgraph", 1520 + "gix-date", 1521 + "gix-hash", 1522 + "gix-hashtable", 1523 + "gix-object", 1524 + "smallvec", 1525 + "thiserror 2.0.18", 1526 + ] 1527 + 1528 + [[package]] 1529 + name = "gix-sec" 1530 + version = "0.12.2" 1531 + source = "registry+https://github.com/rust-lang/crates.io-index" 1532 + checksum = "ea9962ed6d9114f7f100efe038752f41283c225bb507a2888903ac593dffa6be" 1533 + dependencies = [ 1534 + "bitflags 2.11.0", 1535 + "gix-path", 1536 + "libc", 1537 + "windows-sys 0.61.2", 1538 + ] 1539 + 1540 + [[package]] 1541 + name = "gix-shallow" 1542 + version = "0.7.0" 1543 + source = "registry+https://github.com/rust-lang/crates.io-index" 1544 + checksum = "9c1c467fb9f7ec1d33613c2ea5482de514bcb84b8222a793cdc4c71955832356" 1545 + dependencies = [ 1546 + "bstr", 1547 + "gix-hash", 1548 + "gix-lock", 1549 + "thiserror 2.0.18", 1550 + ] 1551 + 1552 + [[package]] 1553 + name = "gix-status" 1554 + version = "0.24.0" 1555 + source = "registry+https://github.com/rust-lang/crates.io-index" 1556 + checksum = "ed0d94c685a831c679ca5454c22f350e8c233f50dcf377ca00d858bcba9696d2" 1557 + dependencies = [ 1558 + "bstr", 1559 + "filetime", 1560 + "gix-diff", 1561 + "gix-dir", 1562 + "gix-features", 1563 + "gix-filter", 1564 + "gix-fs", 1565 + "gix-hash", 1566 + "gix-index", 1567 + "gix-object", 1568 + "gix-path", 1569 + "gix-pathspec", 1570 + "gix-worktree", 1571 + "portable-atomic", 1572 + "thiserror 2.0.18", 1573 + ] 1574 + 1575 + [[package]] 1576 + name = "gix-submodule" 1577 + version = "0.24.0" 1578 + source = "registry+https://github.com/rust-lang/crates.io-index" 1579 + checksum = "efee2a61198413d80de10028aa507344537827d776ade781760130721bec2419" 1580 + dependencies = [ 1581 + "bstr", 1582 + "gix-config", 1583 + "gix-path", 1584 + "gix-pathspec", 1585 + "gix-refspec", 1586 + "gix-url", 1587 + "thiserror 2.0.18", 1588 + ] 1589 + 1590 + [[package]] 1591 + name = "gix-tempfile" 1592 + version = "20.0.1" 1593 + source = "registry+https://github.com/rust-lang/crates.io-index" 1594 + checksum = "ad89218e74850f42d364ed3877c7291f0474c8533502df91bb877ecc5cb0dd40" 1595 + dependencies = [ 1596 + "dashmap", 1597 + "gix-fs", 1598 + "libc", 1599 + "parking_lot", 1600 + "signal-hook 0.4.3", 1601 + "signal-hook-registry", 1602 + "tempfile", 1603 + ] 1604 + 1605 + [[package]] 1606 + name = "gix-trace" 1607 + version = "0.1.18" 1608 + source = "registry+https://github.com/rust-lang/crates.io-index" 1609 + checksum = "f69a13643b8437d4ca6845e08143e847a36ca82903eed13303475d0ae8b162e0" 1610 + 1611 + [[package]] 1612 + name = "gix-transport" 1613 + version = "0.52.1" 1614 + source = "registry+https://github.com/rust-lang/crates.io-index" 1615 + checksum = "a4d4ed02a2ebe771a26111896ecda0b98b58ed35e1d9c0ccf07251c1abb4918d" 1616 + dependencies = [ 1617 + "bstr", 1618 + "gix-command", 1619 + "gix-features", 1620 + "gix-packetline", 1621 + "gix-quote", 1622 + "gix-sec", 1623 + "gix-url", 1624 + "thiserror 2.0.18", 1625 + ] 1626 + 1627 + [[package]] 1628 + name = "gix-traverse" 1629 + version = "0.51.1" 1630 + source = "registry+https://github.com/rust-lang/crates.io-index" 1631 + checksum = "d052b83d1d1744be95ac6448ac02f95f370a8f6720e466be9ce57146e39f5280" 1632 + dependencies = [ 1633 + "bitflags 2.11.0", 1634 + "gix-commitgraph", 1635 + "gix-date", 1636 + "gix-hash", 1637 + "gix-hashtable", 1638 + "gix-object", 1639 + "gix-revwalk", 1640 + "smallvec", 1641 + "thiserror 2.0.18", 1642 + ] 1643 + 1644 + [[package]] 1645 + name = "gix-url" 1646 + version = "0.34.0" 1647 + source = "registry+https://github.com/rust-lang/crates.io-index" 1648 + checksum = "cff1996dfb9430b3699d89224c674169c1ae355eacc52bf30a03c0b8bffe73d9" 1649 + dependencies = [ 1650 + "bstr", 1651 + "gix-features", 1652 + "gix-path", 1653 + "percent-encoding", 1654 + "thiserror 2.0.18", 1655 + ] 1656 + 1657 + [[package]] 1658 + name = "gix-utils" 1659 + version = "0.3.1" 1660 + source = "registry+https://github.com/rust-lang/crates.io-index" 1661 + checksum = "befcdbdfb1238d2854591f760a48711bed85e72d80a10e8f2f93f656746ef7c5" 1662 + dependencies = [ 1663 + "bstr", 1664 + "fastrand", 1665 + "unicode-normalization", 1666 + ] 1667 + 1668 + [[package]] 1669 + name = "gix-validate" 1670 + version = "0.10.1" 1671 + source = "registry+https://github.com/rust-lang/crates.io-index" 1672 + checksum = "5b1e63a5b516e970a594f870ed4571a8fdcb8a344e7bd407a20db8bd61dbfde4" 1673 + dependencies = [ 1674 + "bstr", 1675 + "thiserror 2.0.18", 1676 + ] 1677 + 1678 + [[package]] 1679 + name = "gix-worktree" 1680 + version = "0.46.0" 1681 + source = "registry+https://github.com/rust-lang/crates.io-index" 1682 + checksum = "1cfb7ce8cdbfe06117d335d1ad329351468d20331e0aafd108ceb647c1326aca" 1683 + dependencies = [ 1684 + "bstr", 1685 + "gix-attributes", 1686 + "gix-features", 1687 + "gix-fs", 1688 + "gix-glob", 1689 + "gix-hash", 1690 + "gix-ignore", 1691 + "gix-index", 1692 + "gix-object", 1693 + "gix-path", 1694 + "gix-validate", 1695 + ] 1696 + 1697 + [[package]] 1698 + name = "hash32" 1699 + version = "0.3.1" 1700 + source = "registry+https://github.com/rust-lang/crates.io-index" 1701 + checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" 1702 + dependencies = [ 1703 + "byteorder", 1704 + ] 1705 + 1706 + [[package]] 1707 + name = "hashbrown" 1708 + version = "0.14.5" 1709 + source = "registry+https://github.com/rust-lang/crates.io-index" 1710 + checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 1711 + 1712 + [[package]] 1713 + name = "hashbrown" 1714 + version = "0.15.5" 1715 + source = "registry+https://github.com/rust-lang/crates.io-index" 1716 + checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" 1717 + dependencies = [ 1718 + "foldhash 0.1.5", 1719 + ] 1720 + 1721 + [[package]] 1722 + name = "hashbrown" 1723 + version = "0.16.1" 1724 + source = "registry+https://github.com/rust-lang/crates.io-index" 1725 + checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" 1726 + dependencies = [ 1727 + "allocator-api2", 1728 + "equivalent", 1729 + "foldhash 0.2.0", 1730 + ] 1731 + 1732 + [[package]] 1733 + name = "heapless" 1734 + version = "0.8.0" 1735 + source = "registry+https://github.com/rust-lang/crates.io-index" 1736 + checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" 1737 + dependencies = [ 1738 + "hash32", 1739 + "stable_deref_trait", 1740 + ] 1741 + 1742 + [[package]] 1743 + name = "heck" 1744 + version = "0.5.0" 1745 + source = "registry+https://github.com/rust-lang/crates.io-index" 1746 + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1747 + 1748 + [[package]] 1749 + name = "hex" 1750 + version = "0.4.3" 1751 + source = "registry+https://github.com/rust-lang/crates.io-index" 1752 + checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1753 + 1754 + [[package]] 1755 + name = "human-panic" 1756 + version = "2.0.6" 1757 + source = "registry+https://github.com/rust-lang/crates.io-index" 1758 + checksum = "075e8747af11abcff07d55d98297c9c6c70eb5d6365b25e7b12f02e484935191" 1759 + dependencies = [ 1760 + "anstream", 1761 + "anstyle", 1762 + "backtrace", 1763 + "serde", 1764 + "serde_derive", 1765 + "sysinfo", 1766 + "toml", 1767 + "uuid", 1768 + ] 1769 + 1770 + [[package]] 1771 + name = "id-arena" 1772 + version = "2.3.0" 1773 + source = "registry+https://github.com/rust-lang/crates.io-index" 1774 + checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" 1775 + 1776 + [[package]] 1777 + name = "ident_case" 1778 + version = "1.0.1" 1779 + source = "registry+https://github.com/rust-lang/crates.io-index" 1780 + checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1781 + 1782 + [[package]] 1783 + name = "imara-diff" 1784 + version = "0.1.8" 1785 + source = "registry+https://github.com/rust-lang/crates.io-index" 1786 + checksum = "17d34b7d42178945f775e84bc4c36dde7c1c6cdfea656d3354d009056f2bb3d2" 1787 + dependencies = [ 1788 + "hashbrown 0.15.5", 1789 + ] 1790 + 1791 + [[package]] 1792 + name = "indenter" 1793 + version = "0.3.4" 1794 + source = "registry+https://github.com/rust-lang/crates.io-index" 1795 + checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" 1796 + 1797 + [[package]] 1798 + name = "indexmap" 1799 + version = "2.13.0" 1800 + source = "registry+https://github.com/rust-lang/crates.io-index" 1801 + checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" 1802 + dependencies = [ 1803 + "equivalent", 1804 + "hashbrown 0.16.1", 1805 + "serde", 1806 + "serde_core", 1807 + ] 1808 + 1809 + [[package]] 1810 + name = "indoc" 1811 + version = "2.0.7" 1812 + source = "registry+https://github.com/rust-lang/crates.io-index" 1813 + checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" 1814 + dependencies = [ 1815 + "rustversion", 1816 + ] 1817 + 1818 + [[package]] 1819 + name = "instability" 1820 + version = "0.3.11" 1821 + source = "registry+https://github.com/rust-lang/crates.io-index" 1822 + checksum = "357b7205c6cd18dd2c86ed312d1e70add149aea98e7ef72b9fdf0270e555c11d" 1823 + dependencies = [ 1824 + "darling 0.23.0", 1825 + "indoc", 1826 + "proc-macro2", 1827 + "quote", 1828 + "syn 2.0.117", 1829 + ] 1830 + 1831 + [[package]] 1832 + name = "is_terminal_polyfill" 1833 + version = "1.70.2" 1834 + source = "registry+https://github.com/rust-lang/crates.io-index" 1835 + checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" 1836 + 1837 + [[package]] 1838 + name = "itertools" 1839 + version = "0.14.0" 1840 + source = "registry+https://github.com/rust-lang/crates.io-index" 1841 + checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" 1842 + dependencies = [ 1843 + "either", 1844 + ] 1845 + 1846 + [[package]] 1847 + name = "itoa" 1848 + version = "1.0.17" 1849 + source = "registry+https://github.com/rust-lang/crates.io-index" 1850 + checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" 1851 + 1852 + [[package]] 1853 + name = "jiff" 1854 + version = "0.2.23" 1855 + source = "registry+https://github.com/rust-lang/crates.io-index" 1856 + checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" 1857 + dependencies = [ 1858 + "jiff-static", 1859 + "jiff-tzdb-platform", 1860 + "log", 1861 + "portable-atomic", 1862 + "portable-atomic-util", 1863 + "serde_core", 1864 + "windows-sys 0.61.2", 1865 + ] 1866 + 1867 + [[package]] 1868 + name = "jiff-static" 1869 + version = "0.2.23" 1870 + source = "registry+https://github.com/rust-lang/crates.io-index" 1871 + checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" 1872 + dependencies = [ 1873 + "proc-macro2", 1874 + "quote", 1875 + "syn 2.0.117", 1876 + ] 1877 + 1878 + [[package]] 1879 + name = "jiff-tzdb" 1880 + version = "0.1.6" 1881 + source = "registry+https://github.com/rust-lang/crates.io-index" 1882 + checksum = "c900ef84826f1338a557697dc8fc601df9ca9af4ac137c7fb61d4c6f2dfd3076" 1883 + 1884 + [[package]] 1885 + name = "jiff-tzdb-platform" 1886 + version = "0.1.3" 1887 + source = "registry+https://github.com/rust-lang/crates.io-index" 1888 + checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" 1889 + dependencies = [ 1890 + "jiff-tzdb", 1891 + ] 1892 + 1893 + [[package]] 1894 + name = "js-sys" 1895 + version = "0.3.91" 1896 + source = "registry+https://github.com/rust-lang/crates.io-index" 1897 + checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" 1898 + dependencies = [ 1899 + "once_cell", 1900 + "wasm-bindgen", 1901 + ] 1902 + 1903 + [[package]] 1904 + name = "kasuari" 1905 + version = "0.4.11" 1906 + source = "registry+https://github.com/rust-lang/crates.io-index" 1907 + checksum = "8fe90c1150662e858c7d5f945089b7517b0a80d8bf7ba4b1b5ffc984e7230a5b" 1908 + dependencies = [ 1909 + "hashbrown 0.16.1", 1910 + "portable-atomic", 1911 + "thiserror 2.0.18", 1912 + ] 1913 + 1914 + [[package]] 1915 + name = "kstring" 1916 + version = "2.0.2" 1917 + source = "registry+https://github.com/rust-lang/crates.io-index" 1918 + checksum = "558bf9508a558512042d3095138b1f7b8fe90c5467d94f9f1da28b3731c5dbd1" 1919 + dependencies = [ 1920 + "static_assertions", 1921 + ] 1922 + 1923 + [[package]] 1924 + name = "lab" 1925 + version = "0.11.0" 1926 + source = "registry+https://github.com/rust-lang/crates.io-index" 1927 + checksum = "bf36173d4167ed999940f804952e6b08197cae5ad5d572eb4db150ce8ad5d58f" 1928 + 1929 + [[package]] 1930 + name = "lazy_static" 1931 + version = "1.5.0" 1932 + source = "registry+https://github.com/rust-lang/crates.io-index" 1933 + checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1934 + 1935 + [[package]] 1936 + name = "leb128fmt" 1937 + version = "0.1.0" 1938 + source = "registry+https://github.com/rust-lang/crates.io-index" 1939 + checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" 1940 + 1941 + [[package]] 1942 + name = "libc" 1943 + version = "0.2.182" 1944 + source = "registry+https://github.com/rust-lang/crates.io-index" 1945 + checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" 1946 + 1947 + [[package]] 1948 + name = "libredox" 1949 + version = "0.1.14" 1950 + source = "registry+https://github.com/rust-lang/crates.io-index" 1951 + checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" 1952 + dependencies = [ 1953 + "bitflags 2.11.0", 1954 + "libc", 1955 + "plain", 1956 + "redox_syscall 0.7.3", 1957 + ] 1958 + 1959 + [[package]] 1960 + name = "line-clipping" 1961 + version = "0.3.5" 1962 + source = "registry+https://github.com/rust-lang/crates.io-index" 1963 + checksum = "5f4de44e98ddbf09375cbf4d17714d18f39195f4f4894e8524501726fd9a8a4a" 1964 + dependencies = [ 1965 + "bitflags 2.11.0", 1966 + ] 1967 + 1968 + [[package]] 1969 + name = "linux-raw-sys" 1970 + version = "0.12.1" 1971 + source = "registry+https://github.com/rust-lang/crates.io-index" 1972 + checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" 1973 + 1974 + [[package]] 1975 + name = "litrs" 1976 + version = "1.0.0" 1977 + source = "registry+https://github.com/rust-lang/crates.io-index" 1978 + checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" 1979 + 1980 + [[package]] 1981 + name = "lock_api" 1982 + version = "0.4.14" 1983 + source = "registry+https://github.com/rust-lang/crates.io-index" 1984 + checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 1985 + dependencies = [ 1986 + "scopeguard", 1987 + ] 1988 + 1989 + [[package]] 1990 + name = "log" 1991 + version = "0.4.29" 1992 + source = "registry+https://github.com/rust-lang/crates.io-index" 1993 + checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" 1994 + 1995 + [[package]] 1996 + name = "lru" 1997 + version = "0.16.3" 1998 + source = "registry+https://github.com/rust-lang/crates.io-index" 1999 + checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" 2000 + dependencies = [ 2001 + "hashbrown 0.16.1", 2002 + ] 2003 + 2004 + [[package]] 2005 + name = "mac_address" 2006 + version = "1.1.8" 2007 + source = "registry+https://github.com/rust-lang/crates.io-index" 2008 + checksum = "c0aeb26bf5e836cc1c341c8106051b573f1766dfa05aa87f0b98be5e51b02303" 2009 + dependencies = [ 2010 + "nix", 2011 + "winapi", 2012 + ] 2013 + 2014 + [[package]] 2015 + name = "matchers" 2016 + version = "0.2.0" 2017 + source = "registry+https://github.com/rust-lang/crates.io-index" 2018 + checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" 2019 + dependencies = [ 2020 + "regex-automata", 2021 + ] 2022 + 2023 + [[package]] 2024 + name = "maybe-async" 2025 + version = "0.2.10" 2026 + source = "registry+https://github.com/rust-lang/crates.io-index" 2027 + checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" 2028 + dependencies = [ 2029 + "proc-macro2", 2030 + "quote", 2031 + "syn 2.0.117", 2032 + ] 2033 + 2034 + [[package]] 2035 + name = "memchr" 2036 + version = "2.8.0" 2037 + source = "registry+https://github.com/rust-lang/crates.io-index" 2038 + checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" 2039 + 2040 + [[package]] 2041 + name = "memmap2" 2042 + version = "0.9.10" 2043 + source = "registry+https://github.com/rust-lang/crates.io-index" 2044 + checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" 2045 + dependencies = [ 2046 + "libc", 2047 + ] 2048 + 2049 + [[package]] 2050 + name = "memmem" 2051 + version = "0.1.1" 2052 + source = "registry+https://github.com/rust-lang/crates.io-index" 2053 + checksum = "a64a92489e2744ce060c349162be1c5f33c6969234104dbd99ddb5feb08b8c15" 2054 + 2055 + [[package]] 2056 + name = "memoffset" 2057 + version = "0.9.1" 2058 + source = "registry+https://github.com/rust-lang/crates.io-index" 2059 + checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" 2060 + dependencies = [ 2061 + "autocfg", 2062 + ] 2063 + 2064 + [[package]] 2065 + name = "minimal-lexical" 2066 + version = "0.2.1" 2067 + source = "registry+https://github.com/rust-lang/crates.io-index" 2068 + checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 2069 + 2070 + [[package]] 2071 + name = "miniz_oxide" 2072 + version = "0.8.9" 2073 + source = "registry+https://github.com/rust-lang/crates.io-index" 2074 + checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" 2075 + dependencies = [ 2076 + "adler2", 2077 + ] 2078 + 2079 + [[package]] 2080 + name = "mio" 2081 + version = "1.1.1" 2082 + source = "registry+https://github.com/rust-lang/crates.io-index" 2083 + checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" 2084 + dependencies = [ 2085 + "libc", 2086 + "log", 2087 + "wasi", 2088 + "windows-sys 0.61.2", 2089 + ] 2090 + 2091 + [[package]] 2092 + name = "nix" 2093 + version = "0.29.0" 2094 + source = "registry+https://github.com/rust-lang/crates.io-index" 2095 + checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" 2096 + dependencies = [ 2097 + "bitflags 2.11.0", 2098 + "cfg-if", 2099 + "cfg_aliases", 2100 + "libc", 2101 + "memoffset", 2102 + ] 2103 + 2104 + [[package]] 2105 + name = "nom" 2106 + version = "7.1.3" 2107 + source = "registry+https://github.com/rust-lang/crates.io-index" 2108 + checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 2109 + dependencies = [ 2110 + "memchr", 2111 + "minimal-lexical", 2112 + ] 2113 + 2114 + [[package]] 2115 + name = "ntapi" 2116 + version = "0.4.3" 2117 + source = "registry+https://github.com/rust-lang/crates.io-index" 2118 + checksum = "c3b335231dfd352ffb0f8017f3b6027a4917f7df785ea2143d8af2adc66980ae" 2119 + dependencies = [ 2120 + "winapi", 2121 + ] 2122 + 2123 + [[package]] 2124 + name = "nu-ansi-term" 2125 + version = "0.50.3" 2126 + source = "registry+https://github.com/rust-lang/crates.io-index" 2127 + checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" 2128 + dependencies = [ 2129 + "windows-sys 0.61.2", 2130 + ] 2131 + 2132 + [[package]] 2133 + name = "num-conv" 2134 + version = "0.2.0" 2135 + source = "registry+https://github.com/rust-lang/crates.io-index" 2136 + checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" 2137 + 2138 + [[package]] 2139 + name = "num-derive" 2140 + version = "0.4.2" 2141 + source = "registry+https://github.com/rust-lang/crates.io-index" 2142 + checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" 2143 + dependencies = [ 2144 + "proc-macro2", 2145 + "quote", 2146 + "syn 2.0.117", 2147 + ] 2148 + 2149 + [[package]] 2150 + name = "num-traits" 2151 + version = "0.2.19" 2152 + source = "registry+https://github.com/rust-lang/crates.io-index" 2153 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 2154 + dependencies = [ 2155 + "autocfg", 2156 + ] 2157 + 2158 + [[package]] 2159 + name = "num_threads" 2160 + version = "0.1.7" 2161 + source = "registry+https://github.com/rust-lang/crates.io-index" 2162 + checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" 2163 + dependencies = [ 2164 + "libc", 2165 + ] 2166 + 2167 + [[package]] 2168 + name = "objc2-core-foundation" 2169 + version = "0.3.2" 2170 + source = "registry+https://github.com/rust-lang/crates.io-index" 2171 + checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" 2172 + dependencies = [ 2173 + "bitflags 2.11.0", 2174 + ] 2175 + 2176 + [[package]] 2177 + name = "objc2-io-kit" 2178 + version = "0.3.2" 2179 + source = "registry+https://github.com/rust-lang/crates.io-index" 2180 + checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" 2181 + dependencies = [ 2182 + "libc", 2183 + "objc2-core-foundation", 2184 + ] 2185 + 2186 + [[package]] 2187 + name = "object" 2188 + version = "0.37.3" 2189 + source = "registry+https://github.com/rust-lang/crates.io-index" 2190 + checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" 2191 + dependencies = [ 2192 + "memchr", 2193 + ] 2194 + 2195 + [[package]] 2196 + name = "once_cell" 2197 + version = "1.21.3" 2198 + source = "registry+https://github.com/rust-lang/crates.io-index" 2199 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 2200 + 2201 + [[package]] 2202 + name = "once_cell_polyfill" 2203 + version = "1.70.2" 2204 + source = "registry+https://github.com/rust-lang/crates.io-index" 2205 + checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" 2206 + 2207 + [[package]] 2208 + name = "option-ext" 2209 + version = "0.2.0" 2210 + source = "registry+https://github.com/rust-lang/crates.io-index" 2211 + checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" 2212 + 2213 + [[package]] 2214 + name = "ordered-float" 2215 + version = "4.6.0" 2216 + source = "registry+https://github.com/rust-lang/crates.io-index" 2217 + checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" 2218 + dependencies = [ 2219 + "num-traits", 2220 + ] 2221 + 2222 + [[package]] 2223 + name = "owo-colors" 2224 + version = "4.3.0" 2225 + source = "registry+https://github.com/rust-lang/crates.io-index" 2226 + checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d" 2227 + 2228 + [[package]] 2229 + name = "parking_lot" 2230 + version = "0.12.5" 2231 + source = "registry+https://github.com/rust-lang/crates.io-index" 2232 + checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 2233 + dependencies = [ 2234 + "lock_api", 2235 + "parking_lot_core", 2236 + ] 2237 + 2238 + [[package]] 2239 + name = "parking_lot_core" 2240 + version = "0.9.12" 2241 + source = "registry+https://github.com/rust-lang/crates.io-index" 2242 + checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 2243 + dependencies = [ 2244 + "cfg-if", 2245 + "libc", 2246 + "redox_syscall 0.5.18", 2247 + "smallvec", 2248 + "windows-link 0.2.1", 2249 + ] 2250 + 2251 + [[package]] 2252 + name = "percent-encoding" 2253 + version = "2.3.2" 2254 + source = "registry+https://github.com/rust-lang/crates.io-index" 2255 + checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 2256 + 2257 + [[package]] 2258 + name = "pest" 2259 + version = "2.8.6" 2260 + source = "registry+https://github.com/rust-lang/crates.io-index" 2261 + checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" 2262 + dependencies = [ 2263 + "memchr", 2264 + "ucd-trie", 2265 + ] 2266 + 2267 + [[package]] 2268 + name = "pest_derive" 2269 + version = "2.8.6" 2270 + source = "registry+https://github.com/rust-lang/crates.io-index" 2271 + checksum = "11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77" 2272 + dependencies = [ 2273 + "pest", 2274 + "pest_generator", 2275 + ] 2276 + 2277 + [[package]] 2278 + name = "pest_generator" 2279 + version = "2.8.6" 2280 + source = "registry+https://github.com/rust-lang/crates.io-index" 2281 + checksum = "8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f" 2282 + dependencies = [ 2283 + "pest", 2284 + "pest_meta", 2285 + "proc-macro2", 2286 + "quote", 2287 + "syn 2.0.117", 2288 + ] 2289 + 2290 + [[package]] 2291 + name = "pest_meta" 2292 + version = "2.8.6" 2293 + source = "registry+https://github.com/rust-lang/crates.io-index" 2294 + checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" 2295 + dependencies = [ 2296 + "pest", 2297 + "sha2", 2298 + ] 2299 + 2300 + [[package]] 2301 + name = "phf" 2302 + version = "0.11.3" 2303 + source = "registry+https://github.com/rust-lang/crates.io-index" 2304 + checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 2305 + dependencies = [ 2306 + "phf_macros", 2307 + "phf_shared", 2308 + ] 2309 + 2310 + [[package]] 2311 + name = "phf_codegen" 2312 + version = "0.11.3" 2313 + source = "registry+https://github.com/rust-lang/crates.io-index" 2314 + checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" 2315 + dependencies = [ 2316 + "phf_generator", 2317 + "phf_shared", 2318 + ] 2319 + 2320 + [[package]] 2321 + name = "phf_generator" 2322 + version = "0.11.3" 2323 + source = "registry+https://github.com/rust-lang/crates.io-index" 2324 + checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" 2325 + dependencies = [ 2326 + "phf_shared", 2327 + "rand", 2328 + ] 2329 + 2330 + [[package]] 2331 + name = "phf_macros" 2332 + version = "0.11.3" 2333 + source = "registry+https://github.com/rust-lang/crates.io-index" 2334 + checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" 2335 + dependencies = [ 2336 + "phf_generator", 2337 + "phf_shared", 2338 + "proc-macro2", 2339 + "quote", 2340 + "syn 2.0.117", 2341 + ] 2342 + 2343 + [[package]] 2344 + name = "phf_shared" 2345 + version = "0.11.3" 2346 + source = "registry+https://github.com/rust-lang/crates.io-index" 2347 + checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 2348 + dependencies = [ 2349 + "siphasher", 2350 + ] 2351 + 2352 + [[package]] 2353 + name = "pin-project-lite" 2354 + version = "0.2.17" 2355 + source = "registry+https://github.com/rust-lang/crates.io-index" 2356 + checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" 2357 + 2358 + [[package]] 2359 + name = "plain" 2360 + version = "0.2.3" 2361 + source = "registry+https://github.com/rust-lang/crates.io-index" 2362 + checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" 2363 + 2364 + [[package]] 2365 + name = "portable-atomic" 2366 + version = "1.13.1" 2367 + source = "registry+https://github.com/rust-lang/crates.io-index" 2368 + checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" 2369 + 2370 + [[package]] 2371 + name = "portable-atomic-util" 2372 + version = "0.2.5" 2373 + source = "registry+https://github.com/rust-lang/crates.io-index" 2374 + checksum = "7a9db96d7fa8782dd8c15ce32ffe8680bbd1e978a43bf51a34d39483540495f5" 2375 + dependencies = [ 2376 + "portable-atomic", 2377 + ] 2378 + 2379 + [[package]] 2380 + name = "powerfmt" 2381 + version = "0.2.0" 2382 + source = "registry+https://github.com/rust-lang/crates.io-index" 2383 + checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 2384 + 2385 + [[package]] 2386 + name = "prettyplease" 2387 + version = "0.2.37" 2388 + source = "registry+https://github.com/rust-lang/crates.io-index" 2389 + checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" 2390 + dependencies = [ 2391 + "proc-macro2", 2392 + "syn 2.0.117", 2393 + ] 2394 + 2395 + [[package]] 2396 + name = "proc-macro2" 2397 + version = "1.0.106" 2398 + source = "registry+https://github.com/rust-lang/crates.io-index" 2399 + checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" 2400 + dependencies = [ 2401 + "unicode-ident", 2402 + ] 2403 + 2404 + [[package]] 2405 + name = "prodash" 2406 + version = "30.0.1" 2407 + source = "registry+https://github.com/rust-lang/crates.io-index" 2408 + checksum = "5a6efc566849d3d9d737c5cb06cc50e48950ebe3d3f9d70631490fff3a07b139" 2409 + dependencies = [ 2410 + "parking_lot", 2411 + ] 2412 + 2413 + [[package]] 2414 + name = "quote" 2415 + version = "1.0.45" 2416 + source = "registry+https://github.com/rust-lang/crates.io-index" 2417 + checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" 2418 + dependencies = [ 2419 + "proc-macro2", 2420 + ] 2421 + 2422 + [[package]] 2423 + name = "r-efi" 2424 + version = "5.3.0" 2425 + source = "registry+https://github.com/rust-lang/crates.io-index" 2426 + checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 2427 + 2428 + [[package]] 2429 + name = "r-efi" 2430 + version = "6.0.0" 2431 + source = "registry+https://github.com/rust-lang/crates.io-index" 2432 + checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" 2433 + 2434 + [[package]] 2435 + name = "rand" 2436 + version = "0.8.5" 2437 + source = "registry+https://github.com/rust-lang/crates.io-index" 2438 + checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2439 + dependencies = [ 2440 + "rand_core", 2441 + ] 2442 + 2443 + [[package]] 2444 + name = "rand_core" 2445 + version = "0.6.4" 2446 + source = "registry+https://github.com/rust-lang/crates.io-index" 2447 + checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2448 + 2449 + [[package]] 2450 + name = "ratatui" 2451 + version = "0.30.0" 2452 + source = "registry+https://github.com/rust-lang/crates.io-index" 2453 + checksum = "d1ce67fb8ba4446454d1c8dbaeda0557ff5e94d39d5e5ed7f10a65eb4c8266bc" 2454 + dependencies = [ 2455 + "instability", 2456 + "ratatui-core", 2457 + "ratatui-crossterm", 2458 + "ratatui-macros", 2459 + "ratatui-termwiz", 2460 + "ratatui-widgets", 2461 + ] 2462 + 2463 + [[package]] 2464 + name = "ratatui-core" 2465 + version = "0.1.0" 2466 + source = "registry+https://github.com/rust-lang/crates.io-index" 2467 + checksum = "5ef8dea09a92caaf73bff7adb70b76162e5937524058a7e5bff37869cbbec293" 2468 + dependencies = [ 2469 + "bitflags 2.11.0", 2470 + "compact_str", 2471 + "hashbrown 0.16.1", 2472 + "indoc", 2473 + "itertools", 2474 + "kasuari", 2475 + "lru", 2476 + "strum 0.27.2", 2477 + "thiserror 2.0.18", 2478 + "unicode-segmentation", 2479 + "unicode-truncate", 2480 + "unicode-width", 2481 + ] 2482 + 2483 + [[package]] 2484 + name = "ratatui-crossterm" 2485 + version = "0.1.0" 2486 + source = "registry+https://github.com/rust-lang/crates.io-index" 2487 + checksum = "577c9b9f652b4c121fb25c6a391dd06406d3b092ba68827e6d2f09550edc54b3" 2488 + dependencies = [ 2489 + "cfg-if", 2490 + "crossterm", 2491 + "instability", 2492 + "ratatui-core", 2493 + ] 2494 + 2495 + [[package]] 2496 + name = "ratatui-macros" 2497 + version = "0.7.0" 2498 + source = "registry+https://github.com/rust-lang/crates.io-index" 2499 + checksum = "a7f1342a13e83e4bb9d0b793d0ea762be633f9582048c892ae9041ef39c936f4" 2500 + dependencies = [ 2501 + "ratatui-core", 2502 + "ratatui-widgets", 2503 + ] 2504 + 2505 + [[package]] 2506 + name = "ratatui-termwiz" 2507 + version = "0.1.0" 2508 + source = "registry+https://github.com/rust-lang/crates.io-index" 2509 + checksum = "0f76fe0bd0ed4295f0321b1676732e2454024c15a35d01904ddb315afd3d545c" 2510 + dependencies = [ 2511 + "ratatui-core", 2512 + "termwiz", 2513 + ] 2514 + 2515 + [[package]] 2516 + name = "ratatui-widgets" 2517 + version = "0.3.0" 2518 + source = "registry+https://github.com/rust-lang/crates.io-index" 2519 + checksum = "d7dbfa023cd4e604c2553483820c5fe8aa9d71a42eea5aa77c6e7f35756612db" 2520 + dependencies = [ 2521 + "bitflags 2.11.0", 2522 + "hashbrown 0.16.1", 2523 + "indoc", 2524 + "instability", 2525 + "itertools", 2526 + "line-clipping", 2527 + "ratatui-core", 2528 + "strum 0.27.2", 2529 + "time", 2530 + "unicode-segmentation", 2531 + "unicode-width", 2532 + ] 2533 + 2534 + [[package]] 2535 + name = "redox_syscall" 2536 + version = "0.5.18" 2537 + source = "registry+https://github.com/rust-lang/crates.io-index" 2538 + checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" 2539 + dependencies = [ 2540 + "bitflags 2.11.0", 2541 + ] 2542 + 2543 + [[package]] 2544 + name = "redox_syscall" 2545 + version = "0.7.3" 2546 + source = "registry+https://github.com/rust-lang/crates.io-index" 2547 + checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" 2548 + dependencies = [ 2549 + "bitflags 2.11.0", 2550 + ] 2551 + 2552 + [[package]] 2553 + name = "redox_users" 2554 + version = "0.5.2" 2555 + source = "registry+https://github.com/rust-lang/crates.io-index" 2556 + checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" 2557 + dependencies = [ 2558 + "getrandom 0.2.17", 2559 + "libredox", 2560 + "thiserror 2.0.18", 2561 + ] 2562 + 2563 + [[package]] 2564 + name = "regex" 2565 + version = "1.12.3" 2566 + source = "registry+https://github.com/rust-lang/crates.io-index" 2567 + checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" 2568 + dependencies = [ 2569 + "aho-corasick", 2570 + "memchr", 2571 + "regex-automata", 2572 + "regex-syntax", 2573 + ] 2574 + 2575 + [[package]] 2576 + name = "regex-automata" 2577 + version = "0.4.14" 2578 + source = "registry+https://github.com/rust-lang/crates.io-index" 2579 + checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" 2580 + dependencies = [ 2581 + "aho-corasick", 2582 + "memchr", 2583 + "regex-syntax", 2584 + ] 2585 + 2586 + [[package]] 2587 + name = "regex-syntax" 2588 + version = "0.8.10" 2589 + source = "registry+https://github.com/rust-lang/crates.io-index" 2590 + checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" 2591 + 2592 + [[package]] 2593 + name = "rustc-demangle" 2594 + version = "0.1.27" 2595 + source = "registry+https://github.com/rust-lang/crates.io-index" 2596 + checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" 2597 + 2598 + [[package]] 2599 + name = "rustc_version" 2600 + version = "0.4.1" 2601 + source = "registry+https://github.com/rust-lang/crates.io-index" 2602 + checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 2603 + dependencies = [ 2604 + "semver", 2605 + ] 2606 + 2607 + [[package]] 2608 + name = "rustix" 2609 + version = "1.1.4" 2610 + source = "registry+https://github.com/rust-lang/crates.io-index" 2611 + checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" 2612 + dependencies = [ 2613 + "bitflags 2.11.0", 2614 + "errno", 2615 + "libc", 2616 + "linux-raw-sys", 2617 + "windows-sys 0.61.2", 2618 + ] 2619 + 2620 + [[package]] 2621 + name = "rustversion" 2622 + version = "1.0.22" 2623 + source = "registry+https://github.com/rust-lang/crates.io-index" 2624 + checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 2625 + 2626 + [[package]] 2627 + name = "ryu" 2628 + version = "1.0.23" 2629 + source = "registry+https://github.com/rust-lang/crates.io-index" 2630 + checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" 2631 + 2632 + [[package]] 2633 + name = "same-file" 2634 + version = "1.0.6" 2635 + source = "registry+https://github.com/rust-lang/crates.io-index" 2636 + checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2637 + dependencies = [ 2638 + "winapi-util", 2639 + ] 2640 + 2641 + [[package]] 2642 + name = "scopeguard" 2643 + version = "1.2.0" 2644 + source = "registry+https://github.com/rust-lang/crates.io-index" 2645 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2646 + 2647 + [[package]] 2648 + name = "semver" 2649 + version = "1.0.27" 2650 + source = "registry+https://github.com/rust-lang/crates.io-index" 2651 + checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 2652 + dependencies = [ 2653 + "serde", 2654 + "serde_core", 2655 + ] 2656 + 2657 + [[package]] 2658 + name = "serde" 2659 + version = "1.0.228" 2660 + source = "registry+https://github.com/rust-lang/crates.io-index" 2661 + checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 2662 + dependencies = [ 2663 + "serde_core", 2664 + "serde_derive", 2665 + ] 2666 + 2667 + [[package]] 2668 + name = "serde_core" 2669 + version = "1.0.228" 2670 + source = "registry+https://github.com/rust-lang/crates.io-index" 2671 + checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" 2672 + dependencies = [ 2673 + "serde_derive", 2674 + ] 2675 + 2676 + [[package]] 2677 + name = "serde_derive" 2678 + version = "1.0.228" 2679 + source = "registry+https://github.com/rust-lang/crates.io-index" 2680 + checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 2681 + dependencies = [ 2682 + "proc-macro2", 2683 + "quote", 2684 + "syn 2.0.117", 2685 + ] 2686 + 2687 + [[package]] 2688 + name = "serde_json" 2689 + version = "1.0.149" 2690 + source = "registry+https://github.com/rust-lang/crates.io-index" 2691 + checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" 2692 + dependencies = [ 2693 + "itoa", 2694 + "memchr", 2695 + "serde", 2696 + "serde_core", 2697 + "zmij", 2698 + ] 2699 + 2700 + [[package]] 2701 + name = "serde_spanned" 2702 + version = "1.0.4" 2703 + source = "registry+https://github.com/rust-lang/crates.io-index" 2704 + checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" 2705 + dependencies = [ 2706 + "serde_core", 2707 + ] 2708 + 2709 + [[package]] 2710 + name = "sha1" 2711 + version = "0.10.6" 2712 + source = "registry+https://github.com/rust-lang/crates.io-index" 2713 + checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 2714 + dependencies = [ 2715 + "cfg-if", 2716 + "cpufeatures", 2717 + "digest", 2718 + ] 2719 + 2720 + [[package]] 2721 + name = "sha1-checked" 2722 + version = "0.10.0" 2723 + source = "registry+https://github.com/rust-lang/crates.io-index" 2724 + checksum = "89f599ac0c323ebb1c6082821a54962b839832b03984598375bff3975b804423" 2725 + dependencies = [ 2726 + "digest", 2727 + "sha1", 2728 + ] 2729 + 2730 + [[package]] 2731 + name = "sha2" 2732 + version = "0.10.9" 2733 + source = "registry+https://github.com/rust-lang/crates.io-index" 2734 + checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 2735 + dependencies = [ 2736 + "cfg-if", 2737 + "cpufeatures", 2738 + "digest", 2739 + ] 2740 + 2741 + [[package]] 2742 + name = "sharded-slab" 2743 + version = "0.1.7" 2744 + source = "registry+https://github.com/rust-lang/crates.io-index" 2745 + checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 2746 + dependencies = [ 2747 + "lazy_static", 2748 + ] 2749 + 2750 + [[package]] 2751 + name = "shell-words" 2752 + version = "1.1.1" 2753 + source = "registry+https://github.com/rust-lang/crates.io-index" 2754 + checksum = "dc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77" 2755 + 2756 + [[package]] 2757 + name = "signal-hook" 2758 + version = "0.3.18" 2759 + source = "registry+https://github.com/rust-lang/crates.io-index" 2760 + checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" 2761 + dependencies = [ 2762 + "libc", 2763 + "signal-hook-registry", 2764 + ] 2765 + 2766 + [[package]] 2767 + name = "signal-hook" 2768 + version = "0.4.3" 2769 + source = "registry+https://github.com/rust-lang/crates.io-index" 2770 + checksum = "3b57709da74f9ff9f4a27dce9526eec25ca8407c45a7887243b031a58935fb8e" 2771 + dependencies = [ 2772 + "libc", 2773 + "signal-hook-registry", 2774 + ] 2775 + 2776 + [[package]] 2777 + name = "signal-hook-mio" 2778 + version = "0.2.5" 2779 + source = "registry+https://github.com/rust-lang/crates.io-index" 2780 + checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc" 2781 + dependencies = [ 2782 + "libc", 2783 + "mio", 2784 + "signal-hook 0.3.18", 2785 + ] 2786 + 2787 + [[package]] 2788 + name = "signal-hook-registry" 2789 + version = "1.4.8" 2790 + source = "registry+https://github.com/rust-lang/crates.io-index" 2791 + checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" 2792 + dependencies = [ 2793 + "errno", 2794 + "libc", 2795 + ] 2796 + 2797 + [[package]] 2798 + name = "siphasher" 2799 + version = "1.0.2" 2800 + source = "registry+https://github.com/rust-lang/crates.io-index" 2801 + checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" 2802 + 2803 + [[package]] 2804 + name = "slab" 2805 + version = "0.4.12" 2806 + source = "registry+https://github.com/rust-lang/crates.io-index" 2807 + checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" 2808 + 2809 + [[package]] 2810 + name = "smallvec" 2811 + version = "1.15.1" 2812 + source = "registry+https://github.com/rust-lang/crates.io-index" 2813 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 2814 + 2815 + [[package]] 2816 + name = "socket2" 2817 + version = "0.6.2" 2818 + source = "registry+https://github.com/rust-lang/crates.io-index" 2819 + checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" 2820 + dependencies = [ 2821 + "libc", 2822 + "windows-sys 0.60.2", 2823 + ] 2824 + 2825 + [[package]] 2826 + name = "stable_deref_trait" 2827 + version = "1.2.1" 2828 + source = "registry+https://github.com/rust-lang/crates.io-index" 2829 + checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" 2830 + 2831 + [[package]] 2832 + name = "static_assertions" 2833 + version = "1.1.0" 2834 + source = "registry+https://github.com/rust-lang/crates.io-index" 2835 + checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 2836 + 2837 + [[package]] 2838 + name = "strsim" 2839 + version = "0.11.1" 2840 + source = "registry+https://github.com/rust-lang/crates.io-index" 2841 + checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 2842 + 2843 + [[package]] 2844 + name = "strum" 2845 + version = "0.27.2" 2846 + source = "registry+https://github.com/rust-lang/crates.io-index" 2847 + checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" 2848 + dependencies = [ 2849 + "strum_macros 0.27.2", 2850 + ] 2851 + 2852 + [[package]] 2853 + name = "strum" 2854 + version = "0.28.0" 2855 + source = "registry+https://github.com/rust-lang/crates.io-index" 2856 + checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" 2857 + dependencies = [ 2858 + "strum_macros 0.28.0", 2859 + ] 2860 + 2861 + [[package]] 2862 + name = "strum_macros" 2863 + version = "0.27.2" 2864 + source = "registry+https://github.com/rust-lang/crates.io-index" 2865 + checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" 2866 + dependencies = [ 2867 + "heck", 2868 + "proc-macro2", 2869 + "quote", 2870 + "syn 2.0.117", 2871 + ] 2872 + 2873 + [[package]] 2874 + name = "strum_macros" 2875 + version = "0.28.0" 2876 + source = "registry+https://github.com/rust-lang/crates.io-index" 2877 + checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664" 2878 + dependencies = [ 2879 + "heck", 2880 + "proc-macro2", 2881 + "quote", 2882 + "syn 2.0.117", 2883 + ] 2884 + 2885 + [[package]] 2886 + name = "syn" 2887 + version = "1.0.109" 2888 + source = "registry+https://github.com/rust-lang/crates.io-index" 2889 + checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2890 + dependencies = [ 2891 + "proc-macro2", 2892 + "quote", 2893 + "unicode-ident", 2894 + ] 2895 + 2896 + [[package]] 2897 + name = "syn" 2898 + version = "2.0.117" 2899 + source = "registry+https://github.com/rust-lang/crates.io-index" 2900 + checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" 2901 + dependencies = [ 2902 + "proc-macro2", 2903 + "quote", 2904 + "unicode-ident", 2905 + ] 2906 + 2907 + [[package]] 2908 + name = "sysinfo" 2909 + version = "0.37.2" 2910 + source = "registry+https://github.com/rust-lang/crates.io-index" 2911 + checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f" 2912 + dependencies = [ 2913 + "libc", 2914 + "memchr", 2915 + "ntapi", 2916 + "objc2-core-foundation", 2917 + "objc2-io-kit", 2918 + "windows", 2919 + ] 2920 + 2921 + [[package]] 2922 + name = "tempfile" 2923 + version = "3.26.0" 2924 + source = "registry+https://github.com/rust-lang/crates.io-index" 2925 + checksum = "82a72c767771b47409d2345987fda8628641887d5466101319899796367354a0" 2926 + dependencies = [ 2927 + "fastrand", 2928 + "getrandom 0.4.2", 2929 + "once_cell", 2930 + "rustix", 2931 + "windows-sys 0.61.2", 2932 + ] 2933 + 2934 + [[package]] 2935 + name = "terminal_size" 2936 + version = "0.4.3" 2937 + source = "registry+https://github.com/rust-lang/crates.io-index" 2938 + checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" 2939 + dependencies = [ 2940 + "rustix", 2941 + "windows-sys 0.60.2", 2942 + ] 2943 + 2944 + [[package]] 2945 + name = "terminfo" 2946 + version = "0.9.0" 2947 + source = "registry+https://github.com/rust-lang/crates.io-index" 2948 + checksum = "d4ea810f0692f9f51b382fff5893887bb4580f5fa246fde546e0b13e7fcee662" 2949 + dependencies = [ 2950 + "fnv", 2951 + "nom", 2952 + "phf", 2953 + "phf_codegen", 2954 + ] 2955 + 2956 + [[package]] 2957 + name = "termios" 2958 + version = "0.3.3" 2959 + source = "registry+https://github.com/rust-lang/crates.io-index" 2960 + checksum = "411c5bf740737c7918b8b1fe232dca4dc9f8e754b8ad5e20966814001ed0ac6b" 2961 + dependencies = [ 2962 + "libc", 2963 + ] 2964 + 2965 + [[package]] 2966 + name = "termwiz" 2967 + version = "0.23.3" 2968 + source = "registry+https://github.com/rust-lang/crates.io-index" 2969 + checksum = "4676b37242ccbd1aabf56edb093a4827dc49086c0ffd764a5705899e0f35f8f7" 2970 + dependencies = [ 2971 + "anyhow", 2972 + "base64", 2973 + "bitflags 2.11.0", 2974 + "fancy-regex", 2975 + "filedescriptor", 2976 + "finl_unicode", 2977 + "fixedbitset", 2978 + "hex", 2979 + "lazy_static", 2980 + "libc", 2981 + "log", 2982 + "memmem", 2983 + "nix", 2984 + "num-derive", 2985 + "num-traits", 2986 + "ordered-float", 2987 + "pest", 2988 + "pest_derive", 2989 + "phf", 2990 + "sha2", 2991 + "signal-hook 0.3.18", 2992 + "siphasher", 2993 + "terminfo", 2994 + "termios", 2995 + "thiserror 1.0.69", 2996 + "ucd-trie", 2997 + "unicode-segmentation", 2998 + "vtparse", 2999 + "wezterm-bidi", 3000 + "wezterm-blob-leases", 3001 + "wezterm-color-types", 3002 + "wezterm-dynamic", 3003 + "wezterm-input-types", 3004 + "winapi", 3005 + ] 3006 + 3007 + [[package]] 3008 + name = "thiserror" 3009 + version = "1.0.69" 3010 + source = "registry+https://github.com/rust-lang/crates.io-index" 3011 + checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 3012 + dependencies = [ 3013 + "thiserror-impl 1.0.69", 3014 + ] 3015 + 3016 + [[package]] 3017 + name = "thiserror" 3018 + version = "2.0.18" 3019 + source = "registry+https://github.com/rust-lang/crates.io-index" 3020 + checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" 3021 + dependencies = [ 3022 + "thiserror-impl 2.0.18", 3023 + ] 3024 + 3025 + [[package]] 3026 + name = "thiserror-impl" 3027 + version = "1.0.69" 3028 + source = "registry+https://github.com/rust-lang/crates.io-index" 3029 + checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 3030 + dependencies = [ 3031 + "proc-macro2", 3032 + "quote", 3033 + "syn 2.0.117", 3034 + ] 3035 + 3036 + [[package]] 3037 + name = "thiserror-impl" 3038 + version = "2.0.18" 3039 + source = "registry+https://github.com/rust-lang/crates.io-index" 3040 + checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" 3041 + dependencies = [ 3042 + "proc-macro2", 3043 + "quote", 3044 + "syn 2.0.117", 3045 + ] 3046 + 3047 + [[package]] 3048 + name = "thread_local" 3049 + version = "1.1.9" 3050 + source = "registry+https://github.com/rust-lang/crates.io-index" 3051 + checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" 3052 + dependencies = [ 3053 + "cfg-if", 3054 + ] 3055 + 3056 + [[package]] 3057 + name = "time" 3058 + version = "0.3.47" 3059 + source = "registry+https://github.com/rust-lang/crates.io-index" 3060 + checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" 3061 + dependencies = [ 3062 + "deranged", 3063 + "itoa", 3064 + "libc", 3065 + "num-conv", 3066 + "num_threads", 3067 + "powerfmt", 3068 + "serde_core", 3069 + "time-core", 3070 + "time-macros", 3071 + ] 3072 + 3073 + [[package]] 3074 + name = "time-core" 3075 + version = "0.1.8" 3076 + source = "registry+https://github.com/rust-lang/crates.io-index" 3077 + checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" 3078 + 3079 + [[package]] 3080 + name = "time-macros" 3081 + version = "0.2.27" 3082 + source = "registry+https://github.com/rust-lang/crates.io-index" 3083 + checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" 3084 + dependencies = [ 3085 + "num-conv", 3086 + "time-core", 3087 + ] 3088 + 3089 + [[package]] 3090 + name = "tinyvec" 3091 + version = "1.10.0" 3092 + source = "registry+https://github.com/rust-lang/crates.io-index" 3093 + checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" 3094 + dependencies = [ 3095 + "tinyvec_macros", 3096 + ] 3097 + 3098 + [[package]] 3099 + name = "tinyvec_macros" 3100 + version = "0.1.1" 3101 + source = "registry+https://github.com/rust-lang/crates.io-index" 3102 + checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 3103 + 3104 + [[package]] 3105 + name = "tokio" 3106 + version = "1.50.0" 3107 + source = "registry+https://github.com/rust-lang/crates.io-index" 3108 + checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" 3109 + dependencies = [ 3110 + "bytes", 3111 + "libc", 3112 + "mio", 3113 + "parking_lot", 3114 + "pin-project-lite", 3115 + "signal-hook-registry", 3116 + "socket2", 3117 + "tokio-macros", 3118 + "windows-sys 0.61.2", 3119 + ] 3120 + 3121 + [[package]] 3122 + name = "tokio-macros" 3123 + version = "2.6.0" 3124 + source = "registry+https://github.com/rust-lang/crates.io-index" 3125 + checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" 3126 + dependencies = [ 3127 + "proc-macro2", 3128 + "quote", 3129 + "syn 2.0.117", 3130 + ] 3131 + 3132 + [[package]] 3133 + name = "tokio-util" 3134 + version = "0.7.18" 3135 + source = "registry+https://github.com/rust-lang/crates.io-index" 3136 + checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" 3137 + dependencies = [ 3138 + "bytes", 3139 + "futures-core", 3140 + "futures-sink", 3141 + "pin-project-lite", 3142 + "tokio", 3143 + ] 3144 + 3145 + [[package]] 3146 + name = "toml" 3147 + version = "0.9.12+spec-1.1.0" 3148 + source = "registry+https://github.com/rust-lang/crates.io-index" 3149 + checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" 3150 + dependencies = [ 3151 + "serde_core", 3152 + "serde_spanned", 3153 + "toml_datetime", 3154 + "toml_writer", 3155 + ] 3156 + 3157 + [[package]] 3158 + name = "toml_datetime" 3159 + version = "0.7.5+spec-1.1.0" 3160 + source = "registry+https://github.com/rust-lang/crates.io-index" 3161 + checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" 3162 + dependencies = [ 3163 + "serde_core", 3164 + ] 3165 + 3166 + [[package]] 3167 + name = "toml_writer" 3168 + version = "1.0.6+spec-1.1.0" 3169 + source = "registry+https://github.com/rust-lang/crates.io-index" 3170 + checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" 3171 + 3172 + [[package]] 3173 + name = "tracing" 3174 + version = "0.1.44" 3175 + source = "registry+https://github.com/rust-lang/crates.io-index" 3176 + checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" 3177 + dependencies = [ 3178 + "pin-project-lite", 3179 + "tracing-attributes", 3180 + "tracing-core", 3181 + ] 3182 + 3183 + [[package]] 3184 + name = "tracing-attributes" 3185 + version = "0.1.31" 3186 + source = "registry+https://github.com/rust-lang/crates.io-index" 3187 + checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" 3188 + dependencies = [ 3189 + "proc-macro2", 3190 + "quote", 3191 + "syn 2.0.117", 3192 + ] 3193 + 3194 + [[package]] 3195 + name = "tracing-core" 3196 + version = "0.1.36" 3197 + source = "registry+https://github.com/rust-lang/crates.io-index" 3198 + checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" 3199 + dependencies = [ 3200 + "once_cell", 3201 + "valuable", 3202 + ] 3203 + 3204 + [[package]] 3205 + name = "tracing-error" 3206 + version = "0.2.1" 3207 + source = "registry+https://github.com/rust-lang/crates.io-index" 3208 + checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db" 3209 + dependencies = [ 3210 + "tracing", 3211 + "tracing-subscriber", 3212 + ] 3213 + 3214 + [[package]] 3215 + name = "tracing-log" 3216 + version = "0.2.0" 3217 + source = "registry+https://github.com/rust-lang/crates.io-index" 3218 + checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 3219 + dependencies = [ 3220 + "log", 3221 + "once_cell", 3222 + "tracing-core", 3223 + ] 3224 + 3225 + [[package]] 3226 + name = "tracing-subscriber" 3227 + version = "0.3.22" 3228 + source = "registry+https://github.com/rust-lang/crates.io-index" 3229 + checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" 3230 + dependencies = [ 3231 + "matchers", 3232 + "nu-ansi-term", 3233 + "once_cell", 3234 + "regex-automata", 3235 + "sharded-slab", 3236 + "smallvec", 3237 + "thread_local", 3238 + "tracing", 3239 + "tracing-core", 3240 + "tracing-log", 3241 + ] 3242 + 3243 + [[package]] 3244 + name = "typenum" 3245 + version = "1.19.0" 3246 + source = "registry+https://github.com/rust-lang/crates.io-index" 3247 + checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" 3248 + 3249 + [[package]] 3250 + name = "ucd-trie" 3251 + version = "0.1.7" 3252 + source = "registry+https://github.com/rust-lang/crates.io-index" 3253 + checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" 3254 + 3255 + [[package]] 3256 + name = "unicase" 3257 + version = "2.9.0" 3258 + source = "registry+https://github.com/rust-lang/crates.io-index" 3259 + checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" 3260 + 3261 + [[package]] 3262 + name = "unicode-bom" 3263 + version = "2.0.3" 3264 + source = "registry+https://github.com/rust-lang/crates.io-index" 3265 + checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217" 3266 + 3267 + [[package]] 3268 + name = "unicode-ident" 3269 + version = "1.0.24" 3270 + source = "registry+https://github.com/rust-lang/crates.io-index" 3271 + checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" 3272 + 3273 + [[package]] 3274 + name = "unicode-normalization" 3275 + version = "0.1.25" 3276 + source = "registry+https://github.com/rust-lang/crates.io-index" 3277 + checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" 3278 + dependencies = [ 3279 + "tinyvec", 3280 + ] 3281 + 3282 + [[package]] 3283 + name = "unicode-segmentation" 3284 + version = "1.12.0" 3285 + source = "registry+https://github.com/rust-lang/crates.io-index" 3286 + checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 3287 + 3288 + [[package]] 3289 + name = "unicode-truncate" 3290 + version = "2.0.1" 3291 + source = "registry+https://github.com/rust-lang/crates.io-index" 3292 + checksum = "16b380a1238663e5f8a691f9039c73e1cdae598a30e9855f541d29b08b53e9a5" 3293 + dependencies = [ 3294 + "itertools", 3295 + "unicode-segmentation", 3296 + "unicode-width", 3297 + ] 3298 + 3299 + [[package]] 3300 + name = "unicode-width" 3301 + version = "0.2.2" 3302 + source = "registry+https://github.com/rust-lang/crates.io-index" 3303 + checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" 3304 + 3305 + [[package]] 3306 + name = "unicode-xid" 3307 + version = "0.2.6" 3308 + source = "registry+https://github.com/rust-lang/crates.io-index" 3309 + checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 3310 + 3311 + [[package]] 3312 + name = "utf8parse" 3313 + version = "0.2.2" 3314 + source = "registry+https://github.com/rust-lang/crates.io-index" 3315 + checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 3316 + 3317 + [[package]] 3318 + name = "uuid" 3319 + version = "1.21.0" 3320 + source = "registry+https://github.com/rust-lang/crates.io-index" 3321 + checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" 3322 + dependencies = [ 3323 + "atomic", 3324 + "getrandom 0.4.2", 3325 + "js-sys", 3326 + "wasm-bindgen", 3327 + ] 3328 + 3329 + [[package]] 3330 + name = "valuable" 3331 + version = "0.1.1" 3332 + source = "registry+https://github.com/rust-lang/crates.io-index" 3333 + checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 3334 + 3335 + [[package]] 3336 + name = "vergen" 3337 + version = "9.1.0" 3338 + source = "registry+https://github.com/rust-lang/crates.io-index" 3339 + checksum = "b849a1f6d8639e8de261e81ee0fc881e3e3620db1af9f2e0da015d4382ceaf75" 3340 + dependencies = [ 3341 + "anyhow", 3342 + "cargo_metadata", 3343 + "derive_builder", 3344 + "regex", 3345 + "rustversion", 3346 + "time", 3347 + "vergen-lib", 3348 + ] 3349 + 3350 + [[package]] 3351 + name = "vergen-gix" 3352 + version = "9.1.0" 3353 + source = "registry+https://github.com/rust-lang/crates.io-index" 3354 + checksum = "24433912be6b84c6f8f41907edfaad852deaa666f59da5f46621b0ef58b644f0" 3355 + dependencies = [ 3356 + "anyhow", 3357 + "derive_builder", 3358 + "gix", 3359 + "rustversion", 3360 + "time", 3361 + "vergen", 3362 + "vergen-lib", 3363 + ] 3364 + 3365 + [[package]] 3366 + name = "vergen-lib" 3367 + version = "9.1.0" 3368 + source = "registry+https://github.com/rust-lang/crates.io-index" 3369 + checksum = "b34a29ba7e9c59e62f229ae1932fb1b8fb8a6fdcc99215a641913f5f5a59a569" 3370 + dependencies = [ 3371 + "anyhow", 3372 + "derive_builder", 3373 + "rustversion", 3374 + ] 3375 + 3376 + [[package]] 3377 + name = "version_check" 3378 + version = "0.9.5" 3379 + source = "registry+https://github.com/rust-lang/crates.io-index" 3380 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 3381 + 3382 + [[package]] 3383 + name = "vtparse" 3384 + version = "0.6.2" 3385 + source = "registry+https://github.com/rust-lang/crates.io-index" 3386 + checksum = "6d9b2acfb050df409c972a37d3b8e08cdea3bddb0c09db9d53137e504cfabed0" 3387 + dependencies = [ 3388 + "utf8parse", 3389 + ] 3390 + 3391 + [[package]] 3392 + name = "walkdir" 3393 + version = "2.5.0" 3394 + source = "registry+https://github.com/rust-lang/crates.io-index" 3395 + checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 3396 + dependencies = [ 3397 + "same-file", 3398 + "winapi-util", 3399 + ] 3400 + 3401 + [[package]] 3402 + name = "wasi" 3403 + version = "0.11.1+wasi-snapshot-preview1" 3404 + source = "registry+https://github.com/rust-lang/crates.io-index" 3405 + checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 3406 + 3407 + [[package]] 3408 + name = "wasip2" 3409 + version = "1.0.2+wasi-0.2.9" 3410 + source = "registry+https://github.com/rust-lang/crates.io-index" 3411 + checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" 3412 + dependencies = [ 3413 + "wit-bindgen", 3414 + ] 3415 + 3416 + [[package]] 3417 + name = "wasip3" 3418 + version = "0.4.0+wasi-0.3.0-rc-2026-01-06" 3419 + source = "registry+https://github.com/rust-lang/crates.io-index" 3420 + checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" 3421 + dependencies = [ 3422 + "wit-bindgen", 3423 + ] 3424 + 3425 + [[package]] 3426 + name = "wasm-bindgen" 3427 + version = "0.2.114" 3428 + source = "registry+https://github.com/rust-lang/crates.io-index" 3429 + checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" 3430 + dependencies = [ 3431 + "cfg-if", 3432 + "once_cell", 3433 + "rustversion", 3434 + "wasm-bindgen-macro", 3435 + "wasm-bindgen-shared", 3436 + ] 3437 + 3438 + [[package]] 3439 + name = "wasm-bindgen-macro" 3440 + version = "0.2.114" 3441 + source = "registry+https://github.com/rust-lang/crates.io-index" 3442 + checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" 3443 + dependencies = [ 3444 + "quote", 3445 + "wasm-bindgen-macro-support", 3446 + ] 3447 + 3448 + [[package]] 3449 + name = "wasm-bindgen-macro-support" 3450 + version = "0.2.114" 3451 + source = "registry+https://github.com/rust-lang/crates.io-index" 3452 + checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" 3453 + dependencies = [ 3454 + "bumpalo", 3455 + "proc-macro2", 3456 + "quote", 3457 + "syn 2.0.117", 3458 + "wasm-bindgen-shared", 3459 + ] 3460 + 3461 + [[package]] 3462 + name = "wasm-bindgen-shared" 3463 + version = "0.2.114" 3464 + source = "registry+https://github.com/rust-lang/crates.io-index" 3465 + checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" 3466 + dependencies = [ 3467 + "unicode-ident", 3468 + ] 3469 + 3470 + [[package]] 3471 + name = "wasm-encoder" 3472 + version = "0.244.0" 3473 + source = "registry+https://github.com/rust-lang/crates.io-index" 3474 + checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" 3475 + dependencies = [ 3476 + "leb128fmt", 3477 + "wasmparser", 3478 + ] 3479 + 3480 + [[package]] 3481 + name = "wasm-metadata" 3482 + version = "0.244.0" 3483 + source = "registry+https://github.com/rust-lang/crates.io-index" 3484 + checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" 3485 + dependencies = [ 3486 + "anyhow", 3487 + "indexmap", 3488 + "wasm-encoder", 3489 + "wasmparser", 3490 + ] 3491 + 3492 + [[package]] 3493 + name = "wasmparser" 3494 + version = "0.244.0" 3495 + source = "registry+https://github.com/rust-lang/crates.io-index" 3496 + checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" 3497 + dependencies = [ 3498 + "bitflags 2.11.0", 3499 + "hashbrown 0.15.5", 3500 + "indexmap", 3501 + "semver", 3502 + ] 3503 + 3504 + [[package]] 3505 + name = "wezterm-bidi" 3506 + version = "0.2.3" 3507 + source = "registry+https://github.com/rust-lang/crates.io-index" 3508 + checksum = "0c0a6e355560527dd2d1cf7890652f4f09bb3433b6aadade4c9b5ed76de5f3ec" 3509 + dependencies = [ 3510 + "log", 3511 + "wezterm-dynamic", 3512 + ] 3513 + 3514 + [[package]] 3515 + name = "wezterm-blob-leases" 3516 + version = "0.1.1" 3517 + source = "registry+https://github.com/rust-lang/crates.io-index" 3518 + checksum = "692daff6d93d94e29e4114544ef6d5c942a7ed998b37abdc19b17136ea428eb7" 3519 + dependencies = [ 3520 + "getrandom 0.3.4", 3521 + "mac_address", 3522 + "sha2", 3523 + "thiserror 1.0.69", 3524 + "uuid", 3525 + ] 3526 + 3527 + [[package]] 3528 + name = "wezterm-color-types" 3529 + version = "0.3.0" 3530 + source = "registry+https://github.com/rust-lang/crates.io-index" 3531 + checksum = "7de81ef35c9010270d63772bebef2f2d6d1f2d20a983d27505ac850b8c4b4296" 3532 + dependencies = [ 3533 + "csscolorparser", 3534 + "deltae", 3535 + "lazy_static", 3536 + "wezterm-dynamic", 3537 + ] 3538 + 3539 + [[package]] 3540 + name = "wezterm-dynamic" 3541 + version = "0.2.1" 3542 + source = "registry+https://github.com/rust-lang/crates.io-index" 3543 + checksum = "5f2ab60e120fd6eaa68d9567f3226e876684639d22a4219b313ff69ec0ccd5ac" 3544 + dependencies = [ 3545 + "log", 3546 + "ordered-float", 3547 + "strsim", 3548 + "thiserror 1.0.69", 3549 + "wezterm-dynamic-derive", 3550 + ] 3551 + 3552 + [[package]] 3553 + name = "wezterm-dynamic-derive" 3554 + version = "0.1.1" 3555 + source = "registry+https://github.com/rust-lang/crates.io-index" 3556 + checksum = "46c0cf2d539c645b448eaffec9ec494b8b19bd5077d9e58cb1ae7efece8d575b" 3557 + dependencies = [ 3558 + "proc-macro2", 3559 + "quote", 3560 + "syn 1.0.109", 3561 + ] 3562 + 3563 + [[package]] 3564 + name = "wezterm-input-types" 3565 + version = "0.1.0" 3566 + source = "registry+https://github.com/rust-lang/crates.io-index" 3567 + checksum = "7012add459f951456ec9d6c7e6fc340b1ce15d6fc9629f8c42853412c029e57e" 3568 + dependencies = [ 3569 + "bitflags 1.3.2", 3570 + "euclid", 3571 + "lazy_static", 3572 + "serde", 3573 + "wezterm-dynamic", 3574 + ] 3575 + 3576 + [[package]] 3577 + name = "winapi" 3578 + version = "0.3.9" 3579 + source = "registry+https://github.com/rust-lang/crates.io-index" 3580 + checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3581 + dependencies = [ 3582 + "winapi-i686-pc-windows-gnu", 3583 + "winapi-x86_64-pc-windows-gnu", 3584 + ] 3585 + 3586 + [[package]] 3587 + name = "winapi-i686-pc-windows-gnu" 3588 + version = "0.4.0" 3589 + source = "registry+https://github.com/rust-lang/crates.io-index" 3590 + checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3591 + 3592 + [[package]] 3593 + name = "winapi-util" 3594 + version = "0.1.11" 3595 + source = "registry+https://github.com/rust-lang/crates.io-index" 3596 + checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" 3597 + dependencies = [ 3598 + "windows-sys 0.61.2", 3599 + ] 3600 + 3601 + [[package]] 3602 + name = "winapi-x86_64-pc-windows-gnu" 3603 + version = "0.4.0" 3604 + source = "registry+https://github.com/rust-lang/crates.io-index" 3605 + checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3606 + 3607 + [[package]] 3608 + name = "windows" 3609 + version = "0.61.3" 3610 + source = "registry+https://github.com/rust-lang/crates.io-index" 3611 + checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 3612 + dependencies = [ 3613 + "windows-collections", 3614 + "windows-core", 3615 + "windows-future", 3616 + "windows-link 0.1.3", 3617 + "windows-numerics", 3618 + ] 3619 + 3620 + [[package]] 3621 + name = "windows-collections" 3622 + version = "0.2.0" 3623 + source = "registry+https://github.com/rust-lang/crates.io-index" 3624 + checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 3625 + dependencies = [ 3626 + "windows-core", 3627 + ] 3628 + 3629 + [[package]] 3630 + name = "windows-core" 3631 + version = "0.61.2" 3632 + source = "registry+https://github.com/rust-lang/crates.io-index" 3633 + checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 3634 + dependencies = [ 3635 + "windows-implement", 3636 + "windows-interface", 3637 + "windows-link 0.1.3", 3638 + "windows-result", 3639 + "windows-strings", 3640 + ] 3641 + 3642 + [[package]] 3643 + name = "windows-future" 3644 + version = "0.2.1" 3645 + source = "registry+https://github.com/rust-lang/crates.io-index" 3646 + checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 3647 + dependencies = [ 3648 + "windows-core", 3649 + "windows-link 0.1.3", 3650 + "windows-threading", 3651 + ] 3652 + 3653 + [[package]] 3654 + name = "windows-implement" 3655 + version = "0.60.2" 3656 + source = "registry+https://github.com/rust-lang/crates.io-index" 3657 + checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" 3658 + dependencies = [ 3659 + "proc-macro2", 3660 + "quote", 3661 + "syn 2.0.117", 3662 + ] 3663 + 3664 + [[package]] 3665 + name = "windows-interface" 3666 + version = "0.59.3" 3667 + source = "registry+https://github.com/rust-lang/crates.io-index" 3668 + checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" 3669 + dependencies = [ 3670 + "proc-macro2", 3671 + "quote", 3672 + "syn 2.0.117", 3673 + ] 3674 + 3675 + [[package]] 3676 + name = "windows-link" 3677 + version = "0.1.3" 3678 + source = "registry+https://github.com/rust-lang/crates.io-index" 3679 + checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 3680 + 3681 + [[package]] 3682 + name = "windows-link" 3683 + version = "0.2.1" 3684 + source = "registry+https://github.com/rust-lang/crates.io-index" 3685 + checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 3686 + 3687 + [[package]] 3688 + name = "windows-numerics" 3689 + version = "0.2.0" 3690 + source = "registry+https://github.com/rust-lang/crates.io-index" 3691 + checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 3692 + dependencies = [ 3693 + "windows-core", 3694 + "windows-link 0.1.3", 3695 + ] 3696 + 3697 + [[package]] 3698 + name = "windows-result" 3699 + version = "0.3.4" 3700 + source = "registry+https://github.com/rust-lang/crates.io-index" 3701 + checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 3702 + dependencies = [ 3703 + "windows-link 0.1.3", 3704 + ] 3705 + 3706 + [[package]] 3707 + name = "windows-strings" 3708 + version = "0.4.2" 3709 + source = "registry+https://github.com/rust-lang/crates.io-index" 3710 + checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 3711 + dependencies = [ 3712 + "windows-link 0.1.3", 3713 + ] 3714 + 3715 + [[package]] 3716 + name = "windows-sys" 3717 + version = "0.59.0" 3718 + source = "registry+https://github.com/rust-lang/crates.io-index" 3719 + checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 3720 + dependencies = [ 3721 + "windows-targets 0.52.6", 3722 + ] 3723 + 3724 + [[package]] 3725 + name = "windows-sys" 3726 + version = "0.60.2" 3727 + source = "registry+https://github.com/rust-lang/crates.io-index" 3728 + checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 3729 + dependencies = [ 3730 + "windows-targets 0.53.5", 3731 + ] 3732 + 3733 + [[package]] 3734 + name = "windows-sys" 3735 + version = "0.61.2" 3736 + source = "registry+https://github.com/rust-lang/crates.io-index" 3737 + checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" 3738 + dependencies = [ 3739 + "windows-link 0.2.1", 3740 + ] 3741 + 3742 + [[package]] 3743 + name = "windows-targets" 3744 + version = "0.52.6" 3745 + source = "registry+https://github.com/rust-lang/crates.io-index" 3746 + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 3747 + dependencies = [ 3748 + "windows_aarch64_gnullvm 0.52.6", 3749 + "windows_aarch64_msvc 0.52.6", 3750 + "windows_i686_gnu 0.52.6", 3751 + "windows_i686_gnullvm 0.52.6", 3752 + "windows_i686_msvc 0.52.6", 3753 + "windows_x86_64_gnu 0.52.6", 3754 + "windows_x86_64_gnullvm 0.52.6", 3755 + "windows_x86_64_msvc 0.52.6", 3756 + ] 3757 + 3758 + [[package]] 3759 + name = "windows-targets" 3760 + version = "0.53.5" 3761 + source = "registry+https://github.com/rust-lang/crates.io-index" 3762 + checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" 3763 + dependencies = [ 3764 + "windows-link 0.2.1", 3765 + "windows_aarch64_gnullvm 0.53.1", 3766 + "windows_aarch64_msvc 0.53.1", 3767 + "windows_i686_gnu 0.53.1", 3768 + "windows_i686_gnullvm 0.53.1", 3769 + "windows_i686_msvc 0.53.1", 3770 + "windows_x86_64_gnu 0.53.1", 3771 + "windows_x86_64_gnullvm 0.53.1", 3772 + "windows_x86_64_msvc 0.53.1", 3773 + ] 3774 + 3775 + [[package]] 3776 + name = "windows-threading" 3777 + version = "0.1.0" 3778 + source = "registry+https://github.com/rust-lang/crates.io-index" 3779 + checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 3780 + dependencies = [ 3781 + "windows-link 0.1.3", 3782 + ] 3783 + 3784 + [[package]] 3785 + name = "windows_aarch64_gnullvm" 3786 + version = "0.52.6" 3787 + source = "registry+https://github.com/rust-lang/crates.io-index" 3788 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 3789 + 3790 + [[package]] 3791 + name = "windows_aarch64_gnullvm" 3792 + version = "0.53.1" 3793 + source = "registry+https://github.com/rust-lang/crates.io-index" 3794 + checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" 3795 + 3796 + [[package]] 3797 + name = "windows_aarch64_msvc" 3798 + version = "0.52.6" 3799 + source = "registry+https://github.com/rust-lang/crates.io-index" 3800 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 3801 + 3802 + [[package]] 3803 + name = "windows_aarch64_msvc" 3804 + version = "0.53.1" 3805 + source = "registry+https://github.com/rust-lang/crates.io-index" 3806 + checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" 3807 + 3808 + [[package]] 3809 + name = "windows_i686_gnu" 3810 + version = "0.52.6" 3811 + source = "registry+https://github.com/rust-lang/crates.io-index" 3812 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 3813 + 3814 + [[package]] 3815 + name = "windows_i686_gnu" 3816 + version = "0.53.1" 3817 + source = "registry+https://github.com/rust-lang/crates.io-index" 3818 + checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" 3819 + 3820 + [[package]] 3821 + name = "windows_i686_gnullvm" 3822 + version = "0.52.6" 3823 + source = "registry+https://github.com/rust-lang/crates.io-index" 3824 + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 3825 + 3826 + [[package]] 3827 + name = "windows_i686_gnullvm" 3828 + version = "0.53.1" 3829 + source = "registry+https://github.com/rust-lang/crates.io-index" 3830 + checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" 3831 + 3832 + [[package]] 3833 + name = "windows_i686_msvc" 3834 + version = "0.52.6" 3835 + source = "registry+https://github.com/rust-lang/crates.io-index" 3836 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 3837 + 3838 + [[package]] 3839 + name = "windows_i686_msvc" 3840 + version = "0.53.1" 3841 + source = "registry+https://github.com/rust-lang/crates.io-index" 3842 + checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" 3843 + 3844 + [[package]] 3845 + name = "windows_x86_64_gnu" 3846 + version = "0.52.6" 3847 + source = "registry+https://github.com/rust-lang/crates.io-index" 3848 + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 3849 + 3850 + [[package]] 3851 + name = "windows_x86_64_gnu" 3852 + version = "0.53.1" 3853 + source = "registry+https://github.com/rust-lang/crates.io-index" 3854 + checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" 3855 + 3856 + [[package]] 3857 + name = "windows_x86_64_gnullvm" 3858 + version = "0.52.6" 3859 + source = "registry+https://github.com/rust-lang/crates.io-index" 3860 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 3861 + 3862 + [[package]] 3863 + name = "windows_x86_64_gnullvm" 3864 + version = "0.53.1" 3865 + source = "registry+https://github.com/rust-lang/crates.io-index" 3866 + checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" 3867 + 3868 + [[package]] 3869 + name = "windows_x86_64_msvc" 3870 + version = "0.52.6" 3871 + source = "registry+https://github.com/rust-lang/crates.io-index" 3872 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 3873 + 3874 + [[package]] 3875 + name = "windows_x86_64_msvc" 3876 + version = "0.53.1" 3877 + source = "registry+https://github.com/rust-lang/crates.io-index" 3878 + checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" 3879 + 3880 + [[package]] 3881 + name = "winnow" 3882 + version = "0.7.15" 3883 + source = "registry+https://github.com/rust-lang/crates.io-index" 3884 + checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" 3885 + dependencies = [ 3886 + "memchr", 3887 + ] 3888 + 3889 + [[package]] 3890 + name = "wit-bindgen" 3891 + version = "0.51.0" 3892 + source = "registry+https://github.com/rust-lang/crates.io-index" 3893 + checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" 3894 + dependencies = [ 3895 + "wit-bindgen-rust-macro", 3896 + ] 3897 + 3898 + [[package]] 3899 + name = "wit-bindgen-core" 3900 + version = "0.51.0" 3901 + source = "registry+https://github.com/rust-lang/crates.io-index" 3902 + checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" 3903 + dependencies = [ 3904 + "anyhow", 3905 + "heck", 3906 + "wit-parser", 3907 + ] 3908 + 3909 + [[package]] 3910 + name = "wit-bindgen-rust" 3911 + version = "0.51.0" 3912 + source = "registry+https://github.com/rust-lang/crates.io-index" 3913 + checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" 3914 + dependencies = [ 3915 + "anyhow", 3916 + "heck", 3917 + "indexmap", 3918 + "prettyplease", 3919 + "syn 2.0.117", 3920 + "wasm-metadata", 3921 + "wit-bindgen-core", 3922 + "wit-component", 3923 + ] 3924 + 3925 + [[package]] 3926 + name = "wit-bindgen-rust-macro" 3927 + version = "0.51.0" 3928 + source = "registry+https://github.com/rust-lang/crates.io-index" 3929 + checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" 3930 + dependencies = [ 3931 + "anyhow", 3932 + "prettyplease", 3933 + "proc-macro2", 3934 + "quote", 3935 + "syn 2.0.117", 3936 + "wit-bindgen-core", 3937 + "wit-bindgen-rust", 3938 + ] 3939 + 3940 + [[package]] 3941 + name = "wit-component" 3942 + version = "0.244.0" 3943 + source = "registry+https://github.com/rust-lang/crates.io-index" 3944 + checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" 3945 + dependencies = [ 3946 + "anyhow", 3947 + "bitflags 2.11.0", 3948 + "indexmap", 3949 + "log", 3950 + "serde", 3951 + "serde_derive", 3952 + "serde_json", 3953 + "wasm-encoder", 3954 + "wasm-metadata", 3955 + "wasmparser", 3956 + "wit-parser", 3957 + ] 3958 + 3959 + [[package]] 3960 + name = "wit-parser" 3961 + version = "0.244.0" 3962 + source = "registry+https://github.com/rust-lang/crates.io-index" 3963 + checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" 3964 + dependencies = [ 3965 + "anyhow", 3966 + "id-arena", 3967 + "indexmap", 3968 + "log", 3969 + "semver", 3970 + "serde", 3971 + "serde_derive", 3972 + "serde_json", 3973 + "unicode-xid", 3974 + "wasmparser", 3975 + ] 3976 + 3977 + [[package]] 3978 + name = "zlib-rs" 3979 + version = "0.5.5" 3980 + source = "registry+https://github.com/rust-lang/crates.io-index" 3981 + checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3" 3982 + 3983 + [[package]] 3984 + name = "zmij" 3985 + version = "1.0.21" 3986 + source = "registry+https://github.com/rust-lang/crates.io-index" 3987 + checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
+29 -1
Cargo.toml
··· 14 14 # documentation = "" 15 15 readme = "README.md" 16 16 keywords = ["PKS", "todo", "personal tools"] 17 + rust-version = "1.94.0" 17 18 18 19 [workspace.lints.rust] 19 20 unsafe_code = "forbid" ··· 24 25 nursery = "deny" 25 26 26 27 [workspace.dependencies] 27 - 28 + snafu = "0.9.0" 29 + tracing = "0.1.44" 28 30 29 31 [package] 30 32 name = "filaments" ··· 43 45 workspace = true 44 46 45 47 [dependencies] 48 + tracing.workspace = true 49 + color-eyre = "0.6.5" 50 + human-panic = "2.0.6" 51 + better-panic = "0.3.0" 52 + crossterm = { version = "0.29.0", features = ["event-stream"] } 53 + futures = "0.3.32" 54 + ratatui = "0.30.0" 55 + serde = { version = "1.0.228", features = ["derive"] } 56 + tokio = { version = "1.50.0", features = ["full"] } 57 + tokio-util = "0.7.18" 58 + signal-hook = "0.4.3" 59 + strum = { version = "0.28.0", features = ["derive"] } 60 + directories = "6.0.0" 61 + tracing-subscriber = { version = "0.3.22", features = ["env-filter"] } 62 + tracing-error = "0.2.1" 63 + clap = { version = "4.5.60", features = ["derive", "cargo", "wrap_help", "unicode", "string", "unstable-styles"] } 64 + 65 + [build-dependencies] 66 + anyhow = "1.0.102" 67 + vergen-gix = {version = "9.1.0", features = ["build", "cargo"]} 68 + 69 + [profile.release] 70 + codegen-units = 1 71 + lto = true 72 + opt-level = "s" 73 + strip = true 46 74
+16
build.rs
··· 1 + //! Build script for filaments 2 + //! populates rustc environment variables with metadata about 3 + //! the crate, such as author, commit, etc 4 + use anyhow::Result; 5 + use vergen_gix::{BuildBuilder, CargoBuilder, Emitter, GixBuilder}; 6 + 7 + fn main() -> Result<()> { 8 + let build = BuildBuilder::all_build()?; 9 + let gix = GixBuilder::all_git()?; 10 + let cargo = CargoBuilder::all_cargo()?; 11 + Emitter::default() 12 + .add_instructions(&build)? 13 + .add_instructions(&gix)? 14 + .add_instructions(&cargo)? 15 + .emit() 16 + }
+5 -5
flake.lock
··· 22 22 }, 23 23 "nixpkgs": { 24 24 "locked": { 25 - "lastModified": 1772542754, 26 - "narHash": "sha256-WGV2hy+VIeQsYXpsLjdr4GvHv5eECMISX1zKLTedhdg=", 27 - "rev": "8c809a146a140c5c8806f13399592dbcb1bb5dc4", 28 - "revCount": 957538, 25 + "lastModified": 1772773019, 26 + "narHash": "sha256-E1bxHxNKfDoQUuvriG71+f+s/NT0qWkImXsYZNFFfCs=", 27 + "rev": "aca4d95fce4914b3892661bcb80b8087293536c6", 28 + "revCount": 958961, 29 29 "type": "tarball", 30 - "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.957538%2Brev-8c809a146a140c5c8806f13399592dbcb1bb5dc4/019cb563-81c1-72cf-aec2-46679a968011/source.tar.gz" 30 + "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.958961%2Brev-aca4d95fce4914b3892661bcb80b8087293536c6/019cc7ad-65c5-7d4e-9860-842d09d8f4fa/source.tar.gz" 31 31 }, 32 32 "original": { 33 33 "type": "tarball",
+1 -1
flake.nix
··· 1 1 { 2 - description = "An empty flake template that you can adapt to your own environment"; 2 + description = "Filaments dev flake"; 3 3 4 4 # Flake inputs 5 5 inputs = {
+14 -3
justfile
··· 3 3 default: 4 4 @just --list 5 5 6 + # release mode by default 7 + mode := "debug" 8 + 9 + _cargo_flags := if mode == "release" { "--release" } else { "" } 10 + 11 + # Builds everything in the workspace 6 12 build: 7 - cargo build 13 + cargo build {{_cargo_flags}} 14 + 15 + # Runs Filaments 16 + run: 17 + cargo run {{_cargo_flags}} 8 18 9 - test: 10 - cargo test 19 + # Run all tests 20 + test: 21 + cargo test {{_cargo_flags}}
+191
src/app.rs
··· 1 + use color_eyre::eyre::Result; 2 + use crossterm::event::KeyEvent; 3 + use ratatui::layout::Rect; 4 + use serde::{Deserialize, Serialize}; 5 + use tokio::sync::mpsc::{self, UnboundedReceiver, UnboundedSender}; 6 + use tracing::{debug, info}; 7 + 8 + use crate::{ 9 + components::Component, 10 + config::Config, 11 + signal::Signal, 12 + tui::{Event, Tui}, 13 + }; 14 + 15 + pub struct App { 16 + config: Config, 17 + tick_rate: f64, 18 + frame_rate: f64, 19 + components: Vec<Box<dyn Component>>, 20 + should_quit: bool, 21 + should_suspend: bool, 22 + #[allow(dead_code)] 23 + region: Region, 24 + last_tick_key_events: Vec<KeyEvent>, 25 + signal_tx: UnboundedSender<Signal>, 26 + signal_rx: UnboundedReceiver<Signal>, 27 + } 28 + 29 + /// The different regions of the application that the user can 30 + /// be interacting with. Think of these kind of like the highest class of 31 + /// components. 32 + #[derive(Default, Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] 33 + pub enum Region { 34 + #[default] 35 + Home, 36 + } 37 + 38 + impl App { 39 + /// Construct a new `App` instance. 40 + pub fn new(tick_rate: f64, frame_rate: f64) -> Self { 41 + let (signal_tx, signal_rx) = mpsc::unbounded_channel(); 42 + 43 + Self { 44 + tick_rate, 45 + frame_rate, 46 + components: vec![], 47 + should_quit: false, 48 + should_suspend: false, 49 + config: Config::new(), 50 + region: Region::default(), 51 + last_tick_key_events: Vec::new(), 52 + signal_tx, 53 + signal_rx, 54 + } 55 + } 56 + 57 + pub async fn run(&mut self) -> Result<()> { 58 + let mut tui = Tui::new()? 59 + .with_tick_rate(self.tick_rate) 60 + .with_frame_rate(self.frame_rate); 61 + tui.enter()?; 62 + 63 + for component in &mut self.components { 64 + component.register_signal_handler(self.signal_tx.clone())?; 65 + } 66 + for component in &mut self.components { 67 + component.register_config_handler(self.config.clone())?; 68 + } 69 + 70 + for component in &mut self.components { 71 + component.init(tui.size()?)?; 72 + } 73 + 74 + let signal_tx = self.signal_tx.clone(); 75 + 76 + loop { 77 + self.handle_events(&mut tui).await?; 78 + 79 + self.handle_signals(&mut tui).await?; 80 + if self.should_suspend { 81 + tui.suspend()?; 82 + 83 + // We are sending resume here because once its done suspending, 84 + // it will continue execution here. 85 + signal_tx.send(Signal::Resume)?; 86 + signal_tx.send(Signal::ClearScreen)?; 87 + tui.enter()?; 88 + } else if self.should_quit { 89 + tui.stop(); 90 + break; 91 + } 92 + } 93 + 94 + tui.exit()?; 95 + 96 + Ok(()) 97 + } 98 + 99 + async fn handle_events(&mut self, tui: &mut Tui) -> Result<()> { 100 + let Some(event) = tui.next_event().await else { 101 + return Ok(()); 102 + }; 103 + 104 + let signal_tx = self.signal_tx.clone(); 105 + 106 + match event { 107 + Event::Quit => signal_tx.send(Signal::Quit)?, 108 + Event::Tick => signal_tx.send(Signal::Tick)?, 109 + Event::Render => signal_tx.send(Signal::Render)?, 110 + Event::Resize(x, y) => signal_tx.send(Signal::Resize(x, y))?, 111 + Event::Key(key) => self.handle_key_event(key)?, 112 + 113 + _ => {} 114 + } 115 + 116 + for component in &mut self.components { 117 + if let Some(signal) = component.handle_events(Some(event.clone()))? { 118 + signal_tx.send(signal)?; 119 + } 120 + } 121 + 122 + Ok(()) 123 + } 124 + 125 + // We are okay with this because we know that this is the function signature, 126 + // we just haven't implemented the keyboard parsing logic just yet, revisit 127 + // this later. 128 + // 129 + // DO NOT LET THIS MERGE INTO MAIN WITH THIS CLIPPY IGNORES 130 + #[allow(clippy::needless_pass_by_ref_mut, clippy::unnecessary_wraps)] 131 + fn handle_key_event(&mut self, key: KeyEvent) -> Result<()> { 132 + let _signal_tx = self.signal_tx.clone(); 133 + 134 + info!("key received: {key:#?}"); 135 + 136 + Ok(()) 137 + } 138 + 139 + async fn handle_signals(&mut self, tui: &mut Tui) -> Result<()> { 140 + while let Some(signal) = self.signal_rx.recv().await { 141 + if signal != Signal::Tick && signal != Signal::Render { 142 + debug!("App: handling signal: {signal:?}"); 143 + } 144 + 145 + match signal { 146 + Signal::Tick => { 147 + self.last_tick_key_events.drain(..); 148 + } 149 + 150 + Signal::Quit => self.should_quit = true, 151 + 152 + Signal::Suspend => self.should_suspend = true, 153 + 154 + Signal::Resume => self.should_suspend = false, 155 + 156 + Signal::ClearScreen => tui.terminal.clear()?, 157 + Signal::Resize(x, y) => self.handle_resize(tui, x, y)?, 158 + Signal::Render => self.render(tui)?, 159 + _ => {} 160 + } 161 + 162 + for component in &mut self.components { 163 + if let Some(signal) = component.update(signal.clone())? { 164 + self.signal_tx.send(signal)?; 165 + } 166 + } 167 + } 168 + Ok(()) 169 + } 170 + 171 + fn handle_resize(&mut self, tui: &mut Tui, w: u16, h: u16) -> Result<()> { 172 + tui.resize(Rect::new(0, 0, w, h))?; 173 + 174 + self.render(tui)?; 175 + Ok(()) 176 + } 177 + 178 + fn render(&mut self, tui: &mut Tui) -> Result<()> { 179 + tui.draw(|frame| { 180 + for component in &mut self.components { 181 + if let Err(err) = component.draw(frame, frame.area()) { 182 + let _ = self 183 + .signal_tx 184 + .send(Signal::Error(format!("Failed to draw: {err:?}"))); 185 + } 186 + } 187 + })?; 188 + 189 + Ok(()) 190 + } 191 + }
+42
src/cli.rs
··· 1 + use clap::Parser; 2 + 3 + use crate::config::{get_config_dir, get_data_dir}; 4 + 5 + #[derive(Parser, Debug)] 6 + #[command(author, version = version(), about)] 7 + pub struct Cli { 8 + /// Tick rate, i.e. number of ticks per second 9 + #[arg(short, long, value_name = "FLOAT", default_value_t = 4.0)] 10 + pub tick_rate: f64, 11 + 12 + /// Frame rate, i.e. number of frames per second 13 + #[arg(short, long, value_name = "FLOAT", default_value_t = 60.0)] 14 + pub frame_rate: f64, 15 + } 16 + 17 + const VERSION_MESSAGE: &str = concat!( 18 + env!("CARGO_PKG_VERSION"), 19 + "-", 20 + env!("VERGEN_GIT_DESCRIBE"), 21 + " (", 22 + env!("VERGEN_BUILD_DATE"), 23 + ")" 24 + ); 25 + 26 + pub fn version() -> String { 27 + let author = clap::crate_authors!(); 28 + 29 + // let current_exe_path = PathBuf::from(clap::crate_name!()).display().to_string(); 30 + let config_dir_path = get_config_dir().display().to_string(); 31 + let data_dir_path = get_data_dir().display().to_string(); 32 + 33 + format!( 34 + "\ 35 + {VERSION_MESSAGE} 36 + 37 + Authors: {author} 38 + 39 + Config directory: {config_dir_path} 40 + Data directory: {data_dir_path}" 41 + ) 42 + }
+119
src/components/mod.rs
··· 1 + use crossterm::event::{KeyEvent, MouseEvent}; 2 + use ratatui::{ 3 + Frame, 4 + layout::{Rect, Size}, 5 + }; 6 + use tokio::sync::mpsc::UnboundedSender; 7 + 8 + use crate::{config::Config, signal::Signal, tui::Event}; 9 + 10 + /// `Component` is a trait that represents a visual and interactive element of the user interface. 11 + /// 12 + /// Implementers of this trait can be registered with the main application loop and will be able to 13 + /// receive events, update state, and be rendered on the screen. 14 + pub trait Component: Send { 15 + /// Register a signal handler that can send signals for processing if necessary. 16 + /// 17 + /// # Arguments 18 + /// 19 + /// * `tx` - An unbounded sender that can send signals. 20 + /// 21 + /// # Returns 22 + /// 23 + /// * [`color_eyre::Result<()>`] - An Ok result or an error. 24 + fn register_signal_handler(&mut self, tx: UnboundedSender<Signal>) -> color_eyre::Result<()> { 25 + let _ = tx; // to appease clippy 26 + Ok(()) 27 + } 28 + /// Register a configuration handler that provides configuration settings if necessary. 29 + /// 30 + /// # Arguments 31 + /// 32 + /// * `config` - Configuration settings. 33 + /// 34 + /// # Returns 35 + /// 36 + /// * [`color_eyre::Result<()>`] - An Ok result or an error. 37 + fn register_config_handler(&mut self, config: Config) -> color_eyre::Result<()> { 38 + let _ = config; // to appease clippy 39 + Ok(()) 40 + } 41 + /// Initialize the component with a specified area if necessary. 42 + /// 43 + /// # Arguments 44 + /// 45 + /// * `area` - Rectangular area to initialize the component within. 46 + /// 47 + /// # Returns 48 + /// 49 + /// * [`color_eyre::Result<()>`] - An Ok result or an error. 50 + fn init(&mut self, area: Size) -> color_eyre::Result<()> { 51 + let _ = area; // to appease clippy 52 + Ok(()) 53 + } 54 + /// Handle incoming events and produce signals if necessary. 55 + /// 56 + /// # Arguments 57 + /// 58 + /// * `event` - An optional event to be processed. 59 + /// 60 + /// # Returns 61 + /// 62 + /// * [`color_eyre::Result<Option<signal>>`] - A signal to be processed or none. 63 + fn handle_events(&mut self, event: Option<Event>) -> color_eyre::Result<Option<Signal>> { 64 + let signal = match event { 65 + Some(Event::Key(key_event)) => self.handle_key_event(key_event)?, 66 + Some(Event::Mouse(mouse_event)) => self.handle_mouse_event(mouse_event)?, 67 + _ => None, 68 + }; 69 + Ok(signal) 70 + } 71 + /// Handle key events and produce signals if necessary. 72 + /// 73 + /// # Arguments 74 + /// 75 + /// * `key` - A key event to be processed. 76 + /// 77 + /// # Returns 78 + /// 79 + /// * [`color_eyre::Result<Option<signal>>`] - A signal to be processed or none. 80 + fn handle_key_event(&mut self, key: KeyEvent) -> color_eyre::Result<Option<Signal>> { 81 + let _ = key; // to appease clippy 82 + Ok(None) 83 + } 84 + /// Handle mouse events and produce signals if necessary. 85 + /// 86 + /// # Arguments 87 + /// 88 + /// * `mouse` - A mouse event to be processed. 89 + /// 90 + /// # Returns 91 + /// 92 + /// * [`color_eyre::Result<Option<signal>>`] - A signal to be processed or none. 93 + fn handle_mouse_event(&mut self, mouse: MouseEvent) -> color_eyre::Result<Option<Signal>> { 94 + let _ = mouse; // to appease clippy 95 + Ok(None) 96 + } 97 + /// Update the state of the component based on a received signal. (REQUIRED) 98 + /// 99 + /// # Arguments 100 + /// 101 + /// * `signal` - A signal that may modify the state of the component. 102 + /// 103 + /// # Returns 104 + /// 105 + /// * [`color_eyre::Result<Option<signal>>`] - A signal to be processed or none. 106 + fn update(&mut self, signal: Signal) -> color_eyre::Result<Option<Signal>>; 107 + 108 + /// Render the component on the screen. (REQUIRED) 109 + /// 110 + /// # Arguments 111 + /// 112 + /// * `f` - A frame used for rendering. 113 + /// * `area` - The area in which the component should be drawn. 114 + /// 115 + /// # Returns 116 + /// 117 + /// * [`color_eyre::Result<()>`] - An Ok result or an error. 118 + fn draw(&mut self, frame: &mut Frame, area: Rect) -> color_eyre::Result<()>; 119 + }
+76
src/config.rs
··· 1 + use directories::ProjectDirs; 2 + use serde::Deserialize; 3 + use std::{env, path::PathBuf, sync::LazyLock}; 4 + 5 + /// Project Name: Filaments 6 + pub static PROJECT_NAME: LazyLock<String> = 7 + LazyLock::new(|| env!("CARGO_CRATE_NAME").to_uppercase()); 8 + 9 + /// The OS-agnostic data directory for the project. 10 + pub static DATA_DIRECTORY: LazyLock<Option<PathBuf>> = LazyLock::new(|| { 11 + env::var(format!("{}_DATA", PROJECT_NAME.clone())) 12 + .ok() 13 + .map(PathBuf::from) 14 + }); 15 + 16 + /// The OS-agnostic config directory for the project. 17 + pub static CONFIG_DIRECTORY: LazyLock<Option<PathBuf>> = LazyLock::new(|| { 18 + env::var(format!("{}_CONFIG", PROJECT_NAME.clone())) 19 + .ok() 20 + .map(PathBuf::from) 21 + }); 22 + 23 + /// The App Config and Data locations. 24 + #[derive(Clone, Debug, Deserialize, Default)] 25 + #[expect(dead_code)] 26 + pub struct AppDirs { 27 + #[serde(default)] 28 + pub data_dir: PathBuf, 29 + #[serde(default)] 30 + pub config_dir: PathBuf, 31 + } 32 + 33 + /// Configuration for the App 34 + #[expect(dead_code)] 35 + #[derive(Debug, Clone)] 36 + pub struct Config { 37 + pub app_dirs: AppDirs, // pub data_dir: PathBuf, 38 + // pub keybindings: KeyBindings, 39 + 40 + // pub styles: Styles, 41 + } 42 + 43 + impl Config { 44 + pub fn new() -> Self { 45 + Self { 46 + app_dirs: AppDirs { 47 + data_dir: get_data_dir(), 48 + config_dir: get_config_dir(), 49 + }, 50 + } 51 + } 52 + } 53 + 54 + /// Returns the path to the OS-agnostic data directory. 55 + pub fn get_data_dir() -> PathBuf { 56 + DATA_DIRECTORY.clone().unwrap_or_else(|| { 57 + project_directory().map_or_else( 58 + || PathBuf::from(".").join(".data"), 59 + |proj_dirs| proj_dirs.data_local_dir().to_path_buf(), 60 + ) 61 + }) 62 + } 63 + 64 + /// Returns the path to the OS-agnostic config directory. 65 + pub fn get_config_dir() -> PathBuf { 66 + CONFIG_DIRECTORY.clone().unwrap_or_else(|| { 67 + project_directory().map_or_else( 68 + || PathBuf::from(".").join(".config"), 69 + |proj_dirs| proj_dirs.config_local_dir().to_path_buf(), 70 + ) 71 + }) 72 + } 73 + 74 + fn project_directory() -> Option<ProjectDirs> { 75 + ProjectDirs::from("com", "suri-codes", env!("CARGO_PKG_NAME")) 76 + }
+74
src/errors.rs
··· 1 + /// Sets the panic-hook to be customized color-eyre `panic_hook`. 2 + /// 3 + /// Additionally the panic handler prints different information 4 + /// based on debug / release builds. 5 + pub fn init() -> color_eyre::Result<()> { 6 + let (_panic_hook, eyre_hook) = color_eyre::config::HookBuilder::default() 7 + .panic_section(format!( 8 + "This is a bug. Please report it at {}", 9 + env!("CARGO_PKG_REPOSITORY") 10 + )) 11 + .capture_span_trace_by_default(false) 12 + .display_location_section(false) 13 + .display_env_section(false) 14 + .into_hooks(); 15 + 16 + eyre_hook.install()?; 17 + std::panic::set_hook(Box::new(move |panic_info| { 18 + //TODO: exit from terminal if the app is in a terminal 19 + 20 + // in release mode, do human_panic printing 21 + #[cfg(not(debug_assertions))] 22 + { 23 + use human_panic::{handle_dump, metadata, print_msg}; 24 + let metadata = metadata!(); 25 + let file_path = handle_dump(&metadata, panic_info); 26 + print_msg(file_path, &metadata) 27 + .expect("human-panic: printing error message to console failed"); 28 + eprintln!("{}", _panic_hook.panic_report(panic_info)); 29 + } 30 + 31 + // in debug mode do better panic printing 32 + #[cfg(debug_assertions)] 33 + { 34 + better_panic::Settings::auto() 35 + .most_recent_first(false) 36 + .lineno_suffix(true) 37 + .verbosity(better_panic::Verbosity::Full) 38 + .create_panic_handler()(panic_info); 39 + } 40 + 41 + // 1 = failure 42 + std::process::exit(1) 43 + })); 44 + 45 + Ok(()) 46 + } 47 + 48 + /// Akin to `dbg!` macro, except that it generates `tracing::Event`s instead 49 + /// of printing to standard error. 50 + /// 51 + /// Can customize level by providing a `tracing::Level`, but its debug by default. 52 + #[macro_export] 53 + macro_rules! trace_dbg { 54 + (target: $target:expr, level: $level:expr, $ex:expr) => { 55 + { 56 + match $ex { 57 + value => { 58 + tracing::event!(target: $target, $level, ?value, stringify!($ex)); 59 + value 60 + } 61 + } 62 + } 63 + }; 64 + (level: $level:expr, $ex:expr) => { 65 + trace_dbg!(target: module_path!(), level: $level, $ex) 66 + }; 67 + 68 + (target: $target:expr, $ex:expr) => { 69 + trace_dbg!(target: $target, level: tracing::Level::DEBUG, $ex) 70 + }; 71 + ($ex:expr) => { 72 + trace_dbg!(level: tracing::Level::DEBUG, $ex) 73 + }; 74 + }
+52
src/logging.rs
··· 1 + use std::{ 2 + fs::{File, create_dir_all}, 3 + sync::LazyLock, 4 + }; 5 + 6 + use color_eyre::eyre::Result; 7 + use tracing::Level; 8 + use tracing_error::ErrorLayer; 9 + use tracing_subscriber::{EnvFilter, Layer, fmt, layer::SubscriberExt, util::SubscriberInitExt}; 10 + 11 + use crate::config; 12 + 13 + /// The user-set log level if it exists. 14 + pub static LOG_LEVEL_ENV: LazyLock<String> = 15 + LazyLock::new(|| format!("{}_LOG_LEVEL", config::PROJECT_NAME.clone())); 16 + 17 + /// The logfile name set by our package name. 18 + pub static LOG_FILE: LazyLock<String> = LazyLock::new(|| format!("{}.log", env!("CARGO_PKG_NAME"))); 19 + 20 + /// Initializes the logger, which writes logs to a `log_file` in the data dir. 21 + /// 22 + /// NOTE: log level is configurable via the `RUST_LOG` env var or the 23 + /// `FILAMENTS_LOG_LEVEL` env var 24 + pub fn init() -> Result<()> { 25 + let directory = config::get_data_dir(); 26 + 27 + create_dir_all(&directory)?; 28 + 29 + let log_path = directory.join(LOG_FILE.clone()); 30 + let log_file = File::create(log_path)?; 31 + 32 + let env_filter = EnvFilter::builder().with_default_directive(Level::INFO.into()); 33 + 34 + // If `RUST_LOG` is set, use that as default,, or use value of `LOG_ENV` variable. 35 + let env_filter = env_filter 36 + .try_from_env() 37 + .or_else(|_| env_filter.with_env_var(LOG_LEVEL_ENV.clone()).from_env())?; 38 + 39 + let file_subscriber = fmt::layer() 40 + .with_file(true) 41 + .with_line_number(true) 42 + .with_writer(log_file) 43 + .with_target(false) 44 + .with_ansi(false) 45 + .with_filter(env_filter); 46 + tracing_subscriber::registry() 47 + .with(file_subscriber) 48 + .with(ErrorLayer::default()) 49 + .try_init()?; 50 + 51 + Ok(()) 52 + }
+24 -2
src/main.rs
··· 2 2 //! My (suri.codes) personal-knowledge-system, with deeply integrated task tracking and long term goal planning capabilities. 3 3 //! 4 4 5 - fn main() { 6 - println!("Hello, world!"); 5 + use clap::Parser; 6 + 7 + use crate::{app::App, cli::Cli}; 8 + 9 + mod app; 10 + mod cli; 11 + mod components; 12 + mod config; 13 + mod errors; 14 + mod logging; 15 + mod signal; 16 + mod tui; 17 + 18 + #[tokio::main] 19 + async fn main() -> color_eyre::Result<()> { 20 + errors::init()?; 21 + logging::init()?; 22 + 23 + let args = Cli::parse(); 24 + let mut app = App::new(args.tick_rate, args.frame_rate); 25 + 26 + app.run().await?; 27 + 28 + Ok(()) 7 29 }
+17
src/signal.rs
··· 1 + use strum::Display; 2 + 3 + use serde::{Deserialize, Serialize}; 4 + 5 + /// The varying signals that can be emitted. 6 + #[derive(Debug, Clone, PartialEq, Eq, Display, Serialize, Deserialize)] 7 + pub enum Signal { 8 + Tick, 9 + Render, 10 + Resize(u16, u16), 11 + Suspend, 12 + Resume, 13 + Quit, 14 + ClearScreen, 15 + Error(String), 16 + Help, 17 + }
+280
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 futures::{FutureExt as _, StreamExt as _}; 17 + use ratatui::{Terminal, prelude::CrosstermBackend}; 18 + use tokio::{ 19 + sync::mpsc::{self, UnboundedReceiver, UnboundedSender}, 20 + task::JoinHandle, 21 + time::interval, 22 + }; 23 + use tokio_util::sync::CancellationToken; 24 + use tracing::error; 25 + 26 + /// Events processed by the whole application. 27 + #[expect(dead_code)] 28 + #[derive(Debug, Clone)] 29 + pub enum Event { 30 + /// Application initialized 31 + Init, 32 + 33 + /// Application quit 34 + Quit, 35 + 36 + /// Application error 37 + Error, 38 + 39 + /// Application closed 40 + Closed, 41 + 42 + /// Tick = input refresh rate 43 + Tick, 44 + 45 + /// Render application 46 + Render, 47 + 48 + /// User enters application 49 + FocusGained, 50 + 51 + /// User leaves application 52 + FocusLost, 53 + 54 + /// Paste buffer 55 + Paste(String), 56 + 57 + /// any key event 58 + Key(KeyEvent), 59 + 60 + /// any mouse event 61 + Mouse(MouseEvent), 62 + 63 + /// Application resize 64 + Resize(u16, u16), 65 + } 66 + 67 + /// A TUI which supports the general things you would want out of a TUI abstraction. 68 + pub struct Tui { 69 + pub terminal: Terminal<CrosstermBackend<Stdout>>, 70 + pub task: JoinHandle<()>, 71 + pub cancellation_token: CancellationToken, 72 + pub event_rx: UnboundedReceiver<Event>, 73 + pub event_tx: UnboundedSender<Event>, 74 + pub frame_rate: f64, 75 + pub tick_rate: f64, 76 + pub mouse_enabled: bool, 77 + pub paste_enabled: bool, 78 + } 79 + 80 + #[expect(dead_code)] 81 + impl Tui { 82 + /// Creates a new TUI. 83 + pub fn new() -> Result<Self> { 84 + let (event_tx, event_rx) = mpsc::unbounded_channel(); 85 + Ok(Self { 86 + terminal: Terminal::new(CrosstermBackend::new(stdout()))?, 87 + task: tokio::spawn(async {}), 88 + cancellation_token: CancellationToken::new(), 89 + event_rx, 90 + event_tx, 91 + frame_rate: 60.0, 92 + tick_rate: 4.0, 93 + mouse_enabled: false, 94 + paste_enabled: false, 95 + }) 96 + } 97 + 98 + /// Set the tick rate, which is how often the TUI should 99 + /// source events per second. 100 + pub const fn with_tick_rate(mut self, tick_rate: f64) -> Self { 101 + self.tick_rate = tick_rate; 102 + self 103 + } 104 + 105 + /// Set the frame rate. 106 + pub const fn with_frame_rate(mut self, frame_rate: f64) -> Self { 107 + self.frame_rate = frame_rate; 108 + self 109 + } 110 + 111 + /// Enable mouse interactions. 112 + pub const fn set_mouse_enable(mut self, mouse_enabled: bool) -> Self { 113 + self.mouse_enabled = mouse_enabled; 114 + self 115 + } 116 + 117 + /// Enable pasting into the TUI. 118 + pub const fn set_paste_enabled(mut self, paste_enabled: bool) -> Self { 119 + self.paste_enabled = paste_enabled; 120 + self 121 + } 122 + 123 + /// Begin the TUI event loop 124 + pub fn start(&mut self) { 125 + self.cancel(); 126 + 127 + self.cancellation_token = CancellationToken::new(); 128 + let event_loop = Self::event_loop( 129 + self.event_tx.clone(), 130 + self.cancellation_token.clone(), 131 + self.tick_rate, 132 + self.frame_rate, 133 + ); 134 + self.task = tokio::spawn(async { 135 + event_loop.await; 136 + }); 137 + } 138 + 139 + /// The event-loop for the TUI which sources events from crossterm. 140 + async fn event_loop( 141 + event_tx: UnboundedSender<Event>, 142 + cancellation_token: CancellationToken, 143 + tick_rate: f64, 144 + frame_rate: f64, 145 + ) { 146 + use crossterm::event::Event as CrosstermEvent; 147 + 148 + let mut event_stream = EventStream::new(); 149 + let mut tick_interval = interval(Duration::from_secs_f64(1.0 / tick_rate)); 150 + let mut render_interval = interval(Duration::from_secs_f64(1.0 / frame_rate)); 151 + 152 + event_tx 153 + .send(Event::Init) 154 + .expect("Tui::event_loop: Failed to send init event."); 155 + loop { 156 + let event = tokio::select! { 157 + () = cancellation_token.cancelled() => { 158 + break; 159 + } 160 + _ = tick_interval.tick() => Event::Tick, 161 + _ = render_interval.tick() => Event::Render, 162 + crossterm_event = event_stream.next().fuse() => match crossterm_event { 163 + Some(Ok(event)) => match event { 164 + // we only care about press down events, 165 + // not doing anything related to up / down keypresses 166 + CrosstermEvent::Key(key) if key.kind == KeyEventKind::Press => Event::Key(key), 167 + CrosstermEvent::Key(_) => continue, 168 + 169 + CrosstermEvent::Mouse(mouse) => Event::Mouse(mouse), 170 + CrosstermEvent::Resize(x, y) => Event::Resize(x, y), 171 + CrosstermEvent::FocusLost => {Event::FocusLost }, 172 + CrosstermEvent::FocusGained => {Event::FocusGained }, 173 + CrosstermEvent::Paste(s)=> {Event::Paste(s)}, 174 + 175 + } 176 + Some(Err(_)) => Event::Error, 177 + None => break, 178 + } 179 + }; 180 + if event_tx.send(event).is_err() { 181 + // no more receiver 182 + break; 183 + } 184 + } 185 + 186 + cancellation_token.cancel(); 187 + } 188 + 189 + /// Stops the TUI by canceling the event-loop. 190 + pub fn stop(&self) { 191 + self.cancel(); 192 + let mut counter = 0; 193 + while !self.task.is_finished() { 194 + std::thread::sleep(Duration::from_millis(1)); 195 + counter += 1; 196 + if counter > 50 { 197 + self.task.abort(); 198 + } 199 + if counter > 100 { 200 + error!("Failed to abort task in 100 milliseconds for some reason"); 201 + break; 202 + } 203 + } 204 + } 205 + 206 + // Enters into the TUI by enabling alternate screen and starting event-loop. 207 + pub fn enter(&mut self) -> Result<()> { 208 + enable_raw_mode()?; 209 + crossterm::execute!(stdout(), EnterAlternateScreen, cursor::Hide)?; 210 + if self.mouse_enabled { 211 + crossterm::execute!(stdout(), EnableMouseCapture)?; 212 + } 213 + if self.paste_enabled { 214 + crossterm::execute!(stdout(), EnableBracketedPaste)?; 215 + } 216 + self.start(); 217 + Ok(()) 218 + } 219 + 220 + /// Exits the tui, by leaving alternate screen. 221 + pub fn exit(&mut self) -> color_eyre::Result<()> { 222 + self.stop(); 223 + if crossterm::terminal::is_raw_mode_enabled()? { 224 + self.flush()?; 225 + if self.paste_enabled { 226 + crossterm::execute!(stdout(), DisableBracketedPaste)?; 227 + } 228 + if self.mouse_enabled { 229 + crossterm::execute!(stdout(), DisableMouseCapture)?; 230 + } 231 + crossterm::execute!(stdout(), LeaveAlternateScreen, cursor::Show)?; 232 + crossterm::terminal::disable_raw_mode()?; 233 + } 234 + Ok(()) 235 + } 236 + 237 + /// Cancel the internal event-loop. 238 + pub fn cancel(&self) { 239 + self.cancellation_token.cancel(); 240 + } 241 + 242 + /// Suspend the TUI. 243 + pub fn suspend(&mut self) -> color_eyre::Result<()> { 244 + self.exit()?; 245 + #[cfg(not(windows))] 246 + signal_hook::low_level::raise(signal_hook::consts::signal::SIGTSTP)?; 247 + Ok(()) 248 + } 249 + 250 + /// Resume the TUI. 251 + pub fn resume(&mut self) -> color_eyre::Result<()> { 252 + self.enter()?; 253 + Ok(()) 254 + } 255 + 256 + /// Get the next event. 257 + pub async fn next_event(&mut self) -> Option<Event> { 258 + self.event_rx.recv().await 259 + } 260 + } 261 + 262 + impl Deref for Tui { 263 + type Target = ratatui::Terminal<CrosstermBackend<Stdout>>; 264 + 265 + fn deref(&self) -> &Self::Target { 266 + &self.terminal 267 + } 268 + } 269 + 270 + impl DerefMut for Tui { 271 + fn deref_mut(&mut self) -> &mut Self::Target { 272 + &mut self.terminal 273 + } 274 + } 275 + 276 + impl Drop for Tui { 277 + fn drop(&mut self) { 278 + self.exit().unwrap(); 279 + } 280 + }

History

3 rounds 2 comments
sign up or login to add to the discussion
9 commits
expand
feat: panic_handler
feat/tui: create TUI abstraction
feat/tui: signals + bare config
feat/tui: Component trait
feat/tui: init logging
feat/tui: init app
feat: add build.rs using vergen_gix for metadata
feat/tui: init cli & running tui
feat/config: Keymap + kdl config
2/2 success
expand
expand 0 comments
pull request successfully merged
9 commits
expand
feat: panic_handler
feat/tui: create TUI abstraction
feat/tui: signals + bare config
feat/tui: Component trait
feat/tui: init logging
feat/tui: init app
feat: add build.rs using vergen_gix for metadata
feat/tui: init cli & running tui
feat/config: Keymap + kdl config
2/2 success
expand
expand 1 comment

app should not emit handling signal on debug

suri.codes submitted #0
8 commits
expand
feat: panic_handler
feat/tui: create TUI abstraction
feat/tui: signals + bare config
feat/tui: Component trait
feat/tui: init logging
feat/tui: init app
feat: add build.rs using vergen_gix for metadata
feat/tui: init cli & running tui
expand 1 comment

actually have parsing of the config.kdl and interpret it as keybinds. remove all the unused bindings