Compare commits
	
		
			2 Commits
		
	
	
		
			7fc2b1ebfe
			...
			2b6d2e8606
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 2b6d2e8606 | |||
| bae7222d64 | 
							
								
								
									
										363
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										363
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -4,19 +4,13 @@ version = 4 | ||||
| 
 | ||||
| [[package]] | ||||
| name = "addr2line" | ||||
| version = "0.21.0" | ||||
| version = "0.24.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" | ||||
| checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" | ||||
| dependencies = [ | ||||
|  "gimli", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "adler" | ||||
| version = "1.0.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "adler2" | ||||
| version = "2.0.0" | ||||
| @ -60,15 +54,15 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "ahash" | ||||
| version = "0.8.11" | ||||
| version = "0.8.12" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" | ||||
| checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" | ||||
| dependencies = [ | ||||
|  "cfg-if", | ||||
|  "const-random", | ||||
|  "once_cell", | ||||
|  "version_check", | ||||
|  "zerocopy 0.7.35", | ||||
|  "zerocopy", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| @ -198,17 +192,17 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "backtrace" | ||||
| version = "0.3.71" | ||||
| version = "0.3.75" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" | ||||
| checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" | ||||
| dependencies = [ | ||||
|  "addr2line", | ||||
|  "cc", | ||||
|  "cfg-if", | ||||
|  "libc", | ||||
|  "miniz_oxide 0.7.4", | ||||
|  "miniz_oxide", | ||||
|  "object", | ||||
|  "rustc-demangle", | ||||
|  "windows-targets 0.52.6", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| @ -254,9 +248,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "bitflags" | ||||
| version = "2.9.0" | ||||
| version = "2.9.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" | ||||
| checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" | ||||
| dependencies = [ | ||||
|  "serde", | ||||
| ] | ||||
| @ -356,9 +350,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "cc" | ||||
| version = "1.2.20" | ||||
| version = "1.2.22" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "04da6a0d40b948dfc4fa8f5bbf402b0fc1a64a28dbf7d12ffd683550f2c1b63a" | ||||
| checksum = "32db95edf998450acc7881c932f94cd9b05c87b4b2599e8bab064753da4acfd1" | ||||
| dependencies = [ | ||||
|  "shlex", | ||||
| ] | ||||
| @ -413,9 +407,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "clap" | ||||
| version = "4.5.37" | ||||
| version = "4.5.38" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "eccb054f56cbd38340b380d4a8e69ef1f02f1af43db2f0cc817a4774d80ae071" | ||||
| checksum = "ed93b9805f8ba930df42c2590f05453d5ec36cbb85d018868a5b24d31f6ac000" | ||||
| dependencies = [ | ||||
|  "clap_builder", | ||||
|  "clap_derive", | ||||
| @ -423,9 +417,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "clap_builder" | ||||
| version = "4.5.37" | ||||
| version = "4.5.38" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "efd9466fac8543255d3b1fcad4762c5e116ffe808c8a3043d4263cd4fd4862a2" | ||||
| checksum = "379026ff283facf611b0ea629334361c4211d1b12ee01024eec1591133b04120" | ||||
| dependencies = [ | ||||
|  "anstream", | ||||
|  "anstyle", | ||||
| @ -453,9 +447,9 @@ checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "color-eyre" | ||||
| version = "0.6.3" | ||||
| version = "0.6.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "55146f5e46f237f7423d74111267d4597b59b0dad0ffaf7303bce9945d843ad5" | ||||
| checksum = "e6e1761c0e16f8883bbbb8ce5990867f4f06bf11a0253da6495a04ce4b6ef0ec" | ||||
| dependencies = [ | ||||
|  "backtrace", | ||||
|  "color-spantrace", | ||||
| @ -468,9 +462,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "color-spantrace" | ||||
| version = "0.2.1" | ||||
| version = "0.2.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2" | ||||
| checksum = "2ddd8d5bfda1e11a501d0a7303f3bfed9aa632ebdb859be40d0fd70478ed70d5" | ||||
| dependencies = [ | ||||
|  "once_cell", | ||||
|  "owo-colors", | ||||
| @ -614,7 +608,7 @@ version = "0.28.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" | ||||
| dependencies = [ | ||||
|  "bitflags 2.9.0", | ||||
|  "bitflags 2.9.1", | ||||
|  "crossterm_winapi", | ||||
|  "futures-core", | ||||
|  "mio 1.0.3", | ||||
| @ -1130,7 +1124,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" | ||||
| dependencies = [ | ||||
|  "crc32fast", | ||||
|  "miniz_oxide 0.8.8", | ||||
|  "miniz_oxide", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| @ -1330,9 +1324,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "getrandom" | ||||
| version = "0.3.2" | ||||
| version = "0.3.3" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" | ||||
| checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" | ||||
| dependencies = [ | ||||
|  "cfg-if", | ||||
|  "libc", | ||||
| @ -1352,9 +1346,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "gimli" | ||||
| version = "0.28.1" | ||||
| version = "0.31.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" | ||||
| checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "group" | ||||
| @ -1388,9 +1382,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "h2" | ||||
| version = "0.4.9" | ||||
| version = "0.4.10" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "75249d144030531f8dee69fe9cea04d3edf809a017ae445e2abdff6629e86633" | ||||
| checksum = "a9421a676d1b147b16b82c9225157dc629087ef8ec4d5e2960f9437a90dac0a5" | ||||
| dependencies = [ | ||||
|  "atomic-waker", | ||||
|  "bytes", | ||||
| @ -1440,6 +1434,7 @@ dependencies = [ | ||||
|  "serde-value", | ||||
|  "serde_json", | ||||
|  "serde_yaml", | ||||
|  "temp-dir", | ||||
|  "temp-file", | ||||
|  "tokio", | ||||
|  "url", | ||||
| @ -1497,9 +1492,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "hashbrown" | ||||
| version = "0.15.2" | ||||
| version = "0.15.3" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" | ||||
| checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" | ||||
| dependencies = [ | ||||
|  "allocator-api2", | ||||
|  "equivalent", | ||||
| @ -1713,7 +1708,7 @@ dependencies = [ | ||||
|  "bytes", | ||||
|  "futures-channel", | ||||
|  "futures-util", | ||||
|  "h2 0.4.9", | ||||
|  "h2 0.4.10", | ||||
|  "http 1.3.1", | ||||
|  "http-body 1.0.1", | ||||
|  "httparse", | ||||
| @ -1852,21 +1847,22 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "icu_collections" | ||||
| version = "1.5.0" | ||||
| version = "2.0.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" | ||||
| checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" | ||||
| dependencies = [ | ||||
|  "displaydoc", | ||||
|  "potential_utf", | ||||
|  "yoke", | ||||
|  "zerofrom", | ||||
|  "zerovec", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "icu_locid" | ||||
| version = "1.5.0" | ||||
| name = "icu_locale_core" | ||||
| version = "2.0.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" | ||||
| checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" | ||||
| dependencies = [ | ||||
|  "displaydoc", | ||||
|  "litemap", | ||||
| @ -1875,31 +1871,11 @@ dependencies = [ | ||||
|  "zerovec", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "icu_locid_transform" | ||||
| version = "1.5.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" | ||||
| dependencies = [ | ||||
|  "displaydoc", | ||||
|  "icu_locid", | ||||
|  "icu_locid_transform_data", | ||||
|  "icu_provider", | ||||
|  "tinystr", | ||||
|  "zerovec", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "icu_locid_transform_data" | ||||
| version = "1.5.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "icu_normalizer" | ||||
| version = "1.5.0" | ||||
| version = "2.0.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" | ||||
| checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" | ||||
| dependencies = [ | ||||
|  "displaydoc", | ||||
|  "icu_collections", | ||||
| @ -1907,67 +1883,54 @@ dependencies = [ | ||||
|  "icu_properties", | ||||
|  "icu_provider", | ||||
|  "smallvec", | ||||
|  "utf16_iter", | ||||
|  "utf8_iter", | ||||
|  "write16", | ||||
|  "zerovec", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "icu_normalizer_data" | ||||
| version = "1.5.1" | ||||
| version = "2.0.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" | ||||
| checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "icu_properties" | ||||
| version = "1.5.1" | ||||
| version = "2.0.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" | ||||
| checksum = "2549ca8c7241c82f59c80ba2a6f415d931c5b58d24fb8412caa1a1f02c49139a" | ||||
| dependencies = [ | ||||
|  "displaydoc", | ||||
|  "icu_collections", | ||||
|  "icu_locid_transform", | ||||
|  "icu_locale_core", | ||||
|  "icu_properties_data", | ||||
|  "icu_provider", | ||||
|  "tinystr", | ||||
|  "potential_utf", | ||||
|  "zerotrie", | ||||
|  "zerovec", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "icu_properties_data" | ||||
| version = "1.5.1" | ||||
| version = "2.0.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" | ||||
| checksum = "8197e866e47b68f8f7d95249e172903bec06004b18b2937f1095d40a0c57de04" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "icu_provider" | ||||
| version = "1.5.0" | ||||
| version = "2.0.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" | ||||
| checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" | ||||
| dependencies = [ | ||||
|  "displaydoc", | ||||
|  "icu_locid", | ||||
|  "icu_provider_macros", | ||||
|  "icu_locale_core", | ||||
|  "stable_deref_trait", | ||||
|  "tinystr", | ||||
|  "writeable", | ||||
|  "yoke", | ||||
|  "zerofrom", | ||||
|  "zerotrie", | ||||
|  "zerovec", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "icu_provider_macros" | ||||
| version = "1.5.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "ident_case" | ||||
| version = "1.0.1" | ||||
| @ -1987,9 +1950,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "idna_adapter" | ||||
| version = "1.2.0" | ||||
| version = "1.2.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" | ||||
| checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" | ||||
| dependencies = [ | ||||
|  "icu_normalizer", | ||||
|  "icu_properties", | ||||
| @ -2033,7 +1996,7 @@ version = "0.7.5" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "0fddf93031af70e75410a2511ec04d49e758ed2f26dad3404a934e0fb45cc12a" | ||||
| dependencies = [ | ||||
|  "bitflags 2.9.0", | ||||
|  "bitflags 2.9.1", | ||||
|  "crossterm 0.25.0", | ||||
|  "dyn-clone", | ||||
|  "fuzzy-matcher", | ||||
| @ -2096,9 +2059,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "jiff" | ||||
| version = "0.2.10" | ||||
| version = "0.2.13" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "5a064218214dc6a10fbae5ec5fa888d80c45d611aba169222fc272072bf7aef6" | ||||
| checksum = "f02000660d30638906021176af16b17498bd0d12813dbfe7b276d8bc7f3c0806" | ||||
| dependencies = [ | ||||
|  "jiff-static", | ||||
|  "log", | ||||
| @ -2109,9 +2072,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "jiff-static" | ||||
| version = "0.2.10" | ||||
| version = "0.2.13" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "199b7932d97e325aff3a7030e141eafe7f2c6268e1d1b24859b753a627f45254" | ||||
| checksum = "f3c30758ddd7188629c6713fc45d1188af4f44c90582311d0c8d8c9907f60c48" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
| @ -2270,9 +2233,9 @@ checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "libm" | ||||
| version = "0.2.13" | ||||
| version = "0.2.15" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "c9627da5196e5d8ed0b0495e61e518847578da83483c37288316d9b2e03a7f72" | ||||
| checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "libredfish" | ||||
| @ -2293,7 +2256,7 @@ version = "0.1.3" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" | ||||
| dependencies = [ | ||||
|  "bitflags 2.9.0", | ||||
|  "bitflags 2.9.1", | ||||
|  "libc", | ||||
| ] | ||||
| 
 | ||||
| @ -2311,9 +2274,9 @@ checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "litemap" | ||||
| version = "0.7.5" | ||||
| version = "0.8.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" | ||||
| checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "lock_api" | ||||
| @ -2367,15 +2330,6 @@ version = "0.3.17" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "miniz_oxide" | ||||
| version = "0.7.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" | ||||
| dependencies = [ | ||||
|  "adler", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "miniz_oxide" | ||||
| version = "0.8.8" | ||||
| @ -2520,18 +2474,18 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "object" | ||||
| version = "0.32.2" | ||||
| version = "0.36.7" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" | ||||
| checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" | ||||
| dependencies = [ | ||||
|  "memchr", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "octocrab" | ||||
| version = "0.44.0" | ||||
| version = "0.44.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "aaf799a9982a4d0b4b3fa15b4c1ff7daf5bd0597f46456744dcbb6ddc2e4c827" | ||||
| checksum = "86996964f8b721067b6ed238aa0ccee56ecad6ee5e714468aa567992d05d2b91" | ||||
| dependencies = [ | ||||
|  "arc-swap", | ||||
|  "async-trait", | ||||
| @ -2585,7 +2539,7 @@ version = "0.10.72" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" | ||||
| dependencies = [ | ||||
|  "bitflags 2.9.0", | ||||
|  "bitflags 2.9.1", | ||||
|  "cfg-if", | ||||
|  "foreign-types", | ||||
|  "libc", | ||||
| @ -2613,9 +2567,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "openssl-sys" | ||||
| version = "0.9.107" | ||||
| version = "0.9.108" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" | ||||
| checksum = "e145e1651e858e820e4860f7b9c5e169bc1d8ce1c86043be79fa7b7634821847" | ||||
| dependencies = [ | ||||
|  "cc", | ||||
|  "libc", | ||||
| @ -2679,9 +2633,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "owo-colors" | ||||
| version = "3.5.0" | ||||
| version = "4.2.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" | ||||
| checksum = "1036865bb9422d3300cf723f657c2851d0e9ab12567854b1f4eba3d77decf564" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "p256" | ||||
| @ -2967,6 +2921,15 @@ dependencies = [ | ||||
|  "portable-atomic", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "potential_utf" | ||||
| version = "0.1.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" | ||||
| dependencies = [ | ||||
|  "zerovec", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "powerfmt" | ||||
| version = "0.2.0" | ||||
| @ -2979,7 +2942,7 @@ version = "0.2.21" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" | ||||
| dependencies = [ | ||||
|  "zerocopy 0.8.25", | ||||
|  "zerocopy", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| @ -3120,7 +3083,7 @@ version = "0.9.3" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" | ||||
| dependencies = [ | ||||
|  "getrandom 0.3.2", | ||||
|  "getrandom 0.3.3", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| @ -3129,7 +3092,7 @@ version = "0.29.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b" | ||||
| dependencies = [ | ||||
|  "bitflags 2.9.0", | ||||
|  "bitflags 2.9.1", | ||||
|  "cassowary", | ||||
|  "compact_str", | ||||
|  "crossterm 0.28.1", | ||||
| @ -3146,11 +3109,11 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "redox_syscall" | ||||
| version = "0.5.11" | ||||
| version = "0.5.12" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" | ||||
| checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" | ||||
| dependencies = [ | ||||
|  "bitflags 2.9.0", | ||||
|  "bitflags 2.9.1", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| @ -3244,7 +3207,7 @@ dependencies = [ | ||||
|  "encoding_rs", | ||||
|  "futures-core", | ||||
|  "futures-util", | ||||
|  "h2 0.4.9", | ||||
|  "h2 0.4.10", | ||||
|  "http 1.3.1", | ||||
|  "http-body 1.0.1", | ||||
|  "http-body-util", | ||||
| @ -3333,7 +3296,7 @@ dependencies = [ | ||||
|  "aes", | ||||
|  "aes-gcm", | ||||
|  "async-trait", | ||||
|  "bitflags 2.9.0", | ||||
|  "bitflags 2.9.1", | ||||
|  "byteorder", | ||||
|  "cbc", | ||||
|  "chacha20", | ||||
| @ -3434,7 +3397,7 @@ version = "2.1.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "3bb94393cafad0530145b8f626d8687f1ee1dedb93d7ba7740d6ae81868b13b5" | ||||
| dependencies = [ | ||||
|  "bitflags 2.9.0", | ||||
|  "bitflags 2.9.1", | ||||
|  "bytes", | ||||
|  "chrono", | ||||
|  "flurry", | ||||
| @ -3481,7 +3444,7 @@ version = "0.38.44" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" | ||||
| dependencies = [ | ||||
|  "bitflags 2.9.0", | ||||
|  "bitflags 2.9.1", | ||||
|  "errno", | ||||
|  "libc", | ||||
|  "linux-raw-sys 0.4.15", | ||||
| @ -3490,11 +3453,11 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rustix" | ||||
| version = "1.0.5" | ||||
| version = "1.0.7" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" | ||||
| checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" | ||||
| dependencies = [ | ||||
|  "bitflags 2.9.0", | ||||
|  "bitflags 2.9.1", | ||||
|  "errno", | ||||
|  "libc", | ||||
|  "linux-raw-sys 0.9.4", | ||||
| @ -3503,9 +3466,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rustls" | ||||
| version = "0.23.26" | ||||
| version = "0.23.27" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "df51b5869f3a441595eac5e8ff14d486ff285f7b8c0df8770e49c3b56351f0f0" | ||||
| checksum = "730944ca083c1c233a75c09f199e973ca499344a2b7ba9e755c457e86fb4a321" | ||||
| dependencies = [ | ||||
|  "log", | ||||
|  "once_cell", | ||||
| @ -3561,15 +3524,18 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rustls-pki-types" | ||||
| version = "1.11.0" | ||||
| version = "1.12.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" | ||||
| checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" | ||||
| dependencies = [ | ||||
|  "zeroize", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rustls-webpki" | ||||
| version = "0.103.1" | ||||
| version = "0.103.3" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" | ||||
| checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" | ||||
| dependencies = [ | ||||
|  "ring", | ||||
|  "rustls-pki-types", | ||||
| @ -3652,7 +3618,7 @@ version = "2.11.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" | ||||
| dependencies = [ | ||||
|  "bitflags 2.9.0", | ||||
|  "bitflags 2.9.1", | ||||
|  "core-foundation 0.9.4", | ||||
|  "core-foundation-sys", | ||||
|  "libc", | ||||
| @ -3665,7 +3631,7 @@ version = "3.2.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" | ||||
| dependencies = [ | ||||
|  "bitflags 2.9.0", | ||||
|  "bitflags 2.9.1", | ||||
|  "core-foundation 0.10.0", | ||||
|  "core-foundation-sys", | ||||
|  "libc", | ||||
| @ -3796,9 +3762,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "sha2" | ||||
| version = "0.10.8" | ||||
| version = "0.10.9" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" | ||||
| checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" | ||||
| dependencies = [ | ||||
|  "cfg-if", | ||||
|  "cpufeatures", | ||||
| @ -3822,9 +3788,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "signal-hook" | ||||
| version = "0.3.17" | ||||
| version = "0.3.18" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" | ||||
| checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" | ||||
| dependencies = [ | ||||
|  "libc", | ||||
|  "signal-hook-registry", | ||||
| @ -4060,9 +4026,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "synstructure" | ||||
| version = "0.13.1" | ||||
| version = "0.13.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" | ||||
| checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
| @ -4086,7 +4052,7 @@ version = "0.6.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" | ||||
| dependencies = [ | ||||
|  "bitflags 2.9.0", | ||||
|  "bitflags 2.9.1", | ||||
|  "core-foundation 0.9.4", | ||||
|  "system-configuration-sys 0.6.0", | ||||
| ] | ||||
| @ -4117,6 +4083,12 @@ version = "1.0.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "temp-dir" | ||||
| version = "0.1.16" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "83176759e9416cf81ee66cb6508dbfe9c96f20b8b56265a39917551c23c70964" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "temp-file" | ||||
| version = "0.1.9" | ||||
| @ -4125,14 +4097,14 @@ checksum = "b5ff282c3f91797f0acb021f3af7fffa8a78601f0f2fd0a9f79ee7dcf9a9af9e" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "tempfile" | ||||
| version = "3.19.1" | ||||
| version = "3.20.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" | ||||
| checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" | ||||
| dependencies = [ | ||||
|  "fastrand", | ||||
|  "getrandom 0.3.2", | ||||
|  "getrandom 0.3.3", | ||||
|  "once_cell", | ||||
|  "rustix 1.0.5", | ||||
|  "rustix 1.0.7", | ||||
|  "windows-sys 0.59.0", | ||||
| ] | ||||
| 
 | ||||
| @ -4234,9 +4206,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "tinystr" | ||||
| version = "0.7.6" | ||||
| version = "0.8.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" | ||||
| checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" | ||||
| dependencies = [ | ||||
|  "displaydoc", | ||||
|  "zerovec", | ||||
| @ -4244,9 +4216,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "tokio" | ||||
| version = "1.44.2" | ||||
| version = "1.45.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" | ||||
| checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" | ||||
| dependencies = [ | ||||
|  "backtrace", | ||||
|  "bytes", | ||||
| @ -4333,12 +4305,12 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "tower-http" | ||||
| version = "0.6.2" | ||||
| version = "0.6.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "403fa3b783d4b626a8ad51d766ab03cb6d2dbfc46b1c5d4448395e6628dc9697" | ||||
| checksum = "0fdb0c213ca27a9f57ab69ddb290fd80d970922355b83ae380b395d3986b8a2e" | ||||
| dependencies = [ | ||||
|  "base64 0.22.1", | ||||
|  "bitflags 2.9.0", | ||||
|  "bitflags 2.9.1", | ||||
|  "bytes", | ||||
|  "futures-util", | ||||
|  "http 1.3.1", | ||||
| @ -4520,12 +4492,6 @@ dependencies = [ | ||||
|  "serde", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "utf16_iter" | ||||
| version = "1.0.5" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "utf8_iter" | ||||
| version = "1.0.4" | ||||
| @ -4544,7 +4510,7 @@ version = "1.16.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" | ||||
| dependencies = [ | ||||
|  "getrandom 0.3.2", | ||||
|  "getrandom 0.3.3", | ||||
|  "rand 0.9.1", | ||||
|  "uuid-macro-internal", | ||||
| ] | ||||
| @ -5045,20 +5011,14 @@ version = "0.39.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" | ||||
| dependencies = [ | ||||
|  "bitflags 2.9.0", | ||||
|  "bitflags 2.9.1", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "write16" | ||||
| version = "1.0.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "writeable" | ||||
| version = "0.5.5" | ||||
| version = "0.6.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" | ||||
| checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "wyz" | ||||
| @ -5107,9 +5067,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "yoke" | ||||
| version = "0.7.5" | ||||
| version = "0.8.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" | ||||
| checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" | ||||
| dependencies = [ | ||||
|  "serde", | ||||
|  "stable_deref_trait", | ||||
| @ -5119,9 +5079,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "yoke-derive" | ||||
| version = "0.7.5" | ||||
| version = "0.8.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" | ||||
| checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
| @ -5129,33 +5089,13 @@ dependencies = [ | ||||
|  "synstructure", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "zerocopy" | ||||
| version = "0.7.35" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" | ||||
| dependencies = [ | ||||
|  "zerocopy-derive 0.7.35", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "zerocopy" | ||||
| version = "0.8.25" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" | ||||
| dependencies = [ | ||||
|  "zerocopy-derive 0.8.25", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "zerocopy-derive" | ||||
| version = "0.7.35" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn", | ||||
|  "zerocopy-derive", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| @ -5197,10 +5137,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "zerovec" | ||||
| version = "0.10.4" | ||||
| name = "zerotrie" | ||||
| version = "0.2.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" | ||||
| checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" | ||||
| dependencies = [ | ||||
|  "displaydoc", | ||||
|  "yoke", | ||||
|  "zerofrom", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "zerovec" | ||||
| version = "0.11.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" | ||||
| dependencies = [ | ||||
|  "yoke", | ||||
|  "zerofrom", | ||||
| @ -5209,9 +5160,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "zerovec-derive" | ||||
| version = "0.10.3" | ||||
| version = "0.11.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" | ||||
| checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  | ||||
| @ -48,3 +48,4 @@ fqdn = { version = "0.4.6", features = [ | ||||
|     "punycode", | ||||
|     "serde", | ||||
| ] } | ||||
| temp-dir = "0.1.14" | ||||
|  | ||||
| @ -370,10 +370,13 @@ mod tests { | ||||
|         let result = get_servers_for_backend(&backend, &haproxy); | ||||
| 
 | ||||
|         // Check the result
 | ||||
|         assert_eq!(result, vec![BackendServer { | ||||
|             address: "192.168.1.1".to_string(), | ||||
|             port: 80, | ||||
|         },]); | ||||
|         assert_eq!( | ||||
|             result, | ||||
|             vec![BackendServer { | ||||
|                 address: "192.168.1.1".to_string(), | ||||
|                 port: 80, | ||||
|             },] | ||||
|         ); | ||||
|     } | ||||
|     #[test] | ||||
|     fn test_get_servers_for_backend_no_linked_servers() { | ||||
| @ -430,15 +433,18 @@ mod tests { | ||||
|         // Call the function
 | ||||
|         let result = get_servers_for_backend(&backend, &haproxy); | ||||
|         // Check the result
 | ||||
|         assert_eq!(result, vec![ | ||||
|             BackendServer { | ||||
|                 address: "some-hostname.test.mcd".to_string(), | ||||
|                 port: 80, | ||||
|             }, | ||||
|             BackendServer { | ||||
|                 address: "192.168.1.2".to_string(), | ||||
|                 port: 8080, | ||||
|             }, | ||||
|         ]); | ||||
|         assert_eq!( | ||||
|             result, | ||||
|             vec![ | ||||
|                 BackendServer { | ||||
|                     address: "some-hostname.test.mcd".to_string(), | ||||
|                     port: 80, | ||||
|                 }, | ||||
|                 BackendServer { | ||||
|                     address: "192.168.1.2".to_string(), | ||||
|                     port: 8080, | ||||
|                 }, | ||||
|             ] | ||||
|         ); | ||||
|     } | ||||
| } | ||||
|  | ||||
							
								
								
									
										379
									
								
								harmony/src/modules/helm/command.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										379
									
								
								harmony/src/modules/helm/command.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,379 @@ | ||||
| use async_trait::async_trait; | ||||
| use log::debug; | ||||
| use non_blank_string_rs::NonBlankString; | ||||
| use serde::Serialize; | ||||
| use std::collections::HashMap; | ||||
| use std::env::temp_dir; | ||||
| use std::ffi::OsStr; | ||||
| use std::io::ErrorKind; | ||||
| use std::path::{Path, PathBuf}; | ||||
| use std::process::{Command, Output}; | ||||
| use temp_dir::{self, TempDir}; | ||||
| use temp_file::TempFile; | ||||
| 
 | ||||
| use crate::data::{Id, Version}; | ||||
| use crate::interpret::{Interpret, InterpretError, InterpretName, InterpretStatus, Outcome}; | ||||
| use crate::inventory::Inventory; | ||||
| use crate::score::Score; | ||||
| use crate::topology::{HelmCommand, K8sclient, Topology}; | ||||
| 
 | ||||
| #[derive(Clone)] | ||||
| pub struct HelmCommandExecutor { | ||||
|     pub env: HashMap<String, String>, | ||||
|     pub path: Option<PathBuf>, | ||||
|     pub args: Vec<String>, | ||||
|     pub api_versions: Option<Vec<String>>, | ||||
|     pub kube_version: String, | ||||
|     pub debug: Option<bool>, | ||||
|     pub globals: HelmGlobals, | ||||
|     pub chart: HelmChart, | ||||
| } | ||||
| 
 | ||||
| #[derive(Clone)] | ||||
| pub struct HelmGlobals { | ||||
|     pub chart_home: Option<PathBuf>, | ||||
|     pub config_home: Option<PathBuf>, | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug, Clone, Serialize)] | ||||
| pub struct HelmChart { | ||||
|     pub name: String, | ||||
|     pub version: Option<String>, | ||||
|     pub repo: Option<String>, | ||||
|     pub release_name: Option<String>, | ||||
|     pub namespace: Option<String>, | ||||
|     pub additional_values_files: Vec<PathBuf>, | ||||
|     pub values_file: Option<PathBuf>, | ||||
|     pub values_inline: Option<String>, | ||||
|     pub include_crds: Option<bool>, | ||||
|     pub skip_hooks: Option<bool>, | ||||
|     pub api_versions: Option<Vec<String>>, | ||||
|     pub kube_version: Option<String>, | ||||
|     pub name_template: String, | ||||
|     pub skip_tests: Option<bool>, | ||||
|     pub debug: Option<bool>, | ||||
| } | ||||
| 
 | ||||
| impl HelmCommandExecutor { | ||||
|     pub fn generate(mut self) -> Result<String, std::io::Error> { | ||||
|         if self.globals.chart_home.is_none() { | ||||
|             self.globals.chart_home = Some(PathBuf::from("charts")); | ||||
|         } | ||||
| 
 | ||||
|         if self | ||||
|             .clone() | ||||
|             .chart | ||||
|             .clone() | ||||
|             .chart_exists_locally(self.clone().globals.chart_home.unwrap()) | ||||
|             .is_none() | ||||
|         { | ||||
|             if self.chart.repo.is_none() { | ||||
|                 return Err(std::io::Error::new( | ||||
|                     ErrorKind::Other, | ||||
|                     "Chart doesn't exist locally and no repo specified", | ||||
|                 )); | ||||
|             } | ||||
|             self.clone().run_command( | ||||
|                 self.chart | ||||
|                     .clone() | ||||
|                     .pull_command(self.globals.chart_home.clone().unwrap()), | ||||
|             )?; | ||||
|         } | ||||
| 
 | ||||
|         let out = match self.clone().run_command( | ||||
|             self.chart | ||||
|                 .clone() | ||||
|                 .helm_args(self.globals.chart_home.clone().unwrap()), | ||||
|         ) { | ||||
|             Ok(out) => out, | ||||
|             Err(e) => return Err(e), | ||||
|         }; | ||||
| 
 | ||||
|         // TODO: don't use unwrap here
 | ||||
|         let s = String::from_utf8(out.stdout).unwrap(); | ||||
|         debug!("helm stderr: {}", String::from_utf8(out.stderr).unwrap()); | ||||
|         debug!("helm status: {}", out.status); | ||||
|         debug!("helm output: {s}"); | ||||
| 
 | ||||
|         let clean = s.split_once("---").unwrap().1; | ||||
| 
 | ||||
|         Ok(clean.to_string()) | ||||
|     } | ||||
| 
 | ||||
|     pub fn version(self) -> Result<String, std::io::Error> { | ||||
|         let out = match self.run_command(vec![ | ||||
|             "version".to_string(), | ||||
|             "-c".to_string(), | ||||
|             "--short".to_string(), | ||||
|         ]) { | ||||
|             Ok(out) => out, | ||||
|             Err(e) => return Err(e), | ||||
|         }; | ||||
| 
 | ||||
|         // TODO: don't use unwrap
 | ||||
|         Ok(String::from_utf8(out.stdout).unwrap()) | ||||
|     } | ||||
| 
 | ||||
|     pub fn run_command(mut self, mut args: Vec<String>) -> Result<Output, std::io::Error> { | ||||
|         if let Some(d) = self.debug { | ||||
|             if d { | ||||
|                 args.push("--debug".to_string()); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         let path = if let Some(p) = self.path { | ||||
|             p | ||||
|         } else { | ||||
|             PathBuf::from("helm") | ||||
|         }; | ||||
| 
 | ||||
|         let config_home = match self.globals.config_home { | ||||
|             Some(p) => p, | ||||
|             None => PathBuf::from(TempDir::new()?.path()), | ||||
|         }; | ||||
| 
 | ||||
|         match self.chart.values_inline { | ||||
|             Some(yaml_str) => { | ||||
|                 let tf: TempFile; | ||||
|                 tf = temp_file::with_contents(yaml_str.as_bytes()); | ||||
|                 self.chart | ||||
|                     .additional_values_files | ||||
|                     .push(PathBuf::from(tf.path())); | ||||
|             } | ||||
|             None => (), | ||||
|         }; | ||||
| 
 | ||||
|         self.env.insert( | ||||
|             "HELM_CONFIG_HOME".to_string(), | ||||
|             config_home.to_str().unwrap().to_string(), | ||||
|         ); | ||||
|         self.env.insert( | ||||
|             "HELM_CACHE_HOME".to_string(), | ||||
|             config_home.to_str().unwrap().to_string(), | ||||
|         ); | ||||
|         self.env.insert( | ||||
|             "HELM_DATA_HOME".to_string(), | ||||
|             config_home.to_str().unwrap().to_string(), | ||||
|         ); | ||||
| 
 | ||||
|         Command::new(path).envs(self.env).args(args).output() | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl HelmChart { | ||||
|     pub fn chart_exists_locally(self, chart_home: PathBuf) -> Option<PathBuf> { | ||||
|         let chart_path = | ||||
|             PathBuf::from(chart_home.to_str().unwrap().to_string() + "/" + &self.name.to_string()); | ||||
| 
 | ||||
|         if chart_path.exists() { | ||||
|             Some(chart_path) | ||||
|         } else { | ||||
|             None | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     pub fn pull_command(self, chart_home: PathBuf) -> Vec<String> { | ||||
|         let mut args = vec![ | ||||
|             "pull".to_string(), | ||||
|             "--untar".to_string(), | ||||
|             "--untardir".to_string(), | ||||
|             chart_home.to_str().unwrap().to_string(), | ||||
|         ]; | ||||
| 
 | ||||
|         match self.repo { | ||||
|             Some(r) => { | ||||
|                 if r.starts_with("oci://") { | ||||
|                     args.push(String::from( | ||||
|                         r.trim_end_matches("/").to_string() + "/" + self.name.clone().as_str(), | ||||
|                     )); | ||||
|                 } else { | ||||
|                     args.push("--repo".to_string()); | ||||
|                     args.push(r.to_string()); | ||||
| 
 | ||||
|                     args.push(self.name); | ||||
|                 } | ||||
|             } | ||||
|             None => args.push(self.name), | ||||
|         }; | ||||
| 
 | ||||
|         match self.version { | ||||
|             Some(v) => { | ||||
|                 args.push("--version".to_string()); | ||||
|                 args.push(v.to_string()); | ||||
|             } | ||||
|             None => (), | ||||
|         } | ||||
| 
 | ||||
|         args | ||||
|     } | ||||
| 
 | ||||
|     pub fn helm_args(self, chart_home: PathBuf) -> Vec<String> { | ||||
|         let mut args: Vec<String> = vec!["template".to_string()]; | ||||
| 
 | ||||
|         match self.release_name { | ||||
|             Some(rn) => args.push(rn.to_string()), | ||||
|             None => args.push("--generate-name".to_string()), | ||||
|         } | ||||
| 
 | ||||
|         args.push( | ||||
|             PathBuf::from(chart_home.to_str().unwrap().to_string() + "/" + self.name.as_str()) | ||||
|                 .to_str() | ||||
|                 .unwrap() | ||||
|                 .to_string(), | ||||
|         ); | ||||
| 
 | ||||
|         if let Some(n) = self.namespace { | ||||
|             args.push("--namespace".to_string()); | ||||
|             args.push(n.to_string()); | ||||
|         } | ||||
| 
 | ||||
|         if let Some(f) = self.values_file { | ||||
|             args.push("-f".to_string()); | ||||
|             args.push(f.to_str().unwrap().to_string()); | ||||
|         } | ||||
| 
 | ||||
|         for f in self.additional_values_files { | ||||
|             args.push("-f".to_string()); | ||||
|             args.push(f.to_str().unwrap().to_string()); | ||||
|         } | ||||
| 
 | ||||
|         if let Some(vv) = self.api_versions { | ||||
|             for v in vv { | ||||
|                 args.push("--api-versions".to_string()); | ||||
|                 args.push(v); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         if let Some(kv) = self.kube_version { | ||||
|             args.push("--kube-version".to_string()); | ||||
|             args.push(kv); | ||||
|         } | ||||
| 
 | ||||
|         if let Some(crd) = self.include_crds { | ||||
|             if crd { | ||||
|                 args.push("--include-crds".to_string()); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         if let Some(st) = self.skip_tests { | ||||
|             if st { | ||||
|                 args.push("--skip-tests".to_string()); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         if let Some(sh) = self.skip_hooks { | ||||
|             if sh { | ||||
|                 args.push("--no-hooks".to_string()); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         if let Some(d) = self.debug { | ||||
|             if d { | ||||
|                 args.push("--debug".to_string()); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         args | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug, Clone, Serialize)] | ||||
| pub struct HelmChartScoreV2 { | ||||
|     pub chart: HelmChart, | ||||
| } | ||||
| 
 | ||||
| impl<T: Topology + K8sclient + HelmCommand> Score<T> for HelmChartScoreV2 { | ||||
|     fn create_interpret(&self) -> Box<dyn Interpret<T>> { | ||||
|         Box::new(HelmChartInterpretV2 { | ||||
|             score: self.clone(), | ||||
|         }) | ||||
|     } | ||||
| 
 | ||||
|     fn name(&self) -> String { | ||||
|         format!( | ||||
|             "{} {} HelmChartScoreV2", | ||||
|             self.chart | ||||
|                 .release_name | ||||
|                 .clone() | ||||
|                 .unwrap_or("Unknown".to_string()), | ||||
|             self.chart.name | ||||
|         ) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug, Serialize)] | ||||
| pub struct HelmChartInterpretV2 { | ||||
|     pub score: HelmChartScoreV2, | ||||
| } | ||||
| impl HelmChartInterpretV2 {} | ||||
| 
 | ||||
| #[async_trait] | ||||
| impl<T: Topology + K8sclient + HelmCommand> Interpret<T> for HelmChartInterpretV2 { | ||||
|     async fn execute( | ||||
|         &self, | ||||
|         _inventory: &Inventory, | ||||
|         _topology: &T, | ||||
|     ) -> Result<Outcome, InterpretError> { | ||||
|         let ns = self | ||||
|             .score | ||||
|             .chart | ||||
|             .namespace | ||||
|             .as_ref() | ||||
|             .unwrap_or_else(|| todo!("Get namespace from active kubernetes cluster")); | ||||
| 
 | ||||
|         let helm_executor = HelmCommandExecutor { | ||||
|             env: HashMap::new(), | ||||
|             path: None, | ||||
|             args: vec![], | ||||
|             api_versions: None, | ||||
|             kube_version: "v1.33.0".to_string(), | ||||
|             debug: Some(false), | ||||
|             globals: HelmGlobals { | ||||
|                 chart_home: None, | ||||
|                 config_home: None, | ||||
|             }, | ||||
|             chart: self.score.chart.clone(), | ||||
|         }; | ||||
| 
 | ||||
|         // let mut helm_options = Vec::new();
 | ||||
|         // if self.score.create_namespace {
 | ||||
|         //     helm_options.push(NonBlankString::from_str("--create-namespace").unwrap());
 | ||||
|         // }
 | ||||
| 
 | ||||
|         let res = helm_executor.generate(); | ||||
| 
 | ||||
|         let output = match res { | ||||
|             Ok(output) => output, | ||||
|             Err(err) => return Err(InterpretError::new(err.to_string())), | ||||
|         }; | ||||
| 
 | ||||
|         // TODO: implement actually applying the YAML from the templating in the generate function to a k8s cluster, having trouble passing in straight YAML into the k8s client
 | ||||
| 
 | ||||
|         // let k8s_resource = k8s_openapi::serde_json::from_str(output.as_str()).unwrap();
 | ||||
| 
 | ||||
|         // let client = topology
 | ||||
|         //     .k8s_client()
 | ||||
|         //     .await
 | ||||
|         //     .expect("Environment should provide enough information to instanciate a client")
 | ||||
|         //     .apply_namespaced(&vec![output], Some(ns.to_string().as_str()));
 | ||||
|         // match client.apply_yaml(output) {
 | ||||
|         //     Ok(_) => return Ok(Outcome::success("Helm chart deployed".to_string())),
 | ||||
|         //     Err(e) => return Err(InterpretError::new(e)),
 | ||||
|         // }
 | ||||
| 
 | ||||
|         Ok(Outcome::success("Helm chart deployed".to_string())) | ||||
|     } | ||||
| 
 | ||||
|     fn get_name(&self) -> InterpretName { | ||||
|         todo!() | ||||
|     } | ||||
|     fn get_version(&self) -> Version { | ||||
|         todo!() | ||||
|     } | ||||
|     fn get_status(&self) -> InterpretStatus { | ||||
|         todo!() | ||||
|     } | ||||
|     fn get_children(&self) -> Vec<Id> { | ||||
|         todo!() | ||||
|     } | ||||
| } | ||||
| @ -1 +1,2 @@ | ||||
| pub mod chart; | ||||
| pub mod command; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user