git.delta.rocks / jrsonnet / refs/commits / 521a65806d80

difftreelog

refactor use nix bindings instead of REPL

lzxxowxyYaroslav Bolyukin2025-09-01parent: #757475f.patch.diff
in: trunk

33 files changed

modifiedCargo.lockdiffbeforeafterboth
2222
23[[package]]23[[package]]
24name = "adler2"24name = "adler2"
25version = "2.0.0"25version = "2.0.1"
26source = "registry+https://github.com/rust-lang/crates.io-index"26source = "registry+https://github.com/rust-lang/crates.io-index"
27checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"27checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
2828
29[[package]]29[[package]]
30name = "aead"30name = "aead"
6363
64[[package]]64[[package]]
65name = "age"65name = "age"
66version = "0.11.0"66version = "0.11.1"
67source = "registry+https://github.com/rust-lang/crates.io-index"67source = "registry+https://github.com/rust-lang/crates.io-index"
68checksum = "2020562e68d7a02c2743707b262c62484b340a296924a5e4146d5a0a96ca8103"68checksum = "57fc171f4874fa10887e47088f81a55fcf030cd421aa31ec2b370cafebcc608a"
69dependencies = [69dependencies = [
70 "aes",70 "aes",
71 "aes-gcm",71 "aes-gcm",
127127
128[[package]]128[[package]]
129name = "alejandra"129name = "alejandra"
130version = "3.1.0"130version = "4.0.0"
131source = "git+https://github.com/kamadorueda/alejandra#264e23546663a5676a77174cab31340a81aa2cc0"131source = "git+https://github.com/kamadorueda/alejandra#c68bef57c1db3add865493d9cb741a14618bdc28"
132dependencies = [132dependencies = [
133 "mimalloc",133 "mimalloc",
134 "rnix",134 "rnix",
135 "rowan",135 "rowan",
136 "serde",
136]137]
137138
138[[package]]139[[package]]
152153
153[[package]]154[[package]]
154name = "anstream"155name = "anstream"
155version = "0.6.18"156version = "0.6.20"
156source = "registry+https://github.com/rust-lang/crates.io-index"157source = "registry+https://github.com/rust-lang/crates.io-index"
157checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b"158checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192"
158dependencies = [159dependencies = [
159 "anstyle",160 "anstyle",
160 "anstyle-parse",161 "anstyle-parse",
167168
168[[package]]169[[package]]
169name = "anstyle"170name = "anstyle"
170version = "1.0.10"171version = "1.0.11"
171source = "registry+https://github.com/rust-lang/crates.io-index"172source = "registry+https://github.com/rust-lang/crates.io-index"
172checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9"173checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd"
173174
174[[package]]175[[package]]
175name = "anstyle-parse"176name = "anstyle-parse"
176version = "0.2.6"177version = "0.2.7"
177source = "registry+https://github.com/rust-lang/crates.io-index"178source = "registry+https://github.com/rust-lang/crates.io-index"
178checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9"179checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
179dependencies = [180dependencies = [
180 "utf8parse",181 "utf8parse",
181]182]
182183
183[[package]]184[[package]]
184name = "anstyle-query"185name = "anstyle-query"
185version = "1.1.2"186version = "1.1.4"
186source = "registry+https://github.com/rust-lang/crates.io-index"187source = "registry+https://github.com/rust-lang/crates.io-index"
187checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c"188checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2"
188dependencies = [189dependencies = [
189 "windows-sys 0.59.0",190 "windows-sys 0.60.2",
190]191]
191192
192[[package]]193[[package]]
193name = "anstyle-wincon"194name = "anstyle-wincon"
194version = "3.0.6"195version = "3.0.10"
195source = "registry+https://github.com/rust-lang/crates.io-index"196source = "registry+https://github.com/rust-lang/crates.io-index"
196checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125"197checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a"
197dependencies = [198dependencies = [
198 "anstyle",199 "anstyle",
200 "once_cell_polyfill",
199 "windows-sys 0.59.0",201 "windows-sys 0.60.2",
200]202]
201203
202[[package]]204[[package]]
203name = "anyhow"205name = "anyhow"
204version = "1.0.93"206version = "1.0.99"
205source = "registry+https://github.com/rust-lang/crates.io-index"207source = "registry+https://github.com/rust-lang/crates.io-index"
206checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775"208checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100"
207209
208[[package]]210[[package]]
209name = "arc-swap"211name = "arc-swap"
241243
242[[package]]244[[package]]
243name = "async-trait"245name = "async-trait"
244version = "0.1.88"246version = "0.1.89"
245source = "registry+https://github.com/rust-lang/crates.io-index"247source = "registry+https://github.com/rust-lang/crates.io-index"
246checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"248checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
247dependencies = [249dependencies = [
248 "proc-macro2",250 "proc-macro2",
249 "quote",251 "quote",
258260
259[[package]]261[[package]]
260name = "autocfg"262name = "autocfg"
261version = "1.4.0"263version = "1.5.0"
262source = "registry+https://github.com/rust-lang/crates.io-index"264source = "registry+https://github.com/rust-lang/crates.io-index"
263checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"265checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
264266
265[[package]]267[[package]]
266name = "axum"268name = "axum"
283 "pin-project-lite",285 "pin-project-lite",
284 "rustversion",286 "rustversion",
285 "serde",287 "serde",
286 "sync_wrapper 1.0.1",288 "sync_wrapper",
287 "tower 0.5.1",289 "tower 0.5.2",
288 "tower-layer",290 "tower-layer",
289 "tower-service",291 "tower-service",
290]292]
304 "mime",306 "mime",
305 "pin-project-lite",307 "pin-project-lite",
306 "rustversion",308 "rustversion",
307 "sync_wrapper 1.0.1",309 "sync_wrapper",
308 "tower-layer",310 "tower-layer",
309 "tower-service",311 "tower-service",
310]312]
311313
312[[package]]314[[package]]
313name = "backtrace"315name = "backtrace"
314version = "0.3.74"316version = "0.3.75"
315source = "registry+https://github.com/rust-lang/crates.io-index"317source = "registry+https://github.com/rust-lang/crates.io-index"
316checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a"318checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
317dependencies = [319dependencies = [
318 "addr2line",320 "addr2line",
319 "cfg-if",321 "cfg-if",
320 "libc",322 "libc",
321 "miniz_oxide",323 "miniz_oxide",
322 "object",324 "object",
323 "rustc-demangle",325 "rustc-demangle",
324 "windows-targets",326 "windows-targets 0.52.6",
325]327]
326328
327[[package]]329[[package]]
338340
339[[package]]341[[package]]
340name = "base64ct"342name = "base64ct"
341version = "1.6.0"343version = "1.8.0"
342source = "registry+https://github.com/rust-lang/crates.io-index"344source = "registry+https://github.com/rust-lang/crates.io-index"
343checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"345checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba"
344346
345[[package]]347[[package]]
346name = "basic-toml"348name = "basic-toml"
347version = "0.1.9"349version = "0.1.10"
348source = "registry+https://github.com/rust-lang/crates.io-index"350source = "registry+https://github.com/rust-lang/crates.io-index"
349checksum = "823388e228f614e9558c6804262db37960ec8821856535f5c3f59913140558f8"351checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a"
350dependencies = [352dependencies = [
351 "serde",353 "serde",
352]354]
379 "tracing-indicatif",381 "tracing-indicatif",
380]382]
383
384[[package]]
385name = "bindgen"
386version = "0.72.1"
387source = "registry+https://github.com/rust-lang/crates.io-index"
388checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895"
389dependencies = [
390 "bitflags",
391 "cexpr",
392 "clang-sys",
393 "itertools 0.13.0",
394 "log",
395 "prettyplease",
396 "proc-macro2",
397 "quote",
398 "regex",
399 "rustc-hash 2.1.1",
400 "shlex",
401 "syn",
402]
381403
382[[package]]404[[package]]
383name = "bitflags"405name = "bitflags"
384version = "2.9.1"406version = "2.9.3"
385source = "registry+https://github.com/rust-lang/crates.io-index"407source = "registry+https://github.com/rust-lang/crates.io-index"
386checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"408checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d"
387dependencies = [409dependencies = [
388 "serde",410 "serde",
389]411]
418440
419[[package]]441[[package]]
420name = "bumpalo"442name = "bumpalo"
421version = "3.16.0"443version = "3.19.0"
422source = "registry+https://github.com/rust-lang/crates.io-index"444source = "registry+https://github.com/rust-lang/crates.io-index"
423checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"445checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
424446
425[[package]]447[[package]]
426name = "bytecount"448name = "bytecount"
427version = "0.6.8"449version = "0.6.9"
428source = "registry+https://github.com/rust-lang/crates.io-index"450source = "registry+https://github.com/rust-lang/crates.io-index"
429checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce"451checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e"
430452
431[[package]]453[[package]]
432name = "byteorder"454name = "byteorder"
436458
437[[package]]459[[package]]
438name = "bytes"460name = "bytes"
439version = "1.8.0"461version = "1.10.1"
440source = "registry+https://github.com/rust-lang/crates.io-index"462source = "registry+https://github.com/rust-lang/crates.io-index"
441checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da"463checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
442464
443[[package]]465[[package]]
444name = "cbc"466name = "cbc"
450]472]
451473
452[[package]]474[[package]]
453name = "cbitset"475name = "cc"
454version = "0.2.0"476version = "1.2.34"
455source = "registry+https://github.com/rust-lang/crates.io-index"477source = "registry+https://github.com/rust-lang/crates.io-index"
456checksum = "29b6ad25ae296159fb0da12b970b2fe179b234584d7cd294c891e2bbb284466b"478checksum = "42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc"
457dependencies = [479dependencies = [
458 "num-traits",480 "shlex",
459]481]
460482
461[[package]]483[[package]]
462name = "cc"484name = "cexpr"
463version = "1.2.1"485version = "0.6.0"
464source = "registry+https://github.com/rust-lang/crates.io-index"486source = "registry+https://github.com/rust-lang/crates.io-index"
465checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47"487checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
466dependencies = [488dependencies = [
467 "shlex",489 "nom 7.1.3",
468]490]
469491
470[[package]]492[[package]]
471name = "cfg-if"493name = "cfg-if"
472version = "1.0.0"494version = "1.0.3"
473source = "registry+https://github.com/rust-lang/crates.io-index"495source = "registry+https://github.com/rust-lang/crates.io-index"
474checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"496checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
475497
476[[package]]498[[package]]
477name = "cfg_aliases"499name = "cfg_aliases"
529 "zeroize",551 "zeroize",
530]552]
553
554[[package]]
555name = "clang-sys"
556version = "1.8.1"
557source = "registry+https://github.com/rust-lang/crates.io-index"
558checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4"
559dependencies = [
560 "glob",
561 "libc",
562 "libloading",
563]
531564
532[[package]]565[[package]]
533name = "clap"566name = "clap"
534version = "4.5.21"567version = "4.5.46"
535source = "registry+https://github.com/rust-lang/crates.io-index"568source = "registry+https://github.com/rust-lang/crates.io-index"
536checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f"569checksum = "2c5e4fcf9c21d2e544ca1ee9d8552de13019a42aa7dbf32747fa7aaf1df76e57"
537dependencies = [570dependencies = [
538 "clap_builder",571 "clap_builder",
539 "clap_derive",572 "clap_derive",
540]573]
541574
542[[package]]575[[package]]
543name = "clap_builder"576name = "clap_builder"
544version = "4.5.21"577version = "4.5.46"
545source = "registry+https://github.com/rust-lang/crates.io-index"578source = "registry+https://github.com/rust-lang/crates.io-index"
546checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec"579checksum = "fecb53a0e6fcfb055f686001bc2e2592fa527efaf38dbe81a6a9563562e57d41"
547dependencies = [580dependencies = [
548 "anstream",581 "anstream",
549 "anstyle",582 "anstyle",
550 "clap_lex",583 "clap_lex",
551 "strsim",584 "strsim",
552 "terminal_size",585 "terminal_size",
553 "unicase",586 "unicase",
554 "unicode-width 0.2.0",587 "unicode-width 0.2.1",
555]588]
556589
557[[package]]590[[package]]
558name = "clap_complete"591name = "clap_complete"
559version = "4.5.38"592version = "4.5.57"
560source = "registry+https://github.com/rust-lang/crates.io-index"593source = "registry+https://github.com/rust-lang/crates.io-index"
561checksum = "d9647a559c112175f17cf724dc72d3645680a883c58481332779192b0d8e7a01"594checksum = "4d9501bd3f5f09f7bbee01da9a511073ed30a80cd7a509f1214bb74eadea71ad"
562dependencies = [595dependencies = [
563 "clap",596 "clap",
564]597]
565598
566[[package]]599[[package]]
567name = "clap_derive"600name = "clap_derive"
568version = "4.5.18"601version = "4.5.45"
569source = "registry+https://github.com/rust-lang/crates.io-index"602source = "registry+https://github.com/rust-lang/crates.io-index"
570checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab"603checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6"
571dependencies = [604dependencies = [
572 "heck",605 "heck",
573 "proc-macro2",606 "proc-macro2",
577610
578[[package]]611[[package]]
579name = "clap_lex"612name = "clap_lex"
580version = "0.7.3"613version = "0.7.5"
581source = "registry+https://github.com/rust-lang/crates.io-index"614source = "registry+https://github.com/rust-lang/crates.io-index"
582checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7"615checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675"
616
617[[package]]
618name = "codespan-reporting"
619version = "0.12.0"
620source = "registry+https://github.com/rust-lang/crates.io-index"
621checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81"
622dependencies = [
623 "serde",
624 "termcolor",
625 "unicode-width 0.2.1",
626]
583627
584[[package]]628[[package]]
585name = "colorchoice"629name = "colorchoice"
586version = "1.0.3"630version = "1.0.4"
587source = "registry+https://github.com/rust-lang/crates.io-index"631source = "registry+https://github.com/rust-lang/crates.io-index"
588checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990"632checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
589633
590[[package]]634[[package]]
591name = "console"635name = "console"
592version = "0.15.8"636version = "0.16.0"
593source = "registry+https://github.com/rust-lang/crates.io-index"637source = "registry+https://github.com/rust-lang/crates.io-index"
594checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb"638checksum = "2e09ced7ebbccb63b4c65413d821f2e00ce54c5ca4514ddc6b3c892fdbcbc69d"
595dependencies = [639dependencies = [
596 "encode_unicode",640 "encode_unicode",
597 "lazy_static",
598 "libc",641 "libc",
642 "once_cell",
599 "unicode-width 0.1.11",643 "unicode-width 0.2.1",
600 "windows-sys 0.52.0",644 "windows-sys 0.60.2",
601]645]
602646
603[[package]]647[[package]]
632676
633[[package]]677[[package]]
634name = "countme"678name = "countme"
635version = "2.0.4"679version = "3.0.1"
636source = "registry+https://github.com/rust-lang/crates.io-index"680source = "registry+https://github.com/rust-lang/crates.io-index"
637checksum = "328b822bdcba4d4e402be8d9adb6eebf269f969f8eadef977a553ff3c4fbcb58"681checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636"
638682
639[[package]]683[[package]]
640name = "cpufeatures"684name = "cpufeatures"
641version = "0.2.15"685version = "0.2.17"
642source = "registry+https://github.com/rust-lang/crates.io-index"686source = "registry+https://github.com/rust-lang/crates.io-index"
643checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6"687checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
644dependencies = [688dependencies = [
645 "libc",689 "libc",
646]690]
647
648[[package]]
649name = "crossbeam-utils"
650version = "0.8.20"
651source = "registry+https://github.com/rust-lang/crates.io-index"
652checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
653691
654[[package]]692[[package]]
655name = "crossterm"693name = "crossterm"
664 "filedescriptor",702 "filedescriptor",
665 "mio",703 "mio",
666 "parking_lot",704 "parking_lot",
667 "rustix 1.0.7",705 "rustix 1.0.8",
668 "signal-hook",706 "signal-hook",
669 "signal-hook-mio",707 "signal-hook-mio",
670 "winapi",708 "winapi",
690 "typenum",728 "typenum",
691]729]
730
731[[package]]
732name = "ctor"
733version = "0.5.0"
734source = "registry+https://github.com/rust-lang/crates.io-index"
735checksum = "67773048316103656a637612c4a62477603b777d91d9c62ff2290f9cde178fdb"
736dependencies = [
737 "ctor-proc-macro",
738 "dtor",
739]
740
741[[package]]
742name = "ctor-proc-macro"
743version = "0.0.6"
744source = "registry+https://github.com/rust-lang/crates.io-index"
745checksum = "e2931af7e13dc045d8e9d26afccc6fa115d64e115c9c84b1166288b46f6782c2"
692746
693[[package]]747[[package]]
694name = "ctr"748name = "ctr"
726 "syn",780 "syn",
727]781]
782
783[[package]]
784name = "cxx"
785version = "1.0.173"
786source = "registry+https://github.com/rust-lang/crates.io-index"
787checksum = "6c64ed3da1c337cbaae7223cdcff8b4dddf698d188cd3eaddd1116f6b0295950"
788dependencies = [
789 "cc",
790 "cxxbridge-cmd",
791 "cxxbridge-flags",
792 "cxxbridge-macro",
793 "foldhash",
794 "link-cplusplus",
795]
728796
729[[package]]797[[package]]
730name = "dashmap"798name = "cxx-build"
731version = "6.1.0"799version = "1.0.173"
732source = "registry+https://github.com/rust-lang/crates.io-index"800source = "registry+https://github.com/rust-lang/crates.io-index"
733checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf"801checksum = "ae0a26a75a05551f5ae3d75b3557543d06682284eaa7419113162d602cb45766"
734dependencies = [802dependencies = [
735 "cfg-if",803 "cc",
736 "crossbeam-utils",804 "codespan-reporting",
737 "hashbrown 0.14.5",805 "indexmap 2.11.0",
738 "lock_api",806 "proc-macro2",
739 "once_cell",807 "quote",
740 "parking_lot_core",808 "scratch",
809 "syn",
741]810]
811
812[[package]]
813name = "cxxbridge-cmd"
814version = "1.0.173"
815source = "registry+https://github.com/rust-lang/crates.io-index"
816checksum = "952d408b6002b7db4b36da07c682a9cbb34f2db0efa03e976ae50a388414e16c"
817dependencies = [
818 "clap",
819 "codespan-reporting",
820 "indexmap 2.11.0",
821 "proc-macro2",
822 "quote",
823 "syn",
824]
825
826[[package]]
827name = "cxxbridge-flags"
828version = "1.0.173"
829source = "registry+https://github.com/rust-lang/crates.io-index"
830checksum = "ccbd201b471c75c6abb6321cace706d1982d270e308b891c11a3262d320f5265"
831
832[[package]]
833name = "cxxbridge-macro"
834version = "1.0.173"
835source = "registry+https://github.com/rust-lang/crates.io-index"
836checksum = "2bea8b915bbc4cb4288f242aa7ca18b23ecc6965e4d6e7c1b07905e3fe2e0c41"
837dependencies = [
838 "indexmap 2.11.0",
839 "proc-macro2",
840 "quote",
841 "rustversion",
842 "syn",
843]
742844
743[[package]]845[[package]]
744name = "der"846name = "der"
745version = "0.7.9"847version = "0.7.10"
746source = "registry+https://github.com/rust-lang/crates.io-index"848source = "registry+https://github.com/rust-lang/crates.io-index"
747checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0"849checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
748dependencies = [850dependencies = [
749 "const-oid",851 "const-oid",
750 "zeroize",852 "zeroize",
751]853]
752854
753[[package]]855[[package]]
754name = "deranged"856name = "deranged"
755version = "0.4.0"857version = "0.5.2"
756source = "registry+https://github.com/rust-lang/crates.io-index"858source = "registry+https://github.com/rust-lang/crates.io-index"
757checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e"859checksum = "75d7cc94194b4dd0fa12845ef8c911101b7f37633cda14997a6e82099aa0b693"
758dependencies = [860dependencies = [
759 "powerfmt",861 "powerfmt",
760 "serde",862 "serde",
813 "litrs",915 "litrs",
814]916]
917
918[[package]]
919name = "dtor"
920version = "0.1.0"
921source = "registry+https://github.com/rust-lang/crates.io-index"
922checksum = "e58a0764cddb55ab28955347b45be00ade43d4d6f3ba4bf3dc354e4ec9432934"
923dependencies = [
924 "dtor-proc-macro",
925]
926
927[[package]]
928name = "dtor-proc-macro"
929version = "0.0.6"
930source = "registry+https://github.com/rust-lang/crates.io-index"
931checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5"
815932
816[[package]]933[[package]]
817name = "ed25519"934name = "ed25519"
825942
826[[package]]943[[package]]
827name = "ed25519-dalek"944name = "ed25519-dalek"
828version = "2.1.1"945version = "2.2.0"
829source = "registry+https://github.com/rust-lang/crates.io-index"946source = "registry+https://github.com/rust-lang/crates.io-index"
830checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871"947checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9"
831dependencies = [948dependencies = [
832 "curve25519-dalek",949 "curve25519-dalek",
833 "ed25519",950 "ed25519",
839956
840[[package]]957[[package]]
841name = "either"958name = "either"
842version = "1.13.0"959version = "1.15.0"
843source = "registry+https://github.com/rust-lang/crates.io-index"960source = "registry+https://github.com/rust-lang/crates.io-index"
844checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"961checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
845962
846[[package]]963[[package]]
847name = "encode_unicode"964name = "encode_unicode"
848version = "0.3.6"965version = "1.0.0"
849source = "registry+https://github.com/rust-lang/crates.io-index"966source = "registry+https://github.com/rust-lang/crates.io-index"
850checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"967checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
968
969[[package]]
970name = "env_filter"
971version = "0.1.3"
972source = "registry+https://github.com/rust-lang/crates.io-index"
973checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0"
974dependencies = [
975 "log",
976]
977
978[[package]]
979name = "env_logger"
980version = "0.11.8"
981source = "registry+https://github.com/rust-lang/crates.io-index"
982checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f"
983dependencies = [
984 "anstream",
985 "anstyle",
986 "env_filter",
987 "log",
988]
851989
852[[package]]990[[package]]
853name = "equivalent"991name = "equivalent"
854version = "1.0.1"992version = "1.0.2"
855source = "registry+https://github.com/rust-lang/crates.io-index"993source = "registry+https://github.com/rust-lang/crates.io-index"
856checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"994checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
857995
858[[package]]996[[package]]
859name = "errno"997name = "errno"
860version = "0.3.12"998version = "0.3.13"
861source = "registry+https://github.com/rust-lang/crates.io-index"999source = "registry+https://github.com/rust-lang/crates.io-index"
862checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18"1000checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad"
863dependencies = [1001dependencies = [
864 "libc",1002 "libc",
865 "windows-sys 0.59.0",1003 "windows-sys 0.60.2",
866]1004]
8671005
868[[package]]1006[[package]]
869name = "fastrand"1007name = "fastrand"
870version = "2.2.0"1008version = "2.3.0"
871source = "registry+https://github.com/rust-lang/crates.io-index"1009source = "registry+https://github.com/rust-lang/crates.io-index"
872checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4"1010checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
8731011
874[[package]]1012[[package]]
875name = "fiat-crypto"1013name = "fiat-crypto"
8791017
880[[package]]1018[[package]]
881name = "filedescriptor"1019name = "filedescriptor"
882version = "0.8.2"1020version = "0.8.3"
883source = "registry+https://github.com/rust-lang/crates.io-index"1021source = "registry+https://github.com/rust-lang/crates.io-index"
884checksum = "7199d965852c3bac31f779ef99cbb4537f80e952e2d6aa0ffeb30cce00f4f46e"1022checksum = "e40758ed24c9b2eeb76c35fb0aebc66c626084edd827e07e1552279814c6682d"
885dependencies = [1023dependencies = [
886 "libc",1024 "libc",
887 "thiserror 1.0.69",1025 "thiserror 1.0.69",
8991037
900[[package]]1038[[package]]
901name = "fixedbitset"1039name = "fixedbitset"
902version = "0.4.2"1040version = "0.5.7"
903source = "registry+https://github.com/rust-lang/crates.io-index"1041source = "registry+https://github.com/rust-lang/crates.io-index"
904checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"1042checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
9051043
906[[package]]1044[[package]]
907name = "fleet"1045name = "fleet"
963 "nixlike",1101 "nixlike",
964 "nom 8.0.0",1102 "nom 8.0.0",
965 "openssh",1103 "openssh",
966 "rand 0.9.1",1104 "rand 0.9.2",
967 "serde",1105 "serde",
968 "serde_json",1106 "serde_json",
969 "tabled",1107 "tabled",
985 "ed25519-dalek",1123 "ed25519-dalek",
986 "fleet-shared",1124 "fleet-shared",
987 "hex",1125 "hex",
988 "rand 0.9.1",1126 "rand 0.9.2",
989 "x25519-dalek",1127 "x25519-dalek",
990]1128]
9911129
1035 "fluent-syntax",1173 "fluent-syntax",
1036 "intl-memoizer",1174 "intl-memoizer",
1037 "intl_pluralrules",1175 "intl_pluralrules",
1038 "rustc-hash",1176 "rustc-hash 1.1.0",
1039 "self_cell 0.10.3",1177 "self_cell 0.10.3",
1040 "smallvec",1178 "smallvec",
1041 "unic-langid",1179 "unic-langid",
1065source = "registry+https://github.com/rust-lang/crates.io-index"1203source = "registry+https://github.com/rust-lang/crates.io-index"
1066checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"1204checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
1205
1206[[package]]
1207name = "foldhash"
1208version = "0.2.0"
1209source = "registry+https://github.com/rust-lang/crates.io-index"
1210checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
10671211
1068[[package]]1212[[package]]
1069name = "futures"1213name = "futures"
11661310
1167[[package]]1311[[package]]
1168name = "getrandom"1312name = "getrandom"
1169version = "0.2.15"1313version = "0.2.16"
1170source = "registry+https://github.com/rust-lang/crates.io-index"1314source = "registry+https://github.com/rust-lang/crates.io-index"
1171checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"1315checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
1172dependencies = [1316dependencies = [
1173 "cfg-if",1317 "cfg-if",
1174 "libc",1318 "libc",
1175 "wasi 0.11.0+wasi-snapshot-preview1",1319 "wasi 0.11.1+wasi-snapshot-preview1",
1176]1320]
11771321
1178[[package]]1322[[package]]
1184 "cfg-if",1328 "cfg-if",
1185 "libc",1329 "libc",
1186 "r-efi",1330 "r-efi",
1187 "wasi 0.14.2+wasi-0.2.4",1331 "wasi 0.14.3+wasi-0.2.4",
1188]1332]
11891333
1190[[package]]1334[[package]]
1203source = "registry+https://github.com/rust-lang/crates.io-index"1347source = "registry+https://github.com/rust-lang/crates.io-index"
1204checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"1348checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
1349
1350[[package]]
1351name = "glob"
1352version = "0.3.3"
1353source = "registry+https://github.com/rust-lang/crates.io-index"
1354checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
12051355
1206[[package]]1356[[package]]
1207name = "h2"1357name = "h2"
1208version = "0.4.6"1358version = "0.4.12"
1209source = "registry+https://github.com/rust-lang/crates.io-index"1359source = "registry+https://github.com/rust-lang/crates.io-index"
1210checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205"1360checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386"
1211dependencies = [1361dependencies = [
1212 "atomic-waker",1362 "atomic-waker",
1213 "bytes",1363 "bytes",
1214 "fnv",1364 "fnv",
1215 "futures-core",1365 "futures-core",
1216 "futures-sink",1366 "futures-sink",
1217 "http",1367 "http",
1218 "indexmap 2.6.0",1368 "indexmap 2.11.0",
1219 "slab",1369 "slab",
1220 "tokio",1370 "tokio",
1221 "tokio-util",1371 "tokio-util",
1222 "tracing",1372 "tracing",
1223]1373]
1224
1225[[package]]
1226name = "hashbrown"
1227version = "0.9.1"
1228source = "registry+https://github.com/rust-lang/crates.io-index"
1229checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
12301374
1231[[package]]1375[[package]]
1232name = "hashbrown"1376name = "hashbrown"
12421386
1243[[package]]1387[[package]]
1244name = "hashbrown"1388name = "hashbrown"
1245version = "0.15.1"1389version = "0.15.5"
1246source = "registry+https://github.com/rust-lang/crates.io-index"1390source = "registry+https://github.com/rust-lang/crates.io-index"
1247checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3"1391checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
12481392
1249[[package]]1393[[package]]
1250name = "heck"1394name = "heck"
12541398
1255[[package]]1399[[package]]
1256name = "hermit-abi"1400name = "hermit-abi"
1257version = "0.3.9"1401version = "0.5.2"
1258source = "registry+https://github.com/rust-lang/crates.io-index"1402source = "registry+https://github.com/rust-lang/crates.io-index"
1259checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"1403checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
1260
1261[[package]]
1262name = "hermit-abi"
1263version = "0.4.0"
1264source = "registry+https://github.com/rust-lang/crates.io-index"
1265checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc"
12661404
1267[[package]]1405[[package]]
1268name = "hex"1406name = "hex"
13101448
1311[[package]]1449[[package]]
1312name = "http"1450name = "http"
1313version = "1.1.0"1451version = "1.3.1"
1314source = "registry+https://github.com/rust-lang/crates.io-index"1452source = "registry+https://github.com/rust-lang/crates.io-index"
1315checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258"1453checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
1316dependencies = [1454dependencies = [
1317 "bytes",1455 "bytes",
1318 "fnv",1456 "fnv",
13311469
1332[[package]]1470[[package]]
1333name = "http-body-util"1471name = "http-body-util"
1334version = "0.1.2"1472version = "0.1.3"
1335source = "registry+https://github.com/rust-lang/crates.io-index"1473source = "registry+https://github.com/rust-lang/crates.io-index"
1336checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f"1474checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
1337dependencies = [1475dependencies = [
1338 "bytes",1476 "bytes",
1339 "futures-util",1477 "futures-core",
1340 "http",1478 "http",
1341 "http-body",1479 "http-body",
1342 "pin-project-lite",1480 "pin-project-lite",
1343]1481]
13441482
1345[[package]]1483[[package]]
1346name = "httparse"1484name = "httparse"
1347version = "1.9.5"1485version = "1.10.1"
1348source = "registry+https://github.com/rust-lang/crates.io-index"1486source = "registry+https://github.com/rust-lang/crates.io-index"
1349checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946"1487checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
13501488
1351[[package]]1489[[package]]
1352name = "httpdate"1490name = "httpdate"
13621500
1363[[package]]1501[[package]]
1364name = "hyper"1502name = "hyper"
1365version = "1.5.0"1503version = "1.7.0"
1366source = "registry+https://github.com/rust-lang/crates.io-index"1504source = "registry+https://github.com/rust-lang/crates.io-index"
1367checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a"1505checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e"
1368dependencies = [1506dependencies = [
1507 "atomic-waker",
1369 "bytes",1508 "bytes",
1370 "futures-channel",1509 "futures-channel",
1371 "futures-util",1510 "futures-core",
1372 "h2",1511 "h2",
1373 "http",1512 "http",
1374 "http-body",1513 "http-body",
1375 "httparse",1514 "httparse",
1376 "httpdate",1515 "httpdate",
1377 "itoa",1516 "itoa",
1378 "pin-project-lite",1517 "pin-project-lite",
1518 "pin-utils",
1379 "smallvec",1519 "smallvec",
1380 "tokio",1520 "tokio",
1381 "want",1521 "want",
13961536
1397[[package]]1537[[package]]
1398name = "hyper-util"1538name = "hyper-util"
1399version = "0.1.10"1539version = "0.1.16"
1400source = "registry+https://github.com/rust-lang/crates.io-index"1540source = "registry+https://github.com/rust-lang/crates.io-index"
1401checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4"1541checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e"
1402dependencies = [1542dependencies = [
1403 "bytes",1543 "bytes",
1404 "futures-channel",1544 "futures-channel",
1545 "futures-core",
1405 "futures-util",1546 "futures-util",
1406 "http",1547 "http",
1407 "http-body",1548 "http-body",
1408 "hyper",1549 "hyper",
1550 "libc",
1409 "pin-project-lite",1551 "pin-project-lite",
1410 "socket2",1552 "socket2 0.6.0",
1411 "tokio",1553 "tokio",
1412 "tower-service",1554 "tower-service",
1413 "tracing",1555 "tracing",
1414]1556]
14151557
1416[[package]]1558[[package]]
1417name = "i18n-config"1559name = "i18n-config"
1418version = "0.4.7"1560version = "0.4.8"
1419source = "registry+https://github.com/rust-lang/crates.io-index"1561source = "registry+https://github.com/rust-lang/crates.io-index"
1420checksum = "8e88074831c0be5b89181b05e6748c4915f77769ecc9a4c372f88b169a8509c9"1562checksum = "3e06b90c8a0d252e203c94344b21e35a30f3a3a85dc7db5af8f8df9f3e0c63ef"
1421dependencies = [1563dependencies = [
1422 "basic-toml",1564 "basic-toml",
1423 "log",1565 "log",
14291571
1430[[package]]1572[[package]]
1431name = "i18n-embed"1573name = "i18n-embed"
1432version = "0.15.2"1574version = "0.15.4"
1433source = "registry+https://github.com/rust-lang/crates.io-index"1575source = "registry+https://github.com/rust-lang/crates.io-index"
1434checksum = "a7839d8c7bb8da7bd58c1112d3a1aeb7f178ff3df4ae87783e758ca3bfb750b7"1576checksum = "669ffc2c93f97e6ddf06ddbe999fcd6782e3342978bb85f7d3c087c7978404c4"
1435dependencies = [1577dependencies = [
1436 "arc-swap",1578 "arc-swap",
1437 "fluent",1579 "fluent",
1438 "fluent-langneg",1580 "fluent-langneg",
1439 "fluent-syntax",1581 "fluent-syntax",
1440 "i18n-embed-impl",1582 "i18n-embed-impl",
1441 "intl-memoizer",1583 "intl-memoizer",
1442 "lazy_static",
1443 "log",1584 "log",
1444 "parking_lot",1585 "parking_lot",
1445 "rust-embed",1586 "rust-embed",
14501591
1451[[package]]1592[[package]]
1452name = "i18n-embed-fl"1593name = "i18n-embed-fl"
1453version = "0.9.2"1594version = "0.9.4"
1454source = "registry+https://github.com/rust-lang/crates.io-index"1595source = "registry+https://github.com/rust-lang/crates.io-index"
1455checksum = "f6e9571c3cba9eba538eaa5ee40031b26debe76f0c7e17bafc97ea57a76cd82e"1596checksum = "04b2969d0b3fc6143776c535184c19722032b43e6a642d710fa3f88faec53c2d"
1456dependencies = [1597dependencies = [
1457 "dashmap",
1458 "find-crate",1598 "find-crate",
1459 "fluent",1599 "fluent",
1460 "fluent-syntax",1600 "fluent-syntax",
1461 "i18n-config",1601 "i18n-config",
1462 "i18n-embed",1602 "i18n-embed",
1463 "lazy_static",
1464 "proc-macro-error2",1603 "proc-macro-error2",
1465 "proc-macro2",1604 "proc-macro2",
1466 "quote",1605 "quote",
14841623
1485[[package]]1624[[package]]
1486name = "iana-time-zone"1625name = "iana-time-zone"
1487version = "0.1.61"1626version = "0.1.63"
1488source = "registry+https://github.com/rust-lang/crates.io-index"1627source = "registry+https://github.com/rust-lang/crates.io-index"
1489checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"1628checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
1490dependencies = [1629dependencies = [
1491 "android_system_properties",1630 "android_system_properties",
1492 "core-foundation-sys",1631 "core-foundation-sys",
1493 "iana-time-zone-haiku",1632 "iana-time-zone-haiku",
1494 "js-sys",1633 "js-sys",
1634 "log",
1495 "wasm-bindgen",1635 "wasm-bindgen",
1496 "windows-core",1636 "windows-core",
1497]1637]
15171657
1518[[package]]1658[[package]]
1519name = "indexmap"1659name = "indexmap"
1520version = "2.6.0"1660version = "2.11.0"
1521source = "registry+https://github.com/rust-lang/crates.io-index"1661source = "registry+https://github.com/rust-lang/crates.io-index"
1522checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da"1662checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9"
1523dependencies = [1663dependencies = [
1524 "equivalent",1664 "equivalent",
1525 "hashbrown 0.15.1",1665 "hashbrown 0.15.5",
1526]1666]
15271667
1528[[package]]1668[[package]]
1529name = "indicatif"1669name = "indicatif"
1530version = "0.17.9"1670version = "0.18.0"
1531source = "registry+https://github.com/rust-lang/crates.io-index"1671source = "registry+https://github.com/rust-lang/crates.io-index"
1532checksum = "cbf675b85ed934d3c67b5c5469701eec7db22689d0a2139d856e0925fa28b281"1672checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd"
1533dependencies = [1673dependencies = [
1534 "console",1674 "console",
1535 "number_prefix",
1536 "portable-atomic",1675 "portable-atomic",
1537 "unicode-width 0.2.0",1676 "unicode-width 0.2.1",
1677 "unit-prefix",
1538 "vt100",1678 "vt100",
1539 "web-time",1679 "web-time",
1540]1680]
15471687
1548[[package]]1688[[package]]
1549name = "inout"1689name = "inout"
1550version = "0.1.3"1690version = "0.1.4"
1551source = "registry+https://github.com/rust-lang/crates.io-index"1691source = "registry+https://github.com/rust-lang/crates.io-index"
1552checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"1692checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01"
1553dependencies = [1693dependencies = [
1554 "block-padding",1694 "block-padding",
1555 "generic-array",1695 "generic-array",
1556]1696]
15571697
1558[[package]]1698[[package]]
1559name = "intl-memoizer"1699name = "intl-memoizer"
1560version = "0.5.2"1700version = "0.5.3"
1561source = "registry+https://github.com/rust-lang/crates.io-index"1701source = "registry+https://github.com/rust-lang/crates.io-index"
1562checksum = "fe22e020fce238ae18a6d5d8c502ee76a52a6e880d99477657e6acc30ec57bda"1702checksum = "310da2e345f5eb861e7a07ee182262e94975051db9e4223e909ba90f392f163f"
1563dependencies = [1703dependencies = [
1564 "type-map",1704 "type-map",
1565 "unic-langid",1705 "unic-langid",
1574 "unic-langid",1714 "unic-langid",
1575]1715]
1716
1717[[package]]
1718name = "io-uring"
1719version = "0.7.10"
1720source = "registry+https://github.com/rust-lang/crates.io-index"
1721checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b"
1722dependencies = [
1723 "bitflags",
1724 "cfg-if",
1725 "libc",
1726]
15761727
1577[[package]]1728[[package]]
1578name = "io_tee"1729name = "io_tee"
15821733
1583[[package]]1734[[package]]
1584name = "is-terminal"1735name = "is-terminal"
1585version = "0.4.13"1736version = "0.4.16"
1586source = "registry+https://github.com/rust-lang/crates.io-index"1737source = "registry+https://github.com/rust-lang/crates.io-index"
1587checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b"1738checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9"
1588dependencies = [1739dependencies = [
1589 "hermit-abi 0.4.0",1740 "hermit-abi",
1590 "libc",1741 "libc",
1591 "windows-sys 0.52.0",1742 "windows-sys 0.59.0",
1592]1743]
15931744
1594[[package]]1745[[package]]
16231774
1624[[package]]1775[[package]]
1625name = "itoa"1776name = "itoa"
1626version = "1.0.11"1777version = "1.0.15"
1627source = "registry+https://github.com/rust-lang/crates.io-index"1778source = "registry+https://github.com/rust-lang/crates.io-index"
1628checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"1779checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
16291780
1630[[package]]1781[[package]]
1631name = "js-sys"1782name = "js-sys"
1632version = "0.3.72"1783version = "0.3.77"
1633source = "registry+https://github.com/rust-lang/crates.io-index"1784source = "registry+https://github.com/rust-lang/crates.io-index"
1634checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9"1785checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
1635dependencies = [1786dependencies = [
1787 "once_cell",
1636 "wasm-bindgen",1788 "wasm-bindgen",
1637]1789]
16381790
16471799
1648[[package]]1800[[package]]
1649name = "libc"1801name = "libc"
1650version = "0.2.174"1802version = "0.2.175"
1651source = "registry+https://github.com/rust-lang/crates.io-index"1803source = "registry+https://github.com/rust-lang/crates.io-index"
1652checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"1804checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
1805
1806[[package]]
1807name = "libloading"
1808version = "0.8.8"
1809source = "registry+https://github.com/rust-lang/crates.io-index"
1810checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667"
1811dependencies = [
1812 "cfg-if",
1813 "windows-targets 0.53.3",
1814]
16531815
1654[[package]]1816[[package]]
1655name = "libm"1817name = "libm"
1656version = "0.2.11"1818version = "0.2.15"
1657source = "registry+https://github.com/rust-lang/crates.io-index"1819source = "registry+https://github.com/rust-lang/crates.io-index"
1658checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa"1820checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
16591821
1660[[package]]1822[[package]]
1661name = "libmimalloc-sys"1823name = "libmimalloc-sys"
1662version = "0.1.39"1824version = "0.1.44"
1663source = "registry+https://github.com/rust-lang/crates.io-index"1825source = "registry+https://github.com/rust-lang/crates.io-index"
1664checksum = "23aa6811d3bd4deb8a84dde645f943476d13b248d818edcf8ce0b2f37f036b44"1826checksum = "667f4fec20f29dfc6bc7357c582d91796c169ad7e2fce709468aefeb2c099870"
1665dependencies = [1827dependencies = [
1666 "cc",1828 "cc",
1667 "libc",1829 "libc",
1668]1830]
1831
1832[[package]]
1833name = "link-cplusplus"
1834version = "1.0.10"
1835source = "registry+https://github.com/rust-lang/crates.io-index"
1836checksum = "4a6f6da007f968f9def0d65a05b187e2960183de70c160204ecfccf0ee330212"
1837dependencies = [
1838 "cc",
1839]
16691840
1670[[package]]1841[[package]]
1671name = "linked-hash-map"1842name = "linked-hash-map"
16751846
1676[[package]]1847[[package]]
1677name = "linux-raw-sys"1848name = "linux-raw-sys"
1678version = "0.4.14"1849version = "0.4.15"
1679source = "registry+https://github.com/rust-lang/crates.io-index"1850source = "registry+https://github.com/rust-lang/crates.io-index"
1680checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"1851checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
16811852
1682[[package]]1853[[package]]
1683name = "linux-raw-sys"1854name = "linux-raw-sys"
16871858
1688[[package]]1859[[package]]
1689name = "litrs"1860name = "litrs"
1690version = "0.4.1"1861version = "0.4.2"
1691source = "registry+https://github.com/rust-lang/crates.io-index"1862source = "registry+https://github.com/rust-lang/crates.io-index"
1692checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5"1863checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed"
16931864
1694[[package]]1865[[package]]
1695name = "lock_api"1866name = "lock_api"
1696version = "0.4.12"1867version = "0.4.13"
1697source = "registry+https://github.com/rust-lang/crates.io-index"1868source = "registry+https://github.com/rust-lang/crates.io-index"
1698checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"1869checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
1699dependencies = [1870dependencies = [
1700 "autocfg",1871 "autocfg",
1701 "scopeguard",1872 "scopeguard",
1702]1873]
17031874
1704[[package]]1875[[package]]
1705name = "log"1876name = "log"
1706version = "0.4.22"1877version = "0.4.27"
1707source = "registry+https://github.com/rust-lang/crates.io-index"1878source = "registry+https://github.com/rust-lang/crates.io-index"
1708checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"1879checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
17091880
1710[[package]]1881[[package]]
1711name = "matchers"1882name = "matchers"
1712version = "0.1.0"1883version = "0.2.0"
1713source = "registry+https://github.com/rust-lang/crates.io-index"1884source = "registry+https://github.com/rust-lang/crates.io-index"
1714checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"1885checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9"
1715dependencies = [1886dependencies = [
1716 "regex-automata 0.1.10",1887 "regex-automata",
1717]1888]
17181889
1719[[package]]1890[[package]]
17241895
1725[[package]]1896[[package]]
1726name = "memchr"1897name = "memchr"
1727version = "2.7.4"1898version = "2.7.5"
1728source = "registry+https://github.com/rust-lang/crates.io-index"1899source = "registry+https://github.com/rust-lang/crates.io-index"
1729checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"1900checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
17301901
1731[[package]]1902[[package]]
1732name = "memoffset"1903name = "memoffset"
1733version = "0.6.5"1904version = "0.9.1"
1734source = "registry+https://github.com/rust-lang/crates.io-index"1905source = "registry+https://github.com/rust-lang/crates.io-index"
1735checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"1906checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
1736dependencies = [1907dependencies = [
1737 "autocfg",1908 "autocfg",
1738]1909]
17391910
1740[[package]]1911[[package]]
1741name = "mimalloc"1912name = "mimalloc"
1742version = "0.1.43"1913version = "0.1.48"
1743source = "registry+https://github.com/rust-lang/crates.io-index"1914source = "registry+https://github.com/rust-lang/crates.io-index"
1744checksum = "68914350ae34959d83f732418d51e2427a794055d0b9529f48259ac07af65633"1915checksum = "e1ee66a4b64c74f4ef288bcbb9192ad9c3feaad75193129ac8509af543894fd8"
1745dependencies = [1916dependencies = [
1746 "libmimalloc-sys",1917 "libmimalloc-sys",
1747]1918]
17601931
1761[[package]]1932[[package]]
1762name = "miniz_oxide"1933name = "miniz_oxide"
1763version = "0.8.0"1934version = "0.8.9"
1764source = "registry+https://github.com/rust-lang/crates.io-index"1935source = "registry+https://github.com/rust-lang/crates.io-index"
1765checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1"1936checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
1766dependencies = [1937dependencies = [
1767 "adler2",1938 "adler2",
1768]1939]
17691940
1770[[package]]1941[[package]]
1771name = "mio"1942name = "mio"
1772version = "1.0.2"1943version = "1.0.4"
1773source = "registry+https://github.com/rust-lang/crates.io-index"1944source = "registry+https://github.com/rust-lang/crates.io-index"
1774checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec"1945checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
1775dependencies = [1946dependencies = [
1776 "hermit-abi 0.3.9",
1777 "libc",1947 "libc",
1778 "log",1948 "log",
1779 "wasi 0.11.0+wasi-snapshot-preview1",1949 "wasi 0.11.1+wasi-snapshot-preview1",
1780 "windows-sys 0.52.0",1950 "windows-sys 0.59.0",
1781]1951]
17821952
1783[[package]]1953[[package]]
1784name = "multimap"1954name = "multimap"
1785version = "0.10.0"1955version = "0.10.1"
1786source = "registry+https://github.com/rust-lang/crates.io-index"1956source = "registry+https://github.com/rust-lang/crates.io-index"
1787checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03"1957checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084"
17881958
1789[[package]]1959[[package]]
1790name = "nix"1960name = "nix"
1804dependencies = [1974dependencies = [
1805 "anyhow",1975 "anyhow",
1806 "better-command",1976 "better-command",
1977 "bindgen",
1978 "ctor",
1979 "cxx",
1980 "cxx-build",
1807 "futures",1981 "futures",
1808 "itertools 0.14.0",1982 "itertools 0.14.0",
1809 "nixlike",1983 "nixlike",
1984 "pkg-config",
1810 "r2d2",1985 "r2d2",
1811 "regex",1986 "regex",
1812 "serde",1987 "serde",
1813 "serde_json",1988 "serde_json",
1989 "test-log",
1814 "thiserror 2.0.12",1990 "thiserror 2.0.16",
1815 "tokio",1991 "tokio",
1816 "tokio-util",1992 "tokio-util",
1817 "tracing",1993 "tracing",
1994 "tracing-indicatif",
1818 "unindent",1995 "unindent",
1819]1996]
18201997
1829 "serde",2006 "serde",
1830 "serde-transcode",2007 "serde-transcode",
1831 "serde_json",2008 "serde_json",
1832 "thiserror 2.0.12",2009 "thiserror 2.0.16",
1833]2010]
18342011
1835[[package]]2012[[package]]
18532030
1854[[package]]2031[[package]]
1855name = "nu-ansi-term"2032name = "nu-ansi-term"
1856version = "0.46.0"2033version = "0.50.1"
1857source = "registry+https://github.com/rust-lang/crates.io-index"2034source = "registry+https://github.com/rust-lang/crates.io-index"
1858checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"2035checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399"
1859dependencies = [2036dependencies = [
1860 "overload",
1861 "winapi",2037 "windows-sys 0.52.0",
1862]2038]
18632039
1864[[package]]2040[[package]]
1915]2091]
19162092
1917[[package]]2093[[package]]
1918name = "number_prefix"2094name = "object"
1919version = "0.4.0"2095version = "0.36.7"
1920source = "registry+https://github.com/rust-lang/crates.io-index"2096source = "registry+https://github.com/rust-lang/crates.io-index"
1921checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"2097checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
2098dependencies = [
2099 "memchr",
2100]
19222101
1923[[package]]2102[[package]]
1924name = "object"2103name = "once_cell"
1925version = "0.36.5"2104version = "1.21.3"
1926source = "registry+https://github.com/rust-lang/crates.io-index"2105source = "registry+https://github.com/rust-lang/crates.io-index"
1927checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e"2106checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
1928dependencies = [
1929 "memchr",
1930]
19312107
1932[[package]]2108[[package]]
1933name = "once_cell"2109name = "once_cell_polyfill"
1934version = "1.20.2"2110version = "1.70.1"
1935source = "registry+https://github.com/rust-lang/crates.io-index"2111source = "registry+https://github.com/rust-lang/crates.io-index"
1936checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"2112checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad"
19372113
1938[[package]]2114[[package]]
1939name = "opaque-debug"2115name = "opaque-debug"
1951 "once_cell",2127 "once_cell",
1952 "shell-escape",2128 "shell-escape",
1953 "tempfile",2129 "tempfile",
1954 "thiserror 2.0.12",2130 "thiserror 2.0.16",
1955 "tokio",2131 "tokio",
1956]2132]
1957
1958[[package]]
1959name = "overload"
1960version = "0.1.1"
1961source = "registry+https://github.com/rust-lang/crates.io-index"
1962checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
19632133
1964[[package]]2134[[package]]
1965name = "owo-colors"2135name = "owo-colors"
1966version = "4.2.1"2136version = "4.2.2"
1967source = "registry+https://github.com/rust-lang/crates.io-index"2137source = "registry+https://github.com/rust-lang/crates.io-index"
1968checksum = "26995317201fa17f3656c36716aed4a7c81743a9634ac4c99c0eeda495db0cec"2138checksum = "48dd4f4a2c8405440fd0462561f0e5806bd0f77e86f51c761481bdd4018b545e"
1969dependencies = [2139dependencies = [
1970 "supports-color 2.1.0",2140 "supports-color 2.1.0",
1971 "supports-color 3.0.1",2141 "supports-color 3.0.2",
1972]2142]
19732143
1974[[package]]2144[[package]]
1979dependencies = [2149dependencies = [
1980 "bytecount",2150 "bytecount",
1981 "fnv",2151 "fnv",
1982 "unicode-width 0.2.0",2152 "unicode-width 0.2.1",
1983]2153]
19842154
1985[[package]]2155[[package]]
1986name = "parking_lot"2156name = "parking_lot"
1987version = "0.12.3"2157version = "0.12.4"
1988source = "registry+https://github.com/rust-lang/crates.io-index"2158source = "registry+https://github.com/rust-lang/crates.io-index"
1989checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"2159checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13"
1990dependencies = [2160dependencies = [
1991 "lock_api",2161 "lock_api",
1992 "parking_lot_core",2162 "parking_lot_core",
1993]2163]
19942164
1995[[package]]2165[[package]]
1996name = "parking_lot_core"2166name = "parking_lot_core"
1997version = "0.9.10"2167version = "0.9.11"
1998source = "registry+https://github.com/rust-lang/crates.io-index"2168source = "registry+https://github.com/rust-lang/crates.io-index"
1999checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"2169checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5"
2000dependencies = [2170dependencies = [
2001 "cfg-if",2171 "cfg-if",
2002 "libc",2172 "libc",
2003 "redox_syscall",2173 "redox_syscall",
2004 "smallvec",2174 "smallvec",
2005 "windows-targets",2175 "windows-targets 0.52.6",
2006]2176]
20072177
2008[[package]]2178[[package]]
20502220
2051[[package]]2221[[package]]
2052name = "pem"2222name = "pem"
2053version = "3.0.4"2223version = "3.0.5"
2054source = "registry+https://github.com/rust-lang/crates.io-index"2224source = "registry+https://github.com/rust-lang/crates.io-index"
2055checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae"2225checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3"
2056dependencies = [2226dependencies = [
2057 "base64 0.22.1",2227 "base64 0.22.1",
2058 "serde",2228 "serde",
2059]2229]
20602230
2061[[package]]2231[[package]]
2062name = "percent-encoding"2232name = "percent-encoding"
2063version = "2.3.1"2233version = "2.3.2"
2064source = "registry+https://github.com/rust-lang/crates.io-index"2234source = "registry+https://github.com/rust-lang/crates.io-index"
2065checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"2235checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
20662236
2067[[package]]2237[[package]]
2068name = "petgraph"2238name = "petgraph"
2069version = "0.6.5"2239version = "0.7.1"
2070source = "registry+https://github.com/rust-lang/crates.io-index"2240source = "registry+https://github.com/rust-lang/crates.io-index"
2071checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"2241checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772"
2072dependencies = [2242dependencies = [
2073 "fixedbitset",2243 "fixedbitset",
2074 "indexmap 2.6.0",2244 "indexmap 2.11.0",
2075]2245]
20762246
2077[[package]]2247[[package]]
2078name = "pin-project"2248name = "pin-project"
2079version = "1.1.7"2249version = "1.1.10"
2080source = "registry+https://github.com/rust-lang/crates.io-index"2250source = "registry+https://github.com/rust-lang/crates.io-index"
2081checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95"2251checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a"
2082dependencies = [2252dependencies = [
2083 "pin-project-internal",2253 "pin-project-internal",
2084]2254]
20852255
2086[[package]]2256[[package]]
2087name = "pin-project-internal"2257name = "pin-project-internal"
2088version = "1.1.7"2258version = "1.1.10"
2089source = "registry+https://github.com/rust-lang/crates.io-index"2259source = "registry+https://github.com/rust-lang/crates.io-index"
2090checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c"2260checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
2091dependencies = [2261dependencies = [
2092 "proc-macro2",2262 "proc-macro2",
2093 "quote",2263 "quote",
20962266
2097[[package]]2267[[package]]
2098name = "pin-project-lite"2268name = "pin-project-lite"
2099version = "0.2.15"2269version = "0.2.16"
2100source = "registry+https://github.com/rust-lang/crates.io-index"2270source = "registry+https://github.com/rust-lang/crates.io-index"
2101checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff"2271checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
21022272
2103[[package]]2273[[package]]
2104name = "pin-utils"2274name = "pin-utils"
2127 "spki",2297 "spki",
2128]2298]
2299
2300[[package]]
2301name = "pkg-config"
2302version = "0.3.32"
2303source = "registry+https://github.com/rust-lang/crates.io-index"
2304checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
21292305
2130[[package]]2306[[package]]
2131name = "poly1305"2307name = "poly1305"
21522328
2153[[package]]2329[[package]]
2154name = "portable-atomic"2330name = "portable-atomic"
2155version = "1.9.0"2331version = "1.11.1"
2156source = "registry+https://github.com/rust-lang/crates.io-index"2332source = "registry+https://github.com/rust-lang/crates.io-index"
2157checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2"2333checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
21582334
2159[[package]]2335[[package]]
2160name = "powerfmt"2336name = "powerfmt"
21642340
2165[[package]]2341[[package]]
2166name = "ppv-lite86"2342name = "ppv-lite86"
2167version = "0.2.20"2343version = "0.2.21"
2168source = "registry+https://github.com/rust-lang/crates.io-index"2344source = "registry+https://github.com/rust-lang/crates.io-index"
2169checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"2345checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
2170dependencies = [2346dependencies = [
2171 "zerocopy",2347 "zerocopy",
2172]2348]
21732349
2174[[package]]2350[[package]]
2175name = "prettyplease"2351name = "prettyplease"
2176version = "0.2.25"2352version = "0.2.37"
2177source = "registry+https://github.com/rust-lang/crates.io-index"2353source = "registry+https://github.com/rust-lang/crates.io-index"
2178checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033"2354checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
2179dependencies = [2355dependencies = [
2180 "proc-macro2",2356 "proc-macro2",
2181 "syn",2357 "syn",
22052381
2206[[package]]2382[[package]]
2207name = "proc-macro2"2383name = "proc-macro2"
2208version = "1.0.89"2384version = "1.0.101"
2209source = "registry+https://github.com/rust-lang/crates.io-index"2385source = "registry+https://github.com/rust-lang/crates.io-index"
2210checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e"2386checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
2211dependencies = [2387dependencies = [
2212 "unicode-ident",2388 "unicode-ident",
2213]2389]
22142390
2215[[package]]2391[[package]]
2216name = "prost"2392name = "prost"
2217version = "0.13.3"2393version = "0.13.5"
2218source = "registry+https://github.com/rust-lang/crates.io-index"2394source = "registry+https://github.com/rust-lang/crates.io-index"
2219checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f"2395checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5"
2220dependencies = [2396dependencies = [
2221 "bytes",2397 "bytes",
2222 "prost-derive",2398 "prost-derive",
2223]2399]
22242400
2225[[package]]2401[[package]]
2226name = "prost-build"2402name = "prost-build"
2227version = "0.13.3"2403version = "0.13.5"
2228source = "registry+https://github.com/rust-lang/crates.io-index"2404source = "registry+https://github.com/rust-lang/crates.io-index"
2229checksum = "0c1318b19085f08681016926435853bbf7858f9c082d0999b80550ff5d9abe15"2405checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf"
2230dependencies = [2406dependencies = [
2231 "bytes",
2232 "heck",2407 "heck",
2233 "itertools 0.13.0",2408 "itertools 0.14.0",
2234 "log",2409 "log",
2235 "multimap",2410 "multimap",
2236 "once_cell",2411 "once_cell",
22452420
2246[[package]]2421[[package]]
2247name = "prost-derive"2422name = "prost-derive"
2248version = "0.13.3"2423version = "0.13.5"
2249source = "registry+https://github.com/rust-lang/crates.io-index"2424source = "registry+https://github.com/rust-lang/crates.io-index"
2250checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5"2425checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d"
2251dependencies = [2426dependencies = [
2252 "anyhow",2427 "anyhow",
2253 "itertools 0.13.0",2428 "itertools 0.14.0",
2254 "proc-macro2",2429 "proc-macro2",
2255 "quote",2430 "quote",
2256 "syn",2431 "syn",
2257]2432]
22582433
2259[[package]]2434[[package]]
2260name = "prost-types"2435name = "prost-types"
2261version = "0.13.3"2436version = "0.13.5"
2262source = "registry+https://github.com/rust-lang/crates.io-index"2437source = "registry+https://github.com/rust-lang/crates.io-index"
2263checksum = "4759aa0d3a6232fb8dbdb97b61de2c20047c68aca932c7ed76da9d788508d670"2438checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16"
2264dependencies = [2439dependencies = [
2265 "prost",2440 "prost",
2266]2441]
22672442
2268[[package]]2443[[package]]
2269name = "quote"2444name = "quote"
2270version = "1.0.37"2445version = "1.0.40"
2271source = "registry+https://github.com/rust-lang/crates.io-index"2446source = "registry+https://github.com/rust-lang/crates.io-index"
2272checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"2447checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
2273dependencies = [2448dependencies = [
2274 "proc-macro2",2449 "proc-macro2",
2275]2450]
23042479
2305[[package]]2480[[package]]
2306name = "rand"2481name = "rand"
2307version = "0.9.1"2482version = "0.9.2"
2308source = "registry+https://github.com/rust-lang/crates.io-index"2483source = "registry+https://github.com/rust-lang/crates.io-index"
2309checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97"2484checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
2310dependencies = [2485dependencies = [
2311 "rand_chacha 0.9.0",2486 "rand_chacha 0.9.0",
2312 "rand_core 0.9.3",2487 "rand_core 0.9.3",
2338source = "registry+https://github.com/rust-lang/crates.io-index"2513source = "registry+https://github.com/rust-lang/crates.io-index"
2339checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"2514checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
2340dependencies = [2515dependencies = [
2341 "getrandom 0.2.15",2516 "getrandom 0.2.16",
2342]2517]
23432518
2344[[package]]2519[[package]]
23522527
2353[[package]]2528[[package]]
2354name = "rcgen"2529name = "rcgen"
2355version = "0.13.1"2530version = "0.13.2"
2356source = "registry+https://github.com/rust-lang/crates.io-index"2531source = "registry+https://github.com/rust-lang/crates.io-index"
2357checksum = "54077e1872c46788540de1ea3d7f4ccb1983d12f9aa909b234468676c1a36779"2532checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2"
2358dependencies = [2533dependencies = [
2359 "pem",2534 "pem",
2360 "ring",2535 "ring",
23652540
2366[[package]]2541[[package]]
2367name = "redox_syscall"2542name = "redox_syscall"
2368version = "0.5.7"2543version = "0.5.17"
2369source = "registry+https://github.com/rust-lang/crates.io-index"2544source = "registry+https://github.com/rust-lang/crates.io-index"
2370checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f"2545checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77"
2371dependencies = [2546dependencies = [
2372 "bitflags",2547 "bitflags",
2373]2548]
23742549
2375[[package]]2550[[package]]
2376name = "regex"2551name = "regex"
2377version = "1.11.1"2552version = "1.11.2"
2378source = "registry+https://github.com/rust-lang/crates.io-index"2553source = "registry+https://github.com/rust-lang/crates.io-index"
2379checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"2554checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912"
2380dependencies = [2555dependencies = [
2381 "aho-corasick",2556 "aho-corasick",
2382 "memchr",2557 "memchr",
2383 "regex-automata 0.4.9",2558 "regex-automata",
2384 "regex-syntax 0.8.5",2559 "regex-syntax",
2385]2560]
2386
2387[[package]]
2388name = "regex-automata"
2389version = "0.1.10"
2390source = "registry+https://github.com/rust-lang/crates.io-index"
2391checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
2392dependencies = [
2393 "regex-syntax 0.6.29",
2394]
23952561
2396[[package]]2562[[package]]
2397name = "regex-automata"2563name = "regex-automata"
2398version = "0.4.9"2564version = "0.4.10"
2399source = "registry+https://github.com/rust-lang/crates.io-index"2565source = "registry+https://github.com/rust-lang/crates.io-index"
2400checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"2566checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6"
2401dependencies = [2567dependencies = [
2402 "aho-corasick",2568 "aho-corasick",
2403 "memchr",2569 "memchr",
2404 "regex-syntax 0.8.5",2570 "regex-syntax",
2405]2571]
2406
2407[[package]]
2408name = "regex-syntax"
2409version = "0.6.29"
2410source = "registry+https://github.com/rust-lang/crates.io-index"
2411checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
24122572
2413[[package]]2573[[package]]
2414name = "regex-syntax"2574name = "regex-syntax"
2415version = "0.8.5"2575version = "0.8.6"
2416source = "registry+https://github.com/rust-lang/crates.io-index"2576source = "registry+https://github.com/rust-lang/crates.io-index"
2417checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"2577checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001"
24182578
2419[[package]]2579[[package]]
2420name = "ring"2580name = "ring"
2421version = "0.17.8"2581version = "0.17.14"
2422source = "registry+https://github.com/rust-lang/crates.io-index"2582source = "registry+https://github.com/rust-lang/crates.io-index"
2423checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"2583checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
2424dependencies = [2584dependencies = [
2425 "cc",2585 "cc",
2426 "cfg-if",2586 "cfg-if",
2427 "getrandom 0.2.15",2587 "getrandom 0.2.16",
2428 "libc",2588 "libc",
2429 "spin",
2430 "untrusted",2589 "untrusted",
2431 "windows-sys 0.52.0",2590 "windows-sys 0.52.0",
2432]2591]
24552614
2456[[package]]2615[[package]]
2457name = "rnix"2616name = "rnix"
2458version = "0.10.2"2617version = "0.12.0"
2459source = "registry+https://github.com/rust-lang/crates.io-index"2618source = "registry+https://github.com/rust-lang/crates.io-index"
2460checksum = "8024a523e8836f1a5d051203dc00d833357fee94e351b51348dfaeca5364daa9"2619checksum = "6f15e00b0ab43abd70d50b6f8cd021290028f9b7fdd7cdfa6c35997173bc1ba9"
2461dependencies = [2620dependencies = [
2462 "cbitset",
2463 "rowan",2621 "rowan",
2464 "smol_str",
2465]2622]
24662623
2467[[package]]2624[[package]]
2468name = "ron"2625name = "ron"
2469version = "0.10.1"2626version = "0.11.0"
2470source = "registry+https://github.com/rust-lang/crates.io-index"2627source = "registry+https://github.com/rust-lang/crates.io-index"
2471checksum = "beceb6f7bf81c73e73aeef6dd1356d9a1b2b4909e1f0fc3e59b034f9572d7b7f"2628checksum = "db09040cc89e461f1a265139777a2bde7f8d8c67c4936f700c63ce3e2904d468"
2472dependencies = [2629dependencies = [
2473 "base64 0.22.1",2630 "base64 0.22.1",
2474 "bitflags",2631 "bitflags",
24792636
2480[[package]]2637[[package]]
2481name = "rowan"2638name = "rowan"
2482version = "0.12.6"2639version = "0.15.17"
2483source = "registry+https://github.com/rust-lang/crates.io-index"2640source = "registry+https://github.com/rust-lang/crates.io-index"
2484checksum = "a1b36e449f3702f3b0c821411db1cbdf30fb451726a9456dce5dabcd44420043"2641checksum = "d4f1e4a001f863f41ea8d0e6a0c34b356d5b733db50dadab3efef640bafb779b"
2485dependencies = [2642dependencies = [
2486 "countme",2643 "countme",
2487 "hashbrown 0.9.1",2644 "hashbrown 0.14.5",
2488 "memoffset",2645 "memoffset",
2489 "rustc-hash",2646 "rustc-hash 1.1.0",
2490 "text-size",2647 "text-size",
2491]2648]
24922649
2493[[package]]2650[[package]]
2494name = "rsa"2651name = "rsa"
2495version = "0.9.6"2652version = "0.9.8"
2496source = "registry+https://github.com/rust-lang/crates.io-index"2653source = "registry+https://github.com/rust-lang/crates.io-index"
2497checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc"2654checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b"
2498dependencies = [2655dependencies = [
2499 "const-oid",2656 "const-oid",
2500 "digest",2657 "digest",
25122669
2513[[package]]2670[[package]]
2514name = "rust-embed"2671name = "rust-embed"
2515version = "8.5.0"2672version = "8.7.2"
2516source = "registry+https://github.com/rust-lang/crates.io-index"2673source = "registry+https://github.com/rust-lang/crates.io-index"
2517checksum = "fa66af4a4fdd5e7ebc276f115e895611a34739a9c1c01028383d612d550953c0"2674checksum = "025908b8682a26ba8d12f6f2d66b987584a4a87bc024abc5bbc12553a8cd178a"
2518dependencies = [2675dependencies = [
2519 "rust-embed-impl",2676 "rust-embed-impl",
2520 "rust-embed-utils",2677 "rust-embed-utils",
25232680
2524[[package]]2681[[package]]
2525name = "rust-embed-impl"2682name = "rust-embed-impl"
2526version = "8.5.0"2683version = "8.7.2"
2527source = "registry+https://github.com/rust-lang/crates.io-index"2684source = "registry+https://github.com/rust-lang/crates.io-index"
2528checksum = "6125dbc8867951125eec87294137f4e9c2c96566e61bf72c45095a7c77761478"2685checksum = "6065f1a4392b71819ec1ea1df1120673418bf386f50de1d6f54204d836d4349c"
2529dependencies = [2686dependencies = [
2530 "proc-macro2",2687 "proc-macro2",
2531 "quote",2688 "quote",
25362693
2537[[package]]2694[[package]]
2538name = "rust-embed-utils"2695name = "rust-embed-utils"
2539version = "8.5.0"2696version = "8.7.2"
2540source = "registry+https://github.com/rust-lang/crates.io-index"2697source = "registry+https://github.com/rust-lang/crates.io-index"
2541checksum = "2e5347777e9aacb56039b0e1f28785929a8a3b709e87482e7442c72e7c12529d"2698checksum = "f6cc0c81648b20b70c491ff8cce00c1c3b223bb8ed2b5d41f0e54c6c4c0a3594"
2542dependencies = [2699dependencies = [
2543 "sha2",2700 "sha2",
2544 "walkdir",2701 "walkdir",
2545]2702]
25462703
2547[[package]]2704[[package]]
2548name = "rustc-demangle"2705name = "rustc-demangle"
2549version = "0.1.24"2706version = "0.1.26"
2550source = "registry+https://github.com/rust-lang/crates.io-index"2707source = "registry+https://github.com/rust-lang/crates.io-index"
2551checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"2708checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
25522709
2553[[package]]2710[[package]]
2554name = "rustc-hash"2711name = "rustc-hash"
2555version = "1.1.0"2712version = "1.1.0"
2556source = "registry+https://github.com/rust-lang/crates.io-index"2713source = "registry+https://github.com/rust-lang/crates.io-index"
2557checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"2714checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
2715
2716[[package]]
2717name = "rustc-hash"
2718version = "2.1.1"
2719source = "registry+https://github.com/rust-lang/crates.io-index"
2720checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
25582721
2559[[package]]2722[[package]]
2560name = "rustc_version"2723name = "rustc_version"
25672730
2568[[package]]2731[[package]]
2569name = "rustix"2732name = "rustix"
2570version = "0.38.40"2733version = "0.38.44"
2571source = "registry+https://github.com/rust-lang/crates.io-index"2734source = "registry+https://github.com/rust-lang/crates.io-index"
2572checksum = "99e4ea3e1cdc4b559b8e5650f9c8e5998e3e5c1343b4eaf034565f32318d63c0"2735checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
2573dependencies = [2736dependencies = [
2574 "bitflags",2737 "bitflags",
2575 "errno",2738 "errno",
2576 "libc",2739 "libc",
2577 "linux-raw-sys 0.4.14",2740 "linux-raw-sys 0.4.15",
2578 "windows-sys 0.52.0",2741 "windows-sys 0.59.0",
2579]2742]
25802743
2581[[package]]2744[[package]]
2582name = "rustix"2745name = "rustix"
2583version = "1.0.7"2746version = "1.0.8"
2584source = "registry+https://github.com/rust-lang/crates.io-index"2747source = "registry+https://github.com/rust-lang/crates.io-index"
2585checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266"2748checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8"
2586dependencies = [2749dependencies = [
2587 "bitflags",2750 "bitflags",
2588 "errno",2751 "errno",
2589 "libc",2752 "libc",
2590 "linux-raw-sys 0.9.4",2753 "linux-raw-sys 0.9.4",
2591 "windows-sys 0.59.0",2754 "windows-sys 0.60.2",
2592]2755]
25932756
2594[[package]]2757[[package]]
2595name = "rustls"2758name = "rustls"
2596version = "0.23.17"2759version = "0.23.31"
2597source = "registry+https://github.com/rust-lang/crates.io-index"2760source = "registry+https://github.com/rust-lang/crates.io-index"
2598checksum = "7f1a745511c54ba6d4465e8d5dfbd81b45791756de28d4981af70d6dca128f1e"2761checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc"
2599dependencies = [2762dependencies = [
2600 "log",2763 "log",
2601 "once_cell",2764 "once_cell",
26172780
2618[[package]]2781[[package]]
2619name = "rustls-pki-types"2782name = "rustls-pki-types"
2620version = "1.10.0"2783version = "1.12.0"
2621source = "registry+https://github.com/rust-lang/crates.io-index"2784source = "registry+https://github.com/rust-lang/crates.io-index"
2622checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b"2785checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79"
2786dependencies = [
2787 "zeroize",
2788]
26232789
2624[[package]]2790[[package]]
2625name = "rustls-webpki"2791name = "rustls-webpki"
2626version = "0.102.8"2792version = "0.103.4"
2627source = "registry+https://github.com/rust-lang/crates.io-index"2793source = "registry+https://github.com/rust-lang/crates.io-index"
2628checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9"2794checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc"
2629dependencies = [2795dependencies = [
2630 "ring",2796 "ring",
2631 "rustls-pki-types",2797 "rustls-pki-types",
26342800
2635[[package]]2801[[package]]
2636name = "rustversion"2802name = "rustversion"
2637version = "1.0.18"2803version = "1.0.22"
2638source = "registry+https://github.com/rust-lang/crates.io-index"2804source = "registry+https://github.com/rust-lang/crates.io-index"
2639checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248"2805checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
26402806
2641[[package]]2807[[package]]
2642name = "ryu"2808name = "ryu"
2643version = "1.0.18"2809version = "1.0.20"
2644source = "registry+https://github.com/rust-lang/crates.io-index"2810source = "registry+https://github.com/rust-lang/crates.io-index"
2645checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"2811checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
26462812
2647[[package]]2813[[package]]
2648name = "salsa20"2814name = "salsa20"
2677source = "registry+https://github.com/rust-lang/crates.io-index"2843source = "registry+https://github.com/rust-lang/crates.io-index"
2678checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"2844checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
2845
2846[[package]]
2847name = "scratch"
2848version = "1.0.9"
2849source = "registry+https://github.com/rust-lang/crates.io-index"
2850checksum = "d68f2ec51b097e4c1a75b681a8bec621909b5e91f15bb7b840c4f2f7b01148b2"
26792851
2680[[package]]2852[[package]]
2681name = "scrypt"2853name = "scrypt"
2703source = "registry+https://github.com/rust-lang/crates.io-index"2875source = "registry+https://github.com/rust-lang/crates.io-index"
2704checksum = "e14e4d63b804dc0c7ec4a1e52bcb63f02c7ac94476755aa579edac21e01f915d"2876checksum = "e14e4d63b804dc0c7ec4a1e52bcb63f02c7ac94476755aa579edac21e01f915d"
2705dependencies = [2877dependencies = [
2706 "self_cell 1.0.4",2878 "self_cell 1.2.0",
2707]2879]
27082880
2709[[package]]2881[[package]]
2710name = "self_cell"2882name = "self_cell"
2711version = "1.0.4"2883version = "1.2.0"
2712source = "registry+https://github.com/rust-lang/crates.io-index"2884source = "registry+https://github.com/rust-lang/crates.io-index"
2713checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a"2885checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749"
27142886
2715[[package]]2887[[package]]
2716name = "semver"2888name = "semver"
2717version = "1.0.23"2889version = "1.0.26"
2718source = "registry+https://github.com/rust-lang/crates.io-index"2890source = "registry+https://github.com/rust-lang/crates.io-index"
2719checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"2891checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
27202892
2721[[package]]2893[[package]]
2722name = "serde"2894name = "serde"
27382910
2739[[package]]2911[[package]]
2740name = "serde_bytes"2912name = "serde_bytes"
2741version = "0.11.15"2913version = "0.11.17"
2742source = "registry+https://github.com/rust-lang/crates.io-index"2914source = "registry+https://github.com/rust-lang/crates.io-index"
2743checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a"2915checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96"
2744dependencies = [2916dependencies = [
2745 "serde",2917 "serde",
2746]2918]
27582930
2759[[package]]2931[[package]]
2760name = "serde_json"2932name = "serde_json"
2761version = "1.0.140"2933version = "1.0.143"
2762source = "registry+https://github.com/rust-lang/crates.io-index"2934source = "registry+https://github.com/rust-lang/crates.io-index"
2763checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"2935checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a"
2764dependencies = [2936dependencies = [
2765 "itoa",2937 "itoa",
2766 "memchr",2938 "memchr",
27702942
2771[[package]]2943[[package]]
2772name = "sha2"2944name = "sha2"
2773version = "0.10.8"2945version = "0.10.9"
2774source = "registry+https://github.com/rust-lang/crates.io-index"2946source = "registry+https://github.com/rust-lang/crates.io-index"
2775checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"2947checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
2776dependencies = [2948dependencies = [
2777 "cfg-if",2949 "cfg-if",
2778 "cpufeatures",2950 "cpufeatures",
28022974
2803[[package]]2975[[package]]
2804name = "signal-hook"2976name = "signal-hook"
2805version = "0.3.17"2977version = "0.3.18"
2806source = "registry+https://github.com/rust-lang/crates.io-index"2978source = "registry+https://github.com/rust-lang/crates.io-index"
2807checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"2979checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2"
2808dependencies = [2980dependencies = [
2809 "libc",2981 "libc",
2810 "signal-hook-registry",2982 "signal-hook-registry",
28232995
2824[[package]]2996[[package]]
2825name = "signal-hook-registry"2997name = "signal-hook-registry"
2826version = "1.4.2"2998version = "1.4.6"
2827source = "registry+https://github.com/rust-lang/crates.io-index"2999source = "registry+https://github.com/rust-lang/crates.io-index"
2828checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"3000checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b"
2829dependencies = [3001dependencies = [
2830 "libc",3002 "libc",
2831]3003]
28423014
2843[[package]]3015[[package]]
2844name = "slab"3016name = "slab"
2845version = "0.4.9"3017version = "0.4.11"
2846source = "registry+https://github.com/rust-lang/crates.io-index"3018source = "registry+https://github.com/rust-lang/crates.io-index"
2847checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"3019checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
2848dependencies = [
2849 "autocfg",
2850]
28513020
2852[[package]]3021[[package]]
2853name = "smallvec"3022name = "smallvec"
2854version = "1.13.2"3023version = "1.15.1"
2855source = "registry+https://github.com/rust-lang/crates.io-index"3024source = "registry+https://github.com/rust-lang/crates.io-index"
2856checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"3025checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
28573026
2858[[package]]3027[[package]]
2859name = "smol_str"3028name = "socket2"
2860version = "0.1.24"3029version = "0.5.10"
2861source = "registry+https://github.com/rust-lang/crates.io-index"3030source = "registry+https://github.com/rust-lang/crates.io-index"
2862checksum = "fad6c857cbab2627dcf01ec85a623ca4e7dcb5691cbaa3d7fb7653671f0d09c9"3031checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678"
2863dependencies = [3032dependencies = [
2864 "serde",3033 "libc",
3034 "windows-sys 0.52.0",
2865]3035]
28663036
2867[[package]]3037[[package]]
2868name = "socket2"3038name = "socket2"
2869version = "0.5.7"3039version = "0.6.0"
2870source = "registry+https://github.com/rust-lang/crates.io-index"3040source = "registry+https://github.com/rust-lang/crates.io-index"
2871checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c"3041checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
2872dependencies = [3042dependencies = [
2873 "libc",3043 "libc",
2874 "windows-sys 0.52.0",3044 "windows-sys 0.59.0",
2875]3045]
28763046
2877[[package]]3047[[package]]
29143084
2915[[package]]3085[[package]]
2916name = "supports-color"3086name = "supports-color"
2917version = "3.0.1"3087version = "3.0.2"
2918source = "registry+https://github.com/rust-lang/crates.io-index"3088source = "registry+https://github.com/rust-lang/crates.io-index"
2919checksum = "8775305acf21c96926c900ad056abeef436701108518cf890020387236ac5a77"3089checksum = "c64fc7232dd8d2e4ac5ce4ef302b1d81e0b80d055b9d77c7c4f51f6aa4c867d6"
2920dependencies = [3090dependencies = [
2921 "is_ci",3091 "is_ci",
2922]3092]
29233093
2924[[package]]3094[[package]]
2925name = "syn"3095name = "syn"
2926version = "2.0.87"3096version = "2.0.106"
2927source = "registry+https://github.com/rust-lang/crates.io-index"3097source = "registry+https://github.com/rust-lang/crates.io-index"
2928checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d"3098checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
2929dependencies = [3099dependencies = [
2930 "proc-macro2",3100 "proc-macro2",
2931 "quote",3101 "quote",
2932 "unicode-ident",3102 "unicode-ident",
2933]3103]
2934
2935[[package]]
2936name = "sync_wrapper"
2937version = "0.1.2"
2938source = "registry+https://github.com/rust-lang/crates.io-index"
2939checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
29403104
2941[[package]]3105[[package]]
2942name = "sync_wrapper"3106name = "sync_wrapper"
2943version = "1.0.1"3107version = "1.0.2"
2944source = "registry+https://github.com/rust-lang/crates.io-index"3108source = "registry+https://github.com/rust-lang/crates.io-index"
2945checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394"3109checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
29463110
2947[[package]]3111[[package]]
2948name = "tabled"3112name = "tabled"
29703134
2971[[package]]3135[[package]]
2972name = "tempfile"3136name = "tempfile"
2973version = "3.20.0"3137version = "3.21.0"
2974source = "registry+https://github.com/rust-lang/crates.io-index"3138source = "registry+https://github.com/rust-lang/crates.io-index"
2975checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1"3139checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e"
2976dependencies = [3140dependencies = [
2977 "fastrand",3141 "fastrand",
2978 "getrandom 0.3.3",3142 "getrandom 0.3.3",
2979 "once_cell",3143 "once_cell",
2980 "rustix 1.0.7",3144 "rustix 1.0.8",
2981 "windows-sys 0.59.0",3145 "windows-sys 0.60.2",
2982]3146]
3147
3148[[package]]
3149name = "termcolor"
3150version = "1.4.1"
3151source = "registry+https://github.com/rust-lang/crates.io-index"
3152checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
3153dependencies = [
3154 "winapi-util",
3155]
29833156
2984[[package]]3157[[package]]
2985name = "terminal_size"3158name = "terminal_size"
2986version = "0.4.0"3159version = "0.4.3"
2987source = "registry+https://github.com/rust-lang/crates.io-index"3160source = "registry+https://github.com/rust-lang/crates.io-index"
2988checksum = "4f599bd7ca042cfdf8f4512b277c02ba102247820f9d9d4a9f521f496751a6ef"3161checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0"
2989dependencies = [3162dependencies = [
2990 "rustix 0.38.40",3163 "rustix 1.0.8",
2991 "windows-sys 0.59.0",3164 "windows-sys 0.60.2",
2992]3165]
29933166
2994[[package]]3167[[package]]
3002 "tokio",3175 "tokio",
3003]3176]
3177
3178[[package]]
3179name = "test-log"
3180version = "0.2.18"
3181source = "registry+https://github.com/rust-lang/crates.io-index"
3182checksum = "1e33b98a582ea0be1168eba097538ee8dd4bbe0f2b01b22ac92ea30054e5be7b"
3183dependencies = [
3184 "env_logger",
3185 "test-log-macros",
3186 "tracing-subscriber",
3187]
3188
3189[[package]]
3190name = "test-log-macros"
3191version = "0.2.18"
3192source = "registry+https://github.com/rust-lang/crates.io-index"
3193checksum = "451b374529930d7601b1eef8d32bc79ae870b6079b069401709c2a8bf9e75f36"
3194dependencies = [
3195 "proc-macro2",
3196 "quote",
3197 "syn",
3198]
30043199
3005[[package]]3200[[package]]
3006name = "testing_table"3201name = "testing_table"
3007version = "0.3.0"3202version = "0.3.0"
3008source = "registry+https://github.com/rust-lang/crates.io-index"3203source = "registry+https://github.com/rust-lang/crates.io-index"
3009checksum = "0f8daae29995a24f65619e19d8d31dea5b389f3d853d8bf297bbf607cd0014cc"3204checksum = "0f8daae29995a24f65619e19d8d31dea5b389f3d853d8bf297bbf607cd0014cc"
3010dependencies = [3205dependencies = [
3011 "unicode-width 0.2.0",3206 "unicode-width 0.2.1",
3012]3207]
30133208
3014[[package]]3209[[package]]
30563251
3057[[package]]3252[[package]]
3058name = "thiserror"3253name = "thiserror"
3059version = "2.0.12"3254version = "2.0.16"
3060source = "registry+https://github.com/rust-lang/crates.io-index"3255source = "registry+https://github.com/rust-lang/crates.io-index"
3061checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"3256checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0"
3062dependencies = [3257dependencies = [
3063 "thiserror-impl 2.0.12",3258 "thiserror-impl 2.0.16",
3064]3259]
30653260
3066[[package]]3261[[package]]
30763271
3077[[package]]3272[[package]]
3078name = "thiserror-impl"3273name = "thiserror-impl"
3079version = "2.0.12"3274version = "2.0.16"
3080source = "registry+https://github.com/rust-lang/crates.io-index"3275source = "registry+https://github.com/rust-lang/crates.io-index"
3081checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"3276checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960"
3082dependencies = [3277dependencies = [
3083 "proc-macro2",3278 "proc-macro2",
3084 "quote",3279 "quote",
30873282
3088[[package]]3283[[package]]
3089name = "thread_local"3284name = "thread_local"
3090version = "1.1.8"3285version = "1.1.9"
3091source = "registry+https://github.com/rust-lang/crates.io-index"3286source = "registry+https://github.com/rust-lang/crates.io-index"
3092checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c"3287checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185"
3093dependencies = [3288dependencies = [
3094 "cfg-if",3289 "cfg-if",
3095 "once_cell",
3096]3290]
30973291
3098[[package]]3292[[package]]
3099name = "time"3293name = "time"
3100version = "0.3.41"3294version = "0.3.42"
3101source = "registry+https://github.com/rust-lang/crates.io-index"3295source = "registry+https://github.com/rust-lang/crates.io-index"
3102checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40"3296checksum = "8ca967379f9d8eb8058d86ed467d81d03e81acd45757e4ca341c24affbe8e8e3"
3103dependencies = [3297dependencies = [
3104 "deranged",3298 "deranged",
3105 "num-conv",3299 "num-conv",
31113305
3112[[package]]3306[[package]]
3113name = "time-core"3307name = "time-core"
3114version = "0.1.4"3308version = "0.1.5"
3115source = "registry+https://github.com/rust-lang/crates.io-index"3309source = "registry+https://github.com/rust-lang/crates.io-index"
3116checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c"3310checksum = "a9108bb380861b07264b950ded55a44a14a4adc68b9f5efd85aafc3aa4d40a68"
31173311
3118[[package]]3312[[package]]
3119name = "time-macros"3313name = "time-macros"
3120version = "0.2.22"3314version = "0.2.23"
3121source = "registry+https://github.com/rust-lang/crates.io-index"3315source = "registry+https://github.com/rust-lang/crates.io-index"
3122checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49"3316checksum = "7182799245a7264ce590b349d90338f1c1affad93d2639aed5f8f69c090b334c"
3123dependencies = [3317dependencies = [
3124 "num-conv",3318 "num-conv",
3125 "time-core",3319 "time-core",
3126]3320]
31273321
3128[[package]]3322[[package]]
3129name = "tinystr"3323name = "tinystr"
3130version = "0.7.6"3324version = "0.8.1"
3131source = "registry+https://github.com/rust-lang/crates.io-index"3325source = "registry+https://github.com/rust-lang/crates.io-index"
3132checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"3326checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
3133dependencies = [3327dependencies = [
3134 "displaydoc",3328 "displaydoc",
3329 "zerovec",
3135]3330]
31363331
3137[[package]]3332[[package]]
3138name = "tokio"3333name = "tokio"
3139version = "1.45.1"3334version = "1.47.1"
3140source = "registry+https://github.com/rust-lang/crates.io-index"3335source = "registry+https://github.com/rust-lang/crates.io-index"
3141checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779"3336checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038"
3142dependencies = [3337dependencies = [
3143 "backtrace",3338 "backtrace",
3144 "bytes",3339 "bytes",
3340 "io-uring",
3145 "libc",3341 "libc",
3146 "mio",3342 "mio",
3147 "pin-project-lite",3343 "pin-project-lite",
3148 "signal-hook-registry",3344 "signal-hook-registry",
3345 "slab",
3149 "socket2",3346 "socket2 0.6.0",
3150 "tokio-macros",3347 "tokio-macros",
3151 "windows-sys 0.52.0",3348 "windows-sys 0.59.0",
3152]3349]
31533350
3154[[package]]3351[[package]]
31643361
3165[[package]]3362[[package]]
3166name = "tokio-rustls"3363name = "tokio-rustls"
3167version = "0.26.0"3364version = "0.26.2"
3168source = "registry+https://github.com/rust-lang/crates.io-index"3365source = "registry+https://github.com/rust-lang/crates.io-index"
3169checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4"3366checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b"
3170dependencies = [3367dependencies = [
3171 "rustls",3368 "rustls",
3172 "rustls-pki-types",
3173 "tokio",3369 "tokio",
3174]3370]
31753371
3176[[package]]3372[[package]]
3177name = "tokio-stream"3373name = "tokio-stream"
3178version = "0.1.16"3374version = "0.1.17"
3179source = "registry+https://github.com/rust-lang/crates.io-index"3375source = "registry+https://github.com/rust-lang/crates.io-index"
3180checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1"3376checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047"
3181dependencies = [3377dependencies = [
3182 "futures-core",3378 "futures-core",
3183 "pin-project-lite",3379 "pin-project-lite",
31873383
3188[[package]]3384[[package]]
3189name = "tokio-util"3385name = "tokio-util"
3190version = "0.7.15"3386version = "0.7.16"
3191source = "registry+https://github.com/rust-lang/crates.io-index"3387source = "registry+https://github.com/rust-lang/crates.io-index"
3192checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df"3388checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5"
3193dependencies = [3389dependencies = [
3194 "bytes",3390 "bytes",
3195 "futures-core",3391 "futures-core",
3229 "pin-project",3425 "pin-project",
3230 "prost",3426 "prost",
3231 "rustls-pemfile",3427 "rustls-pemfile",
3232 "socket2",3428 "socket2 0.5.10",
3233 "tokio",3429 "tokio",
3234 "tokio-rustls",3430 "tokio-rustls",
3235 "tokio-stream",3431 "tokio-stream",
32753471
3276[[package]]3472[[package]]
3277name = "tower"3473name = "tower"
3278version = "0.5.1"3474version = "0.5.2"
3279source = "registry+https://github.com/rust-lang/crates.io-index"3475source = "registry+https://github.com/rust-lang/crates.io-index"
3280checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f"3476checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
3281dependencies = [3477dependencies = [
3282 "futures-core",3478 "futures-core",
3283 "futures-util",3479 "futures-util",
3284 "pin-project-lite",3480 "pin-project-lite",
3285 "sync_wrapper 0.1.2",3481 "sync_wrapper",
3286 "tower-layer",3482 "tower-layer",
3287 "tower-service",3483 "tower-service",
3288]3484]
33183514
3319[[package]]3515[[package]]
3320name = "tracing"3516name = "tracing"
3321version = "0.1.40"3517version = "0.1.41"
3322source = "registry+https://github.com/rust-lang/crates.io-index"3518source = "registry+https://github.com/rust-lang/crates.io-index"
3323checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"3519checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
3324dependencies = [3520dependencies = [
3325 "pin-project-lite",3521 "pin-project-lite",
3326 "tracing-attributes",3522 "tracing-attributes",
33293525
3330[[package]]3526[[package]]
3331name = "tracing-attributes"3527name = "tracing-attributes"
3332version = "0.1.27"3528version = "0.1.30"
3333source = "registry+https://github.com/rust-lang/crates.io-index"3529source = "registry+https://github.com/rust-lang/crates.io-index"
3334checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"3530checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903"
3335dependencies = [3531dependencies = [
3336 "proc-macro2",3532 "proc-macro2",
3337 "quote",3533 "quote",
33403536
3341[[package]]3537[[package]]
3342name = "tracing-core"3538name = "tracing-core"
3343version = "0.1.32"3539version = "0.1.34"
3344source = "registry+https://github.com/rust-lang/crates.io-index"3540source = "registry+https://github.com/rust-lang/crates.io-index"
3345checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"3541checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678"
3346dependencies = [3542dependencies = [
3347 "once_cell",3543 "once_cell",
3348 "valuable",3544 "valuable",
3349]3545]
33503546
3351[[package]]3547[[package]]
3352name = "tracing-indicatif"3548name = "tracing-indicatif"
3353version = "0.3.6"3549version = "0.3.13"
3354source = "registry+https://github.com/rust-lang/crates.io-index"3550source = "registry+https://github.com/rust-lang/crates.io-index"
3355checksum = "069580424efe11d97c3fef4197fa98c004fa26672cc71ad8770d224e23b1951d"3551checksum = "04d4e11e0e27acef25a47f27e9435355fecdc488867fa2bc90e75b0700d2823d"
3356dependencies = [3552dependencies = [
3357 "indicatif",3553 "indicatif",
3358 "tracing",3554 "tracing",
33733569
3374[[package]]3570[[package]]
3375name = "tracing-serde"3571name = "tracing-serde"
3376version = "0.1.3"3572version = "0.2.0"
3377source = "registry+https://github.com/rust-lang/crates.io-index"3573source = "registry+https://github.com/rust-lang/crates.io-index"
3378checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1"3574checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1"
3379dependencies = [3575dependencies = [
3380 "serde",3576 "serde",
3381 "tracing-core",3577 "tracing-core",
3382]3578]
33833579
3384[[package]]3580[[package]]
3385name = "tracing-subscriber"3581name = "tracing-subscriber"
3386version = "0.3.18"3582version = "0.3.20"
3387source = "registry+https://github.com/rust-lang/crates.io-index"3583source = "registry+https://github.com/rust-lang/crates.io-index"
3388checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"3584checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5"
3389dependencies = [3585dependencies = [
3390 "matchers",3586 "matchers",
3391 "nu-ansi-term",3587 "nu-ansi-term",
3392 "once_cell",3588 "once_cell",
3393 "regex",3589 "regex-automata",
3394 "serde",3590 "serde",
3395 "serde_json",3591 "serde_json",
3396 "sharded-slab",3592 "sharded-slab",
34103606
3411[[package]]3607[[package]]
3412name = "type-map"3608name = "type-map"
3413version = "0.5.0"3609version = "0.5.1"
3414source = "registry+https://github.com/rust-lang/crates.io-index"3610source = "registry+https://github.com/rust-lang/crates.io-index"
3415checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f"3611checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90"
3416dependencies = [3612dependencies = [
3417 "rustc-hash",3613 "rustc-hash 2.1.1",
3418]3614]
34193615
3420[[package]]3616[[package]]
3421name = "typenum"3617name = "typenum"
3422version = "1.17.0"3618version = "1.18.0"
3423source = "registry+https://github.com/rust-lang/crates.io-index"3619source = "registry+https://github.com/rust-lang/crates.io-index"
3424checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"3620checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
34253621
3426[[package]]3622[[package]]
3427name = "unic-langid"3623name = "unic-langid"
3428version = "0.9.5"3624version = "0.9.6"
3429source = "registry+https://github.com/rust-lang/crates.io-index"3625source = "registry+https://github.com/rust-lang/crates.io-index"
3430checksum = "23dd9d1e72a73b25e07123a80776aae3e7b0ec461ef94f9151eed6ec88005a44"3626checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05"
3431dependencies = [3627dependencies = [
3432 "unic-langid-impl",3628 "unic-langid-impl",
3433]3629]
34343630
3435[[package]]3631[[package]]
3436name = "unic-langid-impl"3632name = "unic-langid-impl"
3437version = "0.9.5"3633version = "0.9.6"
3438source = "registry+https://github.com/rust-lang/crates.io-index"3634source = "registry+https://github.com/rust-lang/crates.io-index"
3439checksum = "0a5422c1f65949306c99240b81de9f3f15929f5a8bfe05bb44b034cc8bf593e5"3635checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658"
3440dependencies = [3636dependencies = [
3441 "serde",3637 "serde",
3442 "tinystr",3638 "tinystr",
3443]3639]
34443640
3445[[package]]3641[[package]]
3446name = "unicase"3642name = "unicase"
3447version = "2.8.0"3643version = "2.8.1"
3448source = "registry+https://github.com/rust-lang/crates.io-index"3644source = "registry+https://github.com/rust-lang/crates.io-index"
3449checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df"3645checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
34503646
3451[[package]]3647[[package]]
3452name = "unicode-ident"3648name = "unicode-ident"
3453version = "1.0.13"3649version = "1.0.18"
3454source = "registry+https://github.com/rust-lang/crates.io-index"3650source = "registry+https://github.com/rust-lang/crates.io-index"
3455checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe"3651checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
34563652
3457[[package]]3653[[package]]
3458name = "unicode-segmentation"3654name = "unicode-segmentation"
34623658
3463[[package]]3659[[package]]
3464name = "unicode-width"3660name = "unicode-width"
3465version = "0.1.11"3661version = "0.1.14"
3466source = "registry+https://github.com/rust-lang/crates.io-index"3662source = "registry+https://github.com/rust-lang/crates.io-index"
3467checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"3663checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
34683664
3469[[package]]3665[[package]]
3470name = "unicode-width"3666name = "unicode-width"
3471version = "0.2.0"3667version = "0.2.1"
3472source = "registry+https://github.com/rust-lang/crates.io-index"3668source = "registry+https://github.com/rust-lang/crates.io-index"
3473checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd"3669checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c"
34743670
3475[[package]]3671[[package]]
3476name = "unicode_categories"3672name = "unicode_categories"
3484source = "registry+https://github.com/rust-lang/crates.io-index"3680source = "registry+https://github.com/rust-lang/crates.io-index"
3485checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"3681checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
3682
3683[[package]]
3684name = "unit-prefix"
3685version = "0.5.1"
3686source = "registry+https://github.com/rust-lang/crates.io-index"
3687checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817"
34863688
3487[[package]]3689[[package]]
3488name = "universal-hash"3690name = "universal-hash"
35083710
3509[[package]]3711[[package]]
3510name = "valuable"3712name = "valuable"
3511version = "0.1.0"3713version = "0.1.1"
3512source = "registry+https://github.com/rust-lang/crates.io-index"3714source = "registry+https://github.com/rust-lang/crates.io-index"
3513checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"3715checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
35143716
3515[[package]]3717[[package]]
3516name = "version_check"3718name = "version_check"
3526dependencies = [3728dependencies = [
3527 "itoa",3729 "itoa",
3528 "log",3730 "log",
3529 "unicode-width 0.1.11",3731 "unicode-width 0.1.14",
3530 "vte",3732 "vte",
3531]3733]
35323734
35723774
3573[[package]]3775[[package]]
3574name = "wasi"3776name = "wasi"
3575version = "0.11.0+wasi-snapshot-preview1"3777version = "0.11.1+wasi-snapshot-preview1"
3576source = "registry+https://github.com/rust-lang/crates.io-index"3778source = "registry+https://github.com/rust-lang/crates.io-index"
3577checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"3779checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
35783780
3579[[package]]3781[[package]]
3580name = "wasi"3782name = "wasi"
3581version = "0.14.2+wasi-0.2.4"3783version = "0.14.3+wasi-0.2.4"
3582source = "registry+https://github.com/rust-lang/crates.io-index"3784source = "registry+https://github.com/rust-lang/crates.io-index"
3583checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"3785checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95"
3584dependencies = [3786dependencies = [
3585 "wit-bindgen-rt",3787 "wit-bindgen",
3586]3788]
35873789
3588[[package]]3790[[package]]
3589name = "wasm-bindgen"3791name = "wasm-bindgen"
3590version = "0.2.95"3792version = "0.2.100"
3591source = "registry+https://github.com/rust-lang/crates.io-index"3793source = "registry+https://github.com/rust-lang/crates.io-index"
3592checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e"3794checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
3593dependencies = [3795dependencies = [
3594 "cfg-if",3796 "cfg-if",
3595 "once_cell",3797 "once_cell",
3798 "rustversion",
3596 "wasm-bindgen-macro",3799 "wasm-bindgen-macro",
3597]3800]
35983801
3599[[package]]3802[[package]]
3600name = "wasm-bindgen-backend"3803name = "wasm-bindgen-backend"
3601version = "0.2.95"3804version = "0.2.100"
3602source = "registry+https://github.com/rust-lang/crates.io-index"3805source = "registry+https://github.com/rust-lang/crates.io-index"
3603checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358"3806checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
3604dependencies = [3807dependencies = [
3605 "bumpalo",3808 "bumpalo",
3606 "log",3809 "log",
3607 "once_cell",
3608 "proc-macro2",3810 "proc-macro2",
3609 "quote",3811 "quote",
3610 "syn",3812 "syn",
36133815
3614[[package]]3816[[package]]
3615name = "wasm-bindgen-macro"3817name = "wasm-bindgen-macro"
3616version = "0.2.95"3818version = "0.2.100"
3617source = "registry+https://github.com/rust-lang/crates.io-index"3819source = "registry+https://github.com/rust-lang/crates.io-index"
3618checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56"3820checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
3619dependencies = [3821dependencies = [
3620 "quote",3822 "quote",
3621 "wasm-bindgen-macro-support",3823 "wasm-bindgen-macro-support",
3622]3824]
36233825
3624[[package]]3826[[package]]
3625name = "wasm-bindgen-macro-support"3827name = "wasm-bindgen-macro-support"
3626version = "0.2.95"3828version = "0.2.100"
3627source = "registry+https://github.com/rust-lang/crates.io-index"3829source = "registry+https://github.com/rust-lang/crates.io-index"
3628checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68"3830checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
3629dependencies = [3831dependencies = [
3630 "proc-macro2",3832 "proc-macro2",
3631 "quote",3833 "quote",
36363838
3637[[package]]3839[[package]]
3638name = "wasm-bindgen-shared"3840name = "wasm-bindgen-shared"
3639version = "0.2.95"3841version = "0.2.100"
3640source = "registry+https://github.com/rust-lang/crates.io-index"3842source = "registry+https://github.com/rust-lang/crates.io-index"
3641checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d"3843checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
3844dependencies = [
3845 "unicode-ident",
3846]
36423847
3643[[package]]3848[[package]]
3644name = "web-time"3849name = "web-time"
3659 "either",3864 "either",
3660 "home",3865 "home",
3661 "once_cell",3866 "once_cell",
3662 "rustix 0.38.40",3867 "rustix 0.38.44",
3663]3868]
36643869
3665[[package]]3870[[package]]
36803885
3681[[package]]3886[[package]]
3682name = "winapi-util"3887name = "winapi-util"
3683version = "0.1.9"3888version = "0.1.10"
3684source = "registry+https://github.com/rust-lang/crates.io-index"3889source = "registry+https://github.com/rust-lang/crates.io-index"
3685checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"3890checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22"
3686dependencies = [3891dependencies = [
3687 "windows-sys 0.59.0",3892 "windows-sys 0.60.2",
3688]3893]
36893894
3690[[package]]3895[[package]]
36953900
3696[[package]]3901[[package]]
3697name = "windows-core"3902name = "windows-core"
3698version = "0.52.0"3903version = "0.61.2"
3699source = "registry+https://github.com/rust-lang/crates.io-index"3904source = "registry+https://github.com/rust-lang/crates.io-index"
3700checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"3905checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
3701dependencies = [3906dependencies = [
3907 "windows-implement",
3908 "windows-interface",
3909 "windows-link",
3910 "windows-result",
3702 "windows-targets",3911 "windows-strings",
3703]3912]
3913
3914[[package]]
3915name = "windows-implement"
3916version = "0.60.0"
3917source = "registry+https://github.com/rust-lang/crates.io-index"
3918checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
3919dependencies = [
3920 "proc-macro2",
3921 "quote",
3922 "syn",
3923]
3924
3925[[package]]
3926name = "windows-interface"
3927version = "0.59.1"
3928source = "registry+https://github.com/rust-lang/crates.io-index"
3929checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
3930dependencies = [
3931 "proc-macro2",
3932 "quote",
3933 "syn",
3934]
37043935
3705[[package]]3936[[package]]
3706name = "windows-link"3937name = "windows-link"
3707version = "0.1.3"3938version = "0.1.3"
3708source = "registry+https://github.com/rust-lang/crates.io-index"3939source = "registry+https://github.com/rust-lang/crates.io-index"
3709checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"3940checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
3941
3942[[package]]
3943name = "windows-result"
3944version = "0.3.4"
3945source = "registry+https://github.com/rust-lang/crates.io-index"
3946checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
3947dependencies = [
3948 "windows-link",
3949]
3950
3951[[package]]
3952name = "windows-strings"
3953version = "0.4.2"
3954source = "registry+https://github.com/rust-lang/crates.io-index"
3955checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
3956dependencies = [
3957 "windows-link",
3958]
37103959
3711[[package]]3960[[package]]
3712name = "windows-sys"3961name = "windows-sys"
3713version = "0.52.0"3962version = "0.52.0"
3714source = "registry+https://github.com/rust-lang/crates.io-index"3963source = "registry+https://github.com/rust-lang/crates.io-index"
3715checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"3964checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
3716dependencies = [3965dependencies = [
3717 "windows-targets",3966 "windows-targets 0.52.6",
3718]3967]
37193968
3720[[package]]3969[[package]]
3723source = "registry+https://github.com/rust-lang/crates.io-index"3972source = "registry+https://github.com/rust-lang/crates.io-index"
3724checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"3973checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
3725dependencies = [3974dependencies = [
3726 "windows-targets",3975 "windows-targets 0.52.6",
3727]3976]
3977
3978[[package]]
3979name = "windows-sys"
3980version = "0.60.2"
3981source = "registry+https://github.com/rust-lang/crates.io-index"
3982checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
3983dependencies = [
3984 "windows-targets 0.53.3",
3985]
37283986
3729[[package]]3987[[package]]
3730name = "windows-targets"3988name = "windows-targets"
3731version = "0.52.6"3989version = "0.52.6"
3732source = "registry+https://github.com/rust-lang/crates.io-index"3990source = "registry+https://github.com/rust-lang/crates.io-index"
3733checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"3991checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
3734dependencies = [3992dependencies = [
3735 "windows_aarch64_gnullvm",3993 "windows_aarch64_gnullvm 0.52.6",
3736 "windows_aarch64_msvc",3994 "windows_aarch64_msvc 0.52.6",
3737 "windows_i686_gnu",3995 "windows_i686_gnu 0.52.6",
3738 "windows_i686_gnullvm",3996 "windows_i686_gnullvm 0.52.6",
3739 "windows_i686_msvc",3997 "windows_i686_msvc 0.52.6",
3740 "windows_x86_64_gnu",3998 "windows_x86_64_gnu 0.52.6",
3741 "windows_x86_64_gnullvm",3999 "windows_x86_64_gnullvm 0.52.6",
3742 "windows_x86_64_msvc",4000 "windows_x86_64_msvc 0.52.6",
3743]4001]
4002
4003[[package]]
4004name = "windows-targets"
4005version = "0.53.3"
4006source = "registry+https://github.com/rust-lang/crates.io-index"
4007checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91"
4008dependencies = [
4009 "windows-link",
4010 "windows_aarch64_gnullvm 0.53.0",
4011 "windows_aarch64_msvc 0.53.0",
4012 "windows_i686_gnu 0.53.0",
4013 "windows_i686_gnullvm 0.53.0",
4014 "windows_i686_msvc 0.53.0",
4015 "windows_x86_64_gnu 0.53.0",
4016 "windows_x86_64_gnullvm 0.53.0",
4017 "windows_x86_64_msvc 0.53.0",
4018]
37444019
3745[[package]]4020[[package]]
3746name = "windows_aarch64_gnullvm"4021name = "windows_aarch64_gnullvm"
3747version = "0.52.6"4022version = "0.52.6"
3748source = "registry+https://github.com/rust-lang/crates.io-index"4023source = "registry+https://github.com/rust-lang/crates.io-index"
3749checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"4024checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
4025
4026[[package]]
4027name = "windows_aarch64_gnullvm"
4028version = "0.53.0"
4029source = "registry+https://github.com/rust-lang/crates.io-index"
4030checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
37504031
3751[[package]]4032[[package]]
3752name = "windows_aarch64_msvc"4033name = "windows_aarch64_msvc"
3753version = "0.52.6"4034version = "0.52.6"
3754source = "registry+https://github.com/rust-lang/crates.io-index"4035source = "registry+https://github.com/rust-lang/crates.io-index"
3755checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"4036checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
4037
4038[[package]]
4039name = "windows_aarch64_msvc"
4040version = "0.53.0"
4041source = "registry+https://github.com/rust-lang/crates.io-index"
4042checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
37564043
3757[[package]]4044[[package]]
3758name = "windows_i686_gnu"4045name = "windows_i686_gnu"
3759version = "0.52.6"4046version = "0.52.6"
3760source = "registry+https://github.com/rust-lang/crates.io-index"4047source = "registry+https://github.com/rust-lang/crates.io-index"
3761checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"4048checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
4049
4050[[package]]
4051name = "windows_i686_gnu"
4052version = "0.53.0"
4053source = "registry+https://github.com/rust-lang/crates.io-index"
4054checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
37624055
3763[[package]]4056[[package]]
3764name = "windows_i686_gnullvm"4057name = "windows_i686_gnullvm"
3765version = "0.52.6"4058version = "0.52.6"
3766source = "registry+https://github.com/rust-lang/crates.io-index"4059source = "registry+https://github.com/rust-lang/crates.io-index"
3767checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"4060checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
4061
4062[[package]]
4063name = "windows_i686_gnullvm"
4064version = "0.53.0"
4065source = "registry+https://github.com/rust-lang/crates.io-index"
4066checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
37684067
3769[[package]]4068[[package]]
3770name = "windows_i686_msvc"4069name = "windows_i686_msvc"
3771version = "0.52.6"4070version = "0.52.6"
3772source = "registry+https://github.com/rust-lang/crates.io-index"4071source = "registry+https://github.com/rust-lang/crates.io-index"
3773checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"4072checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
4073
4074[[package]]
4075name = "windows_i686_msvc"
4076version = "0.53.0"
4077source = "registry+https://github.com/rust-lang/crates.io-index"
4078checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
37744079
3775[[package]]4080[[package]]
3776name = "windows_x86_64_gnu"4081name = "windows_x86_64_gnu"
3777version = "0.52.6"4082version = "0.52.6"
3778source = "registry+https://github.com/rust-lang/crates.io-index"4083source = "registry+https://github.com/rust-lang/crates.io-index"
3779checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"4084checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
4085
4086[[package]]
4087name = "windows_x86_64_gnu"
4088version = "0.53.0"
4089source = "registry+https://github.com/rust-lang/crates.io-index"
4090checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
37804091
3781[[package]]4092[[package]]
3782name = "windows_x86_64_gnullvm"4093name = "windows_x86_64_gnullvm"
3783version = "0.52.6"4094version = "0.52.6"
3784source = "registry+https://github.com/rust-lang/crates.io-index"4095source = "registry+https://github.com/rust-lang/crates.io-index"
3785checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"4096checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
4097
4098[[package]]
4099name = "windows_x86_64_gnullvm"
4100version = "0.53.0"
4101source = "registry+https://github.com/rust-lang/crates.io-index"
4102checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
37864103
3787[[package]]4104[[package]]
3788name = "windows_x86_64_msvc"4105name = "windows_x86_64_msvc"
3791checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"4108checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
37924109
3793[[package]]4110[[package]]
3794name = "wit-bindgen-rt"4111name = "windows_x86_64_msvc"
3795version = "0.39.0"4112version = "0.53.0"
3796source = "registry+https://github.com/rust-lang/crates.io-index"4113source = "registry+https://github.com/rust-lang/crates.io-index"
3797checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"4114checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
4115
4116[[package]]
3798dependencies = [4117name = "wit-bindgen"
3799 "bitflags",4118version = "0.45.0"
3800]4119source = "registry+https://github.com/rust-lang/crates.io-index"
4120checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814"
38014121
3802[[package]]4122[[package]]
3803name = "wsl"4123name = "wsl"
38344154
3835[[package]]4155[[package]]
3836name = "zerocopy"4156name = "zerocopy"
3837version = "0.7.35"4157version = "0.8.26"
3838source = "registry+https://github.com/rust-lang/crates.io-index"4158source = "registry+https://github.com/rust-lang/crates.io-index"
3839checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"4159checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f"
3840dependencies = [4160dependencies = [
3841 "byteorder",
3842 "zerocopy-derive",4161 "zerocopy-derive",
3843]4162]
38444163
3845[[package]]4164[[package]]
3846name = "zerocopy-derive"4165name = "zerocopy-derive"
3847version = "0.7.35"4166version = "0.8.26"
3848source = "registry+https://github.com/rust-lang/crates.io-index"4167source = "registry+https://github.com/rust-lang/crates.io-index"
3849checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"4168checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181"
3850dependencies = [4169dependencies = [
3851 "proc-macro2",4170 "proc-macro2",
3852 "quote",4171 "quote",
3853 "syn",4172 "syn",
3854]4173]
4174
4175[[package]]
4176name = "zerofrom"
4177version = "0.1.6"
4178source = "registry+https://github.com/rust-lang/crates.io-index"
4179checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
38554180
3856[[package]]4181[[package]]
3857name = "zeroize"4182name = "zeroize"
3873 "syn",4198 "syn",
3874]4199]
4200
4201[[package]]
4202name = "zerovec"
4203version = "0.11.4"
4204source = "registry+https://github.com/rust-lang/crates.io-index"
4205checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b"
4206dependencies = [
4207 "zerofrom",
4208]
38754209
modifiedCargo.tomldiffbeforeafterboth
11nix-eval = { path = "./crates/nix-eval" }11nix-eval = { path = "./crates/nix-eval" }
12nixlike = { path = "./crates/nixlike" }12nixlike = { path = "./crates/nixlike" }
1313
14age = { version = "0.11", features = ["ssh", "plugin"] }14age = { version = "0.11", features = ["plugin", "ssh"] }
15anyhow = "1.0"15anyhow = "1.0"
16clap = { version = "4.5", features = ["derive", "env", "unicode", "wrap_help"] }16clap = { version = "4.5", features = ["derive", "env", "unicode", "wrap_help"] }
17clap_complete = "4.5"17clap_complete = "4.5"
modifiedcmds/fleet/Cargo.tomldiffbeforeafterboth
4343
44fleet-base = { version = "0.1.0", path = "../../crates/fleet-base" }44fleet-base = { version = "0.1.0", path = "../../crates/fleet-base" }
45human-repr = { version = "1.1", optional = true }45human-repr = { version = "1.1", optional = true }
46indicatif = { version = "0.17", optional = true }46indicatif = { version = "0.18", optional = true }
47nom = "8.0.0"47nom = "8.0.0"
48tracing-indicatif = { version = "0.3", optional = true }48tracing-indicatif = { version = "0.3", optional = true }
4949
modifiedcmds/fleet/src/cmds/build_systems.rsdiffbeforeafterboth
1use std::{env::current_dir, os::unix::fs::symlink, path::PathBuf};1use std::{env::current_dir, os::unix::fs::symlink, path::PathBuf};
22
3use anyhow::{Result, anyhow};3use anyhow::Result;
4use clap::Parser;4use clap::Parser;
5use fleet_base::{5use fleet_base::{
6 deploy::{DeployAction, deploy_task, upload_task},6 deploy::{DeployAction, deploy_task, upload_task},
7 host::{Config, DeployKind, GenerationStorage},7 host::{Config, DeployKind, GenerationStorage},
8 opts::FleetOpts,8 opts::FleetOpts,
9};9};
10use nix_eval::{NixBuildBatch, nix_go};10use nix_eval::nix_go;
11use tokio::task::LocalSet;11use tokio::task::LocalSet;
12use tracing::{Instrument, error, field, info, info_span, warn};12use tracing::{Instrument, error, field, info, info_span, warn};
1313
32 config: Config,32 config: Config,
33 hostname: String,33 hostname: String,
34 build_attr: &str,34 build_attr: &str,
35 batch: Option<NixBuildBatch>,35 // batch: Option<NixBuildBatch>,
36) -> Result<PathBuf> {36) -> Result<PathBuf> {
37 info!("building");37 info!("building");
38 let host = config.host(&hostname).await?;38 let host = config.host(&hostname).await?;
39 // let action = Action::from(self.subcommand.clone());39 // let action = Action::from(self.subcommand.clone());
40 let nixos = host.nixos_config().await?;40 let nixos = host.nixos_config().await?;
41 let drv = nix_go!(nixos.system.build[{ build_attr }]);41 let drv = nix_go!(nixos.system.build[{ build_attr }]);
42 let outputs = drv.build_maybe_batch(batch).await?;42 // let outputs = drv.build_maybe_batch(batch).await?;
43 let out_output = outputs43 let out_output = drv.build("out").await?;
44 .get("out")
45 .ok_or_else(|| anyhow!("system build should produce \"out\" output"))?;
4644
47 // We already have system profiles for backups.45 // We already have system profiles for backups.
48 if !host.local {46 if !host.local {
56 config.data().gc_root_prefix54 config.data().gc_root_prefix
57 ),55 ),
58 )56 )
59 .arg(out_output);57 .arg(&out_output);
60 cmd.sudo().run_nix().await?;58 cmd.sudo().run_nix().await?;
61 }59 }
6260
63 Ok(out_output.clone())61 Ok(out_output)
64}62}
6563
66impl BuildSystems {64impl BuildSystems {
67 pub async fn run(self, config: &Config, opts: &FleetOpts) -> Result<()> {65 pub async fn run(self, config: &Config, opts: &FleetOpts) -> Result<()> {
68 let hosts = opts.filter_skipped(config.list_hosts().await?).await?;66 let hosts = opts.filter_skipped(config.list_hosts().await?).await?;
69 let set = LocalSet::new();67 let set = LocalSet::new();
70 let build_attr = self.build_attr.clone();68 let build_attr = self.build_attr.clone();
71 let batch = (hosts.len() > 1).then(|| {69 // let batch = (hosts.len() > 1).then(|| {
72 config70 // config
73 .nix_session71 // .nix_session
74 .new_build_batch("build-hosts".to_string())72 // .new_build_batch("build-hosts".to_string())
75 });73 // });
76 for host in hosts {74 for host in hosts {
77 let config = config.clone();75 let config = config.clone();
78 let span = info_span!("build", host = field::display(&host.name));76 let span = info_span!("build", host = field::display(&host.name));
79 let hostname = host.name;77 let hostname = host.name;
80 let build_attr = build_attr.clone();78 let build_attr = build_attr.clone();
81 let batch = batch.clone();79 // let batch = batch.clone();
82 set.spawn_local(80 set.spawn_local(
83 (async move {81 (async move {
84 let built = match build_task(config, hostname.clone(), &build_attr, batch).await82 let built = match build_task(config, hostname.clone(), &build_attr).await {
85 {
86 Ok(path) => path,83 Ok(path) => path,
87 Err(e) => {84 Err(e) => {
91 };88 };
92 // TODO: Handle error89 // TODO: Handle error
93 let mut out = current_dir().expect("cwd exists");90 let mut out = current_dir().expect("cwd exists");
94 out.push(format!("built-{}", hostname));91 out.push(format!("built-{hostname}"));
9592
96 info!("linking iso image to {:?}", out);93 info!("linking iso image to {:?}", out);
97 if let Err(e) = symlink(built, out) {94 if let Err(e) = symlink(built, out) {
101 .instrument(span),98 .instrument(span),
102 );99 );
103 }100 }
104 drop(batch);
105 set.await;101 set.await;
106 Ok(())102 Ok(())
107 }103 }
111 pub async fn run(self, config: &Config, opts: &FleetOpts) -> Result<()> {107 pub async fn run(self, config: &Config, opts: &FleetOpts) -> Result<()> {
112 let hosts = opts.filter_skipped(config.list_hosts().await?).await?;108 let hosts = opts.filter_skipped(config.list_hosts().await?).await?;
113 let set = LocalSet::new();109 let set = LocalSet::new();
114 let batch = (hosts.len() > 1).then(|| {110 // let batch = (hosts.len() > 1).then(|| {
115 config111 // config
116 .nix_session112 // .nix_session
117 .new_build_batch("deploy-hosts".to_string())113 // .new_build_batch("deploy-hosts".to_string())
118 });114 // });
119 for host in hosts.into_iter() {115 for host in hosts.into_iter() {
120 let config = config.clone();116 let config = config.clone();
121 let span = info_span!("deploy", host = field::display(&host.name));117 let span = info_span!("deploy", host = field::display(&host.name));
122 let hostname = host.name.clone();118 let hostname = host.name.clone();
123 let opts = opts.clone();119 let opts = opts.clone();
124 let batch = batch.clone();
125 if let Some(deploy_kind) = opts.action_attr::<DeployKind>(&host, "deploy_kind").await? {120 if let Some(deploy_kind) = opts.action_attr::<DeployKind>(&host, "deploy_kind").await? {
126 host.set_deploy_kind(deploy_kind);121 host.set_deploy_kind(deploy_kind);
127 };122 };
132 set.spawn_local(127 set.spawn_local(
133 (async move {128 (async move {
134 let built =129 let built = match build_task(config.clone(), hostname.clone(), "toplevel").await
135 match build_task(config.clone(), hostname.clone(), "toplevel", batch).await
136 {130 {
137 Ok(path) => path,131 Ok(path) => path,
138 Err(e) => {132 Err(e) => {
139 error!("failed to build host system closure: {}", e);133 error!("failed to build host system closure: {:#}", e);
140 return;134 return;
141 }135 }
142 };136 };
187 .instrument(span),181 .instrument(span),
188 );182 );
189 }183 }
190 drop(batch);
191 set.await;184 set.await;
192 Ok(())185 Ok(())
193 }186 }
modifiedcmds/fleet/src/cmds/info.rsdiffbeforeafterboth
38 'host: for host in config.list_hosts().await? {38 'host: for host in config.list_hosts().await? {
39 if !tagged.is_empty() {39 if !tagged.is_empty() {
40 let config = &config.config_field;40 let config = &config.config_field;
41 let host_name = &host.name;
41 let tags: Vec<String> = nix_go_json!(config.hosts[{ host.name }].tags);42 let tags: Vec<String> = nix_go_json!(config.hosts[host_name].tags);
42 for tag in tagged {43 for tag in tagged {
43 if !tags.contains(tag) {44 if !tags.contains(tag) {
44 continue 'host;45 continue 'host;
modifiedcmds/fleet/src/cmds/secrets/mod.rsdiffbeforeafterboth
2 collections::{BTreeMap, BTreeSet, HashSet},2 collections::{BTreeMap, BTreeSet, HashSet},
3 io::{self, Read, Write, stdin, stdout},3 io::{self, Read, Write, stdin, stdout},
4 path::PathBuf,4 path::PathBuf,
5 slice,
5};6};
67
7use age::Recipient;8use age::Recipient;
14 opts::FleetOpts,15 opts::FleetOpts,
15};16};
16use fleet_shared::SecretData;17use fleet_shared::SecretData;
17use nix_eval::{NixBuildBatch, Value, nix_go, nix_go_json};18use nix_eval::{NixType, Value, nix_go, nix_go_json};
18use owo_colors::OwoColorize;19use owo_colors::OwoColorize;
19use serde::Deserialize;20use serde::Deserialize;
20use tabled::{Table, Tabled};21use tabled::{Table, Tabled};
159}160}
160161
161#[allow(clippy::too_many_arguments)]162#[allow(clippy::too_many_arguments)]
162#[tracing::instrument(skip(config, secret, field, prefer_identities, batch))]163#[tracing::instrument(skip(config, secret, field, prefer_identities))]
163async fn maybe_regenerate_shared_secret(164async fn maybe_regenerate_shared_secret(
164 secret_name: &str,165 secret_name: &str,
165 config: &Config,166 config: &Config,
168 expected_owners: &[String],169 expected_owners: &[String],
169 expected_generation_data: serde_json::Value,170 expected_generation_data: serde_json::Value,
170 prefer_identities: &[String],171 prefer_identities: &[String],
171 batch: Option<NixBuildBatch>,172 // batch: Option<NixBuildBatch>,
172) -> Result<FleetSharedSecret> {173) -> Result<FleetSharedSecret> {
173 let original_set = secret.owners.clone();174 let original_set = secret.owners.clone();
174175
206 field,207 field,
207 expected_owners.to_vec(),208 expected_owners.to_vec(),
208 expected_generation_data,209 expected_generation_data,
209 batch,210 // batch,
210 )211 )
211 .await?;212 .await?;
212 Ok(generated)213 Ok(generated)
213 } else {214 } else {
214 drop(batch);215 // drop(batch);
215 let identity_holder = if !prefer_identities.is_empty() {216 let identity_holder = if !prefer_identities.is_empty() {
216 prefer_identities217 prefer_identities
217 .iter()218 .iter()
263 default_generator: Value,264 default_generator: Value,
264 expected_owners: &[String],265 expected_owners: &[String],
265 expected_generation_data: serde_json::Value,266 expected_generation_data: serde_json::Value,
266 batch: Option<NixBuildBatch>,267 // batch: Option<NixBuildBatch>,
267) -> Result<FleetSecret> {268) -> Result<FleetSecret> {
268 let generator = nix_go!(secret.generator);269 let generator = nix_go!(secret.generator);
269 let on: Option<String> = nix_go_json!(default_generator.impureOn);270 let on: Option<String> = nix_go_json!(default_generator.impureOn);
284 recipients.push(key);285 recipients.push(key);
285 }286 }
286 let generators = nix_go!(mk_secret_generators(Obj { recipients }));287 let generators = nix_go!(mk_secret_generators(Obj { recipients }));
288 // FIXME: Apparently, // operator is slow in nix
287 let pkgs_and_generators = nix_go!(on_pkgs + generators);289 let pkgs_and_generators = on_pkgs.attrs_update(generators)?;
288290
289 let call_package = nix_go!(nixpkgs.lib.callPackageWith(pkgs_and_generators));291 let call_package = nix_go!(nixpkgs.lib.callPackageWith(pkgs_and_generators));
290292
291 let generator = nix_go!(call_package(generator)(Obj {}));293 let generator = nix_go!(call_package(generator)(Obj {}));
292294
293 let generator = generator.build_maybe_batch(batch).await?;295 // let generator = generator.build_maybe_batch(batch).await?;
294 let generator = generator296 let generator = generator.build("out").await?;
295 .get("out")
296 .ok_or_else(|| anyhow!("missing generateImpure out"))?;
297 let generator = host.remote_derivation(generator).await?;297 let generator = host.remote_derivation(&generator).await?;
298298
299 let out_parent = host.mktemp_dir().await?;299 let out_parent = host.mktemp_dir().await?;
300 let out = format!("{out_parent}/out");300 let out = format!("{out_parent}/out");
347 secret: Value,347 secret: Value,
348 expected_owners: &[String],348 expected_owners: &[String],
349 expected_generation_data: serde_json::Value,349 expected_generation_data: serde_json::Value,
350 batch: Option<NixBuildBatch>,350 // batch: Option<NixBuildBatch>,
351) -> Result<FleetSecret> {351) -> Result<FleetSecret> {
352 let generator = nix_go!(secret.generator);352 let generator = nix_go!(secret.generator);
353 // Can't properly check on nix module system level353 // Can't properly check on nix module system level
354 {354 {
355 let gen_ty = generator.type_of().await?;355 let gen_ty = generator.type_of()?;
356 if gen_ty == "null" {356 if matches!(gen_ty, NixType::Null) {
357 bail!("secret has no generator defined, can't automatically generate it.");357 bail!("secret has no generator defined, can't automatically generate it.");
358 }358 }
359 if gen_ty == "set" {359 if matches!(gen_ty, NixType::Attrs) {
360 if !generator.has_field("__functor").await? {360 if !generator.has_field("__functor")? {
361 bail!("generator should be functor, got {gen_ty}");361 bail!("generator should be functor, got {gen_ty:?}");
362 }362 }
363 } else if gen_ty != "lambda" {363 } else if matches!(gen_ty, NixType::Function) {
364 bail!("generator should be functor, got {gen_ty}");364 bail!("generator should be functor, got {gen_ty:?}");
365 }365 }
366 }366 }
367 let nixpkgs = &config.nixpkgs;367 let nixpkgs = &config.nixpkgs;
378 let generators = nix_go!(default_mk_secret_generators(Obj {378 let generators = nix_go!(default_mk_secret_generators(Obj {
379 recipients: <Vec<String>>::new(),379 recipients: <Vec<String>>::new(),
380 }));380 }));
381 let pkgs_and_generators = nix_go!(default_pkgs + generators);381 let pkgs_and_generators = default_pkgs.clone().attrs_update(generators)?;
382382
383 let call_package = nix_go!(nixpkgs.lib.callPackageWith(pkgs_and_generators));383 let call_package = nix_go!(nixpkgs.lib.callPackageWith(pkgs_and_generators));
384 let default_generator = nix_go!(call_package(generator)(Obj {}));384 let default_generator = nix_go!(call_package(generator)(Obj {}));
394 default_generator,394 default_generator,
395 expected_owners,395 expected_owners,
396 expected_generation_data,396 expected_generation_data,
397 batch,397 // batch,
398 )398 )
399 .await399 .await
400 }400 }
416 secret: Value,416 secret: Value,
417 expected_owners: Vec<String>,417 expected_owners: Vec<String>,
418 expected_generation_data: serde_json::Value,418 expected_generation_data: serde_json::Value,
419 batch: Option<NixBuildBatch>,419 // batch: Option<NixBuildBatch>,
420) -> Result<FleetSharedSecret> {420) -> Result<FleetSharedSecret> {
421 // let owners: Vec<String> = nix_go_json!(secret.expectedOwners);421 // let owners: Vec<String> = nix_go_json!(secret.expectedOwners);
422 Ok(FleetSharedSecret {422 Ok(FleetSharedSecret {
426 secret,426 secret,
427 &expected_owners,427 &expected_owners,
428 expected_generation_data,428 expected_generation_data,
429 batch,429 // batch,
430 )430 )
431 .await?,431 .await?,
432 owners: expected_owners,432 owners: expected_owners,
722 }722 }
723723
724 let config_field = &config.config_field;724 let config_field = &config.config_field;
725 let name_clone = name.clone();
725 let field = nix_go!(config_field.sharedSecrets[{ name }]);726 let field = nix_go!(config_field.sharedSecrets[name_clone]);
726 let expected_generation_data = nix_go_json!(field.expectedGenerationData);727 let expected_generation_data = nix_go_json!(field.expectedGenerationData);
727728
728 let updated = maybe_regenerate_shared_secret(729 let updated = maybe_regenerate_shared_secret(
733 &target_machines,734 &target_machines,
734 expected_generation_data,735 expected_generation_data,
735 &prefer_identities,736 &prefer_identities,
736 None,737 // None,
737 )738 )
738 .await?;739 .await?;
739 config.replace_shared(name, updated);740 config.replace_shared(name, updated);
746 let stored_shared_set = config.list_shared().into_iter().collect::<HashSet<_>>();747 let stored_shared_set = config.list_shared().into_iter().collect::<HashSet<_>>();
747 {748 {
748 // Generate missing shared749 // Generate missing shared
749 let shared_batch = None;750 // let shared_batch = None;
750 let _span = info_span!("shared").entered();751 let _span = info_span!("shared").entered();
751 let expected_shared_set = config752 let expected_shared_set = config
752 .list_configured_shared()753 .list_configured_shared()
771 secret,772 secret,
772 expected_owners,773 expected_owners,
773 expected_generation_data,774 expected_generation_data,
774 shared_batch.clone(),775 // shared_batch.clone(),
775 )776 )
776 .in_current_span()777 .in_current_span()
777 .await?;778 .await?;
778 config.replace_shared(missing.to_string(), shared)779 config.replace_shared(missing.to_string(), shared)
779 }780 }
780 }781 }
781 if !skip_hosts {782 if !skip_hosts {
782 let hosts_batch = None;783 // let hosts_batch = None;
783 for host in config.list_hosts().await? {784 for host in config.list_hosts().await? {
784 if opts.should_skip(&host).await? {785 if opts.should_skip(&host).await? {
785 continue;786 continue;
805 config,806 config,
806 missing,807 missing,
807 secret,808 secret,
808 &[host.name.clone()],809 slice::from_ref(&host.name),
809 expected_generation_data,810 expected_generation_data,
810 hosts_batch.clone(),811 // hosts_batch.clone(),
811 )812 )
812 .in_current_span()813 .in_current_span()
813 .await814 .await
831 config,832 config,
832 &name,833 &name,
833 secret,834 secret,
834 &[host.name.clone()],835 slice::from_ref(&host.name),
835 expected_generation_data,836 expected_generation_data,
836 hosts_batch.clone(),837 // hosts_batch.clone(),
837 )838 )
838 .in_current_span()839 .in_current_span()
839 .await840 .await
874 &expected_owners,875 &expected_owners,
875 expected_generation_data,876 expected_generation_data,
876 &prefer_identities,877 &prefer_identities,
877 None,878 // None,
878 )879 )
879 .await?,880 .await?,
880 );881 );
modifiedcmds/fleet/src/cmds/tf.rsdiffbeforeafterboth
42 debug!("generating terraform configs");42 debug!("generating terraform configs");
43 let system = &config.local_system;43 let system = &config.local_system;
44 let config = &config.config_field;44 let config = &config.config_field;
45 let data: HashMap<String, PathBuf> = nix_go!(config.tf({ system })).build().await?;45 let data: PathBuf = nix_go!(config.tf({ system })).build("out").await?;
46 let data = &data["out"];
47 let data = fs::read(&data).await?;46 let data = fs::read(&data).await?;
4847
49 create_dir_all(&dir).await?;48 create_dir_all(&dir).await?;
modifiedcmds/fleet/src/main.rsdiffbeforeafterboth
23use human_repr::HumanCount;23use human_repr::HumanCount;
24#[cfg(feature = "indicatif")]24#[cfg(feature = "indicatif")]
25use indicatif::{ProgressState, ProgressStyle};25use indicatif::{ProgressState, ProgressStyle};
26use nix_eval::{gc_register_my_thread, gc_unregister_my_thread, init_libraries};
26use tracing::{Instrument, error, info, info_span};27use tracing::{Instrument, error, info, info_span};
27#[cfg(feature = "indicatif")]28#[cfg(feature = "indicatif")]
28use tracing_indicatif::IndicatifLayer;29use tracing_indicatif::IndicatifLayer;
184185
185 setup_logging();186 setup_logging();
187
188 init_libraries();
189
190 tokio::runtime::Builder::new_multi_thread()
191 .enable_all()
192 .on_thread_start(|| {
193 gc_register_my_thread();
194 })
195 .on_thread_stop(|| {
196 gc_unregister_my_thread();
197 })
198 .build()
199 .expect("failed to build runtime")
200 .block_on(async {
186 async_main(opts)201 if let Err(e) = main_real(opts).await {
202 error!("{e:#}");
203 ExitCode::FAILURE
204 } else {
205 ExitCode::SUCCESS
206 }
207 })
208 // async_main(opts)
187}209}
188
189#[tokio::main]
190async fn async_main(opts: RootOpts) -> ExitCode {
191 if let Err(e) = main_real(opts).await {
192 error!("{e:#}");
193 return ExitCode::FAILURE;
194 }
195 ExitCode::SUCCESS
196}
197210
198async fn main_real(opts: RootOpts) -> Result<()> {211async fn main_real(opts: RootOpts) -> Result<()> {
199 nix_eval::init_tokio();
200
201 let nix_args = std::env::var_os("NIX_ARGS")212 let nix_args = std::env::var_os("NIX_ARGS")
202 .map(|a| extra_args::parse_os(&a))213 .map(|a| extra_args::parse_os(&a))
modifiedcrates/fleet-base/src/host.rsdiffbeforeafterboth
1212
13use anyhow::{Context, Result, anyhow, bail, ensure};13use anyhow::{Context, Result, anyhow, bail, ensure};
14use fleet_shared::SecretData;14use fleet_shared::SecretData;
15use nix_eval::{NixSession, Value, nix_go, nix_go_json, util::assert_warn};15use nix_eval::{Value, nix_go, nix_go_json, util::assert_warn};
16use openssh::SessionBuilder;16use openssh::SessionBuilder;
17use serde::de::DeserializeOwned;17use serde::de::DeserializeOwned;
18use tabled::Tabled;18use tabled::Tabled;
42 /// inputs.nixpkgs42 /// inputs.nixpkgs
43 pub nixpkgs: Value,43 pub nixpkgs: Value,
44
45 pub nix_session: NixSession,
46}44}
4745
48// TODO: Make field not pub46// TODO: Make field not pub
233 };231 };
234 if !is_fleet_managed {232 if !is_fleet_managed {
235 bail!(indoc::indoc! {"233 bail!(
234 "{}",
236 host is not marked as managed by fleet235 indoc::indoc! {"
237 if you're not trying to lustrate/install system from scratch,236 host is not marked as managed by fleet
238 you should either237 if you're not trying to lustrate/install system from scratch,
503 let nixos = self.nixos_unchecked_config().await?;504 let nixos = self.nixos_unchecked_config().await?;
504 let secrets = nix_go!(nixos.secrets);505 let secrets = nix_go!(nixos.secrets);
505 let mut out = Vec::new();506 let mut out = Vec::new();
506 for name in secrets.list_fields().await? {507 for name in secrets.list_fields()? {
507 let secret = nix_go!(secrets[{ name }]);508 let secret = secrets.get_field(&name)?;
508 let is_shared: bool = nix_go_json!(secret.shared);509 let is_shared: bool = nix_go_json!(secret.shared);
509 if is_shared {510 if is_shared {
510 continue;511 continue;
592 }593 }
593 pub async fn list_hosts(&self) -> Result<Vec<ConfigHost>> {594 pub async fn list_hosts(&self) -> Result<Vec<ConfigHost>> {
594 let config = &self.config_field;595 let config = &self.config_field;
595 let names = nix_go!(config.hosts).list_fields().await?;596 let names = nix_go!(config.hosts).list_fields()?;
596 let mut out = vec![];597 let mut out = vec![];
597 for name in names {598 for name in names {
598 out.push(self.host(&name).await?);599 out.push(self.host(&name).await?);
608 /// Shared secrets configured in fleet.nix or in flake609 /// Shared secrets configured in fleet.nix or in flake
609 pub async fn list_configured_shared(&self) -> Result<Vec<String>> {610 pub async fn list_configured_shared(&self) -> Result<Vec<String>> {
610 let config_field = &self.config_field;611 let config_field = &self.config_field;
611 Ok(nix_go!(config_field.sharedSecrets).list_fields().await?)612 nix_go!(config_field.sharedSecrets).list_fields()
612 }613 }
613 /// Shared secrets configured in fleet.nix614 /// Shared secrets configured in fleet.nix
614 pub fn list_shared(&self) -> Vec<String> {615 pub fn list_shared(&self) -> Vec<String> {
680 // maybe it can be a .nix file for persistence, but accessible only681 // maybe it can be a .nix file for persistence, but accessible only
681 // thru some shared state controller? Might it be stored in terraform682 // thru some shared state controller? Might it be stored in terraform
682 // state provider?683 // state provider?
683 pub fn data(&self) -> MutexGuard<FleetData> {684 pub fn data(&'_ self) -> MutexGuard<'_, FleetData> {
684 self.data.lock().unwrap()685 self.data.lock().unwrap()
685 }686 }
686 pub fn data_mut(&self) -> MutexGuard<FleetData> {687 pub fn data_mut(&'_ self) -> MutexGuard<'_, FleetData> {
687 self.data.lock().unwrap()688 self.data.lock().unwrap()
688 }689 }
689 pub fn save(&self) -> Result<()> {690 pub fn save(&self) -> Result<()> {
690 let mut tempfile = NamedTempFile::new_in(self.directory.clone()).context("failed to create updated version of fleet.nix in the same directory as original.\nDo you have write access to it? Access only to the fleet.nix won't be enough, the directory is used for atomic overwrite operation.\nIt is not recommended to use fleet by root anyway, move fleet project to your home directory.")?;691 let mut tempfile = NamedTempFile::new_in(self.directory.clone()).context("failed to create updated version of fleet.nix in the same directory as original.\nDo you have write access to it? Access only to the fleet.nix won't be enough, the directory is used for atomic overwrite operation.\nIt is not recommended to use fleet by root anyway, move fleet project to your home directory.")?;
691 let data = nixlike::serialize(&self.data() as &FleetData)?;692 let data = nixlike::serialize(&self.data() as &FleetData)?;
692 tempfile.write_all(693 tempfile.write_all(
693 format!(694 format!(
694 "# This file contains fleet state and shouldn't be edited by hand\n\n{}\n\n# vim: ts=2 et nowrap\n",695 "# This file contains fleet state and shouldn't be edited by hand\n\n{data}\n\n# vim: ts=2 et nowrap\n"
695 data
696 )696 )
697 .as_bytes(),697 .as_bytes(),
698 )?;698 )?;
modifiedcrates/fleet-base/src/opts.rsdiffbeforeafterboth
7};7};
88
9use anyhow::{Context, Result, bail};9use anyhow::{Context, Result, bail};
10use nix_eval::{NixSessionPool, Value, nix_go, util::assert_warn};10use nix_eval::{FetchSettings, FlakeReference, FlakeSettings, Value, nix_go, util::assert_warn};
11use nom::{11use nom::{
12 Parser,12 Parser,
13 bytes::complete::take_while1,13 bytes::complete::take_while1,
210 std::fs::read_to_string(&fleet_data_path).context("reading fleet state (fleet.nix)")?;210 std::fs::read_to_string(&fleet_data_path).context("reading fleet state (fleet.nix)")?;
211 let data: Mutex<FleetData> = nixlike::parse_str(&bytes)?;211 let data: Mutex<FleetData> = nixlike::parse_str(&bytes)?;
212212
213 let mut fetch_settings = FetchSettings::new();
214 fetch_settings.set(c"warn-dirty", c"false");
215
216 // TODO: use correct directory, not cwd
213 let pool = NixSessionPool::new(217 let (mut flake, _) = FlakeReference::new(
214 directory.as_os_str().to_owned(),218 directory
215 nix_args.clone(),219 .to_str()
216 self.local_system.clone(),220 .ok_or_else(|| anyhow::anyhow!("fleet dir should have utf-8 path"))?,
217 self.fail_fast,221 &fetch_settings,
218 )222 )?;
219 .await?;
220 let nix_session = pool.get().await?;223 let flake = flake.lock(&fetch_settings)?;
224
225 let mut flake_settings = FlakeSettings::new()?;
226 let flake = flake.get_attrs(&mut flake_settings)?;
221227
222 let builtins_field = Value::binding(nix_session.clone(), "builtins").await?;228 let builtins_field = Value::eval("builtins")?;
223229
224 let fleet_root = Value::binding(nix_session.clone(), "fleetConfigurations").await?;230 let fleet_root = flake.get_field("fleetConfigurations")?;
231 let data_val = Value::serialized(&data)?;
225 let fleet_field = nix_go!(fleet_root.default({ data }));232 let fleet_field = nix_go!(fleet_root.default(data_val));
226233
227 let config_field = nix_go!(fleet_field.config);234 let config_field = nix_go!(fleet_field.config);
228235
229 if assert {236 if assert {
230 assert_warn("fleet config evaluation", &config_field).await?;237 assert_warn("fleet config evaluation", &config_field)
238 .await
239 .context("failed to verify assertions")?;
231 }240 }
232241
233 let import = nix_go!(builtins_field.import);242 let import = nix_go!(builtins_field.import);
234 let overlays = nix_go!(config_field.nixpkgs.overlays);243 let overlays = nix_go!(config_field.nixpkgs.overlays);
235 let nixpkgs = nix_go!(config_field.nixpkgs.buildUsing);244 let nixpkgs = nix_go!(config_field.nixpkgs.buildUsing);
236 let nixpkgs_imported = nix_go!(nixpkgs | import);245 let nixpkgs_imported = nix_go!(import(nixpkgs));
237246
238 let default_pkgs = nix_go!(nixpkgs_imported(Obj {247 let default_pkgs = nix_go!(nixpkgs_imported(Obj {
239 overlays,248 overlays,
240 system: self.local_system.clone(),249 system: self.local_system.clone(),
241 }));250 }));
242251
243 Ok(Config(Arc::new(FleetConfigInternals {252 Ok(Config(Arc::new(FleetConfigInternals {
244 nix_session,
245 directory,253 directory,
246 data,254 data,
247 local_system: self.local_system.clone(),255 local_system: self.local_system.clone(),
modifiedcrates/nix-eval/Cargo.tomldiffbeforeafterboth
16tokio-util.workspace = true16tokio-util.workspace = true
17tracing.workspace = true17tracing.workspace = true
1818
19cxx = "1.0.168"
19futures = "0.3.31"20futures = "0.3.31"
20itertools = "0.14.0"21itertools = "0.14.0"
21r2d2 = "0.8.10"22r2d2 = "0.8.10"
22regex = "1.11.1"23regex = "1.11.1"
24test-log = { version = "0.2.18", features = ["trace"] }
23unindent = "0.2.4"25unindent = "0.2.4"
2426tracing-indicatif = "0.3.13"
25# [build-dependencies]27ctor = "0.5.0"
26# bindgen = "0.69.4"28
27# pkg-config = "0.3.30"29[build-dependencies]
30bindgen = "0.72.0"
31cxx-build = "1.0.168"
32pkg-config = "0.3.30"
2833
modifiedcrates/nix-eval/build.rsdiffbeforeafterboth
1// use bindgen::callbacks::ParseCallbacks;1use bindgen::{
2// use std::path::PathBuf;2 RustEdition,
3//3 callbacks::{ItemInfo, ParseCallbacks},
4// #[derive(Debug)]4};
5// struct StripPrefix;5use std::path::PathBuf;
6// impl ParseCallbacks for StripPrefix {6
7// fn item_name(&self, name: &str) -> Option<String> {7#[derive(Debug)]
8// name.strip_prefix("nix_").map(ToOwned::to_owned)8struct StripPrefix;
9// }9impl ParseCallbacks for StripPrefix {
10// }10 fn item_name(&self, name: ItemInfo<'_>) -> Option<String> {
11 name.name.strip_prefix("nix_").map(ToOwned::to_owned)
12 }
13}
1114
12fn main() {15fn main() {
13 //16 // Link nix C++ libraries for cxx
14 // let mut libnix = bindgen::builder().header_contents("nix.h", "17 for lib in &[
15 // #define GC_THREADS18 "nix-util",
16 // #include <gc/gc.h>19 "nix-store",
17 // #include <nix_api_expr.h>20 "nix-expr",
18 // #include <nix_api_store.h>21 "nix-flake",
19 // #include <nix_api_util.h>22 "nix-fetchers",
20 // #include <nix_api_value.h>23 "bdw-gc",
21 // ").parse_callbacks(Box::new(StripPrefix));24 ] {
25 if let Ok(library) = pkg_config::probe_library(lib) {
26 for lib_path in library.libs {
27 println!("cargo:rustc-link-lib={lib_path}");
28 }
29 for search_path in library.link_paths {
30 println!("cargo:rustc-link-search=native={}", search_path.display());
31 }
32 }
33 }
34
35 cxx_build::bridge("src/logging.rs")
36 .file("src/logging.cc")
37 .std("c++20")
38 .shared_flag(true)
39 .compile("nix-eval-logging");
40 cxx_build::bridge("src/lib.rs")
41 .file("src/lib.cc")
42 .std("c++20")
43 .shared_flag(true)
44 .compile("nix-eval");
45
46 println!("cargo:rerun-if-changed=src/lib.cc");
47 println!("cargo:rerun-if-changed=src/lib.hh");
48 println!("cargo:rerun-if-changed=src/logging.cc");
49 println!("cargo:rerun-if-changed=src/logging.hh");
50
22 //51 //
23 // for header in pkg_config::probe_library("nix-expr-c").expect("nix-expr-c").include_paths.into_iter().chain(pkg_config::probe_library("bdw-gc").expect("bdw-gc").include_paths.into_iter()) {52 let mut libnix = bindgen::builder()
24 // libnix = libnix.clang_arg(format!("-I{}", header.to_str().expect("path is utf-8")));53 .rust_edition(RustEdition::Edition2024)
25 // }54 .header_contents(
26 //55 "nix.h",
27 // let mut out = PathBuf::from(std::env::var("OUT_DIR").expect("OUT_DIR is set by cargo"));56 "
28 // out.push("bindings.rs");57 #define GC_THREADS
29 // libnix.generate().expect("generate bindings").write_to_file(out).expect("write bindings");58 #include <gc/gc.h>
59 #include <nix_api_expr.h>
60 #include <nix_api_store.h>
61 #include <nix_api_flake.h>
62 #include <nix_api_fetchers.h>
63 #include <nix_api_util.h>
64 #include <nix_api_value.h>
65 ",
66 )
67 .parse_callbacks(Box::new(StripPrefix));
68
69 for header in pkg_config::probe_library("nix-expr-c")
70 .expect("nix-expr-c")
71 .include_paths
72 .into_iter()
73 .chain(
74 pkg_config::probe_library("nix-flake-c")
75 .expect("nix-flake-c")
76 .include_paths
77 .into_iter(),
78 )
79 .chain(
80 pkg_config::probe_library("nix-fetchers-c")
81 .expect("nix-fetchers-c")
82 .include_paths
83 .into_iter(),
84 )
85 .chain(
86 pkg_config::probe_library("bdw-gc")
87 .expect("bdw-gc")
88 .include_paths
89 .into_iter(),
90 ) {
91 libnix = libnix.clang_arg(format!("-I{}", header.to_str().expect("path is utf-8")));
92 }
93
94 let mut out = PathBuf::from(std::env::var("OUT_DIR").expect("OUT_DIR is set by cargo"));
95 out.push("bindings.rs");
96 libnix
97 .generate()
98 .expect("generate bindings")
99 .write_to_file(out)
100 .expect("write bindings");
30}101}
31102
addedcrates/nix-eval/src/lib.ccdiffbeforeafterboth

no changes

addedcrates/nix-eval/src/lib.hhdiffbeforeafterboth

no changes

modifiedcrates/nix-eval/src/lib.rsdiffbeforeafterboth
3//!3//!
4//! Current api is awful, little effort was put into this implementation.4//! Current api is awful, little effort was put into this implementation.
55
6use std::{collections::HashMap, path::PathBuf, sync::Arc};6use std::borrow::Cow;
7use std::cell::RefCell;
8use std::ffi::{CStr, CString, c_char, c_int, c_uint, c_void};
9use std::fmt;
10use std::ptr::null_mut;
11use std::sync::LazyLock;
12use std::{collections::HashMap, path::PathBuf};
713
8pub use pool::NixSessionPool;14use anyhow::{Context, bail};
9use pool::NixSessionPoolInner;
10use r2d2::PooledConnection;
11pub use session::{Error, Result};
12use tokio::sync::{mpsc, oneshot};15use serde::Serialize;
13use tracing::instrument;16use serde::de::DeserializeOwned;
14pub use value::{Index, Value};
1517
16mod pool;18pub use anyhow::Result;
19
17mod session;20use self::logging::nix_logging_cxx;
21use self::nix_cxx::set_fetcher_setting;
22use self::nix_raw::{
23 alloc_value, c_context, c_context_create, err_code, err_info_msg, eval_state_build,
24 eval_state_builder_new, expr_eval_from_string, fetchers_settings, fetchers_settings_free,
25 fetchers_settings_new, flake_lock, flake_lock_flags, flake_lock_flags_free,
26 flake_lock_flags_new, flake_reference_parse_flags, flake_reference_parse_flags_free,
27 flake_reference_parse_flags_new, flake_reference_parse_flags_set_base_directory,
28 flake_settings, flake_settings_free, flake_settings_new, init_bool, init_int, init_string,
29 locked_flake_free, locked_flake_get_output_attrs, set_err_msg, setting_set, state_free,
30 value_decref, value_force, value_incref,
31};
32
18mod value;33mod value;
19// Contains macros helpers34// Contains macros helpers
35pub mod logging;
20#[doc(hidden)]36#[doc(hidden)]
21pub mod macros;37pub mod macros;
22pub mod util;38pub mod util;
23// #[allow(non_upper_case_globals, non_camel_case_types, non_snake_case)]
24// mod nix_raw {
25// include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
26// }
2739
28// fn init() {40#[allow(non_upper_case_globals, non_camel_case_types, non_snake_case)]
41mod nix_raw {
29// nix_raw::libutil_init();42 include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
43}
44#[cxx::bridge]
45pub mod nix_cxx {
46 unsafe extern "C++" {
47 type nix_fetchers_settings;
30// }48 include!("nix-eval/src/lib.hh");
3149
32#[derive(Clone)]50 unsafe fn set_fetcher_setting(
33pub struct NixSession(pub(crate) Arc<tokio::sync::Mutex<PooledConnection<NixSessionPoolInner>>>);51 settings: *mut nix_fetchers_settings,
52 setting: *const c_char,
53 value: *const c_char,
54 );
55 }
56}
3457
35struct NixBuildTask(Value, oneshot::Sender<Result<HashMap<String, PathBuf>>>);58#[derive(Debug, PartialEq, Eq)]
59pub enum NixType {
60 Thunk,
61 Int,
62 Float,
63 Bool,
64 String,
65 Path,
66 Null,
67 Attrs,
68 List,
69 Function,
70 External,
71}
72impl NixType {
73 fn from_int(c: c_uint) -> Self {
74 match c {
75 0 => Self::Thunk,
76 1 => Self::Int,
77 2 => Self::Float,
78 3 => Self::Bool,
79 4 => Self::String,
80 5 => Self::Path,
81 6 => Self::Null,
82 7 => Self::Attrs,
83 8 => Self::List,
84 9 => Self::Function,
85 10 => Self::External,
86 _ => unreachable!("unknown nix type: {c}"),
87 }
88 }
89}
3690
37#[derive(Clone)]91#[derive(Debug)]
92#[repr(i32)]
38pub struct NixBuildBatch {93enum NixErrorKind {
39 tx: mpsc::UnboundedSender<NixBuildTask>,94 Unknown = 1,
95 Overflow = 2,
96 Key = 3,
97 Generic = 4,
40}98}
99impl NixErrorKind {
100 fn from_int(v: c_int) -> Option<Self> {
101 Some(match v {
102 0 => return None,
103 -1 => Self::Unknown,
104 -2 => Self::Overflow,
105 -3 => Self::Key,
106 -4 => Self::Generic,
107 _ => {
108 debug_assert!(false, "unexpected nix error kind: {v}");
109 Self::Unknown
110 }
111 })
112 }
113}
41114
42#[instrument(skip(session, values))]115pub fn gc_register_my_thread() {
43async fn build_multiple(name: String, session: NixSession, values: Vec<Value>) -> Result<()> {
44 let system = session.0.lock().await.nix_system.clone();116 assert_eq!(unsafe { nix_raw::GC_thread_is_registered() }, 0);
45 let builtins = Value::binding(session, "builtins").await?;117
46 let drv = nix_go!(builtins.derivation(Obj {118 let mut sb = nix_raw::GC_stack_base {
47 system,119 mem_base: null_mut(),
48 name,
49 builder: "/bin/sh",
50 // we want nothing from this derivation, it is only used to perform multiple builds at once.120 };
121 let r = unsafe { nix_raw::GC_get_stack_base(&mut sb) };
122 if r as u32 != nix_raw::GC_SUCCESS {
51 args: vec!["-c", "echo > $out"],123 panic!("failed to get thread stack base");
52 preferLocalBuild: true,
53 allowSubstitutes: false,
54 buildInputs: values,
55 }));
56 drv.build().await?;124 }
57 Ok(())125 unsafe { nix_raw::GC_register_my_thread(&sb) };
58}126}
127pub fn gc_unregister_my_thread() {
128 assert_eq!(unsafe { nix_raw::GC_thread_is_registered() }, 1);
59129
60impl NixBuildBatch {
61 fn new(name: String, session: NixSession) -> Self {130 unsafe { nix_raw::GC_unregister_my_thread() };
62 let (tx, mut rx) = mpsc::unbounded_channel::<NixBuildTask>();131}
63132
64 tokio::task::spawn(async move {133struct ThreadRegisterGuard {}
65 let mut deps = vec![];134impl ThreadRegisterGuard {
66 let mut build_data = vec![];135 fn new() -> Self {
67 while let Some(task) = rx.recv().await {136 gc_register_my_thread();
68 build_data.push(task.0.clone());137 Self {}
69 deps.push(task);138 }
139}
140impl Drop for ThreadRegisterGuard {
141 fn drop(&mut self) {
142 gc_unregister_my_thread();
143 }
144}
145
146struct NixContext(*mut c_context);
147impl NixContext {
148 fn set_err(&mut self, err: NixErrorKind, msg: &CStr) {
149 unsafe { set_err_msg(self.0, err as c_int, msg.as_ptr()) };
150 }
151 fn new() -> Self {
152 let ctx = unsafe { c_context_create() };
153 Self(ctx)
154 }
155 fn error_kind(&self) -> Option<NixErrorKind> {
156 let code = unsafe { err_code(self.0) };
157 NixErrorKind::from_int(code)
158 }
159 fn error<'t>(&self) -> Option<Cow<'t, str>> {
160 if let NixErrorKind::Generic = self.error_kind()? {
161 let mut err_out = String::new();
162 unsafe {
163 err_info_msg(
164 null_mut(),
165 self.0,
166 Some(copy_nix_str),
167 (&raw mut err_out).cast(),
168 )
169 };
170 return Some(Cow::Owned(err_out));
171 };
172
173 // TODO: Can throw error (resulting in panic) if unable to retrieve error. Should be able to resolve by passing context as a first argument,
174 // but it looks ugly
175 let str = unsafe { nix_raw::err_msg(null_mut(), self.0, null_mut()) };
176 Some(unsafe { CStr::from_ptr(str) }.to_string_lossy())
177
178 // TODO: There is also nix_err_info_msg, but I don't understand when it should be used
179 // Some(match self.error_kind()? {
180 // NixErrorKind::Generic => {
181 // }
182 // })
183 }
184 fn clean_err(&mut self) {
185 unsafe {
186 nix_raw::clear_err(self.0);
187 }
188 }
189
190 fn bail_if_error(&self) -> Result<()> {
191 if let Some(err) = self.error() {
192 bail!("{err}");
193 };
194 Ok(())
195 }
196
197 fn run_in_context<T>(&mut self, f: impl FnOnce(*mut c_context) -> T) -> Result<T> {
198 self.clean_err();
199 let o = f(self.0);
200 self.bail_if_error()?;
201 self.clean_err();
202 Ok(o)
203 }
204}
205impl Drop for NixContext {
206 fn drop(&mut self) {
207 unsafe {
208 nix_raw::c_context_free(self.0);
209 }
210 }
211}
212struct GlobalState {
213 store: Store,
214 state: EvalState,
215}
216impl GlobalState {
217 fn new() -> Result<Self> {
218 let mut ctx = NixContext::new();
219 let store = ctx
220 .run_in_context(|c| unsafe { nix_raw::store_open(c, c"daemon".as_ptr(), null_mut()) })
221 .map(Store)?;
222
223 let builder = ctx.run_in_context(|c| unsafe { eval_state_builder_new(c, store.0) })?;
224 ctx.run_in_context(|c| {
225 unsafe {
226 nix_raw::eval_state_builder_set_eval_setting(
227 c,
228 builder,
229 c"lazy-trees".as_ptr(),
230 c"true".as_ptr(),
231 )
70 }232 }
71 if deps.is_empty() {233 // eval_s
72 return;234 })?;
73 }235 let state = ctx
74 match build_multiple(name, session, build_data).await {236 .run_in_context(|c| unsafe { eval_state_build(c, builder) })
75 Ok(_) => {237 .map(EvalState)?;
76 for NixBuildTask(v, o) in deps {238
77 let _ = o.send(v.build().await);239 Ok(Self { store, state })
78 }240 }
79 }241}
80 Err(e) => {242
81 for NixBuildTask(v, o) in deps {243struct ThreadState {
82 let s = v.to_string_weak().await;244 ctx: NixContext,
83 let s = match s {245}
84 Ok(s) => s,246impl ThreadState {
85 Err(e) => {247 fn new() -> Result<Self> {
86 let _ = o.send(Err(e));248 let ctx = NixContext::new();
87 continue;249
88 }250 Ok(Self { ctx })
89 };251 }
90 if PathBuf::from(s).exists() {252}
91 let _ = o.send(v.build().await);253
92 } else {254static GLOBAL_STATE: LazyLock<GlobalState> =
93 let _ = o.send(Err(e.clone()));255 LazyLock::new(|| GlobalState::new().expect("global state init shouldn't fail"));
94 }256
95 }257thread_local! {
96 }258 static THREAD_STATE: RefCell<ThreadState> = RefCell::new(ThreadState::new().expect("thread state init shouldn't fail"));
259}
260fn with_default_context<T>(
261 f: impl FnOnce(*mut c_context, *mut nix_raw::EvalState) -> T,
262) -> Result<T> {
263 let global = &GLOBAL_STATE.state;
264 let (ctx, state) = THREAD_STATE.with_borrow_mut(|w| (w.ctx.0, global.0));
265 let mut ctx = NixContext(ctx);
266 let v = ctx.run_in_context(|c| f(c, state));
267 // It is reused for thread
268 std::mem::forget(ctx);
269 v
270}
271
272fn set_setting(s: &CStr, v: &CStr) -> Result<()> {
273 with_default_context(|c, _| unsafe { setting_set(c, s.as_ptr(), v.as_ptr()) }).map(|_| ())
274}
275
276pub struct FetchSettings(*mut fetchers_settings);
277impl FetchSettings {
278 pub fn new() -> Self {
279 Self::try_new().expect("allocation should not fail")
280 }
281 fn try_new() -> Result<Self> {
282 with_default_context(|c, _| unsafe { fetchers_settings_new(c) }).map(Self)
283 }
284 pub fn set(&mut self, setting: &CStr, value: &CStr) {
285 unsafe {
286 set_fetcher_setting(self.0.cast(), setting.as_ptr(), value.as_ptr());
287 };
288 }
289}
290unsafe impl Send for FetchSettings {}
291unsafe impl Sync for FetchSettings {}
292impl Drop for FetchSettings {
293 fn drop(&mut self) {
294 unsafe { fetchers_settings_free(self.0) };
295 }
296}
297pub struct FlakeSettings(*mut flake_settings);
298impl FlakeSettings {
299 pub fn new() -> Result<Self> {
300 with_default_context(|c, _| unsafe { flake_settings_new(c) }).map(Self)
301 }
302}
303unsafe impl Send for FlakeSettings {}
304unsafe impl Sync for FlakeSettings {}
305impl Drop for FlakeSettings {
306 fn drop(&mut self) {
307 unsafe {
308 flake_settings_free(self.0);
309 }
310 }
311}
312
313struct FlakeReferenceParseFlags(*mut flake_reference_parse_flags);
314impl FlakeReferenceParseFlags {
315 fn new(settings: &mut FlakeSettings) -> Result<Self> {
316 with_default_context(|c, _| unsafe { flake_reference_parse_flags_new(c, settings.0) })
317 .map(Self)
318 }
319 fn set_base_dir(&mut self, dir: &str) -> Result<()> {
320 with_default_context(|c, _| {
321 unsafe {
322 flake_reference_parse_flags_set_base_directory(
323 c,
324 self.0,
325 dir.as_ptr().cast(),
326 dir.len(),
327 )
97 };328 };
98 });329 })
99 Self { tx }
100 }330 }
331}
101 pub async fn submit(self, task: Value) -> Result<HashMap<String, PathBuf>> {332impl Drop for FlakeReferenceParseFlags {
102 let Self { tx: task_tx } = self;333 fn drop(&mut self) {
103 let (tx, rx) = oneshot::channel();
104 let _ = task_tx.send(NixBuildTask(task, tx));334 unsafe {
105 drop(task_tx);335 flake_reference_parse_flags_free(self.0);
106 rx.await.expect("shoudn't be cancelled here")336 }
107 }337 }
108}338}
339struct FlakeLockFlags(*mut flake_lock_flags);
340impl FlakeLockFlags {
341 fn new(settings: &mut FlakeSettings) -> Result<Self> {
342 with_default_context(|c, _| unsafe { flake_lock_flags_new(c, settings.0) }).map(Self)
343 }
344}
345impl Drop for FlakeLockFlags {
346 fn drop(&mut self) {
347 unsafe {
348 flake_lock_flags_free(self.0);
349 }
350 }
351}
109352
353unsafe extern "C" fn copy_nix_str(start: *const c_char, n: c_uint, user_data: *mut c_void) {
354 let s = unsafe { std::slice::from_raw_parts(start.cast::<u8>(), n as usize) };
355 let s = std::str::from_utf8(s).expect("c string has invalid utf-8");
356 unsafe { *user_data.cast::<String>() = s.to_owned() };
357}
358
359struct Store(*mut nix_raw::Store);
110impl NixSession {360unsafe impl Send for Store {}
361unsafe impl Sync for Store {}
362
363struct EvalState(*mut nix_raw::EvalState);
364impl EvalState {
111 fn ptr_eq(a: &Self, b: &Self) -> bool {365 // TODO: store ownership
366 fn new_raw(store: *mut nix_raw::Store) -> Result<Self> {
112 Arc::ptr_eq(&a.0, &b.0)367 let builder =
368 with_default_context(|c, _| unsafe { nix_raw::eval_state_builder_new(c, store) })?;
369
370 with_default_context(|c, _| unsafe { eval_state_build(c, builder) }).map(Self)
371
372 // with_default_context(|c| state_create(c))
113 }373 }
374}
375unsafe impl Send for EvalState {}
376unsafe impl Sync for EvalState {}
377impl Drop for EvalState {
378 fn drop(&mut self) {
379 unsafe {
380 state_free(self.0);
381 }
382 }
383}
114384
385pub struct FlakeReference(*mut nix_raw::flake_reference);
386impl FlakeReference {
115 pub fn new_build_batch(&self, name: String) -> NixBuildBatch {387 pub fn new(s: &str, fetch: &FetchSettings) -> Result<(Self, String)> {
116 NixBuildBatch::new(name, self.clone())388 let mut flake_settings = FlakeSettings::new()?;
389 let mut parse_flags = FlakeReferenceParseFlags::new(&mut flake_settings)?;
390
391 // parse_flags.set_base_dir("/home/lach/build/fleet")?;
392
393 let mut out = null_mut();
394 let mut fragment = String::new();
395 // let fetch_settings = fetcher_settings;
396 with_default_context(|c, _| unsafe {
397 nix_raw::flake_reference_and_fragment_from_string(
398 c,
399 fetch.0,
400 flake_settings.0,
401 parse_flags.0,
402 s.as_ptr().cast(),
403 s.len(),
404 &mut out,
405 Some(copy_nix_str),
406 (&raw mut fragment).cast(),
407 )
408 })?;
409 assert!(!out.is_null());
410
411 Ok((Self(out), fragment))
117 }412 }
413 pub fn lock(&mut self, fetch: &FetchSettings) -> Result<LockedFlake> {
414 let mut settings = FlakeSettings::new()?;
415 let lock_flags = FlakeLockFlags::new(&mut settings)?;
416 with_default_context(|c, es| unsafe {
417 flake_lock(c, fetch.0, settings.0, es, lock_flags.0, self.0)
418 })
419 .map(LockedFlake)
420 }
118}421}
422unsafe impl Send for FlakeReference {}
423unsafe impl Sync for FlakeReference {}
119424
120pub fn init_tokio() {425pub struct LockedFlake(*mut nix_raw::locked_flake);
426impl LockedFlake {
121 let _ = pool::TOKIO_RUNTIME.set(tokio::runtime::Handle::current());427 pub fn get_attrs(&self, settings: &mut FlakeSettings) -> Result<Value> {
428 with_default_context(|c, es| unsafe {
429 locked_flake_get_output_attrs(c, settings.0, es, self.0)
430 })
431 .map(Value)
432 }
122}433}
434unsafe impl Send for LockedFlake {}
435unsafe impl Sync for LockedFlake {}
436impl Drop for LockedFlake {
437 fn drop(&mut self) {
438 unsafe {
439 locked_flake_free(self.0);
440 };
441 }
442}
443
444type FieldName = [u8; 32];
445fn init_field_name(v: &str) -> FieldName {
446 let mut f = [0; 32];
447 assert!(v.len() < 32, "max field name is 31 char");
448 assert!(
449 v.bytes().all(|v| v != 0),
450 "nul bytes are unsupported in field name"
451 );
452 f[0..v.len()].copy_from_slice(v.as_bytes());
453 f
454}
455
456pub struct RealisedString(*mut nix_raw::realised_string);
457impl fmt::Debug for RealisedString {
458 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
459 self.as_str().fmt(f)
460 }
461}
462
463impl RealisedString {
464 fn as_str(&self) -> &str {
465 let len = unsafe { nix_raw::realised_string_get_buffer_size(self.0) };
466 let data: *const u8 = unsafe { nix_raw::realised_string_get_buffer_start(self.0) }.cast();
467 let data = unsafe { std::slice::from_raw_parts(data, len) };
468 std::str::from_utf8(data).expect("non-utf8 strings not supported")
469 }
470 fn path_count(&self) -> usize {
471 unsafe { nix_raw::realised_string_get_store_path_count(self.0) }
472 }
473 fn path(&self, i: usize) -> String {
474 assert!(i < self.path_count());
475 let path = unsafe { nix_raw::realised_string_get_store_path(self.0, i) };
476 let mut err_out = String::new();
477 unsafe { nix_raw::store_path_name(path, Some(copy_nix_str), (&raw mut err_out).cast()) };
478 err_out
479 }
480}
481
482unsafe impl Send for RealisedString {}
483impl Drop for RealisedString {
484 fn drop(&mut self) {
485 with_default_context(|c, _| unsafe { nix_raw::realised_string_free(self.0) })
486 .expect("string free should not fail")
487 }
488}
489
490pub struct Value(*mut nix_raw::value);
491
492unsafe impl Send for Value {}
493unsafe impl Sync for Value {}
494
495pub trait AsFieldName {
496 fn as_field_name<T>(&self, v: impl FnOnce(FieldName) -> Result<T>) -> Result<T>;
497 fn to_field_name(&self) -> Result<String>;
498}
499impl AsFieldName for Value {
500 fn as_field_name<T>(&self, v: impl FnOnce(FieldName) -> Result<T>) -> Result<T> {
501 let f = self.to_string()?;
502 v(init_field_name(&f))
503 }
504 fn to_field_name(&self) -> Result<String> {
505 self.to_string()
506 }
507}
508impl<E> AsFieldName for E
509where
510 E: AsRef<str>,
511{
512 fn as_field_name<T>(&self, v: impl FnOnce(FieldName) -> Result<T>) -> Result<T> {
513 let f = self.as_ref();
514 v(init_field_name(f))
515 }
516 fn to_field_name(&self) -> Result<String> {
517 Ok(self.as_ref().to_owned())
518 }
519}
520
521struct AttrsBuilder(*mut nix_raw::BindingsBuilder);
522impl AttrsBuilder {
523 fn new(capacity: usize) -> Self {
524 with_default_context(|c, es| unsafe { nix_raw::make_bindings_builder(c, es, capacity) })
525 .map(Self)
526 .expect("alloc should not fail")
527 }
528 fn insert(&mut self, k: &impl AsFieldName, v: Value) {
529 k.as_field_name(|name| {
530 with_default_context(|c, _| unsafe {
531 nix_raw::bindings_builder_insert(c, self.0, name.as_ptr().cast(), v.0)
532 })
533 })
534 .expect("builder insert shouldn't fail");
535 }
536}
537impl Drop for AttrsBuilder {
538 fn drop(&mut self) {
539 unsafe { nix_raw::bindings_builder_free(self.0) };
540 }
541}
542
543impl Value {
544 pub fn new_attrs(v: HashMap<&str, Value>) -> Result<Self> {
545 let out = Self::new_uninit()?;
546 let mut b = AttrsBuilder::new(v.len());
547 for (k, v) in v {
548 b.insert(&k, v);
549 }
550 with_default_context(|c, _| unsafe { nix_raw::make_attrs(c, out.0, b.0) })?;
551 Ok(out)
552 }
553 fn new_list<T: Into<Self>>(v: Vec<T>) -> Result<Self> {
554 todo!()
555 }
556 fn new_uninit() -> Result<Self> {
557 let out = with_default_context(|c, es| unsafe { alloc_value(c, es) })?;
558 Ok(Self(out))
559 }
560 fn new_str(v: &str) -> Result<Self> {
561 let s = CString::new(v).expect("string should not contain NULs");
562 let uninit = Self::new_uninit()?;
563 // String is copied, `s` is free to be dropped
564 with_default_context(|c, _| unsafe { init_string(c, uninit.0, s.as_ptr()) })?;
565 Ok(uninit)
566 }
567 fn new_int(i: i64) -> Result<Self> {
568 let uninit = Self::new_uninit()?;
569 with_default_context(|c, _| unsafe { init_int(c, uninit.0, i) })?;
570 Ok(uninit)
571 }
572 fn new_bool(v: bool) -> Result<Self> {
573 let uninit = Self::new_uninit()?;
574 with_default_context(|c, _| unsafe { init_bool(c, uninit.0, v) })?;
575 Ok(uninit)
576 }
577 fn force(&mut self, st: &mut EvalState) -> Result<()> {
578 with_default_context(|c, _| unsafe { value_force(c, st.0, self.0) })?;
579 Ok(())
580 }
581 pub fn type_of(&self) -> Result<NixType> {
582 let ty = with_default_context(|c, _| unsafe { nix_raw::get_type(c, self.0) })?;
583 Ok(NixType::from_int(ty))
584 }
585 pub fn to_string(&self) -> Result<String> {
586 Ok(self.to_realised_string()?.as_str().to_owned())
587 }
588 pub fn to_realised_string(&self) -> Result<RealisedString> {
589 with_default_context(|c, es| unsafe { nix_raw::string_realise(c, es, self.0, false) })
590 .map(RealisedString)
591
592 // let store_paths = unsafe { nix_raw::realised_string_get_store_path_count(str) };
593 // for i in 0..store_paths {
594 // let store_path = unsafe { nix_raw::realised_string_get_store_path(str, i) };
595 // nix_raw::store_path_name(store_path, callback, user_data);
596 // }
597 // dbg!(store_paths);
598 // todo!();
599 }
600
601 pub fn has_field(&self, field: &str) -> Result<bool> {
602 let f = init_field_name(field);
603 with_default_context(|c, es| unsafe {
604 nix_raw::has_attr_byname(c, self.0, es, f.as_ptr().cast())
605 })
606 }
607 // pub fn derivation_path(&self) {
608 // nix_raw::real
609 // }
610 pub fn list_fields(&self) -> Result<Vec<String>> {
611 if !matches!(self.type_of()?, NixType::Attrs) {
612 bail!("invalid type: expected attrs");
613 }
614
615 let len = with_default_context(|c, _| unsafe { nix_raw::get_attrs_size(c, self.0) })?;
616 let mut out = Vec::with_capacity(len as usize);
617
618 for i in 0..len {
619 let name = with_default_context(|c, es| unsafe {
620 nix_raw::get_attr_name_byidx(c, self.0, es, i)
621 })?;
622 let c = unsafe { CStr::from_ptr(name) };
623 out.push(c.to_str().expect("nix field names are utf-8").to_owned());
624 }
625 Ok(out)
626 }
627 pub fn get_elem(&self, v: usize) -> Result<Self> {
628 if !matches!(self.type_of()?, NixType::List) {
629 bail!("invalid type: expected list");
630 }
631 let len =
632 with_default_context(|c, _| unsafe { nix_raw::get_list_size(c, self.0) })? as usize;
633 if v >= len {
634 bail!("oob list get: {v} >= {len}");
635 }
636
637 with_default_context(|c, es| unsafe { nix_raw::get_list_byidx(c, self.0, es, v as u32) })
638 .map(Self)
639 }
640 pub fn attrs_update(self, other: Value) -> Result<Self> {
641 let a_fields = self.list_fields()?;
642 let b_fields = other.list_fields()?;
643 match (a_fields.len(), b_fields.len()) {
644 (_, 0) => return Ok(self),
645 (0, _) => return Ok(other),
646 _ => {}
647 }
648 let mut out = HashMap::new();
649 for f in a_fields.iter() {
650 if b_fields.contains(f) {
651 break;
652 }
653 out.insert(f.as_str(), self.get_field(f)?);
654 }
655 if out.is_empty() {
656 // All fields from lhs are overriden by rhs
657 return Ok(other);
658 }
659 for f in b_fields.iter() {
660 out.insert(f.as_str(), other.get_field(f)?);
661 }
662 Self::new_attrs(out)
663 }
664 pub fn get_field(&self, name: impl AsFieldName) -> Result<Self> {
665 if !matches!(self.type_of()?, NixType::Attrs) {
666 bail!("invalid type: expected attrs");
667 }
668
669 name.as_field_name(|name| {
670 with_default_context(|c, es| unsafe {
671 nix_raw::get_attr_byname(c, self.0, es, name.as_ptr().cast())
672 })
673 .map(Self)
674 })
675 .with_context(|| format!("getting field {:?}", name.to_field_name()))
676 }
677 pub fn call(&self, v: Value) -> Result<Self> {
678 if !matches!(self.type_of()?, NixType::Function) {
679 // TODO: Functors
680 bail!("invalid type: expected function");
681 }
682
683 let out = Value::new_uninit()?;
684 with_default_context(|c, es| unsafe { nix_raw::value_call(c, es, self.0, v.0, out.0) })?;
685
686 Ok(out)
687 }
688 pub fn eval(v: &str) -> Result<Self> {
689 let s = CString::new(v).expect("expression shouldn't have internal NULs");
690 let out = Self::new_uninit()?;
691 with_default_context(|c, es| unsafe {
692 expr_eval_from_string(c, es, s.as_ptr(), c"/homeless-shelter".as_ptr(), out.0)
693 })?;
694 Ok(out)
695 }
696 pub async fn build(&self, output: &str) -> Result<PathBuf> {
697 if !self.is_derivation() {
698 bail!("expected derivation to build")
699 }
700 let output_name = self.get_field("outputName")?.to_string()?;
701 let v = if output_name != output {
702 let out = self.get_field(output)?;
703 if !out.is_derivation() {
704 bail!("unknown output: {output}");
705 }
706 out
707 } else {
708 self.clone()
709 };
710 // to_string here blocks until the path is built
711 let drv_path = tokio::task::spawn_blocking(move || v.get_field("outPath")?.to_string())
712 .await
713 .expect("should not fail")?;
714 Ok(PathBuf::from(drv_path))
715 }
716 pub fn as_json<T: DeserializeOwned>(&self) -> Result<T> {
717 let to_json = Self::eval("builtins.toJSON")?;
718 let s = to_json.call(self.clone())?.to_string()?;
719 Ok(serde_json::from_str(&s)?)
720 }
721 pub fn serialized<T: Serialize>(v: &T) -> Result<Self> {
722 Self::eval(&nixlike::serialize(v)?)
723 }
724
725 // Convert to string/evaluate derivations/etc
726 fn to_string_weak(&self) -> Result<String> {
727 // TODO
728 self.to_string()
729 }
730
731 fn is_derivation(&self) -> bool {
732 if !matches!(self.type_of(), Ok(NixType::Attrs)) {
733 return false;
734 }
735 let Some(ty) = self.get_field("type").ok() else {
736 return false;
737 };
738 matches!(ty.to_string().as_deref(), Ok("derivation"))
739 }
740}
741
742impl From<String> for Value {
743 fn from(value: String) -> Self {
744 Value::new_str(&value).expect("todo: TryFrom")
745 }
746}
747impl From<bool> for Value {
748 fn from(value: bool) -> Self {
749 Value::new_bool(value).expect("todo: TryFrom")
750 }
751}
752impl From<&str> for Value {
753 fn from(value: &str) -> Self {
754 Value::new_str(&value).expect("todo: TryFrom")
755 }
756}
757impl<T> From<Vec<T>> for Value
758where
759 T: Into<Value>,
760{
761 fn from(value: Vec<T>) -> Self {
762 Value::new_list(value).expect("todo: TryFrom")
763 }
764}
765
766impl Clone for Value {
767 fn clone(&self) -> Self {
768 with_default_context(|c, _| unsafe { value_incref(c, self.0) })
769 .expect("value incref should not fail");
770 Self(self.0)
771 }
772}
773impl Drop for Value {
774 fn drop(&mut self) {
775 with_default_context(|c, _| unsafe { value_decref(c, self.0) })
776 .expect("value drop should not fail");
777 }
778}
779
780pub fn init_libraries() {
781 unsafe { nix_raw::GC_allow_register_threads() };
782
783 let mut ctx = NixContext::new();
784 ctx.run_in_context(|c| unsafe { nix_raw::libutil_init(c) })
785 .expect("util init should not fail");
786 ctx.run_in_context(|c| unsafe { nix_raw::libstore_init(c) })
787 .expect("store init should not fail");
788 ctx.run_in_context(|c| unsafe { nix_raw::libexpr_init(c) })
789 .expect("expr init should not fail");
790
791 nix_logging_cxx::apply_tracing_logger();
792}
793
794#[test_log::test]
795fn test_native() -> Result<()> {
796 let mut fetch_settings = FetchSettings::new();
797 fetch_settings.set(c"warn-dirty", c"false");
798 //
799
800 let (mut r, _) = FlakeReference::new("/home/lach/build/fleet", &fetch_settings)?;
801 let locked = r.lock(&fetch_settings)?;
802 let attrs = locked.get_attrs(&mut FlakeSettings::new()?)?;
803
804 let builtins = Value::eval("builtins")?;
805 dbg!(builtins.type_of()?);
806
807 dbg!(attrs.type_of()?);
808 dbg!(attrs.list_fields()?);
809 dbg!(
810 attrs
811 .get_field("packages")?
812 .get_field("x86_64-linux")?
813 .get_field("fleet")?
814 .get_field("outPath")?
815 .to_string()
816 );
817
818 Ok(())
819}
820
821// struct NixBuildTask(Value, oneshot::Sender<Result<HashMap<String, PathBuf>>>);
822//
823// #[derive(Clone)]
824// pub struct NixBuildBatch {
825// tx: mpsc::UnboundedSender<NixBuildTask>,
826// }
827//
828// #[instrument(skip(values))]
829// async fn build_multiple(name: String, values: Vec<Value>) -> Result<()> {
830// let builtins = Value::eval("builtins")?;
831// let drv = nix_go!(builtins.derivation(Obj {
832// // FIXME: pass system from localSystem or fleet args
833// // system,
834// name,
835// builder: "/bin/sh",
836// // we want nothing from this derivation, it is only used to perform multiple builds at once.
837// args: vec!["-c", "echo > $out"],
838// preferLocalBuild: true,
839// allowSubstitutes: false,
840// buildInputs: values,
841// }));
842// drv.build()?;
843// Ok(())
844// }
845//
846// impl NixBuildBatch {
847// fn new(name: String) -> Self {
848// let (tx, mut rx) = mpsc::unbounded_channel::<NixBuildTask>();
849//
850// tokio::task::spawn(async move {
851// let mut deps = vec![];
852// let mut build_data = vec![];
853// while let Some(task) = rx.recv().await {
854// build_data.push(task.0.clone());
855// deps.push(task);
856// }
857// if deps.is_empty() {
858// return;
859// }
860// match build_multiple(name, build_data).await {
861// Ok(_) => {
862// for NixBuildTask(v, o) in deps {
863// let _ = o.send(v.build());
864// }
865// }
866// Err(e) => {
867// for NixBuildTask(v, o) in deps {
868// let s = v.to_string_weak();
869// let s = match s {
870// Ok(s) => s,
871// Err(e) => {
872// let _ = o.send(Err(e));
873// continue;
874// }
875// };
876// if PathBuf::from(s).exists() {
877// let _ = o.send(v.build());
878// } else {
879// let _ = o.send(Err(e.clone()));
880// }
881// }
882// }
883// };
884// });
885// Self { tx }
886// }
887// pub async fn submit(self, task: Value) -> Result<HashMap<String, PathBuf>> {
888// let Self { tx: task_tx } = self;
889// let (tx, rx) = oneshot::channel();
890// let _ = task_tx.send(NixBuildTask(task, tx));
891// drop(task_tx);
892// rx.await.expect("shoudn't be cancelled here")
893// }
894// }
123895
addedcrates/nix-eval/src/logging.ccdiffbeforeafterboth

no changes

addedcrates/nix-eval/src/logging.hhdiffbeforeafterboth

no changes

addedcrates/nix-eval/src/logging.rsdiffbeforeafterboth

no changes

modifiedcrates/nix-eval/src/macros.rsdiffbeforeafterboth
1use serde::Serialize;
2
3use crate::{NixSession, Value};
4
5#[derive(Clone)]
6pub struct NixExprBuilder {
7 pub(crate) out: String,
8 used_fields: Vec<Value>,
9}
10pub trait AttrSetValue {
11 fn to_builder(self) -> NixExprBuilder;
12}
13trait Primitive {}
14
15macro_rules! impl_primitive {
16 ($($t:ty),+) => {
17 $(
18 impl Primitive for $t {}
19 )+
20 };
21}
22impl_primitive!(String, bool, &'static str);
23
24impl<T> AttrSetValue for T
25where
26 // Limited by Primitive trait to avoid orphan rules violation with Vec<T: AttrSetValue>
27 T: Serialize + Primitive,
28{
29 fn to_builder(self) -> NixExprBuilder {
30 let serialized = nixlike::serialize(self).expect("invalid value for apply");
31 NixExprBuilder {
32 out: serialized.trim_end().to_owned(),
33 used_fields: Vec::new(),
34 }
35 }
36}
37impl AttrSetValue for Value {
38 fn to_builder(self) -> NixExprBuilder {
39 NixExprBuilder {
40 out: format!("sess_field_{}", self.session_field_id()),
41 used_fields: vec![self],
42 }
43 }
44}
45impl<T> AttrSetValue for Vec<T>
46where
47 T: AttrSetValue,
48{
49 fn to_builder(self) -> NixExprBuilder {
50 let mut builder = NixExprBuilder::list();
51 for v in self {
52 builder.list_value(NixExprBuilder::attrset_value(v));
53 }
54 builder.list_end();
55 builder
56 }
57}
58
59impl NixExprBuilder {
60 pub fn object() -> Self {
61 NixExprBuilder {
62 out: "{ ".to_owned(),
63 used_fields: Vec::new(),
64 }
65 }
66 pub fn list() -> Self {
67 NixExprBuilder {
68 out: "[".to_owned(),
69 used_fields: Vec::new(),
70 }
71 }
72 pub fn string(s: &str) -> Self {
73 NixExprBuilder {
74 out: nixlike::serialize(s)
75 .expect("no problems with serializing_string")
76 .trim_end()
77 .to_owned(),
78 used_fields: Vec::new(),
79 }
80 }
81 pub fn attrset_value(v: impl AttrSetValue) -> Self {
82 v.to_builder()
83 }
84 pub fn serialized(v: impl Serialize) -> Self {
85 let serialized = nixlike::serialize(v).expect("invalid value for apply");
86 Self {
87 out: serialized.trim_end().to_owned(),
88 used_fields: Vec::new(),
89 }
90 }
91 pub fn value(f: Value) -> Self {
92 Self {
93 out: format!("sess_field_{}", f.session_field_id()),
94 used_fields: vec![f],
95 }
96 }
97 pub fn end_obj(&mut self) {
98 self.out.push('}');
99 }
100 pub fn obj_key(&mut self, name: Self, value: Self) {
101 self.out.push_str(r#""${"#);
102 self.extend(name);
103 self.out.push_str(r#"}" = "#);
104 self.extend(value);
105 self.out.push_str("; ");
106 }
107 pub fn list_value(&mut self, value: Self) {
108 self.extend(value);
109 self.out.push(' ');
110 }
111 pub fn list_end(&mut self) {
112 self.out.push(']');
113 }
114
115 pub fn extend(&mut self, e: Self) {
116 self.out.push_str(&e.out);
117 self.used_fields.extend(e.used_fields);
118 }
119
120 #[allow(dead_code)]
121 pub fn session(&self) -> NixSession {
122 let mut session = None;
123 for ele in &self.used_fields {
124 if session.is_none() {
125 session = Some(ele.session());
126 continue;
127 }
128 let session = session.as_ref().expect("checked");
129 let ele_sess = ele.session();
130 assert!(
131 NixSession::ptr_eq(session, &ele_sess),
132 "can't mix fields from different session"
133 );
134 }
135 session.expect("expr without fields used")
136 }
137 #[allow(dead_code)]
138 pub fn index_attr(&mut self, s: &str) {
139 let escaped = nixlike::serialize(s).expect("string");
140 self.out.push('.');
141 self.out.push_str(escaped.trim_end());
142 }
143}
144
145#[macro_export]1#[macro_export]
146macro_rules! nix_expr_inner {2macro_rules! nix_expr_inner {
147 //(@munch_object FIXME: value should be arbitrary nix_expr_inner input... Time to write proc-macro?3 //(@munch_object FIXME: value should be arbitrary nix_expr_inner input... Time to write proc-macro?
148 (@obj($o:ident) $field:ident$(, $($tt:tt)*)?) => {{4 (@obj($o:ident) $field:ident$(, $($tt:tt)*)?) => {{
149 $o.obj_key(5 $o.insert(
150 NixExprBuilder::string(stringify!($field)),6 stringify!($field),
151 NixExprBuilder::attrset_value($field),7 $crate::Value::from($field),
152 );8 );
153 $(nix_expr_inner!(@obj($o) $($tt)*);)?9 $(nix_expr_inner!(@obj($o) $($tt)*);)?
154 }};10 }};
155 (@obj($o:ident) $field:ident: $v:expr$(, $($tt:tt)*)?) => {{11 (@obj($o:ident) $field:ident: $v:expr$(, $($tt:tt)*)?) => {{
156 $o.obj_key(12 $o.insert(
157 NixExprBuilder::string(stringify!($field)),13 stringify!($field),
158 NixExprBuilder::attrset_value($v),14 $crate::Value::from($v),
159 );15 );
160 $(nix_expr_inner!(@obj($o) $($tt)*);)?16 $(nix_expr_inner!(@obj($o) $($tt)*);)?
161 }};17 }};
162 (@obj($o:ident)) => {{}};18 (@obj($o:ident)) => {{}};
163 (Obj { $($tt:tt)* }) => {{19 (Obj { $($tt:tt)* }) => {{
164 use $crate::{macros::NixExprBuilder, nix_expr_inner};20 use $crate::{nix_expr_inner};
165 let mut out = NixExprBuilder::object();21 let mut out = std::collections::hash_map::HashMap::new();
166 nix_expr_inner!(@obj(out) $($tt)*);22 nix_expr_inner!(@obj(out) $($tt)*);
167 out.end_obj();
168 out23 Value::new_attrs(out)?
169 }};24 }};
170 (@field($o:ident) . $var:ident $($tt:tt)*) => {{25 (@field($o:ident) . $var:ident $($tt:tt)*) => {{
171 $o.index_attr(stringify!($var));26 $o.index_attr(stringify!($var));
185 };40 };
186 (@field($o:ident)) => {};41 (@field($o:ident)) => {};
187 ($field:ident $($tt:tt)*) => {{42 ($field:ident $($tt:tt)*) => {{
188 use $crate::{macros::NixExprBuilder, nix_expr_inner};43 use $crate::{nix_expr_inner};
189 // might be used if indexed44 // might be used if indexed
190 #[allow(unused_mut)]45 #[allow(unused_mut)]
191 let mut out = NixExprBuilder::value($field.clone());46 let mut out = $field.clone();
192 nix_expr_inner!(@field(out) $($tt)*);47 nix_expr_inner!(@field(out) $($tt)*);
193 out48 out
194 }};49 }};
197 NixExprBuilder::string($v)52 NixExprBuilder::string($v)
198 }};53 }};
199 ({$v:expr}) => {{54 ({$v:expr}) => {{
200 use $crate::macros::NixExprBuilder;55 $crate::Value::serialized(&$v)?
201 NixExprBuilder::serialized(&$v)
202 }}56 }}
203}57}
204#[macro_export]58#[macro_export]
21266
213#[macro_export]67#[macro_export]
214macro_rules! nix_go {68macro_rules! nix_go {
215 (@o($o:ident) . $var:ident $($tt:tt)*) => {{69 (@o($o:expr) . $var:ident $($tt:tt)*) => {{
216 $o.push(Index::attr(stringify!($var)));
217 nix_go!(@o($o) $($tt)*);70 nix_go!(@o($o.get_field(stringify!($var))?) $($tt)*)
218 }};71 }};
219 (@o($o:ident) [{ $v:expr }] $($tt:tt)*) => {{72 (@o($o:expr) [ $v:expr ] $($tt:tt)*) => {{
220 $o.push(Index::attr(&$v));
221 nix_go!(@o($o) $($tt)*);73 nix_go!(@o($o.get_field($v)?) $($tt)*)
222 }};74 }};
223 (@o($o:ident) [ $($var:tt)+ ] $($tt:tt)*) => {{
224 $o.push(Index::Expr($crate::nix_expr_inner!($($var)+)));
225 nix_go!(@o($o) $($tt)*);
226 }};
227 (@o($o:ident) ($($var:tt)*) $($tt:tt)*) => {75 (@o($o:expr) ($($var:tt)*) $($tt:tt)*) => {
228 $o.push(Index::ExprApply($crate::nix_expr_inner!($($var)+)));76 nix_go!(@o($o.call($crate::nix_expr_inner!($($var)+))?) $($tt)*)
229 nix_go!(@o($o) $($tt)*);
230 };77 };
231 (@o($o:ident) | $($var:tt)*) => {78 (@o($o:expr)) => {$o};
232 $o.push(Index::Pipe($crate::nix_expr_inner!($($var)+)));
233 };
234 (@o($o:ident) + $($var:tt)*) => {
235 $o.push(Index::Merge($crate::nix_expr_inner!($($var)+)));
236 };
237 (@o($o:ident)) => {};
238 ($field:ident $($tt:tt)+) => {{79 ($field:ident $($tt:tt)+) => {{
239 use $crate::{nix_go, Index};80 use $crate::nix_go;
240 let field = $field.clone();81 let out = $field.clone();
241 let mut out = vec![];
242 nix_go!(@o(out) $($tt)*);82 nix_go!(@o(out) $($tt)*)
243 field.select(out).await?
244 }}83 }}
245}84}
246#[macro_export]85#[macro_export]
247macro_rules! nix_go_json {86macro_rules! nix_go_json {
248 ($($tt:tt)*) => {{87 ($($tt:tt)*) => {{
249 $crate::nix_go!($($tt)*).as_json().await?88 $crate::nix_go!($($tt)*).as_json()?
250 }};89 }};
251}90}
25291
deletedcrates/nix-eval/src/pool.rsdiffbeforeafterboth

no changes

deletedcrates/nix-eval/src/session.rsdiffbeforeafterboth

no changes

modifiedcrates/nix-eval/src/value.rsdiffbeforeafterboth
3use better_command::NixHandler;3use better_command::NixHandler;
4use serde::{Serialize, de::DeserializeOwned};4use serde::{Serialize, de::DeserializeOwned};
55
6use crate::{Error, NixBuildBatch, NixSession, Result, macros::NixExprBuilder, nix_go};6use crate::{Result, Value, nix_go};
7
8#[derive(Clone)]
9pub enum Index {
10 Var(String),
11 String(String),
12 #[allow(dead_code)]
13 Apply(String),
14 #[allow(dead_code)]
15 Expr(NixExprBuilder),
16 ExprApply(NixExprBuilder),
17 Pipe(NixExprBuilder),
18 Merge(NixExprBuilder),
19}
20impl Index {
21 pub fn var(v: impl AsRef<str>) -> Self {
22 let v = v.as_ref();
23 assert!(
24 !(v.contains('.') | v.contains(' ')),
25 "bad variable name: {v}"
26 );
27 Self::Var(v.to_owned())
28 }
29 pub fn attr(v: impl AsRef<str>) -> Self {
30 Self::String(v.as_ref().to_owned())
31 }
32 #[allow(dead_code)]
33 pub fn apply(v: impl Serialize) -> Self {
34 let serialized = nixlike::serialize(v).expect("invalid value for apply");
35 Self::Apply(serialized.trim_end().to_owned())
36 }
37}
38impl fmt::Display for Index {
39 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
40 match self {
41 Index::Var(v) => {
42 write!(f, "{v}")
43 }
44 Index::String(k) => {
45 let v = nixlike::format_identifier(k.as_str());
46 write!(f, ".{v}")
47 }
48 Index::Apply(_) => {
49 write!(f, "<apply>(...)")
50 }
51 Index::Expr(e) => {
52 write!(f, "[{}]", e.out)
53 }
54 Index::ExprApply(_) => {
55 write!(f, "<apply>(...)")
56 }
57 Index::Pipe(e) => {
58 write!(f, "<map>({})", e.out)
59 }
60 Index::Merge(e) => {
61 write!(f, "//({})", e.out)
62 }
63 }
64 }
65}
66impl fmt::Debug for Index {
67 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
68 write!(f, "{self}")
69 }
70}
71struct PathDisplay<'i>(&'i [Index]);
72impl fmt::Display for PathDisplay<'_> {
73 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
74 if !matches!(self.0.first(), Some(Index::Var(_))) {
75 write!(f, "<unknown>")?;
76 }
77 for i in self.0 {
78 write!(f, "{i}")?;
79 }
80 Ok(())
81 }
82}
83struct ValueInner {
84 full_path: Vec<Index>,
85 session: NixSession,
86 value: u32,
87}
88#[derive(Clone)]
89pub struct Value(Arc<ValueInner>);
90impl Value {
91 async fn new(session: NixSession, query: &str) -> Result<Self> {
92 let vid = session.0.lock().await.execute_assign(query).await?;
93 Ok(Self(Arc::new(ValueInner {
94 full_path: vec![],
95 session,
96 value: vid,
97 })))
98 }
99 /// Get a top-level binding.
100 ///
101 /// In flake repl session, every output is exposed as top-level binding.
102 pub async fn binding(session: NixSession, query: &str) -> Result<Self> {
103 // TODO: Verify that query is a valid variable name
104 let vid = session.0.lock().await.execute_assign(query).await?;
105 Ok(Self(Arc::new(ValueInner {
106 full_path: vec![Index::Var(query.to_owned())],
107 session,
108 value: vid,
109 })))
110 }
111 pub async fn select(&self, name: impl IntoIterator<Item = Index>) -> Result<Self> {
112 let mut used_fields = Vec::new();
113 let name = name.into_iter();
114
115 let mut full_path = self.0.full_path.clone();
116 let mut query = self.sess_field_name();
117 for v in name {
118 full_path.push(v.clone());
119 match v {
120 Index::Var(_) => panic!("var item may only be first"),
121 Index::String(s) => {
122 let escaped =
123 nixlike::serialize(s).expect("strings are always serialized successfully");
124 query.push('.');
125 query.push_str(escaped.trim());
126 }
127 Index::Apply(a) => {
128 // In cases like `a {}.b` first `{}.b` will be evaluated, so `a {}` should be encased in `()`
129 query = format!("({query} {a})");
130 }
131 Index::Expr(e) => {
132 let index = Value::new(self.0.session.clone(), &e.out).await?;
133 used_fields.push(index.clone());
134 query.push('.');
135 let index = format!("${{sess_field_{}}}", index.0.value);
136 query.push_str(&index);
137 }
138 Index::ExprApply(e) => {
139 let index = Value::new(self.0.session.clone(), &e.out).await?;
140 used_fields.push(index.clone());
141 query.push(' ');
142 let index = format!("sess_field_{}", index.0.value);
143 query.push_str(&index);
144 query = format!("({query})");
145 }
146 Index::Pipe(v) => {
147 let index = Value::new(self.0.session.clone(), &v.out).await?;
148 used_fields.push(index.clone());
149 let index = format!("sess_field_{}", index.0.value);
150 query = format!("({index} {query})");
151 }
152 Index::Merge(v) => {
153 let index = Value::new(self.0.session.clone(), &v.out).await?;
154 used_fields.push(index.clone());
155 let index = format!("sess_field_{}", index.0.value);
156 query = format!("({query} // {index})");
157 }
158 }
159 }
160
161 let vid = self
162 .0
163 .session
164 .0
165 .lock()
166 .await
167 .execute_assign(&query)
168 .await
169 .map_err(|e| e.context(self.attribute()))?;
170 Ok(Self(Arc::new(ValueInner {
171 full_path,
172 session: self.0.session.clone(),
173 value: vid,
174 })))
175 }
176 pub async fn as_json<V: DeserializeOwned>(&self) -> Result<V> {
177 let query = self.sess_field_name();
178 self.0
179 .session
180 .0
181 .lock()
182 .await
183 .execute_expression_to_json(&query)
184 .await
185 .map_err(|e| e.context(self.attribute()))
186 }
187 #[allow(dead_code)]
188 pub async fn has_field(&self, name: &str) -> Result<bool> {
189 let key = nixlike::escape_string(name);
190 let query = format!("{} ? {key}", self.sess_field_name());
191 self.0
192 .session
193 .0
194 .lock()
195 .await
196 .execute_expression_to_json(&query)
197 .await
198 .map_err(|e| e.context(self.attribute()))
199 }
200 pub async fn list_fields(&self) -> Result<Vec<String>> {
201 let query = format!("builtins.attrNames {}", self.sess_field_name());
202 self.0
203 .session
204 .0
205 .lock()
206 .await
207 .execute_expression_to_json(&query)
208 .await
209 .map_err(|e| e.context(self.attribute()))
210 }
211 pub async fn type_of(&self) -> Result<String> {
212 let query = format!("builtins.typeOf {}", self.sess_field_name());
213 self.0
214 .session
215 .0
216 .lock()
217 .await
218 .execute_expression_to_json(&query)
219 .await
220 .map_err(|e| e.context(self.attribute()))
221 }
222 #[allow(dead_code)]
223 pub async fn import(&self) -> Result<Self> {
224 let import = Self::new(self.0.session.clone(), "import").await?;
225 Ok(nix_go!(self | import))
226 }
227 fn sess_field_name(&self) -> String {
228 format!("sess_field_{}", self.0.value)
229 }
230 pub async fn build_maybe_batch(
231 &self,
232 batch: Option<NixBuildBatch>,
233 ) -> Result<HashMap<String, PathBuf>> {
234 if let Some(batch) = batch {
235 batch.submit(self.clone()).await
236 } else {
237 self.build().await
238 }
239 }
240 pub async fn build(&self) -> Result<HashMap<String, PathBuf>> {
241 let query = format!(":b {}", self.sess_field_name());
242 let vid = self
243 .0
244 .session
245 .0
246 .lock()
247 .await
248 .execute_expression_raw(&query, &mut NixHandler::default())
249 .await?;
250 if vid.is_empty() {
251 return Err(Error::BuildFailed {
252 attribute: self.attribute(),
253 error: "build produced no output".to_owned(),
254 });
255 }
256 let Some(vid) = vid.strip_prefix("This derivation produced the following outputs:\n")
257 else {
258 return Err(Error::BuildFailed {
259 attribute: self.attribute(),
260 error: format!("failed to parse output: {vid}"),
261 });
262 };
263 let outputs = vid
264 .split('\n')
265 .filter(|v| !v.is_empty())
266 .map(|v| v.split_once(" -> ").expect("unexpected build output"))
267 .map(|(a, b)| (a.trim_start().to_owned(), PathBuf::from(b)))
268 .collect();
269 Ok(outputs)
270 }
271 /// Weakly convert string-like types (derivation/path/string) to string
272 pub async fn to_string_weak(&self) -> Result<String> {
273 let query = format!("\"${{{}}}\"", self.sess_field_name());
274 let vid: String = self
275 .0
276 .session
277 .0
278 .lock()
279 .await
280 .execute_expression_to_json(&query)
281 .await?;
282 Ok(vid)
283 }
284
285 fn attribute(&self) -> String {
286 PathDisplay(&self.0.full_path).to_string()
287 }
288
289 pub(crate) fn session(&self) -> NixSession {
290 self.0.session.clone()
291 }
292
293 pub(crate) fn session_field_id(&self) -> u32 {
294 self.0.value
295 }
296}
297impl Drop for ValueInner {
298 fn drop(&mut self) {
299 if let Ok(mut lock) = self.session.0.try_lock() {
300 lock.free_list.push(self.value)
301 }
302 // Leaked
303 }
304}
3057
modifiedcrates/nixlike/Cargo.tomldiffbeforeafterboth
10alejandra = { git = "https://github.com/kamadorueda/alejandra" }10alejandra = { git = "https://github.com/kamadorueda/alejandra" }
11linked-hash-map = "0.5.6"11linked-hash-map = "0.5.6"
12peg = "0.8.5"12peg = "0.8.5"
13ron = "0.10.1"13ron = "0.11.0"
14serde = "1.0.219"14serde = "1.0.219"
15serde-transcode = "1.1.1"15serde-transcode = "1.1.1"
16serde_json = "1.0.140"16serde_json = "1.0.140"
modifiedcrates/nixlike/src/lib.rsdiffbeforeafterboth
5//! expressions and expect it to work, only basic primitives are supported, and there is no5//! expressions and expect it to work, only basic primitives are supported, and there is no
6//! variables/recursive records, interpolation, e.t.c.6//! variables/recursive records, interpolation, e.t.c.
77
8use alejandra::config::Indentation;
8use linked_hash_map::LinkedHashMap;9use linked_hash_map::LinkedHashMap;
9use peg::str::LineCol;10use peg::str::LineCol;
10use se_impl::MySerialize;11use se_impl::MySerialize;
198pub fn format_nix(value: &String) -> String {199pub fn format_nix(value: &String) -> String {
199 let (_, out) = alejandra::format::in_memory("".to_owned(), value.to_owned());200 let (_, out) = alejandra::format::in_memory(
201 "".to_owned(),
202 value.to_owned(),
203 alejandra::config::Config {
204 indentation: Indentation::TwoSpaces,
205 },
206 );
200 out207 out
201}208}
modifiedcrates/nixlike/src/to_string.rsdiffbeforeafterboth
1use alejandra::config::Indentation;
2
1use crate::Value;3use crate::Value;
24
100 write_nix_buf(value, &mut out);102 write_nix_buf(value, &mut out);
101 let (_, out) = alejandra::format::in_memory("".to_owned(), out);103 let (_, out) = alejandra::format::in_memory(
104 "".to_owned(),
105 out,
106 alejandra::config::Config {
107 indentation: Indentation::TwoSpaces,
108 },
109 );
102 out110 out
103}111}
modifiedflake.lockdiffbeforeafterboth
15 "type": "github"15 "type": "github"
16 }16 }
17 },17 },
18 "flake-compat": {
19 "flake": false,
20 "locked": {
21 "lastModified": 1696426674,
22 "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
23 "owner": "edolstra",
24 "repo": "flake-compat",
25 "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
26 "type": "github"
27 },
28 "original": {
29 "owner": "edolstra",
30 "repo": "flake-compat",
31 "type": "github"
32 }
33 },
18 "flake-parts": {34 "flake-parts": {
19 "inputs": {35 "inputs": {
20 "nixpkgs-lib": [36 "nixpkgs-lib": [
35 "type": "github"51 "type": "github"
36 }52 }
37 },53 },
54 "flake-parts_2": {
55 "inputs": {
56 "nixpkgs-lib": [
57 "nix",
58 "nixpkgs"
59 ]
60 },
61 "locked": {
62 "lastModified": 1748821116,
63 "narHash": "sha256-F82+gS044J1APL0n4hH50GYdPRv/5JWm34oCJYmVKdE=",
64 "rev": "49f0870db23e8c1ca0b5259734a02cd9e1e371a1",
65 "revCount": 377,
66 "type": "tarball",
67 "url": "https://api.flakehub.com/f/pinned/hercules-ci/flake-parts/0.1.377%2Brev-49f0870db23e8c1ca0b5259734a02cd9e1e371a1/01972f28-554a-73f8-91f4-d488cc502f08/source.tar.gz"
68 },
69 "original": {
70 "type": "tarball",
71 "url": "https://flakehub.com/f/hercules-ci/flake-parts/0.1"
72 }
73 },
74 "git-hooks-nix": {
75 "inputs": {
76 "flake-compat": "flake-compat",
77 "gitignore": [
78 "nix"
79 ],
80 "nixpkgs": [
81 "nix",
82 "nixpkgs"
83 ]
84 },
85 "locked": {
86 "lastModified": 1747372754,
87 "narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=",
88 "rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46",
89 "revCount": 1026,
90 "type": "tarball",
91 "url": "https://api.flakehub.com/f/pinned/cachix/git-hooks.nix/0.1.1026%2Brev-80479b6ec16fefd9c1db3ea13aeb038c60530f46/0196d79a-1b35-7b8e-a021-c894fb62163d/source.tar.gz"
92 },
93 "original": {
94 "type": "tarball",
95 "url": "https://flakehub.com/f/cachix/git-hooks.nix/0.1.941"
96 }
97 },
98 "nix": {
99 "inputs": {
100 "flake-parts": "flake-parts_2",
101 "git-hooks-nix": "git-hooks-nix",
102 "nixpkgs": "nixpkgs",
103 "nixpkgs-23-11": "nixpkgs-23-11",
104 "nixpkgs-regression": "nixpkgs-regression"
105 },
106 "locked": {
107 "lastModified": 1756860322,
108 "narHash": "sha256-mT01CpWVdqSm79L270dSkjdYbdc37r+Hq9vk4GTp7Ao=",
109 "path": "/home/lach/build/nix-src",
110 "type": "path"
111 },
112 "original": {
113 "path": "/home/lach/build/nix-src",
114 "type": "path"
115 }
116 },
117 "nixpkgs": {
118 "locked": {
119 "lastModified": 1755922037,
120 "narHash": "sha256-wY1+2JPH0ZZC4BQefoZw/k+3+DowFyfOxv17CN/idKs=",
121 "rev": "b1b3291469652d5a2edb0becc4ef0246fff97a7c",
122 "revCount": 808723,
123 "type": "tarball",
124 "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.2505.808723%2Brev-b1b3291469652d5a2edb0becc4ef0246fff97a7c/0198daf7-011a-7703-95d7-57146e794342/source.tar.gz"
125 },
126 "original": {
127 "type": "tarball",
128 "url": "https://flakehub.com/f/NixOS/nixpkgs/0.2505"
129 }
130 },
131 "nixpkgs-23-11": {
132 "locked": {
133 "lastModified": 1717159533,
134 "narHash": "sha256-oamiKNfr2MS6yH64rUn99mIZjc45nGJlj9eGth/3Xuw=",
135 "owner": "NixOS",
136 "repo": "nixpkgs",
137 "rev": "a62e6edd6d5e1fa0329b8653c801147986f8d446",
138 "type": "github"
139 },
140 "original": {
141 "owner": "NixOS",
142 "repo": "nixpkgs",
143 "rev": "a62e6edd6d5e1fa0329b8653c801147986f8d446",
144 "type": "github"
145 }
146 },
147 "nixpkgs-regression": {
148 "locked": {
149 "lastModified": 1643052045,
150 "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=",
151 "owner": "NixOS",
152 "repo": "nixpkgs",
153 "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
154 "type": "github"
155 },
156 "original": {
157 "owner": "NixOS",
158 "repo": "nixpkgs",
159 "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
160 "type": "github"
161 }
162 },
38 "nixpkgs": {163 "nixpkgs_2": {
39 "locked": {164 "locked": {
40 "lastModified": 1753320130,165 "lastModified": 1753320130,
41 "narHash": "sha256-KCuv6iYQ0XTVAEJvDLIsk99CJm7fuqIE0/KknyeYPtM=",166 "narHash": "sha256-KCuv6iYQ0XTVAEJvDLIsk99CJm7fuqIE0/KknyeYPtM=",
55 "inputs": {180 "inputs": {
56 "crane": "crane",181 "crane": "crane",
57 "flake-parts": "flake-parts",182 "flake-parts": "flake-parts",
183 "nix": "nix",
58 "nixpkgs": "nixpkgs",184 "nixpkgs": "nixpkgs_2",
59 "rust-overlay": "rust-overlay",185 "rust-overlay": "rust-overlay",
60 "shelly": "shelly",186 "shelly": "shelly",
61 "treefmt-nix": "treefmt-nix"187 "treefmt-nix": "treefmt-nix"
modifiedflake.nixdiffbeforeafterboth
17 url = "github:numtide/treefmt-nix";17 url = "github:numtide/treefmt-nix";
18 inputs.nixpkgs.follows = "nixpkgs";18 inputs.nixpkgs.follows = "nixpkgs";
19 };19 };
20 # DeterminateSystem's nix fork is controversial, but I don't mind it,
21 # and it has lazy-trees support which is useful for fleet.
22 nix.url = "/home/lach/build/nix-src";
20 };23 };
21 outputs =24 outputs =
22 inputs:25 inputs:
4144
42 fleetModules.tf = ./modules/extras/tf.nix;45 fleetModules.tf = ./modules/extras/tf.nix;
46
47 testObj = {
48 v = "Hello";
49 };
50 testString = "hello";
4351
44 # To be used with https://github.com/NixOS/nix/pull/889252 # To be used with https://github.com/NixOS/nix/pull/8892
45 schemas =53 schemas =
80 system,88 system,
81 pkgs,89 pkgs,
82 self,90 self,
91 inputs',
83 ...92 ...
84 }:93 }:
85 let94 let
108 packages = lib.mkIf deployerSystem (117 packages = lib.mkIf deployerSystem (
109 let118 let
110 packages = pkgs.callPackages ./pkgs {119 packages = pkgs.callPackages ./pkgs {
111 inherit craneLib;120 inherit craneLib inputs';
112 };121 };
113 in122 in
114 packages // { default = packages.fleet; }123 packages // { default = packages.fleet; }
120 nixpkgsCraneLib = inputs.crane.mkLib pkgs;129 nixpkgsCraneLib = inputs.crane.mkLib pkgs;
121 packages = pkgs.callPackages ./pkgs {130 packages = pkgs.callPackages ./pkgs {
122 craneLib = nixpkgsCraneLib;131 craneLib = nixpkgsCraneLib;
132 inherit inputs;
123 };133 };
124 prefixAttrs =134 prefixAttrs =
125 prefix: attrs:135 prefix: attrs:
150 cargo-fuzz160 cargo-fuzz
151 cargo-watch161 cargo-watch
152 cargo-outdated162 cargo-outdated
163 gdb
153164
154 pkg-config165 pkg-config
155 openssl166 openssl
156 bacon167 bacon
157 nil168 nil
158 rustPlatform.bindgenHook169 rustPlatform.bindgenHook
159 # nixVersions.nix_2_22170 inputs'.nix.packages.nix-expr-c
171 inputs'.nix.packages.nix-flake-c
172 inputs'.nix.packages.nix-fetchers-c
160 ];173 ];
161 environment.PROTOC = "${pkgs.protobuf}/bin/protoc";174 environment.PROTOC = "${pkgs.protobuf}/bin/protoc";
162 };175 };
modifiedlib/flakePart.nixdiffbeforeafterboth
65 normalEval = bootstrapNixpkgs.lib.evalModules {65 normalEval = bootstrapNixpkgs.lib.evalModules {
66 modules = (import ../modules/module-list.nix) ++ [66 modules = (import ../modules/module-list.nix) ++ [
67 module67 module
68 {68 ({inputs', ...}: {
69 config = {69 config = {
70 data = if isPath data then import data else data;70 data = if isPath data then import data else data;
71 nixpkgs.buildUsing = mkOptionDefault bootstrapNixpkgs;71 nixpkgs.buildUsing = mkOptionDefault bootstrapNixpkgs;
74 inherit74 inherit
75 (import ../pkgs {75 (import ../pkgs {
76 inherit (prev) callPackage;76 inherit (prev) callPackage;
77 inherit inputs';
77 craneLib = crane.mkLib prev;78 craneLib = crane.mkLib prev;
78 })79 })
79 fleet-install-secrets80 fleet-install-secrets
82 })83 })
83 ];84 ];
84 };85 };
85 }86 })
86 ];87 ];
87 specialArgs = {88 specialArgs = {
88 inherit inputs self;89 inherit inputs self;
modifiedmodules/nixos/online.nixdiffbeforeafterboth

no syntactic changes

modifiedmodules/secrets-data.nixdiffbeforeafterboth

no syntactic changes

modifiedpkgs/default.nixdiffbeforeafterboth
1{1{
2 callPackage,2 callPackage,
3 craneLib,3 craneLib,
4 inputs',
4}:5}:
5{6{
6 fleet = callPackage ./fleet.nix { inherit craneLib; };7 fleet = callPackage ./fleet.nix { inherit craneLib inputs'; };
7 fleet-install-secrets = callPackage ./fleet-install-secrets.nix { inherit craneLib; };8 fleet-install-secrets = callPackage ./fleet-install-secrets.nix { inherit craneLib; };
8 fleet-generator-helper = callPackage ./fleet-generator-helper.nix { inherit craneLib; };9 fleet-generator-helper = callPackage ./fleet-generator-helper.nix { inherit craneLib; };
9}10}
modifiedpkgs/fleet.nixdiffbeforeafterboth
1{1{
2 lib,
2 craneLib,3 craneLib,
3 installShellFiles,4 installShellFiles,
5 inputs',
6 pkg-config,
7 rustPlatform,
4}:8}:
5craneLib.buildPackage rec {9craneLib.buildPackage rec {
6 pname = "fleet";10 pname = "fleet";
7
8 src = craneLib.cleanCargoSource (craneLib.path ../.);11 src = lib.cleanSourceWith {
12 src = ../.;
13 filter =
14 path: type:
15 (lib.hasSuffix "\.cc" path)
16 || (lib.hasSuffix "\.hh" path)
17 || (craneLib.filterCargoSources path type);
18 };
9 strictDeps = true;19 strictDeps = true;
1020
11 cargoExtraArgs = "--locked -p ${pname}";21 cargoExtraArgs = "--locked -p ${pname}";
1222
23 buildInputs = [
24 inputs'.nix.packages.nix-expr-c
25 inputs'.nix.packages.nix-flake-c
26 inputs'.nix.packages.nix-fetchers-c
27 ];
13 nativeBuildInputs = [ installShellFiles ];28 nativeBuildInputs = [
29 installShellFiles
30 pkg-config
31 rustPlatform.bindgenHook
32 ];
1433
15 postInstall = ''34 postInstall = ''
modifiedtreefmt.nixdiffbeforeafterboth
9 programs.shfmt.enable = true;9 programs.shfmt.enable = true;
10 programs.rustfmt.enable = true;10 programs.rustfmt.enable = true;
11 programs.taplo.enable = true;11 programs.taplo.enable = true;
12 programs.clang-format.enable = true;
12}13}
1314