├── .github ├── FUNDING.yml └── workflows │ ├── build.yml │ └── crates.yml ├── .gitignore ├── .vscode └── settings.json ├── Cargo.lock ├── Cargo.toml ├── README.md ├── src ├── build.rs ├── commands │ ├── check_command.rs │ ├── clean_command.rs │ ├── haxelib_command.rs │ ├── init_command.rs │ ├── install_command.rs │ ├── mod.rs │ ├── remove_command.rs │ └── tohxml_command.rs ├── hmm │ ├── dependencies.rs │ ├── haxelib.rs │ ├── json.rs │ └── mod.rs ├── lib.rs └── main.rs └── tests ├── common └── mod.rs ├── samples ├── flixel.json ├── hmm.json └── version_null.json └── test.rs /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: ninjamuffin99 4 | ko_fi: ninjamuffin99 5 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build & Test hmm-rs (cargo) 2 | on: 3 | push: 4 | branches: ["main"] 5 | pull_request: 6 | branches: ["main"] 7 | 8 | env: 9 | CARGO_TERM_COLOR: always 10 | 11 | jobs: 12 | windows: 13 | name: windows build/archives (${{ matrix.target }}) 14 | if: github.event_name == 'push' 15 | runs-on: windows-latest 16 | strategy: 17 | fail-fast: false 18 | matrix: 19 | include: 20 | - target: x86_64-pc-windows-msvc 21 | steps: 22 | - name: Checkout code 23 | uses: actions/checkout@v3 24 | - name: Set up Rust 25 | uses: moonrepo/setup-rust@v1 26 | - name: Install target 27 | run: rustup target add ${{ matrix.target }} 28 | - name: Build 29 | run: cargo build --target ${{ matrix.target }} 30 | - name: Run tests 31 | run: cargo test --target ${{ matrix.target }} 32 | - name: Create archive 33 | run: | 34 | mkdir -p hmm-rs-${{ matrix.target }} 35 | cp target/${{ matrix.target }}/debug/hmm-rs.exe ./hmm-rs-${{ matrix.target }}/hmm-rs.exe 36 | - name: Upload artifact 37 | uses: actions/upload-artifact@v4 38 | with: 39 | name: hmm-rs-${{ matrix.target }} 40 | path: hmm-rs-${{ matrix.target }} 41 | macos: 42 | name: macos build/archives (${{ matrix.target }}) 43 | if: github.event_name == 'push' 44 | runs-on: macos-latest 45 | strategy: 46 | fail-fast: false 47 | matrix: 48 | include: 49 | - target: x86_64-apple-darwin 50 | steps: 51 | - name: Checkout code 52 | uses: actions/checkout@v3 53 | - name: Set up Rust 54 | uses: moonrepo/setup-rust@v1 55 | - name: Install target 56 | run: rustup target add ${{ matrix.target }} 57 | - name: Build 58 | run: cargo build --target ${{ matrix.target }} 59 | - name: Run tests 60 | run: cargo test --target ${{ matrix.target }} 61 | - name: Create archive 62 | run: | 63 | mkdir -p hmm-rs-${{ matrix.target }} 64 | cp target/${{ matrix.target }}/debug/hmm-rs ./hmm-rs-${{ matrix.target }}/hmm-rs 65 | - name: Upload artifact 66 | uses: actions/upload-artifact@v3 67 | with: 68 | name: hmm-rs-${{ matrix.target }} 69 | path: hmm-rs-${{ matrix.target }} 70 | linux: 71 | name: linux build/archives (${{ matrix.target }}) 72 | if: github.event_name == 'push' 73 | runs-on: ubuntu-latest 74 | strategy: 75 | fail-fast: false 76 | matrix: 77 | include: 78 | - target: x86_64-unknown-linux-gnu 79 | steps: 80 | - name: Checkout code 81 | uses: actions/checkout@v3 82 | - name: Set up Rust 83 | uses: moonrepo/setup-rust@v1 84 | - name: Install target 85 | run: rustup target add ${{ matrix.target }} 86 | - name: Build 87 | run: cargo build --target ${{ matrix.target }} 88 | - name: Run tests 89 | run: cargo test --target ${{ matrix.target }} 90 | - name: Create archive 91 | run: | 92 | mkdir -p hmm-rs-${{ matrix.target }} 93 | cp target/${{ matrix.target }}/debug/hmm-rs ./hmm-rs-${{ matrix.target }}/hmm-rs 94 | - name: Upload artifact 95 | uses: actions/upload-artifact@v3 96 | with: 97 | name: hmm-rs-${{ matrix.target }} 98 | path: hmm-rs-${{ matrix.target }} 99 | -------------------------------------------------------------------------------- /.github/workflows/crates.yml: -------------------------------------------------------------------------------- 1 | name: Crates publish 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | publish: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v3 13 | - uses: actions-rs/toolchain@v1 14 | with: 15 | toolchain: stable 16 | override: true 17 | - uses: katyo/publish-crates@v2 18 | with: 19 | registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }} 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | .haxelib/ 3 | .obsidian -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true 3 | } -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.24.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler2" 16 | version = "2.0.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 19 | 20 | [[package]] 21 | name = "aes" 22 | version = "0.8.4" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" 25 | dependencies = [ 26 | "cfg-if", 27 | "cipher", 28 | "cpufeatures", 29 | ] 30 | 31 | [[package]] 32 | name = "ahash" 33 | version = "0.8.11" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" 36 | dependencies = [ 37 | "cfg-if", 38 | "once_cell", 39 | "version_check", 40 | "zerocopy 0.7.35", 41 | ] 42 | 43 | [[package]] 44 | name = "allocator-api2" 45 | version = "0.2.21" 46 | source = "registry+https://github.com/rust-lang/crates.io-index" 47 | checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" 48 | 49 | [[package]] 50 | name = "android_system_properties" 51 | version = "0.1.5" 52 | source = "registry+https://github.com/rust-lang/crates.io-index" 53 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 54 | dependencies = [ 55 | "libc", 56 | ] 57 | 58 | [[package]] 59 | name = "anstream" 60 | version = "0.6.18" 61 | source = "registry+https://github.com/rust-lang/crates.io-index" 62 | checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" 63 | dependencies = [ 64 | "anstyle", 65 | "anstyle-parse", 66 | "anstyle-query", 67 | "anstyle-wincon", 68 | "colorchoice", 69 | "is_terminal_polyfill", 70 | "utf8parse", 71 | ] 72 | 73 | [[package]] 74 | name = "anstyle" 75 | version = "1.0.10" 76 | source = "registry+https://github.com/rust-lang/crates.io-index" 77 | checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" 78 | 79 | [[package]] 80 | name = "anstyle-parse" 81 | version = "0.2.6" 82 | source = "registry+https://github.com/rust-lang/crates.io-index" 83 | checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" 84 | dependencies = [ 85 | "utf8parse", 86 | ] 87 | 88 | [[package]] 89 | name = "anstyle-query" 90 | version = "1.1.2" 91 | source = "registry+https://github.com/rust-lang/crates.io-index" 92 | checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" 93 | dependencies = [ 94 | "windows-sys 0.59.0", 95 | ] 96 | 97 | [[package]] 98 | name = "anstyle-wincon" 99 | version = "3.0.7" 100 | source = "registry+https://github.com/rust-lang/crates.io-index" 101 | checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" 102 | dependencies = [ 103 | "anstyle", 104 | "once_cell", 105 | "windows-sys 0.59.0", 106 | ] 107 | 108 | [[package]] 109 | name = "anyhow" 110 | version = "1.0.97" 111 | source = "registry+https://github.com/rust-lang/crates.io-index" 112 | checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" 113 | 114 | [[package]] 115 | name = "arbitrary" 116 | version = "1.4.1" 117 | source = "registry+https://github.com/rust-lang/crates.io-index" 118 | checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" 119 | dependencies = [ 120 | "derive_arbitrary", 121 | ] 122 | 123 | [[package]] 124 | name = "arc-swap" 125 | version = "1.7.1" 126 | source = "registry+https://github.com/rust-lang/crates.io-index" 127 | checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" 128 | 129 | [[package]] 130 | name = "arrayvec" 131 | version = "0.7.6" 132 | source = "registry+https://github.com/rust-lang/crates.io-index" 133 | checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 134 | 135 | [[package]] 136 | name = "atomic-waker" 137 | version = "1.1.2" 138 | source = "registry+https://github.com/rust-lang/crates.io-index" 139 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 140 | 141 | [[package]] 142 | name = "autocfg" 143 | version = "1.4.0" 144 | source = "registry+https://github.com/rust-lang/crates.io-index" 145 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 146 | 147 | [[package]] 148 | name = "backtrace" 149 | version = "0.3.74" 150 | source = "registry+https://github.com/rust-lang/crates.io-index" 151 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 152 | dependencies = [ 153 | "addr2line", 154 | "cfg-if", 155 | "libc", 156 | "miniz_oxide", 157 | "object", 158 | "rustc-demangle", 159 | "windows-targets 0.52.6", 160 | ] 161 | 162 | [[package]] 163 | name = "base64" 164 | version = "0.22.1" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 167 | 168 | [[package]] 169 | name = "bitflags" 170 | version = "2.9.0" 171 | source = "registry+https://github.com/rust-lang/crates.io-index" 172 | checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" 173 | dependencies = [ 174 | "serde", 175 | ] 176 | 177 | [[package]] 178 | name = "block-buffer" 179 | version = "0.10.4" 180 | source = "registry+https://github.com/rust-lang/crates.io-index" 181 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 182 | dependencies = [ 183 | "generic-array", 184 | ] 185 | 186 | [[package]] 187 | name = "bstr" 188 | version = "1.11.3" 189 | source = "registry+https://github.com/rust-lang/crates.io-index" 190 | checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0" 191 | dependencies = [ 192 | "memchr", 193 | "regex-automata", 194 | "serde", 195 | ] 196 | 197 | [[package]] 198 | name = "bumpalo" 199 | version = "3.17.0" 200 | source = "registry+https://github.com/rust-lang/crates.io-index" 201 | checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" 202 | 203 | [[package]] 204 | name = "byteorder" 205 | version = "1.5.0" 206 | source = "registry+https://github.com/rust-lang/crates.io-index" 207 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 208 | 209 | [[package]] 210 | name = "bytes" 211 | version = "1.10.1" 212 | source = "registry+https://github.com/rust-lang/crates.io-index" 213 | checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 214 | 215 | [[package]] 216 | name = "bzip2" 217 | version = "0.5.2" 218 | source = "registry+https://github.com/rust-lang/crates.io-index" 219 | checksum = "49ecfb22d906f800d4fe833b6282cf4dc1c298f5057ca0b5445e5c209735ca47" 220 | dependencies = [ 221 | "bzip2-sys", 222 | ] 223 | 224 | [[package]] 225 | name = "bzip2-sys" 226 | version = "0.1.13+1.0.8" 227 | source = "registry+https://github.com/rust-lang/crates.io-index" 228 | checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" 229 | dependencies = [ 230 | "cc", 231 | "pkg-config", 232 | ] 233 | 234 | [[package]] 235 | name = "cc" 236 | version = "1.2.18" 237 | source = "registry+https://github.com/rust-lang/crates.io-index" 238 | checksum = "525046617d8376e3db1deffb079e91cef90a89fc3ca5c185bbf8c9ecdd15cd5c" 239 | dependencies = [ 240 | "jobserver", 241 | "libc", 242 | "shlex", 243 | ] 244 | 245 | [[package]] 246 | name = "cfg-if" 247 | version = "1.0.0" 248 | source = "registry+https://github.com/rust-lang/crates.io-index" 249 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 250 | 251 | [[package]] 252 | name = "cfg_aliases" 253 | version = "0.2.1" 254 | source = "registry+https://github.com/rust-lang/crates.io-index" 255 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 256 | 257 | [[package]] 258 | name = "cipher" 259 | version = "0.4.4" 260 | source = "registry+https://github.com/rust-lang/crates.io-index" 261 | checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" 262 | dependencies = [ 263 | "crypto-common", 264 | "inout", 265 | ] 266 | 267 | [[package]] 268 | name = "clap" 269 | version = "4.5.35" 270 | source = "registry+https://github.com/rust-lang/crates.io-index" 271 | checksum = "d8aa86934b44c19c50f87cc2790e19f54f7a67aedb64101c2e1a2e5ecfb73944" 272 | dependencies = [ 273 | "clap_builder", 274 | "clap_derive", 275 | ] 276 | 277 | [[package]] 278 | name = "clap_builder" 279 | version = "4.5.35" 280 | source = "registry+https://github.com/rust-lang/crates.io-index" 281 | checksum = "2414dbb2dd0695280da6ea9261e327479e9d37b0630f6b53ba2a11c60c679fd9" 282 | dependencies = [ 283 | "anstream", 284 | "anstyle", 285 | "clap_lex", 286 | "strsim", 287 | "terminal_size", 288 | "unicase", 289 | "unicode-width", 290 | ] 291 | 292 | [[package]] 293 | name = "clap_derive" 294 | version = "4.5.32" 295 | source = "registry+https://github.com/rust-lang/crates.io-index" 296 | checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" 297 | dependencies = [ 298 | "heck", 299 | "proc-macro2", 300 | "quote", 301 | "syn", 302 | ] 303 | 304 | [[package]] 305 | name = "clap_lex" 306 | version = "0.7.4" 307 | source = "registry+https://github.com/rust-lang/crates.io-index" 308 | checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" 309 | 310 | [[package]] 311 | name = "clru" 312 | version = "0.6.2" 313 | source = "registry+https://github.com/rust-lang/crates.io-index" 314 | checksum = "cbd0f76e066e64fdc5631e3bb46381254deab9ef1158292f27c8c57e3bf3fe59" 315 | 316 | [[package]] 317 | name = "cmake" 318 | version = "0.1.54" 319 | source = "registry+https://github.com/rust-lang/crates.io-index" 320 | checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" 321 | dependencies = [ 322 | "cc", 323 | ] 324 | 325 | [[package]] 326 | name = "colorchoice" 327 | version = "1.0.3" 328 | source = "registry+https://github.com/rust-lang/crates.io-index" 329 | checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" 330 | 331 | [[package]] 332 | name = "console" 333 | version = "0.15.11" 334 | source = "registry+https://github.com/rust-lang/crates.io-index" 335 | checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" 336 | dependencies = [ 337 | "encode_unicode", 338 | "libc", 339 | "once_cell", 340 | "unicode-width", 341 | "windows-sys 0.59.0", 342 | ] 343 | 344 | [[package]] 345 | name = "const_format" 346 | version = "0.2.34" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" 349 | dependencies = [ 350 | "const_format_proc_macros", 351 | ] 352 | 353 | [[package]] 354 | name = "const_format_proc_macros" 355 | version = "0.2.34" 356 | source = "registry+https://github.com/rust-lang/crates.io-index" 357 | checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" 358 | dependencies = [ 359 | "proc-macro2", 360 | "quote", 361 | "unicode-xid", 362 | ] 363 | 364 | [[package]] 365 | name = "constant_time_eq" 366 | version = "0.3.1" 367 | source = "registry+https://github.com/rust-lang/crates.io-index" 368 | checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" 369 | 370 | [[package]] 371 | name = "core-foundation" 372 | version = "0.9.4" 373 | source = "registry+https://github.com/rust-lang/crates.io-index" 374 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 375 | dependencies = [ 376 | "core-foundation-sys", 377 | "libc", 378 | ] 379 | 380 | [[package]] 381 | name = "core-foundation-sys" 382 | version = "0.8.7" 383 | source = "registry+https://github.com/rust-lang/crates.io-index" 384 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 385 | 386 | [[package]] 387 | name = "cpufeatures" 388 | version = "0.2.17" 389 | source = "registry+https://github.com/rust-lang/crates.io-index" 390 | checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 391 | dependencies = [ 392 | "libc", 393 | ] 394 | 395 | [[package]] 396 | name = "crc" 397 | version = "3.2.1" 398 | source = "registry+https://github.com/rust-lang/crates.io-index" 399 | checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" 400 | dependencies = [ 401 | "crc-catalog", 402 | ] 403 | 404 | [[package]] 405 | name = "crc-catalog" 406 | version = "2.4.0" 407 | source = "registry+https://github.com/rust-lang/crates.io-index" 408 | checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" 409 | 410 | [[package]] 411 | name = "crc32fast" 412 | version = "1.4.2" 413 | source = "registry+https://github.com/rust-lang/crates.io-index" 414 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 415 | dependencies = [ 416 | "cfg-if", 417 | ] 418 | 419 | [[package]] 420 | name = "crossbeam-channel" 421 | version = "0.5.14" 422 | source = "registry+https://github.com/rust-lang/crates.io-index" 423 | checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" 424 | dependencies = [ 425 | "crossbeam-utils", 426 | ] 427 | 428 | [[package]] 429 | name = "crossbeam-utils" 430 | version = "0.8.21" 431 | source = "registry+https://github.com/rust-lang/crates.io-index" 432 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 433 | 434 | [[package]] 435 | name = "crypto-common" 436 | version = "0.1.6" 437 | source = "registry+https://github.com/rust-lang/crates.io-index" 438 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 439 | dependencies = [ 440 | "generic-array", 441 | "typenum", 442 | ] 443 | 444 | [[package]] 445 | name = "dashmap" 446 | version = "6.1.0" 447 | source = "registry+https://github.com/rust-lang/crates.io-index" 448 | checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" 449 | dependencies = [ 450 | "cfg-if", 451 | "crossbeam-utils", 452 | "hashbrown 0.14.5", 453 | "lock_api", 454 | "once_cell", 455 | "parking_lot_core", 456 | ] 457 | 458 | [[package]] 459 | name = "deflate64" 460 | version = "0.1.9" 461 | source = "registry+https://github.com/rust-lang/crates.io-index" 462 | checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" 463 | 464 | [[package]] 465 | name = "deranged" 466 | version = "0.4.1" 467 | source = "registry+https://github.com/rust-lang/crates.io-index" 468 | checksum = "28cfac68e08048ae1883171632c2aef3ebc555621ae56fbccce1cbf22dd7f058" 469 | dependencies = [ 470 | "powerfmt", 471 | ] 472 | 473 | [[package]] 474 | name = "derive_arbitrary" 475 | version = "1.4.1" 476 | source = "registry+https://github.com/rust-lang/crates.io-index" 477 | checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" 478 | dependencies = [ 479 | "proc-macro2", 480 | "quote", 481 | "syn", 482 | ] 483 | 484 | [[package]] 485 | name = "digest" 486 | version = "0.10.7" 487 | source = "registry+https://github.com/rust-lang/crates.io-index" 488 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 489 | dependencies = [ 490 | "block-buffer", 491 | "crypto-common", 492 | "subtle", 493 | ] 494 | 495 | [[package]] 496 | name = "displaydoc" 497 | version = "0.2.5" 498 | source = "registry+https://github.com/rust-lang/crates.io-index" 499 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 500 | dependencies = [ 501 | "proc-macro2", 502 | "quote", 503 | "syn", 504 | ] 505 | 506 | [[package]] 507 | name = "dunce" 508 | version = "1.0.5" 509 | source = "registry+https://github.com/rust-lang/crates.io-index" 510 | checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" 511 | 512 | [[package]] 513 | name = "encode_unicode" 514 | version = "1.0.0" 515 | source = "registry+https://github.com/rust-lang/crates.io-index" 516 | checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" 517 | 518 | [[package]] 519 | name = "encoding_rs" 520 | version = "0.8.35" 521 | source = "registry+https://github.com/rust-lang/crates.io-index" 522 | checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 523 | dependencies = [ 524 | "cfg-if", 525 | ] 526 | 527 | [[package]] 528 | name = "equivalent" 529 | version = "1.0.2" 530 | source = "registry+https://github.com/rust-lang/crates.io-index" 531 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 532 | 533 | [[package]] 534 | name = "errno" 535 | version = "0.3.11" 536 | source = "registry+https://github.com/rust-lang/crates.io-index" 537 | checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" 538 | dependencies = [ 539 | "libc", 540 | "windows-sys 0.59.0", 541 | ] 542 | 543 | [[package]] 544 | name = "error-chain" 545 | version = "0.12.4" 546 | source = "registry+https://github.com/rust-lang/crates.io-index" 547 | checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" 548 | dependencies = [ 549 | "backtrace", 550 | "version_check", 551 | ] 552 | 553 | [[package]] 554 | name = "faster-hex" 555 | version = "0.9.0" 556 | source = "registry+https://github.com/rust-lang/crates.io-index" 557 | checksum = "a2a2b11eda1d40935b26cf18f6833c526845ae8c41e58d09af6adeb6f0269183" 558 | dependencies = [ 559 | "serde", 560 | ] 561 | 562 | [[package]] 563 | name = "fastrand" 564 | version = "2.3.0" 565 | source = "registry+https://github.com/rust-lang/crates.io-index" 566 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 567 | 568 | [[package]] 569 | name = "filetime" 570 | version = "0.2.25" 571 | source = "registry+https://github.com/rust-lang/crates.io-index" 572 | checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" 573 | dependencies = [ 574 | "cfg-if", 575 | "libc", 576 | "libredox", 577 | "windows-sys 0.59.0", 578 | ] 579 | 580 | [[package]] 581 | name = "flate2" 582 | version = "1.1.1" 583 | source = "registry+https://github.com/rust-lang/crates.io-index" 584 | checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" 585 | dependencies = [ 586 | "crc32fast", 587 | "libz-ng-sys", 588 | "miniz_oxide", 589 | ] 590 | 591 | [[package]] 592 | name = "fnv" 593 | version = "1.0.7" 594 | source = "registry+https://github.com/rust-lang/crates.io-index" 595 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 596 | 597 | [[package]] 598 | name = "foldhash" 599 | version = "0.1.5" 600 | source = "registry+https://github.com/rust-lang/crates.io-index" 601 | checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 602 | 603 | [[package]] 604 | name = "foreign-types" 605 | version = "0.3.2" 606 | source = "registry+https://github.com/rust-lang/crates.io-index" 607 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 608 | dependencies = [ 609 | "foreign-types-shared", 610 | ] 611 | 612 | [[package]] 613 | name = "foreign-types-shared" 614 | version = "0.1.1" 615 | source = "registry+https://github.com/rust-lang/crates.io-index" 616 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 617 | 618 | [[package]] 619 | name = "form_urlencoded" 620 | version = "1.2.1" 621 | source = "registry+https://github.com/rust-lang/crates.io-index" 622 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 623 | dependencies = [ 624 | "percent-encoding", 625 | ] 626 | 627 | [[package]] 628 | name = "futures" 629 | version = "0.3.31" 630 | source = "registry+https://github.com/rust-lang/crates.io-index" 631 | checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 632 | dependencies = [ 633 | "futures-channel", 634 | "futures-core", 635 | "futures-executor", 636 | "futures-io", 637 | "futures-sink", 638 | "futures-task", 639 | "futures-util", 640 | ] 641 | 642 | [[package]] 643 | name = "futures-channel" 644 | version = "0.3.31" 645 | source = "registry+https://github.com/rust-lang/crates.io-index" 646 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 647 | dependencies = [ 648 | "futures-core", 649 | "futures-sink", 650 | ] 651 | 652 | [[package]] 653 | name = "futures-core" 654 | version = "0.3.31" 655 | source = "registry+https://github.com/rust-lang/crates.io-index" 656 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 657 | 658 | [[package]] 659 | name = "futures-executor" 660 | version = "0.3.31" 661 | source = "registry+https://github.com/rust-lang/crates.io-index" 662 | checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 663 | dependencies = [ 664 | "futures-core", 665 | "futures-task", 666 | "futures-util", 667 | ] 668 | 669 | [[package]] 670 | name = "futures-io" 671 | version = "0.3.31" 672 | source = "registry+https://github.com/rust-lang/crates.io-index" 673 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 674 | 675 | [[package]] 676 | name = "futures-macro" 677 | version = "0.3.31" 678 | source = "registry+https://github.com/rust-lang/crates.io-index" 679 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 680 | dependencies = [ 681 | "proc-macro2", 682 | "quote", 683 | "syn", 684 | ] 685 | 686 | [[package]] 687 | name = "futures-sink" 688 | version = "0.3.31" 689 | source = "registry+https://github.com/rust-lang/crates.io-index" 690 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 691 | 692 | [[package]] 693 | name = "futures-task" 694 | version = "0.3.31" 695 | source = "registry+https://github.com/rust-lang/crates.io-index" 696 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 697 | 698 | [[package]] 699 | name = "futures-util" 700 | version = "0.3.31" 701 | source = "registry+https://github.com/rust-lang/crates.io-index" 702 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 703 | dependencies = [ 704 | "futures-channel", 705 | "futures-core", 706 | "futures-io", 707 | "futures-macro", 708 | "futures-sink", 709 | "futures-task", 710 | "memchr", 711 | "pin-project-lite", 712 | "pin-utils", 713 | "slab", 714 | ] 715 | 716 | [[package]] 717 | name = "generic-array" 718 | version = "0.14.7" 719 | source = "registry+https://github.com/rust-lang/crates.io-index" 720 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 721 | dependencies = [ 722 | "typenum", 723 | "version_check", 724 | ] 725 | 726 | [[package]] 727 | name = "getrandom" 728 | version = "0.2.15" 729 | source = "registry+https://github.com/rust-lang/crates.io-index" 730 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 731 | dependencies = [ 732 | "cfg-if", 733 | "js-sys", 734 | "libc", 735 | "wasi 0.11.0+wasi-snapshot-preview1", 736 | "wasm-bindgen", 737 | ] 738 | 739 | [[package]] 740 | name = "getrandom" 741 | version = "0.3.2" 742 | source = "registry+https://github.com/rust-lang/crates.io-index" 743 | checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" 744 | dependencies = [ 745 | "cfg-if", 746 | "js-sys", 747 | "libc", 748 | "r-efi", 749 | "wasi 0.14.2+wasi-0.2.4", 750 | "wasm-bindgen", 751 | ] 752 | 753 | [[package]] 754 | name = "gimli" 755 | version = "0.31.1" 756 | source = "registry+https://github.com/rust-lang/crates.io-index" 757 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 758 | 759 | [[package]] 760 | name = "git2" 761 | version = "0.20.1" 762 | source = "registry+https://github.com/rust-lang/crates.io-index" 763 | checksum = "5220b8ba44c68a9a7f7a7659e864dd73692e417ef0211bea133c7b74e031eeb9" 764 | dependencies = [ 765 | "bitflags", 766 | "libc", 767 | "libgit2-sys", 768 | "log", 769 | "url", 770 | ] 771 | 772 | [[package]] 773 | name = "gix" 774 | version = "0.71.0" 775 | source = "registry+https://github.com/rust-lang/crates.io-index" 776 | checksum = "a61e71ec6817fc3c9f12f812682cfe51ee6ea0d2e27e02fc3849c35524617435" 777 | dependencies = [ 778 | "gix-actor", 779 | "gix-attributes", 780 | "gix-command", 781 | "gix-commitgraph", 782 | "gix-config", 783 | "gix-credentials", 784 | "gix-date", 785 | "gix-diff", 786 | "gix-dir", 787 | "gix-discover", 788 | "gix-features", 789 | "gix-filter", 790 | "gix-fs", 791 | "gix-glob", 792 | "gix-hash", 793 | "gix-hashtable", 794 | "gix-ignore", 795 | "gix-index", 796 | "gix-lock", 797 | "gix-mailmap", 798 | "gix-negotiate", 799 | "gix-object", 800 | "gix-odb", 801 | "gix-pack", 802 | "gix-path", 803 | "gix-pathspec", 804 | "gix-prompt", 805 | "gix-protocol", 806 | "gix-ref", 807 | "gix-refspec", 808 | "gix-revision", 809 | "gix-revwalk", 810 | "gix-sec", 811 | "gix-shallow", 812 | "gix-status", 813 | "gix-submodule", 814 | "gix-tempfile", 815 | "gix-trace", 816 | "gix-transport", 817 | "gix-traverse", 818 | "gix-url", 819 | "gix-utils", 820 | "gix-validate", 821 | "gix-worktree", 822 | "gix-worktree-state", 823 | "once_cell", 824 | "serde", 825 | "smallvec", 826 | "thiserror", 827 | ] 828 | 829 | [[package]] 830 | name = "gix-actor" 831 | version = "0.34.0" 832 | source = "registry+https://github.com/rust-lang/crates.io-index" 833 | checksum = "f438c87d4028aca4b82f82ba8d8ab1569823cfb3e5bc5fa8456a71678b2a20e7" 834 | dependencies = [ 835 | "bstr", 836 | "gix-date", 837 | "gix-utils", 838 | "itoa", 839 | "serde", 840 | "thiserror", 841 | "winnow", 842 | ] 843 | 844 | [[package]] 845 | name = "gix-attributes" 846 | version = "0.25.0" 847 | source = "registry+https://github.com/rust-lang/crates.io-index" 848 | checksum = "e4e25825e0430aa11096f8b65ced6780d4a96a133f81904edceebb5344c8dd7f" 849 | dependencies = [ 850 | "bstr", 851 | "gix-glob", 852 | "gix-path", 853 | "gix-quote", 854 | "gix-trace", 855 | "kstring", 856 | "serde", 857 | "smallvec", 858 | "thiserror", 859 | "unicode-bom", 860 | ] 861 | 862 | [[package]] 863 | name = "gix-bitmap" 864 | version = "0.2.14" 865 | source = "registry+https://github.com/rust-lang/crates.io-index" 866 | checksum = "b1db9765c69502650da68f0804e3dc2b5f8ccc6a2d104ca6c85bc40700d37540" 867 | dependencies = [ 868 | "thiserror", 869 | ] 870 | 871 | [[package]] 872 | name = "gix-chunk" 873 | version = "0.4.11" 874 | source = "registry+https://github.com/rust-lang/crates.io-index" 875 | checksum = "0b1f1d8764958699dc764e3f727cef280ff4d1bd92c107bbf8acd85b30c1bd6f" 876 | dependencies = [ 877 | "thiserror", 878 | ] 879 | 880 | [[package]] 881 | name = "gix-command" 882 | version = "0.5.0" 883 | source = "registry+https://github.com/rust-lang/crates.io-index" 884 | checksum = "c0378995847773a697f8e157fe2963ecf3462fe64be05b7b3da000b3b472def8" 885 | dependencies = [ 886 | "bstr", 887 | "gix-path", 888 | "gix-quote", 889 | "gix-trace", 890 | "shell-words", 891 | ] 892 | 893 | [[package]] 894 | name = "gix-commitgraph" 895 | version = "0.27.0" 896 | source = "registry+https://github.com/rust-lang/crates.io-index" 897 | checksum = "043cbe49b7a7505150db975f3cb7c15833335ac1e26781f615454d9d640a28fe" 898 | dependencies = [ 899 | "bstr", 900 | "gix-chunk", 901 | "gix-hash", 902 | "memmap2", 903 | "serde", 904 | "thiserror", 905 | ] 906 | 907 | [[package]] 908 | name = "gix-config" 909 | version = "0.44.0" 910 | source = "registry+https://github.com/rust-lang/crates.io-index" 911 | checksum = "9c6f830bf746604940261b49abf7f655d2c19cadc9f4142ae9379e3a316e8cfa" 912 | dependencies = [ 913 | "bstr", 914 | "gix-config-value", 915 | "gix-features", 916 | "gix-glob", 917 | "gix-path", 918 | "gix-ref", 919 | "gix-sec", 920 | "memchr", 921 | "once_cell", 922 | "smallvec", 923 | "thiserror", 924 | "unicode-bom", 925 | "winnow", 926 | ] 927 | 928 | [[package]] 929 | name = "gix-config-value" 930 | version = "0.14.12" 931 | source = "registry+https://github.com/rust-lang/crates.io-index" 932 | checksum = "8dc2c844c4cf141884678cabef736fd91dd73068b9146e6f004ba1a0457944b6" 933 | dependencies = [ 934 | "bitflags", 935 | "bstr", 936 | "gix-path", 937 | "libc", 938 | "thiserror", 939 | ] 940 | 941 | [[package]] 942 | name = "gix-credentials" 943 | version = "0.28.0" 944 | source = "registry+https://github.com/rust-lang/crates.io-index" 945 | checksum = "25322308aaf65789536b860d21137c3f7b69004ac4971c15c1abb08d3951c062" 946 | dependencies = [ 947 | "bstr", 948 | "gix-command", 949 | "gix-config-value", 950 | "gix-path", 951 | "gix-prompt", 952 | "gix-sec", 953 | "gix-trace", 954 | "gix-url", 955 | "serde", 956 | "thiserror", 957 | ] 958 | 959 | [[package]] 960 | name = "gix-date" 961 | version = "0.9.4" 962 | source = "registry+https://github.com/rust-lang/crates.io-index" 963 | checksum = "daa30058ec7d3511fbc229e4f9e696a35abd07ec5b82e635eff864a2726217e4" 964 | dependencies = [ 965 | "bstr", 966 | "itoa", 967 | "jiff", 968 | "serde", 969 | "thiserror", 970 | ] 971 | 972 | [[package]] 973 | name = "gix-diff" 974 | version = "0.51.0" 975 | source = "registry+https://github.com/rust-lang/crates.io-index" 976 | checksum = "a2c975dad2afc85e4e233f444d1efbe436c3cdcf3a07173984509c436d00a3f8" 977 | dependencies = [ 978 | "bstr", 979 | "gix-attributes", 980 | "gix-command", 981 | "gix-filter", 982 | "gix-fs", 983 | "gix-hash", 984 | "gix-index", 985 | "gix-object", 986 | "gix-path", 987 | "gix-pathspec", 988 | "gix-tempfile", 989 | "gix-trace", 990 | "gix-traverse", 991 | "gix-worktree", 992 | "imara-diff", 993 | "thiserror", 994 | ] 995 | 996 | [[package]] 997 | name = "gix-dir" 998 | version = "0.13.0" 999 | source = "registry+https://github.com/rust-lang/crates.io-index" 1000 | checksum = "5879497bd3815d8277ed864ec8975290a70de5b62bb92d2d666a4cefc5d4793b" 1001 | dependencies = [ 1002 | "bstr", 1003 | "gix-discover", 1004 | "gix-fs", 1005 | "gix-ignore", 1006 | "gix-index", 1007 | "gix-object", 1008 | "gix-path", 1009 | "gix-pathspec", 1010 | "gix-trace", 1011 | "gix-utils", 1012 | "gix-worktree", 1013 | "thiserror", 1014 | ] 1015 | 1016 | [[package]] 1017 | name = "gix-discover" 1018 | version = "0.39.0" 1019 | source = "registry+https://github.com/rust-lang/crates.io-index" 1020 | checksum = "f7fb8a4349b854506a3915de18d3341e5f1daa6b489c8affc9ca0d69efe86781" 1021 | dependencies = [ 1022 | "bstr", 1023 | "dunce", 1024 | "gix-fs", 1025 | "gix-hash", 1026 | "gix-path", 1027 | "gix-ref", 1028 | "gix-sec", 1029 | "thiserror", 1030 | ] 1031 | 1032 | [[package]] 1033 | name = "gix-features" 1034 | version = "0.41.0" 1035 | source = "registry+https://github.com/rust-lang/crates.io-index" 1036 | checksum = "729b7e708352a35b2b37ab39cbc7a2b9d22f8386808a10b6ea7dd4cd1cf817cd" 1037 | dependencies = [ 1038 | "bytes", 1039 | "crc32fast", 1040 | "crossbeam-channel", 1041 | "flate2", 1042 | "gix-trace", 1043 | "gix-utils", 1044 | "libc", 1045 | "once_cell", 1046 | "parking_lot", 1047 | "prodash", 1048 | "thiserror", 1049 | "walkdir", 1050 | ] 1051 | 1052 | [[package]] 1053 | name = "gix-filter" 1054 | version = "0.18.0" 1055 | source = "registry+https://github.com/rust-lang/crates.io-index" 1056 | checksum = "cb2b2bbffdc5cc9b2b82fc82da1b98163c9b423ac2b45348baa83a947ac9ab89" 1057 | dependencies = [ 1058 | "bstr", 1059 | "encoding_rs", 1060 | "gix-attributes", 1061 | "gix-command", 1062 | "gix-hash", 1063 | "gix-object", 1064 | "gix-packetline-blocking", 1065 | "gix-path", 1066 | "gix-quote", 1067 | "gix-trace", 1068 | "gix-utils", 1069 | "smallvec", 1070 | "thiserror", 1071 | ] 1072 | 1073 | [[package]] 1074 | name = "gix-fs" 1075 | version = "0.14.0" 1076 | source = "registry+https://github.com/rust-lang/crates.io-index" 1077 | checksum = "951e886120dc5fa8cac053e5e5c89443f12368ca36811b2e43d1539081f9c111" 1078 | dependencies = [ 1079 | "bstr", 1080 | "fastrand", 1081 | "gix-features", 1082 | "gix-path", 1083 | "gix-utils", 1084 | "thiserror", 1085 | ] 1086 | 1087 | [[package]] 1088 | name = "gix-glob" 1089 | version = "0.19.0" 1090 | source = "registry+https://github.com/rust-lang/crates.io-index" 1091 | checksum = "20972499c03473e773a2099e5fd0c695b9b72465837797a51a43391a1635a030" 1092 | dependencies = [ 1093 | "bitflags", 1094 | "bstr", 1095 | "gix-features", 1096 | "gix-path", 1097 | "serde", 1098 | ] 1099 | 1100 | [[package]] 1101 | name = "gix-hash" 1102 | version = "0.17.0" 1103 | source = "registry+https://github.com/rust-lang/crates.io-index" 1104 | checksum = "834e79722063958b03342edaa1e17595cd2939bb2b3306b3225d0815566dcb49" 1105 | dependencies = [ 1106 | "faster-hex", 1107 | "gix-features", 1108 | "serde", 1109 | "sha1-checked", 1110 | "thiserror", 1111 | ] 1112 | 1113 | [[package]] 1114 | name = "gix-hashtable" 1115 | version = "0.8.0" 1116 | source = "registry+https://github.com/rust-lang/crates.io-index" 1117 | checksum = "f06066d8702a9186dc1fdc1ed751ff2d7e924ceca21cb5d51b8f990c9c2e014a" 1118 | dependencies = [ 1119 | "gix-hash", 1120 | "hashbrown 0.14.5", 1121 | "parking_lot", 1122 | ] 1123 | 1124 | [[package]] 1125 | name = "gix-ignore" 1126 | version = "0.14.0" 1127 | source = "registry+https://github.com/rust-lang/crates.io-index" 1128 | checksum = "9a27c8380f493a10d1457f756a3f81924d578fc08d6535e304dfcafbf0261d18" 1129 | dependencies = [ 1130 | "bstr", 1131 | "gix-glob", 1132 | "gix-path", 1133 | "gix-trace", 1134 | "serde", 1135 | "unicode-bom", 1136 | ] 1137 | 1138 | [[package]] 1139 | name = "gix-index" 1140 | version = "0.39.0" 1141 | source = "registry+https://github.com/rust-lang/crates.io-index" 1142 | checksum = "855bece2d4153453aa5d0a80d51deea1ce8cd6a3b4cf213da85ac344ccb908a7" 1143 | dependencies = [ 1144 | "bitflags", 1145 | "bstr", 1146 | "filetime", 1147 | "fnv", 1148 | "gix-bitmap", 1149 | "gix-features", 1150 | "gix-fs", 1151 | "gix-hash", 1152 | "gix-lock", 1153 | "gix-object", 1154 | "gix-traverse", 1155 | "gix-utils", 1156 | "gix-validate", 1157 | "hashbrown 0.14.5", 1158 | "itoa", 1159 | "libc", 1160 | "memmap2", 1161 | "rustix 0.38.44", 1162 | "serde", 1163 | "smallvec", 1164 | "thiserror", 1165 | ] 1166 | 1167 | [[package]] 1168 | name = "gix-lock" 1169 | version = "17.0.0" 1170 | source = "registry+https://github.com/rust-lang/crates.io-index" 1171 | checksum = "df47b8f11c34520db5541bc5fc9fbc8e4b0bdfcec3736af89ccb1a5728a0126f" 1172 | dependencies = [ 1173 | "gix-tempfile", 1174 | "gix-utils", 1175 | "thiserror", 1176 | ] 1177 | 1178 | [[package]] 1179 | name = "gix-mailmap" 1180 | version = "0.26.0" 1181 | source = "registry+https://github.com/rust-lang/crates.io-index" 1182 | checksum = "ff80d086d2684d30c5785cc37eba9d2cf817cfb33797ed999db9a359d16ab393" 1183 | dependencies = [ 1184 | "bstr", 1185 | "gix-actor", 1186 | "gix-date", 1187 | "serde", 1188 | "thiserror", 1189 | ] 1190 | 1191 | [[package]] 1192 | name = "gix-negotiate" 1193 | version = "0.19.0" 1194 | source = "registry+https://github.com/rust-lang/crates.io-index" 1195 | checksum = "dad912acf5a68a7defa4836014337ff4381af8c3c098f41f818a8c524285e57b" 1196 | dependencies = [ 1197 | "bitflags", 1198 | "gix-commitgraph", 1199 | "gix-date", 1200 | "gix-hash", 1201 | "gix-object", 1202 | "gix-revwalk", 1203 | "smallvec", 1204 | "thiserror", 1205 | ] 1206 | 1207 | [[package]] 1208 | name = "gix-object" 1209 | version = "0.48.0" 1210 | source = "registry+https://github.com/rust-lang/crates.io-index" 1211 | checksum = "4943fcdae6ffc135920c9ea71e0362ed539182924ab7a85dd9dac8d89b0dd69a" 1212 | dependencies = [ 1213 | "bstr", 1214 | "gix-actor", 1215 | "gix-date", 1216 | "gix-features", 1217 | "gix-hash", 1218 | "gix-hashtable", 1219 | "gix-path", 1220 | "gix-utils", 1221 | "gix-validate", 1222 | "itoa", 1223 | "serde", 1224 | "smallvec", 1225 | "thiserror", 1226 | "winnow", 1227 | ] 1228 | 1229 | [[package]] 1230 | name = "gix-odb" 1231 | version = "0.68.0" 1232 | source = "registry+https://github.com/rust-lang/crates.io-index" 1233 | checksum = "50306d40dcc982eb6b7593103f066ea6289c7b094cb9db14f3cd2be0b9f5e610" 1234 | dependencies = [ 1235 | "arc-swap", 1236 | "gix-date", 1237 | "gix-features", 1238 | "gix-fs", 1239 | "gix-hash", 1240 | "gix-hashtable", 1241 | "gix-object", 1242 | "gix-pack", 1243 | "gix-path", 1244 | "gix-quote", 1245 | "parking_lot", 1246 | "serde", 1247 | "tempfile", 1248 | "thiserror", 1249 | ] 1250 | 1251 | [[package]] 1252 | name = "gix-pack" 1253 | version = "0.58.0" 1254 | source = "registry+https://github.com/rust-lang/crates.io-index" 1255 | checksum = "9b65fffb09393c26624ca408d32cfe8776fb94cd0a5cdf984905e1d2f39779cb" 1256 | dependencies = [ 1257 | "clru", 1258 | "gix-chunk", 1259 | "gix-features", 1260 | "gix-hash", 1261 | "gix-hashtable", 1262 | "gix-object", 1263 | "gix-path", 1264 | "gix-tempfile", 1265 | "memmap2", 1266 | "parking_lot", 1267 | "serde", 1268 | "smallvec", 1269 | "thiserror", 1270 | "uluru", 1271 | ] 1272 | 1273 | [[package]] 1274 | name = "gix-packetline" 1275 | version = "0.18.4" 1276 | source = "registry+https://github.com/rust-lang/crates.io-index" 1277 | checksum = "123844a70cf4d5352441dc06bab0da8aef61be94ec239cb631e0ba01dc6d3a04" 1278 | dependencies = [ 1279 | "bstr", 1280 | "faster-hex", 1281 | "gix-trace", 1282 | "thiserror", 1283 | ] 1284 | 1285 | [[package]] 1286 | name = "gix-packetline-blocking" 1287 | version = "0.18.3" 1288 | source = "registry+https://github.com/rust-lang/crates.io-index" 1289 | checksum = "1ecf3ea2e105c7e45587bac04099824301262a6c43357fad5205da36dbb233b3" 1290 | dependencies = [ 1291 | "bstr", 1292 | "faster-hex", 1293 | "gix-trace", 1294 | "thiserror", 1295 | ] 1296 | 1297 | [[package]] 1298 | name = "gix-path" 1299 | version = "0.10.15" 1300 | source = "registry+https://github.com/rust-lang/crates.io-index" 1301 | checksum = "f910668e2f6b2a55ff35a1f04df88a1a049f7b868507f4cbeeaa220eaba7be87" 1302 | dependencies = [ 1303 | "bstr", 1304 | "gix-trace", 1305 | "home", 1306 | "once_cell", 1307 | "thiserror", 1308 | ] 1309 | 1310 | [[package]] 1311 | name = "gix-pathspec" 1312 | version = "0.10.0" 1313 | source = "registry+https://github.com/rust-lang/crates.io-index" 1314 | checksum = "fef8422c3c9066d649074b24025125963f85232bfad32d6d16aea9453b82ec14" 1315 | dependencies = [ 1316 | "bitflags", 1317 | "bstr", 1318 | "gix-attributes", 1319 | "gix-config-value", 1320 | "gix-glob", 1321 | "gix-path", 1322 | "thiserror", 1323 | ] 1324 | 1325 | [[package]] 1326 | name = "gix-prompt" 1327 | version = "0.10.0" 1328 | source = "registry+https://github.com/rust-lang/crates.io-index" 1329 | checksum = "fbf9cbf6239fd32f2c2c9c57eeb4e9b28fa1c9b779fa0e3b7c455eb1ca49d5f0" 1330 | dependencies = [ 1331 | "gix-command", 1332 | "gix-config-value", 1333 | "parking_lot", 1334 | "rustix 0.38.44", 1335 | "thiserror", 1336 | ] 1337 | 1338 | [[package]] 1339 | name = "gix-protocol" 1340 | version = "0.49.0" 1341 | source = "registry+https://github.com/rust-lang/crates.io-index" 1342 | checksum = "5678ddae1d62880bc30e2200be1b9387af3372e0e88e21f81b4e7f8367355b5a" 1343 | dependencies = [ 1344 | "bstr", 1345 | "gix-credentials", 1346 | "gix-date", 1347 | "gix-features", 1348 | "gix-hash", 1349 | "gix-lock", 1350 | "gix-negotiate", 1351 | "gix-object", 1352 | "gix-ref", 1353 | "gix-refspec", 1354 | "gix-revwalk", 1355 | "gix-shallow", 1356 | "gix-trace", 1357 | "gix-transport", 1358 | "gix-utils", 1359 | "maybe-async", 1360 | "serde", 1361 | "thiserror", 1362 | "winnow", 1363 | ] 1364 | 1365 | [[package]] 1366 | name = "gix-quote" 1367 | version = "0.5.0" 1368 | source = "registry+https://github.com/rust-lang/crates.io-index" 1369 | checksum = "1b005c550bf84de3b24aa5e540a23e6146a1c01c7d30470e35d75a12f827f969" 1370 | dependencies = [ 1371 | "bstr", 1372 | "gix-utils", 1373 | "thiserror", 1374 | ] 1375 | 1376 | [[package]] 1377 | name = "gix-ref" 1378 | version = "0.51.0" 1379 | source = "registry+https://github.com/rust-lang/crates.io-index" 1380 | checksum = "b2e1f7eb6b7ce82d2d19961f74bd637bab3ea79b1bc7bfb23dbefc67b0415d8b" 1381 | dependencies = [ 1382 | "gix-actor", 1383 | "gix-features", 1384 | "gix-fs", 1385 | "gix-hash", 1386 | "gix-lock", 1387 | "gix-object", 1388 | "gix-path", 1389 | "gix-tempfile", 1390 | "gix-utils", 1391 | "gix-validate", 1392 | "memmap2", 1393 | "serde", 1394 | "thiserror", 1395 | "winnow", 1396 | ] 1397 | 1398 | [[package]] 1399 | name = "gix-refspec" 1400 | version = "0.29.0" 1401 | source = "registry+https://github.com/rust-lang/crates.io-index" 1402 | checksum = "1d8587b21e2264a6e8938d940c5c99662779c13a10741a5737b15fc85c252ffc" 1403 | dependencies = [ 1404 | "bstr", 1405 | "gix-hash", 1406 | "gix-revision", 1407 | "gix-validate", 1408 | "smallvec", 1409 | "thiserror", 1410 | ] 1411 | 1412 | [[package]] 1413 | name = "gix-revision" 1414 | version = "0.33.0" 1415 | source = "registry+https://github.com/rust-lang/crates.io-index" 1416 | checksum = "342caa4e158df3020cadf62f656307c3948fe4eacfdf67171d7212811860c3e9" 1417 | dependencies = [ 1418 | "bitflags", 1419 | "bstr", 1420 | "gix-commitgraph", 1421 | "gix-date", 1422 | "gix-hash", 1423 | "gix-hashtable", 1424 | "gix-object", 1425 | "gix-revwalk", 1426 | "gix-trace", 1427 | "serde", 1428 | "thiserror", 1429 | ] 1430 | 1431 | [[package]] 1432 | name = "gix-revwalk" 1433 | version = "0.19.0" 1434 | source = "registry+https://github.com/rust-lang/crates.io-index" 1435 | checksum = "2dc7c3d7e5cdc1ab8d35130106e4af0a4f9f9eca0c81f4312b690780e92bde0d" 1436 | dependencies = [ 1437 | "gix-commitgraph", 1438 | "gix-date", 1439 | "gix-hash", 1440 | "gix-hashtable", 1441 | "gix-object", 1442 | "smallvec", 1443 | "thiserror", 1444 | ] 1445 | 1446 | [[package]] 1447 | name = "gix-sec" 1448 | version = "0.10.12" 1449 | source = "registry+https://github.com/rust-lang/crates.io-index" 1450 | checksum = "47aeb0f13de9ef2f3033f5ff218de30f44db827ac9f1286f9ef050aacddd5888" 1451 | dependencies = [ 1452 | "bitflags", 1453 | "gix-path", 1454 | "libc", 1455 | "serde", 1456 | "windows-sys 0.52.0", 1457 | ] 1458 | 1459 | [[package]] 1460 | name = "gix-shallow" 1461 | version = "0.3.0" 1462 | source = "registry+https://github.com/rust-lang/crates.io-index" 1463 | checksum = "cc0598aacfe1d52575a21c9492fee086edbb21e228ec36c819c42ab923f434c3" 1464 | dependencies = [ 1465 | "bstr", 1466 | "gix-hash", 1467 | "gix-lock", 1468 | "serde", 1469 | "thiserror", 1470 | ] 1471 | 1472 | [[package]] 1473 | name = "gix-status" 1474 | version = "0.18.0" 1475 | source = "registry+https://github.com/rust-lang/crates.io-index" 1476 | checksum = "605a6d0eb5891680c46e24b2ee7a63ef7bd39cb136dc7c7e55172960cf68b2f5" 1477 | dependencies = [ 1478 | "bstr", 1479 | "filetime", 1480 | "gix-diff", 1481 | "gix-dir", 1482 | "gix-features", 1483 | "gix-filter", 1484 | "gix-fs", 1485 | "gix-hash", 1486 | "gix-index", 1487 | "gix-object", 1488 | "gix-path", 1489 | "gix-pathspec", 1490 | "gix-worktree", 1491 | "portable-atomic", 1492 | "thiserror", 1493 | ] 1494 | 1495 | [[package]] 1496 | name = "gix-submodule" 1497 | version = "0.18.0" 1498 | source = "registry+https://github.com/rust-lang/crates.io-index" 1499 | checksum = "78c7390c2059505c365e9548016d4edc9f35749c6a9112b7b1214400bbc68da2" 1500 | dependencies = [ 1501 | "bstr", 1502 | "gix-config", 1503 | "gix-path", 1504 | "gix-pathspec", 1505 | "gix-refspec", 1506 | "gix-url", 1507 | "thiserror", 1508 | ] 1509 | 1510 | [[package]] 1511 | name = "gix-tempfile" 1512 | version = "17.0.0" 1513 | source = "registry+https://github.com/rust-lang/crates.io-index" 1514 | checksum = "3d6de439bbb9a5d3550c9c7fab0e16d2d637d120fcbe0dfbc538772a187f099b" 1515 | dependencies = [ 1516 | "dashmap", 1517 | "gix-fs", 1518 | "libc", 1519 | "once_cell", 1520 | "parking_lot", 1521 | "tempfile", 1522 | ] 1523 | 1524 | [[package]] 1525 | name = "gix-trace" 1526 | version = "0.1.12" 1527 | source = "registry+https://github.com/rust-lang/crates.io-index" 1528 | checksum = "7c396a2036920c69695f760a65e7f2677267ccf483f25046977d87e4cb2665f7" 1529 | dependencies = [ 1530 | "tracing-core", 1531 | ] 1532 | 1533 | [[package]] 1534 | name = "gix-transport" 1535 | version = "0.46.0" 1536 | source = "registry+https://github.com/rust-lang/crates.io-index" 1537 | checksum = "b3f68c2870bfca8278389d2484a7f2215b67d0b0cc5277d3c72ad72acf41787e" 1538 | dependencies = [ 1539 | "base64", 1540 | "bstr", 1541 | "gix-command", 1542 | "gix-credentials", 1543 | "gix-features", 1544 | "gix-packetline", 1545 | "gix-quote", 1546 | "gix-sec", 1547 | "gix-url", 1548 | "reqwest", 1549 | "serde", 1550 | "thiserror", 1551 | ] 1552 | 1553 | [[package]] 1554 | name = "gix-traverse" 1555 | version = "0.45.0" 1556 | source = "registry+https://github.com/rust-lang/crates.io-index" 1557 | checksum = "36c0b049f8bdb61b20016694102f7b507f2e1727e83e9c5e6dad4f7d84ff7384" 1558 | dependencies = [ 1559 | "bitflags", 1560 | "gix-commitgraph", 1561 | "gix-date", 1562 | "gix-hash", 1563 | "gix-hashtable", 1564 | "gix-object", 1565 | "gix-revwalk", 1566 | "smallvec", 1567 | "thiserror", 1568 | ] 1569 | 1570 | [[package]] 1571 | name = "gix-url" 1572 | version = "0.30.0" 1573 | source = "registry+https://github.com/rust-lang/crates.io-index" 1574 | checksum = "48dfe23f93f1ddb84977d80bb0dd7aa09d1bf5d5afc0c9b6820cccacc25ae860" 1575 | dependencies = [ 1576 | "bstr", 1577 | "gix-features", 1578 | "gix-path", 1579 | "percent-encoding", 1580 | "serde", 1581 | "thiserror", 1582 | "url", 1583 | ] 1584 | 1585 | [[package]] 1586 | name = "gix-utils" 1587 | version = "0.2.0" 1588 | source = "registry+https://github.com/rust-lang/crates.io-index" 1589 | checksum = "189f8724cf903e7fd57cfe0b7bc209db255cacdcb22c781a022f52c3a774f8d0" 1590 | dependencies = [ 1591 | "bstr", 1592 | "fastrand", 1593 | "unicode-normalization", 1594 | ] 1595 | 1596 | [[package]] 1597 | name = "gix-validate" 1598 | version = "0.9.4" 1599 | source = "registry+https://github.com/rust-lang/crates.io-index" 1600 | checksum = "34b5f1253109da6c79ed7cf6e1e38437080bb6d704c76af14c93e2f255234084" 1601 | dependencies = [ 1602 | "bstr", 1603 | "thiserror", 1604 | ] 1605 | 1606 | [[package]] 1607 | name = "gix-worktree" 1608 | version = "0.40.0" 1609 | source = "registry+https://github.com/rust-lang/crates.io-index" 1610 | checksum = "f7760dbc4b79aa274fed30adc0d41dca6b917641f26e7867c4071b1fb4dc727b" 1611 | dependencies = [ 1612 | "bstr", 1613 | "gix-attributes", 1614 | "gix-features", 1615 | "gix-fs", 1616 | "gix-glob", 1617 | "gix-hash", 1618 | "gix-ignore", 1619 | "gix-index", 1620 | "gix-object", 1621 | "gix-path", 1622 | "gix-validate", 1623 | "serde", 1624 | ] 1625 | 1626 | [[package]] 1627 | name = "gix-worktree-state" 1628 | version = "0.18.0" 1629 | source = "registry+https://github.com/rust-lang/crates.io-index" 1630 | checksum = "490eb4d38ec2735b3466840aa3881b44ec1a4c180d6a658abfab03910380e18b" 1631 | dependencies = [ 1632 | "bstr", 1633 | "gix-features", 1634 | "gix-filter", 1635 | "gix-fs", 1636 | "gix-glob", 1637 | "gix-hash", 1638 | "gix-index", 1639 | "gix-object", 1640 | "gix-path", 1641 | "gix-worktree", 1642 | "io-close", 1643 | "thiserror", 1644 | ] 1645 | 1646 | [[package]] 1647 | name = "h2" 1648 | version = "0.4.8" 1649 | source = "registry+https://github.com/rust-lang/crates.io-index" 1650 | checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" 1651 | dependencies = [ 1652 | "atomic-waker", 1653 | "bytes", 1654 | "fnv", 1655 | "futures-core", 1656 | "futures-sink", 1657 | "http", 1658 | "indexmap", 1659 | "slab", 1660 | "tokio", 1661 | "tokio-util", 1662 | "tracing", 1663 | ] 1664 | 1665 | [[package]] 1666 | name = "hashbrown" 1667 | version = "0.14.5" 1668 | source = "registry+https://github.com/rust-lang/crates.io-index" 1669 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 1670 | dependencies = [ 1671 | "ahash", 1672 | "allocator-api2", 1673 | ] 1674 | 1675 | [[package]] 1676 | name = "hashbrown" 1677 | version = "0.15.2" 1678 | source = "registry+https://github.com/rust-lang/crates.io-index" 1679 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 1680 | dependencies = [ 1681 | "foldhash", 1682 | ] 1683 | 1684 | [[package]] 1685 | name = "heck" 1686 | version = "0.5.0" 1687 | source = "registry+https://github.com/rust-lang/crates.io-index" 1688 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1689 | 1690 | [[package]] 1691 | name = "hmac" 1692 | version = "0.12.1" 1693 | source = "registry+https://github.com/rust-lang/crates.io-index" 1694 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 1695 | dependencies = [ 1696 | "digest", 1697 | ] 1698 | 1699 | [[package]] 1700 | name = "hmm-rs" 1701 | version = "0.0.2" 1702 | dependencies = [ 1703 | "anyhow", 1704 | "bstr", 1705 | "clap", 1706 | "console", 1707 | "error-chain", 1708 | "futures", 1709 | "futures-util", 1710 | "gix", 1711 | "human_bytes", 1712 | "indicatif", 1713 | "reqwest", 1714 | "semver", 1715 | "serde", 1716 | "serde_json", 1717 | "shadow-rs", 1718 | "tempfile", 1719 | "thiserror", 1720 | "tokio", 1721 | "urlencoding", 1722 | "yansi", 1723 | "zip", 1724 | ] 1725 | 1726 | [[package]] 1727 | name = "home" 1728 | version = "0.5.11" 1729 | source = "registry+https://github.com/rust-lang/crates.io-index" 1730 | checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" 1731 | dependencies = [ 1732 | "windows-sys 0.59.0", 1733 | ] 1734 | 1735 | [[package]] 1736 | name = "http" 1737 | version = "1.3.1" 1738 | source = "registry+https://github.com/rust-lang/crates.io-index" 1739 | checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" 1740 | dependencies = [ 1741 | "bytes", 1742 | "fnv", 1743 | "itoa", 1744 | ] 1745 | 1746 | [[package]] 1747 | name = "http-body" 1748 | version = "1.0.1" 1749 | source = "registry+https://github.com/rust-lang/crates.io-index" 1750 | checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 1751 | dependencies = [ 1752 | "bytes", 1753 | "http", 1754 | ] 1755 | 1756 | [[package]] 1757 | name = "http-body-util" 1758 | version = "0.1.3" 1759 | source = "registry+https://github.com/rust-lang/crates.io-index" 1760 | checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" 1761 | dependencies = [ 1762 | "bytes", 1763 | "futures-core", 1764 | "http", 1765 | "http-body", 1766 | "pin-project-lite", 1767 | ] 1768 | 1769 | [[package]] 1770 | name = "httparse" 1771 | version = "1.10.1" 1772 | source = "registry+https://github.com/rust-lang/crates.io-index" 1773 | checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 1774 | 1775 | [[package]] 1776 | name = "human_bytes" 1777 | version = "0.4.3" 1778 | source = "registry+https://github.com/rust-lang/crates.io-index" 1779 | checksum = "91f255a4535024abf7640cb288260811fc14794f62b063652ed349f9a6c2348e" 1780 | 1781 | [[package]] 1782 | name = "hyper" 1783 | version = "1.6.0" 1784 | source = "registry+https://github.com/rust-lang/crates.io-index" 1785 | checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" 1786 | dependencies = [ 1787 | "bytes", 1788 | "futures-channel", 1789 | "futures-util", 1790 | "h2", 1791 | "http", 1792 | "http-body", 1793 | "httparse", 1794 | "itoa", 1795 | "pin-project-lite", 1796 | "smallvec", 1797 | "tokio", 1798 | "want", 1799 | ] 1800 | 1801 | [[package]] 1802 | name = "hyper-rustls" 1803 | version = "0.27.5" 1804 | source = "registry+https://github.com/rust-lang/crates.io-index" 1805 | checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" 1806 | dependencies = [ 1807 | "futures-util", 1808 | "http", 1809 | "hyper", 1810 | "hyper-util", 1811 | "rustls", 1812 | "rustls-pki-types", 1813 | "tokio", 1814 | "tokio-rustls", 1815 | "tower-service", 1816 | "webpki-roots", 1817 | ] 1818 | 1819 | [[package]] 1820 | name = "hyper-tls" 1821 | version = "0.6.0" 1822 | source = "registry+https://github.com/rust-lang/crates.io-index" 1823 | checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" 1824 | dependencies = [ 1825 | "bytes", 1826 | "http-body-util", 1827 | "hyper", 1828 | "hyper-util", 1829 | "native-tls", 1830 | "tokio", 1831 | "tokio-native-tls", 1832 | "tower-service", 1833 | ] 1834 | 1835 | [[package]] 1836 | name = "hyper-util" 1837 | version = "0.1.11" 1838 | source = "registry+https://github.com/rust-lang/crates.io-index" 1839 | checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" 1840 | dependencies = [ 1841 | "bytes", 1842 | "futures-channel", 1843 | "futures-util", 1844 | "http", 1845 | "http-body", 1846 | "hyper", 1847 | "libc", 1848 | "pin-project-lite", 1849 | "socket2", 1850 | "tokio", 1851 | "tower-service", 1852 | "tracing", 1853 | ] 1854 | 1855 | [[package]] 1856 | name = "iana-time-zone" 1857 | version = "0.1.63" 1858 | source = "registry+https://github.com/rust-lang/crates.io-index" 1859 | checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" 1860 | dependencies = [ 1861 | "android_system_properties", 1862 | "core-foundation-sys", 1863 | "iana-time-zone-haiku", 1864 | "js-sys", 1865 | "log", 1866 | "wasm-bindgen", 1867 | "windows-core", 1868 | ] 1869 | 1870 | [[package]] 1871 | name = "iana-time-zone-haiku" 1872 | version = "0.1.2" 1873 | source = "registry+https://github.com/rust-lang/crates.io-index" 1874 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1875 | dependencies = [ 1876 | "cc", 1877 | ] 1878 | 1879 | [[package]] 1880 | name = "icu_collections" 1881 | version = "1.5.0" 1882 | source = "registry+https://github.com/rust-lang/crates.io-index" 1883 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 1884 | dependencies = [ 1885 | "displaydoc", 1886 | "yoke", 1887 | "zerofrom", 1888 | "zerovec", 1889 | ] 1890 | 1891 | [[package]] 1892 | name = "icu_locid" 1893 | version = "1.5.0" 1894 | source = "registry+https://github.com/rust-lang/crates.io-index" 1895 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 1896 | dependencies = [ 1897 | "displaydoc", 1898 | "litemap", 1899 | "tinystr", 1900 | "writeable", 1901 | "zerovec", 1902 | ] 1903 | 1904 | [[package]] 1905 | name = "icu_locid_transform" 1906 | version = "1.5.0" 1907 | source = "registry+https://github.com/rust-lang/crates.io-index" 1908 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 1909 | dependencies = [ 1910 | "displaydoc", 1911 | "icu_locid", 1912 | "icu_locid_transform_data", 1913 | "icu_provider", 1914 | "tinystr", 1915 | "zerovec", 1916 | ] 1917 | 1918 | [[package]] 1919 | name = "icu_locid_transform_data" 1920 | version = "1.5.1" 1921 | source = "registry+https://github.com/rust-lang/crates.io-index" 1922 | checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" 1923 | 1924 | [[package]] 1925 | name = "icu_normalizer" 1926 | version = "1.5.0" 1927 | source = "registry+https://github.com/rust-lang/crates.io-index" 1928 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 1929 | dependencies = [ 1930 | "displaydoc", 1931 | "icu_collections", 1932 | "icu_normalizer_data", 1933 | "icu_properties", 1934 | "icu_provider", 1935 | "smallvec", 1936 | "utf16_iter", 1937 | "utf8_iter", 1938 | "write16", 1939 | "zerovec", 1940 | ] 1941 | 1942 | [[package]] 1943 | name = "icu_normalizer_data" 1944 | version = "1.5.1" 1945 | source = "registry+https://github.com/rust-lang/crates.io-index" 1946 | checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" 1947 | 1948 | [[package]] 1949 | name = "icu_properties" 1950 | version = "1.5.1" 1951 | source = "registry+https://github.com/rust-lang/crates.io-index" 1952 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 1953 | dependencies = [ 1954 | "displaydoc", 1955 | "icu_collections", 1956 | "icu_locid_transform", 1957 | "icu_properties_data", 1958 | "icu_provider", 1959 | "tinystr", 1960 | "zerovec", 1961 | ] 1962 | 1963 | [[package]] 1964 | name = "icu_properties_data" 1965 | version = "1.5.1" 1966 | source = "registry+https://github.com/rust-lang/crates.io-index" 1967 | checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" 1968 | 1969 | [[package]] 1970 | name = "icu_provider" 1971 | version = "1.5.0" 1972 | source = "registry+https://github.com/rust-lang/crates.io-index" 1973 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 1974 | dependencies = [ 1975 | "displaydoc", 1976 | "icu_locid", 1977 | "icu_provider_macros", 1978 | "stable_deref_trait", 1979 | "tinystr", 1980 | "writeable", 1981 | "yoke", 1982 | "zerofrom", 1983 | "zerovec", 1984 | ] 1985 | 1986 | [[package]] 1987 | name = "icu_provider_macros" 1988 | version = "1.5.0" 1989 | source = "registry+https://github.com/rust-lang/crates.io-index" 1990 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 1991 | dependencies = [ 1992 | "proc-macro2", 1993 | "quote", 1994 | "syn", 1995 | ] 1996 | 1997 | [[package]] 1998 | name = "idna" 1999 | version = "1.0.3" 2000 | source = "registry+https://github.com/rust-lang/crates.io-index" 2001 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 2002 | dependencies = [ 2003 | "idna_adapter", 2004 | "smallvec", 2005 | "utf8_iter", 2006 | ] 2007 | 2008 | [[package]] 2009 | name = "idna_adapter" 2010 | version = "1.2.0" 2011 | source = "registry+https://github.com/rust-lang/crates.io-index" 2012 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 2013 | dependencies = [ 2014 | "icu_normalizer", 2015 | "icu_properties", 2016 | ] 2017 | 2018 | [[package]] 2019 | name = "imara-diff" 2020 | version = "0.1.8" 2021 | source = "registry+https://github.com/rust-lang/crates.io-index" 2022 | checksum = "17d34b7d42178945f775e84bc4c36dde7c1c6cdfea656d3354d009056f2bb3d2" 2023 | dependencies = [ 2024 | "hashbrown 0.15.2", 2025 | ] 2026 | 2027 | [[package]] 2028 | name = "indexmap" 2029 | version = "2.9.0" 2030 | source = "registry+https://github.com/rust-lang/crates.io-index" 2031 | checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" 2032 | dependencies = [ 2033 | "equivalent", 2034 | "hashbrown 0.15.2", 2035 | ] 2036 | 2037 | [[package]] 2038 | name = "indicatif" 2039 | version = "0.17.11" 2040 | source = "registry+https://github.com/rust-lang/crates.io-index" 2041 | checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" 2042 | dependencies = [ 2043 | "console", 2044 | "number_prefix", 2045 | "portable-atomic", 2046 | "unicode-width", 2047 | "web-time", 2048 | ] 2049 | 2050 | [[package]] 2051 | name = "inout" 2052 | version = "0.1.4" 2053 | source = "registry+https://github.com/rust-lang/crates.io-index" 2054 | checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" 2055 | dependencies = [ 2056 | "generic-array", 2057 | ] 2058 | 2059 | [[package]] 2060 | name = "io-close" 2061 | version = "0.3.7" 2062 | source = "registry+https://github.com/rust-lang/crates.io-index" 2063 | checksum = "9cadcf447f06744f8ce713d2d6239bb5bde2c357a452397a9ed90c625da390bc" 2064 | dependencies = [ 2065 | "libc", 2066 | "winapi", 2067 | ] 2068 | 2069 | [[package]] 2070 | name = "ipnet" 2071 | version = "2.11.0" 2072 | source = "registry+https://github.com/rust-lang/crates.io-index" 2073 | checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" 2074 | 2075 | [[package]] 2076 | name = "is_debug" 2077 | version = "1.1.0" 2078 | source = "registry+https://github.com/rust-lang/crates.io-index" 2079 | checksum = "1fe266d2e243c931d8190177f20bf7f24eed45e96f39e87dc49a27b32d12d407" 2080 | 2081 | [[package]] 2082 | name = "is_terminal_polyfill" 2083 | version = "1.70.1" 2084 | source = "registry+https://github.com/rust-lang/crates.io-index" 2085 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 2086 | 2087 | [[package]] 2088 | name = "itoa" 2089 | version = "1.0.15" 2090 | source = "registry+https://github.com/rust-lang/crates.io-index" 2091 | checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 2092 | 2093 | [[package]] 2094 | name = "jiff" 2095 | version = "0.2.5" 2096 | source = "registry+https://github.com/rust-lang/crates.io-index" 2097 | checksum = "c102670231191d07d37a35af3eb77f1f0dbf7a71be51a962dcd57ea607be7260" 2098 | dependencies = [ 2099 | "jiff-static", 2100 | "jiff-tzdb-platform", 2101 | "log", 2102 | "portable-atomic", 2103 | "portable-atomic-util", 2104 | "serde", 2105 | "windows-sys 0.59.0", 2106 | ] 2107 | 2108 | [[package]] 2109 | name = "jiff-static" 2110 | version = "0.2.5" 2111 | source = "registry+https://github.com/rust-lang/crates.io-index" 2112 | checksum = "4cdde31a9d349f1b1f51a0b3714a5940ac022976f4b49485fc04be052b183b4c" 2113 | dependencies = [ 2114 | "proc-macro2", 2115 | "quote", 2116 | "syn", 2117 | ] 2118 | 2119 | [[package]] 2120 | name = "jiff-tzdb" 2121 | version = "0.1.4" 2122 | source = "registry+https://github.com/rust-lang/crates.io-index" 2123 | checksum = "c1283705eb0a21404d2bfd6eef2a7593d240bc42a0bdb39db0ad6fa2ec026524" 2124 | 2125 | [[package]] 2126 | name = "jiff-tzdb-platform" 2127 | version = "0.1.3" 2128 | source = "registry+https://github.com/rust-lang/crates.io-index" 2129 | checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" 2130 | dependencies = [ 2131 | "jiff-tzdb", 2132 | ] 2133 | 2134 | [[package]] 2135 | name = "jobserver" 2136 | version = "0.1.33" 2137 | source = "registry+https://github.com/rust-lang/crates.io-index" 2138 | checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" 2139 | dependencies = [ 2140 | "getrandom 0.3.2", 2141 | "libc", 2142 | ] 2143 | 2144 | [[package]] 2145 | name = "js-sys" 2146 | version = "0.3.77" 2147 | source = "registry+https://github.com/rust-lang/crates.io-index" 2148 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 2149 | dependencies = [ 2150 | "once_cell", 2151 | "wasm-bindgen", 2152 | ] 2153 | 2154 | [[package]] 2155 | name = "kstring" 2156 | version = "2.0.2" 2157 | source = "registry+https://github.com/rust-lang/crates.io-index" 2158 | checksum = "558bf9508a558512042d3095138b1f7b8fe90c5467d94f9f1da28b3731c5dbd1" 2159 | dependencies = [ 2160 | "serde", 2161 | "static_assertions", 2162 | ] 2163 | 2164 | [[package]] 2165 | name = "libc" 2166 | version = "0.2.171" 2167 | source = "registry+https://github.com/rust-lang/crates.io-index" 2168 | checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" 2169 | 2170 | [[package]] 2171 | name = "libgit2-sys" 2172 | version = "0.18.1+1.9.0" 2173 | source = "registry+https://github.com/rust-lang/crates.io-index" 2174 | checksum = "e1dcb20f84ffcdd825c7a311ae347cce604a6f084a767dec4a4929829645290e" 2175 | dependencies = [ 2176 | "cc", 2177 | "libc", 2178 | "libz-sys", 2179 | "pkg-config", 2180 | ] 2181 | 2182 | [[package]] 2183 | name = "libredox" 2184 | version = "0.1.3" 2185 | source = "registry+https://github.com/rust-lang/crates.io-index" 2186 | checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" 2187 | dependencies = [ 2188 | "bitflags", 2189 | "libc", 2190 | "redox_syscall", 2191 | ] 2192 | 2193 | [[package]] 2194 | name = "libz-ng-sys" 2195 | version = "1.1.22" 2196 | source = "registry+https://github.com/rust-lang/crates.io-index" 2197 | checksum = "a7118c2c2a3c7b6edc279a8b19507672b9c4d716f95e671172dfa4e23f9fd824" 2198 | dependencies = [ 2199 | "cmake", 2200 | "libc", 2201 | ] 2202 | 2203 | [[package]] 2204 | name = "libz-sys" 2205 | version = "1.1.22" 2206 | source = "registry+https://github.com/rust-lang/crates.io-index" 2207 | checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" 2208 | dependencies = [ 2209 | "cc", 2210 | "libc", 2211 | "pkg-config", 2212 | "vcpkg", 2213 | ] 2214 | 2215 | [[package]] 2216 | name = "linux-raw-sys" 2217 | version = "0.4.15" 2218 | source = "registry+https://github.com/rust-lang/crates.io-index" 2219 | checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" 2220 | 2221 | [[package]] 2222 | name = "linux-raw-sys" 2223 | version = "0.9.3" 2224 | source = "registry+https://github.com/rust-lang/crates.io-index" 2225 | checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" 2226 | 2227 | [[package]] 2228 | name = "litemap" 2229 | version = "0.7.5" 2230 | source = "registry+https://github.com/rust-lang/crates.io-index" 2231 | checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" 2232 | 2233 | [[package]] 2234 | name = "lock_api" 2235 | version = "0.4.12" 2236 | source = "registry+https://github.com/rust-lang/crates.io-index" 2237 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 2238 | dependencies = [ 2239 | "autocfg", 2240 | "scopeguard", 2241 | ] 2242 | 2243 | [[package]] 2244 | name = "lockfree-object-pool" 2245 | version = "0.1.6" 2246 | source = "registry+https://github.com/rust-lang/crates.io-index" 2247 | checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" 2248 | 2249 | [[package]] 2250 | name = "log" 2251 | version = "0.4.27" 2252 | source = "registry+https://github.com/rust-lang/crates.io-index" 2253 | checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 2254 | 2255 | [[package]] 2256 | name = "lzma-rs" 2257 | version = "0.3.0" 2258 | source = "registry+https://github.com/rust-lang/crates.io-index" 2259 | checksum = "297e814c836ae64db86b36cf2a557ba54368d03f6afcd7d947c266692f71115e" 2260 | dependencies = [ 2261 | "byteorder", 2262 | "crc", 2263 | ] 2264 | 2265 | [[package]] 2266 | name = "lzma-sys" 2267 | version = "0.1.20" 2268 | source = "registry+https://github.com/rust-lang/crates.io-index" 2269 | checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27" 2270 | dependencies = [ 2271 | "cc", 2272 | "libc", 2273 | "pkg-config", 2274 | ] 2275 | 2276 | [[package]] 2277 | name = "maybe-async" 2278 | version = "0.2.10" 2279 | source = "registry+https://github.com/rust-lang/crates.io-index" 2280 | checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" 2281 | dependencies = [ 2282 | "proc-macro2", 2283 | "quote", 2284 | "syn", 2285 | ] 2286 | 2287 | [[package]] 2288 | name = "memchr" 2289 | version = "2.7.4" 2290 | source = "registry+https://github.com/rust-lang/crates.io-index" 2291 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 2292 | 2293 | [[package]] 2294 | name = "memmap2" 2295 | version = "0.9.5" 2296 | source = "registry+https://github.com/rust-lang/crates.io-index" 2297 | checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" 2298 | dependencies = [ 2299 | "libc", 2300 | ] 2301 | 2302 | [[package]] 2303 | name = "mime" 2304 | version = "0.3.17" 2305 | source = "registry+https://github.com/rust-lang/crates.io-index" 2306 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 2307 | 2308 | [[package]] 2309 | name = "miniz_oxide" 2310 | version = "0.8.7" 2311 | source = "registry+https://github.com/rust-lang/crates.io-index" 2312 | checksum = "ff70ce3e48ae43fa075863cef62e8b43b71a4f2382229920e0df362592919430" 2313 | dependencies = [ 2314 | "adler2", 2315 | ] 2316 | 2317 | [[package]] 2318 | name = "mio" 2319 | version = "1.0.3" 2320 | source = "registry+https://github.com/rust-lang/crates.io-index" 2321 | checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" 2322 | dependencies = [ 2323 | "libc", 2324 | "wasi 0.11.0+wasi-snapshot-preview1", 2325 | "windows-sys 0.52.0", 2326 | ] 2327 | 2328 | [[package]] 2329 | name = "native-tls" 2330 | version = "0.2.14" 2331 | source = "registry+https://github.com/rust-lang/crates.io-index" 2332 | checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" 2333 | dependencies = [ 2334 | "libc", 2335 | "log", 2336 | "openssl", 2337 | "openssl-probe", 2338 | "openssl-sys", 2339 | "schannel", 2340 | "security-framework", 2341 | "security-framework-sys", 2342 | "tempfile", 2343 | ] 2344 | 2345 | [[package]] 2346 | name = "num-conv" 2347 | version = "0.1.0" 2348 | source = "registry+https://github.com/rust-lang/crates.io-index" 2349 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 2350 | 2351 | [[package]] 2352 | name = "num_threads" 2353 | version = "0.1.7" 2354 | source = "registry+https://github.com/rust-lang/crates.io-index" 2355 | checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" 2356 | dependencies = [ 2357 | "libc", 2358 | ] 2359 | 2360 | [[package]] 2361 | name = "number_prefix" 2362 | version = "0.4.0" 2363 | source = "registry+https://github.com/rust-lang/crates.io-index" 2364 | checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" 2365 | 2366 | [[package]] 2367 | name = "object" 2368 | version = "0.36.7" 2369 | source = "registry+https://github.com/rust-lang/crates.io-index" 2370 | checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 2371 | dependencies = [ 2372 | "memchr", 2373 | ] 2374 | 2375 | [[package]] 2376 | name = "once_cell" 2377 | version = "1.21.3" 2378 | source = "registry+https://github.com/rust-lang/crates.io-index" 2379 | checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 2380 | 2381 | [[package]] 2382 | name = "openssl" 2383 | version = "0.10.72" 2384 | source = "registry+https://github.com/rust-lang/crates.io-index" 2385 | checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" 2386 | dependencies = [ 2387 | "bitflags", 2388 | "cfg-if", 2389 | "foreign-types", 2390 | "libc", 2391 | "once_cell", 2392 | "openssl-macros", 2393 | "openssl-sys", 2394 | ] 2395 | 2396 | [[package]] 2397 | name = "openssl-macros" 2398 | version = "0.1.1" 2399 | source = "registry+https://github.com/rust-lang/crates.io-index" 2400 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 2401 | dependencies = [ 2402 | "proc-macro2", 2403 | "quote", 2404 | "syn", 2405 | ] 2406 | 2407 | [[package]] 2408 | name = "openssl-probe" 2409 | version = "0.1.6" 2410 | source = "registry+https://github.com/rust-lang/crates.io-index" 2411 | checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" 2412 | 2413 | [[package]] 2414 | name = "openssl-sys" 2415 | version = "0.9.107" 2416 | source = "registry+https://github.com/rust-lang/crates.io-index" 2417 | checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" 2418 | dependencies = [ 2419 | "cc", 2420 | "libc", 2421 | "pkg-config", 2422 | "vcpkg", 2423 | ] 2424 | 2425 | [[package]] 2426 | name = "parking_lot" 2427 | version = "0.12.3" 2428 | source = "registry+https://github.com/rust-lang/crates.io-index" 2429 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 2430 | dependencies = [ 2431 | "lock_api", 2432 | "parking_lot_core", 2433 | ] 2434 | 2435 | [[package]] 2436 | name = "parking_lot_core" 2437 | version = "0.9.10" 2438 | source = "registry+https://github.com/rust-lang/crates.io-index" 2439 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 2440 | dependencies = [ 2441 | "cfg-if", 2442 | "libc", 2443 | "redox_syscall", 2444 | "smallvec", 2445 | "windows-targets 0.52.6", 2446 | ] 2447 | 2448 | [[package]] 2449 | name = "pbkdf2" 2450 | version = "0.12.2" 2451 | source = "registry+https://github.com/rust-lang/crates.io-index" 2452 | checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" 2453 | dependencies = [ 2454 | "digest", 2455 | "hmac", 2456 | ] 2457 | 2458 | [[package]] 2459 | name = "percent-encoding" 2460 | version = "2.3.1" 2461 | source = "registry+https://github.com/rust-lang/crates.io-index" 2462 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 2463 | 2464 | [[package]] 2465 | name = "pin-project-lite" 2466 | version = "0.2.16" 2467 | source = "registry+https://github.com/rust-lang/crates.io-index" 2468 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 2469 | 2470 | [[package]] 2471 | name = "pin-utils" 2472 | version = "0.1.0" 2473 | source = "registry+https://github.com/rust-lang/crates.io-index" 2474 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2475 | 2476 | [[package]] 2477 | name = "pkg-config" 2478 | version = "0.3.32" 2479 | source = "registry+https://github.com/rust-lang/crates.io-index" 2480 | checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 2481 | 2482 | [[package]] 2483 | name = "portable-atomic" 2484 | version = "1.11.0" 2485 | source = "registry+https://github.com/rust-lang/crates.io-index" 2486 | checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" 2487 | 2488 | [[package]] 2489 | name = "portable-atomic-util" 2490 | version = "0.2.4" 2491 | source = "registry+https://github.com/rust-lang/crates.io-index" 2492 | checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" 2493 | dependencies = [ 2494 | "portable-atomic", 2495 | ] 2496 | 2497 | [[package]] 2498 | name = "powerfmt" 2499 | version = "0.2.0" 2500 | source = "registry+https://github.com/rust-lang/crates.io-index" 2501 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 2502 | 2503 | [[package]] 2504 | name = "ppv-lite86" 2505 | version = "0.2.21" 2506 | source = "registry+https://github.com/rust-lang/crates.io-index" 2507 | checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 2508 | dependencies = [ 2509 | "zerocopy 0.8.25", 2510 | ] 2511 | 2512 | [[package]] 2513 | name = "proc-macro2" 2514 | version = "1.0.94" 2515 | source = "registry+https://github.com/rust-lang/crates.io-index" 2516 | checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" 2517 | dependencies = [ 2518 | "unicode-ident", 2519 | ] 2520 | 2521 | [[package]] 2522 | name = "prodash" 2523 | version = "29.0.1" 2524 | source = "registry+https://github.com/rust-lang/crates.io-index" 2525 | checksum = "9ee7ce24c980b976607e2d6ae4aae92827994d23fed71659c3ede3f92528b58b" 2526 | dependencies = [ 2527 | "log", 2528 | "parking_lot", 2529 | ] 2530 | 2531 | [[package]] 2532 | name = "quinn" 2533 | version = "0.11.7" 2534 | source = "registry+https://github.com/rust-lang/crates.io-index" 2535 | checksum = "c3bd15a6f2967aef83887dcb9fec0014580467e33720d073560cf015a5683012" 2536 | dependencies = [ 2537 | "bytes", 2538 | "cfg_aliases", 2539 | "pin-project-lite", 2540 | "quinn-proto", 2541 | "quinn-udp", 2542 | "rustc-hash", 2543 | "rustls", 2544 | "socket2", 2545 | "thiserror", 2546 | "tokio", 2547 | "tracing", 2548 | "web-time", 2549 | ] 2550 | 2551 | [[package]] 2552 | name = "quinn-proto" 2553 | version = "0.11.11" 2554 | source = "registry+https://github.com/rust-lang/crates.io-index" 2555 | checksum = "bcbafbbdbb0f638fe3f35f3c56739f77a8a1d070cb25603226c83339b391472b" 2556 | dependencies = [ 2557 | "bytes", 2558 | "getrandom 0.3.2", 2559 | "rand", 2560 | "ring", 2561 | "rustc-hash", 2562 | "rustls", 2563 | "rustls-pki-types", 2564 | "slab", 2565 | "thiserror", 2566 | "tinyvec", 2567 | "tracing", 2568 | "web-time", 2569 | ] 2570 | 2571 | [[package]] 2572 | name = "quinn-udp" 2573 | version = "0.5.12" 2574 | source = "registry+https://github.com/rust-lang/crates.io-index" 2575 | checksum = "ee4e529991f949c5e25755532370b8af5d114acae52326361d68d47af64aa842" 2576 | dependencies = [ 2577 | "cfg_aliases", 2578 | "libc", 2579 | "once_cell", 2580 | "socket2", 2581 | "tracing", 2582 | "windows-sys 0.52.0", 2583 | ] 2584 | 2585 | [[package]] 2586 | name = "quote" 2587 | version = "1.0.40" 2588 | source = "registry+https://github.com/rust-lang/crates.io-index" 2589 | checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 2590 | dependencies = [ 2591 | "proc-macro2", 2592 | ] 2593 | 2594 | [[package]] 2595 | name = "r-efi" 2596 | version = "5.2.0" 2597 | source = "registry+https://github.com/rust-lang/crates.io-index" 2598 | checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" 2599 | 2600 | [[package]] 2601 | name = "rand" 2602 | version = "0.9.1" 2603 | source = "registry+https://github.com/rust-lang/crates.io-index" 2604 | checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" 2605 | dependencies = [ 2606 | "rand_chacha", 2607 | "rand_core", 2608 | ] 2609 | 2610 | [[package]] 2611 | name = "rand_chacha" 2612 | version = "0.9.0" 2613 | source = "registry+https://github.com/rust-lang/crates.io-index" 2614 | checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 2615 | dependencies = [ 2616 | "ppv-lite86", 2617 | "rand_core", 2618 | ] 2619 | 2620 | [[package]] 2621 | name = "rand_core" 2622 | version = "0.9.3" 2623 | source = "registry+https://github.com/rust-lang/crates.io-index" 2624 | checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" 2625 | dependencies = [ 2626 | "getrandom 0.3.2", 2627 | ] 2628 | 2629 | [[package]] 2630 | name = "redox_syscall" 2631 | version = "0.5.10" 2632 | source = "registry+https://github.com/rust-lang/crates.io-index" 2633 | checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" 2634 | dependencies = [ 2635 | "bitflags", 2636 | ] 2637 | 2638 | [[package]] 2639 | name = "regex-automata" 2640 | version = "0.4.9" 2641 | source = "registry+https://github.com/rust-lang/crates.io-index" 2642 | checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 2643 | 2644 | [[package]] 2645 | name = "reqwest" 2646 | version = "0.12.15" 2647 | source = "registry+https://github.com/rust-lang/crates.io-index" 2648 | checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" 2649 | dependencies = [ 2650 | "base64", 2651 | "bytes", 2652 | "encoding_rs", 2653 | "futures-channel", 2654 | "futures-core", 2655 | "futures-util", 2656 | "h2", 2657 | "http", 2658 | "http-body", 2659 | "http-body-util", 2660 | "hyper", 2661 | "hyper-rustls", 2662 | "hyper-tls", 2663 | "hyper-util", 2664 | "ipnet", 2665 | "js-sys", 2666 | "log", 2667 | "mime", 2668 | "native-tls", 2669 | "once_cell", 2670 | "percent-encoding", 2671 | "pin-project-lite", 2672 | "quinn", 2673 | "rustls", 2674 | "rustls-pemfile", 2675 | "rustls-pki-types", 2676 | "serde", 2677 | "serde_json", 2678 | "serde_urlencoded", 2679 | "sync_wrapper", 2680 | "system-configuration", 2681 | "tokio", 2682 | "tokio-native-tls", 2683 | "tokio-rustls", 2684 | "tokio-util", 2685 | "tower", 2686 | "tower-service", 2687 | "url", 2688 | "wasm-bindgen", 2689 | "wasm-bindgen-futures", 2690 | "wasm-streams", 2691 | "web-sys", 2692 | "webpki-roots", 2693 | "windows-registry", 2694 | ] 2695 | 2696 | [[package]] 2697 | name = "ring" 2698 | version = "0.17.14" 2699 | source = "registry+https://github.com/rust-lang/crates.io-index" 2700 | checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 2701 | dependencies = [ 2702 | "cc", 2703 | "cfg-if", 2704 | "getrandom 0.2.15", 2705 | "libc", 2706 | "untrusted", 2707 | "windows-sys 0.52.0", 2708 | ] 2709 | 2710 | [[package]] 2711 | name = "rustc-demangle" 2712 | version = "0.1.24" 2713 | source = "registry+https://github.com/rust-lang/crates.io-index" 2714 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 2715 | 2716 | [[package]] 2717 | name = "rustc-hash" 2718 | version = "2.1.1" 2719 | source = "registry+https://github.com/rust-lang/crates.io-index" 2720 | checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 2721 | 2722 | [[package]] 2723 | name = "rustix" 2724 | version = "0.38.44" 2725 | source = "registry+https://github.com/rust-lang/crates.io-index" 2726 | checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" 2727 | dependencies = [ 2728 | "bitflags", 2729 | "errno", 2730 | "libc", 2731 | "linux-raw-sys 0.4.15", 2732 | "windows-sys 0.59.0", 2733 | ] 2734 | 2735 | [[package]] 2736 | name = "rustix" 2737 | version = "1.0.5" 2738 | source = "registry+https://github.com/rust-lang/crates.io-index" 2739 | checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" 2740 | dependencies = [ 2741 | "bitflags", 2742 | "errno", 2743 | "libc", 2744 | "linux-raw-sys 0.9.3", 2745 | "windows-sys 0.59.0", 2746 | ] 2747 | 2748 | [[package]] 2749 | name = "rustls" 2750 | version = "0.23.25" 2751 | source = "registry+https://github.com/rust-lang/crates.io-index" 2752 | checksum = "822ee9188ac4ec04a2f0531e55d035fb2de73f18b41a63c70c2712503b6fb13c" 2753 | dependencies = [ 2754 | "once_cell", 2755 | "ring", 2756 | "rustls-pki-types", 2757 | "rustls-webpki", 2758 | "subtle", 2759 | "zeroize", 2760 | ] 2761 | 2762 | [[package]] 2763 | name = "rustls-pemfile" 2764 | version = "2.2.0" 2765 | source = "registry+https://github.com/rust-lang/crates.io-index" 2766 | checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" 2767 | dependencies = [ 2768 | "rustls-pki-types", 2769 | ] 2770 | 2771 | [[package]] 2772 | name = "rustls-pki-types" 2773 | version = "1.11.0" 2774 | source = "registry+https://github.com/rust-lang/crates.io-index" 2775 | checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" 2776 | dependencies = [ 2777 | "web-time", 2778 | ] 2779 | 2780 | [[package]] 2781 | name = "rustls-webpki" 2782 | version = "0.103.1" 2783 | source = "registry+https://github.com/rust-lang/crates.io-index" 2784 | checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" 2785 | dependencies = [ 2786 | "ring", 2787 | "rustls-pki-types", 2788 | "untrusted", 2789 | ] 2790 | 2791 | [[package]] 2792 | name = "rustversion" 2793 | version = "1.0.20" 2794 | source = "registry+https://github.com/rust-lang/crates.io-index" 2795 | checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" 2796 | 2797 | [[package]] 2798 | name = "ryu" 2799 | version = "1.0.20" 2800 | source = "registry+https://github.com/rust-lang/crates.io-index" 2801 | checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 2802 | 2803 | [[package]] 2804 | name = "same-file" 2805 | version = "1.0.6" 2806 | source = "registry+https://github.com/rust-lang/crates.io-index" 2807 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2808 | dependencies = [ 2809 | "winapi-util", 2810 | ] 2811 | 2812 | [[package]] 2813 | name = "schannel" 2814 | version = "0.1.27" 2815 | source = "registry+https://github.com/rust-lang/crates.io-index" 2816 | checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" 2817 | dependencies = [ 2818 | "windows-sys 0.59.0", 2819 | ] 2820 | 2821 | [[package]] 2822 | name = "scopeguard" 2823 | version = "1.2.0" 2824 | source = "registry+https://github.com/rust-lang/crates.io-index" 2825 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2826 | 2827 | [[package]] 2828 | name = "security-framework" 2829 | version = "2.11.1" 2830 | source = "registry+https://github.com/rust-lang/crates.io-index" 2831 | checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 2832 | dependencies = [ 2833 | "bitflags", 2834 | "core-foundation", 2835 | "core-foundation-sys", 2836 | "libc", 2837 | "security-framework-sys", 2838 | ] 2839 | 2840 | [[package]] 2841 | name = "security-framework-sys" 2842 | version = "2.14.0" 2843 | source = "registry+https://github.com/rust-lang/crates.io-index" 2844 | checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" 2845 | dependencies = [ 2846 | "core-foundation-sys", 2847 | "libc", 2848 | ] 2849 | 2850 | [[package]] 2851 | name = "semver" 2852 | version = "1.0.26" 2853 | source = "registry+https://github.com/rust-lang/crates.io-index" 2854 | checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" 2855 | dependencies = [ 2856 | "serde", 2857 | ] 2858 | 2859 | [[package]] 2860 | name = "serde" 2861 | version = "1.0.219" 2862 | source = "registry+https://github.com/rust-lang/crates.io-index" 2863 | checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 2864 | dependencies = [ 2865 | "serde_derive", 2866 | ] 2867 | 2868 | [[package]] 2869 | name = "serde_derive" 2870 | version = "1.0.219" 2871 | source = "registry+https://github.com/rust-lang/crates.io-index" 2872 | checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 2873 | dependencies = [ 2874 | "proc-macro2", 2875 | "quote", 2876 | "syn", 2877 | ] 2878 | 2879 | [[package]] 2880 | name = "serde_json" 2881 | version = "1.0.140" 2882 | source = "registry+https://github.com/rust-lang/crates.io-index" 2883 | checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" 2884 | dependencies = [ 2885 | "itoa", 2886 | "memchr", 2887 | "ryu", 2888 | "serde", 2889 | ] 2890 | 2891 | [[package]] 2892 | name = "serde_urlencoded" 2893 | version = "0.7.1" 2894 | source = "registry+https://github.com/rust-lang/crates.io-index" 2895 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 2896 | dependencies = [ 2897 | "form_urlencoded", 2898 | "itoa", 2899 | "ryu", 2900 | "serde", 2901 | ] 2902 | 2903 | [[package]] 2904 | name = "sha1" 2905 | version = "0.10.6" 2906 | source = "registry+https://github.com/rust-lang/crates.io-index" 2907 | checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 2908 | dependencies = [ 2909 | "cfg-if", 2910 | "cpufeatures", 2911 | "digest", 2912 | ] 2913 | 2914 | [[package]] 2915 | name = "sha1-checked" 2916 | version = "0.10.0" 2917 | source = "registry+https://github.com/rust-lang/crates.io-index" 2918 | checksum = "89f599ac0c323ebb1c6082821a54962b839832b03984598375bff3975b804423" 2919 | dependencies = [ 2920 | "digest", 2921 | "sha1", 2922 | ] 2923 | 2924 | [[package]] 2925 | name = "shadow-rs" 2926 | version = "1.1.1" 2927 | source = "registry+https://github.com/rust-lang/crates.io-index" 2928 | checksum = "6d5625ed609cf66d7e505e7d487aca815626dc4ebb6c0dd07637ca61a44651a6" 2929 | dependencies = [ 2930 | "const_format", 2931 | "git2", 2932 | "is_debug", 2933 | "time", 2934 | "tzdb", 2935 | ] 2936 | 2937 | [[package]] 2938 | name = "shell-words" 2939 | version = "1.1.0" 2940 | source = "registry+https://github.com/rust-lang/crates.io-index" 2941 | checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" 2942 | 2943 | [[package]] 2944 | name = "shlex" 2945 | version = "1.3.0" 2946 | source = "registry+https://github.com/rust-lang/crates.io-index" 2947 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 2948 | 2949 | [[package]] 2950 | name = "signal-hook-registry" 2951 | version = "1.4.2" 2952 | source = "registry+https://github.com/rust-lang/crates.io-index" 2953 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 2954 | dependencies = [ 2955 | "libc", 2956 | ] 2957 | 2958 | [[package]] 2959 | name = "simd-adler32" 2960 | version = "0.3.7" 2961 | source = "registry+https://github.com/rust-lang/crates.io-index" 2962 | checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 2963 | 2964 | [[package]] 2965 | name = "slab" 2966 | version = "0.4.9" 2967 | source = "registry+https://github.com/rust-lang/crates.io-index" 2968 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 2969 | dependencies = [ 2970 | "autocfg", 2971 | ] 2972 | 2973 | [[package]] 2974 | name = "smallvec" 2975 | version = "1.15.0" 2976 | source = "registry+https://github.com/rust-lang/crates.io-index" 2977 | checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" 2978 | dependencies = [ 2979 | "serde", 2980 | ] 2981 | 2982 | [[package]] 2983 | name = "socket2" 2984 | version = "0.5.9" 2985 | source = "registry+https://github.com/rust-lang/crates.io-index" 2986 | checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" 2987 | dependencies = [ 2988 | "libc", 2989 | "windows-sys 0.52.0", 2990 | ] 2991 | 2992 | [[package]] 2993 | name = "stable_deref_trait" 2994 | version = "1.2.0" 2995 | source = "registry+https://github.com/rust-lang/crates.io-index" 2996 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 2997 | 2998 | [[package]] 2999 | name = "static_assertions" 3000 | version = "1.1.0" 3001 | source = "registry+https://github.com/rust-lang/crates.io-index" 3002 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 3003 | 3004 | [[package]] 3005 | name = "strsim" 3006 | version = "0.11.1" 3007 | source = "registry+https://github.com/rust-lang/crates.io-index" 3008 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 3009 | 3010 | [[package]] 3011 | name = "subtle" 3012 | version = "2.6.1" 3013 | source = "registry+https://github.com/rust-lang/crates.io-index" 3014 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 3015 | 3016 | [[package]] 3017 | name = "syn" 3018 | version = "2.0.100" 3019 | source = "registry+https://github.com/rust-lang/crates.io-index" 3020 | checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" 3021 | dependencies = [ 3022 | "proc-macro2", 3023 | "quote", 3024 | "unicode-ident", 3025 | ] 3026 | 3027 | [[package]] 3028 | name = "sync_wrapper" 3029 | version = "1.0.2" 3030 | source = "registry+https://github.com/rust-lang/crates.io-index" 3031 | checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 3032 | dependencies = [ 3033 | "futures-core", 3034 | ] 3035 | 3036 | [[package]] 3037 | name = "synstructure" 3038 | version = "0.13.1" 3039 | source = "registry+https://github.com/rust-lang/crates.io-index" 3040 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" 3041 | dependencies = [ 3042 | "proc-macro2", 3043 | "quote", 3044 | "syn", 3045 | ] 3046 | 3047 | [[package]] 3048 | name = "system-configuration" 3049 | version = "0.6.1" 3050 | source = "registry+https://github.com/rust-lang/crates.io-index" 3051 | checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 3052 | dependencies = [ 3053 | "bitflags", 3054 | "core-foundation", 3055 | "system-configuration-sys", 3056 | ] 3057 | 3058 | [[package]] 3059 | name = "system-configuration-sys" 3060 | version = "0.6.0" 3061 | source = "registry+https://github.com/rust-lang/crates.io-index" 3062 | checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" 3063 | dependencies = [ 3064 | "core-foundation-sys", 3065 | "libc", 3066 | ] 3067 | 3068 | [[package]] 3069 | name = "tempfile" 3070 | version = "3.19.1" 3071 | source = "registry+https://github.com/rust-lang/crates.io-index" 3072 | checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" 3073 | dependencies = [ 3074 | "fastrand", 3075 | "getrandom 0.3.2", 3076 | "once_cell", 3077 | "rustix 1.0.5", 3078 | "windows-sys 0.59.0", 3079 | ] 3080 | 3081 | [[package]] 3082 | name = "terminal_size" 3083 | version = "0.4.2" 3084 | source = "registry+https://github.com/rust-lang/crates.io-index" 3085 | checksum = "45c6481c4829e4cc63825e62c49186a34538b7b2750b73b266581ffb612fb5ed" 3086 | dependencies = [ 3087 | "rustix 1.0.5", 3088 | "windows-sys 0.59.0", 3089 | ] 3090 | 3091 | [[package]] 3092 | name = "thiserror" 3093 | version = "2.0.12" 3094 | source = "registry+https://github.com/rust-lang/crates.io-index" 3095 | checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 3096 | dependencies = [ 3097 | "thiserror-impl", 3098 | ] 3099 | 3100 | [[package]] 3101 | name = "thiserror-impl" 3102 | version = "2.0.12" 3103 | source = "registry+https://github.com/rust-lang/crates.io-index" 3104 | checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 3105 | dependencies = [ 3106 | "proc-macro2", 3107 | "quote", 3108 | "syn", 3109 | ] 3110 | 3111 | [[package]] 3112 | name = "time" 3113 | version = "0.3.41" 3114 | source = "registry+https://github.com/rust-lang/crates.io-index" 3115 | checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" 3116 | dependencies = [ 3117 | "deranged", 3118 | "itoa", 3119 | "libc", 3120 | "num-conv", 3121 | "num_threads", 3122 | "powerfmt", 3123 | "serde", 3124 | "time-core", 3125 | "time-macros", 3126 | ] 3127 | 3128 | [[package]] 3129 | name = "time-core" 3130 | version = "0.1.4" 3131 | source = "registry+https://github.com/rust-lang/crates.io-index" 3132 | checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" 3133 | 3134 | [[package]] 3135 | name = "time-macros" 3136 | version = "0.2.22" 3137 | source = "registry+https://github.com/rust-lang/crates.io-index" 3138 | checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" 3139 | dependencies = [ 3140 | "num-conv", 3141 | "time-core", 3142 | ] 3143 | 3144 | [[package]] 3145 | name = "tinystr" 3146 | version = "0.7.6" 3147 | source = "registry+https://github.com/rust-lang/crates.io-index" 3148 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 3149 | dependencies = [ 3150 | "displaydoc", 3151 | "zerovec", 3152 | ] 3153 | 3154 | [[package]] 3155 | name = "tinyvec" 3156 | version = "1.9.0" 3157 | source = "registry+https://github.com/rust-lang/crates.io-index" 3158 | checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" 3159 | dependencies = [ 3160 | "tinyvec_macros", 3161 | ] 3162 | 3163 | [[package]] 3164 | name = "tinyvec_macros" 3165 | version = "0.1.1" 3166 | source = "registry+https://github.com/rust-lang/crates.io-index" 3167 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 3168 | 3169 | [[package]] 3170 | name = "tokio" 3171 | version = "1.44.1" 3172 | source = "registry+https://github.com/rust-lang/crates.io-index" 3173 | checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a" 3174 | dependencies = [ 3175 | "backtrace", 3176 | "bytes", 3177 | "libc", 3178 | "mio", 3179 | "parking_lot", 3180 | "pin-project-lite", 3181 | "signal-hook-registry", 3182 | "socket2", 3183 | "tokio-macros", 3184 | "windows-sys 0.52.0", 3185 | ] 3186 | 3187 | [[package]] 3188 | name = "tokio-macros" 3189 | version = "2.5.0" 3190 | source = "registry+https://github.com/rust-lang/crates.io-index" 3191 | checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 3192 | dependencies = [ 3193 | "proc-macro2", 3194 | "quote", 3195 | "syn", 3196 | ] 3197 | 3198 | [[package]] 3199 | name = "tokio-native-tls" 3200 | version = "0.3.1" 3201 | source = "registry+https://github.com/rust-lang/crates.io-index" 3202 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 3203 | dependencies = [ 3204 | "native-tls", 3205 | "tokio", 3206 | ] 3207 | 3208 | [[package]] 3209 | name = "tokio-rustls" 3210 | version = "0.26.2" 3211 | source = "registry+https://github.com/rust-lang/crates.io-index" 3212 | checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" 3213 | dependencies = [ 3214 | "rustls", 3215 | "tokio", 3216 | ] 3217 | 3218 | [[package]] 3219 | name = "tokio-util" 3220 | version = "0.7.14" 3221 | source = "registry+https://github.com/rust-lang/crates.io-index" 3222 | checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034" 3223 | dependencies = [ 3224 | "bytes", 3225 | "futures-core", 3226 | "futures-sink", 3227 | "pin-project-lite", 3228 | "tokio", 3229 | ] 3230 | 3231 | [[package]] 3232 | name = "tower" 3233 | version = "0.5.2" 3234 | source = "registry+https://github.com/rust-lang/crates.io-index" 3235 | checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 3236 | dependencies = [ 3237 | "futures-core", 3238 | "futures-util", 3239 | "pin-project-lite", 3240 | "sync_wrapper", 3241 | "tokio", 3242 | "tower-layer", 3243 | "tower-service", 3244 | ] 3245 | 3246 | [[package]] 3247 | name = "tower-layer" 3248 | version = "0.3.3" 3249 | source = "registry+https://github.com/rust-lang/crates.io-index" 3250 | checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 3251 | 3252 | [[package]] 3253 | name = "tower-service" 3254 | version = "0.3.3" 3255 | source = "registry+https://github.com/rust-lang/crates.io-index" 3256 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 3257 | 3258 | [[package]] 3259 | name = "tracing" 3260 | version = "0.1.41" 3261 | source = "registry+https://github.com/rust-lang/crates.io-index" 3262 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 3263 | dependencies = [ 3264 | "pin-project-lite", 3265 | "tracing-core", 3266 | ] 3267 | 3268 | [[package]] 3269 | name = "tracing-core" 3270 | version = "0.1.33" 3271 | source = "registry+https://github.com/rust-lang/crates.io-index" 3272 | checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" 3273 | dependencies = [ 3274 | "once_cell", 3275 | "valuable", 3276 | ] 3277 | 3278 | [[package]] 3279 | name = "try-lock" 3280 | version = "0.2.5" 3281 | source = "registry+https://github.com/rust-lang/crates.io-index" 3282 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 3283 | 3284 | [[package]] 3285 | name = "typenum" 3286 | version = "1.18.0" 3287 | source = "registry+https://github.com/rust-lang/crates.io-index" 3288 | checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 3289 | 3290 | [[package]] 3291 | name = "tz-rs" 3292 | version = "0.7.0" 3293 | source = "registry+https://github.com/rust-lang/crates.io-index" 3294 | checksum = "e1450bf2b99397e72070e7935c89facaa80092ac812502200375f1f7d33c71a1" 3295 | 3296 | [[package]] 3297 | name = "tzdb" 3298 | version = "0.7.2" 3299 | source = "registry+https://github.com/rust-lang/crates.io-index" 3300 | checksum = "0be2ea5956f295449f47c0b825c5e109022ff1a6a53bb4f77682a87c2341fbf5" 3301 | dependencies = [ 3302 | "iana-time-zone", 3303 | "tz-rs", 3304 | "tzdb_data", 3305 | ] 3306 | 3307 | [[package]] 3308 | name = "tzdb_data" 3309 | version = "0.2.2" 3310 | source = "registry+https://github.com/rust-lang/crates.io-index" 3311 | checksum = "9c4c81d75033770e40fbd3643ce7472a1a9fd301f90b7139038228daf8af03ec" 3312 | dependencies = [ 3313 | "tz-rs", 3314 | ] 3315 | 3316 | [[package]] 3317 | name = "uluru" 3318 | version = "3.1.0" 3319 | source = "registry+https://github.com/rust-lang/crates.io-index" 3320 | checksum = "7c8a2469e56e6e5095c82ccd3afb98dad95f7af7929aab6d8ba8d6e0f73657da" 3321 | dependencies = [ 3322 | "arrayvec", 3323 | ] 3324 | 3325 | [[package]] 3326 | name = "unicase" 3327 | version = "2.8.1" 3328 | source = "registry+https://github.com/rust-lang/crates.io-index" 3329 | checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" 3330 | 3331 | [[package]] 3332 | name = "unicode-bom" 3333 | version = "2.0.3" 3334 | source = "registry+https://github.com/rust-lang/crates.io-index" 3335 | checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217" 3336 | 3337 | [[package]] 3338 | name = "unicode-ident" 3339 | version = "1.0.18" 3340 | source = "registry+https://github.com/rust-lang/crates.io-index" 3341 | checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 3342 | 3343 | [[package]] 3344 | name = "unicode-normalization" 3345 | version = "0.1.24" 3346 | source = "registry+https://github.com/rust-lang/crates.io-index" 3347 | checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" 3348 | dependencies = [ 3349 | "tinyvec", 3350 | ] 3351 | 3352 | [[package]] 3353 | name = "unicode-width" 3354 | version = "0.2.0" 3355 | source = "registry+https://github.com/rust-lang/crates.io-index" 3356 | checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" 3357 | 3358 | [[package]] 3359 | name = "unicode-xid" 3360 | version = "0.2.6" 3361 | source = "registry+https://github.com/rust-lang/crates.io-index" 3362 | checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 3363 | 3364 | [[package]] 3365 | name = "untrusted" 3366 | version = "0.9.0" 3367 | source = "registry+https://github.com/rust-lang/crates.io-index" 3368 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 3369 | 3370 | [[package]] 3371 | name = "url" 3372 | version = "2.5.4" 3373 | source = "registry+https://github.com/rust-lang/crates.io-index" 3374 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 3375 | dependencies = [ 3376 | "form_urlencoded", 3377 | "idna", 3378 | "percent-encoding", 3379 | ] 3380 | 3381 | [[package]] 3382 | name = "urlencoding" 3383 | version = "2.1.3" 3384 | source = "registry+https://github.com/rust-lang/crates.io-index" 3385 | checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" 3386 | 3387 | [[package]] 3388 | name = "utf16_iter" 3389 | version = "1.0.5" 3390 | source = "registry+https://github.com/rust-lang/crates.io-index" 3391 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 3392 | 3393 | [[package]] 3394 | name = "utf8_iter" 3395 | version = "1.0.4" 3396 | source = "registry+https://github.com/rust-lang/crates.io-index" 3397 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 3398 | 3399 | [[package]] 3400 | name = "utf8parse" 3401 | version = "0.2.2" 3402 | source = "registry+https://github.com/rust-lang/crates.io-index" 3403 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 3404 | 3405 | [[package]] 3406 | name = "valuable" 3407 | version = "0.1.1" 3408 | source = "registry+https://github.com/rust-lang/crates.io-index" 3409 | checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 3410 | 3411 | [[package]] 3412 | name = "vcpkg" 3413 | version = "0.2.15" 3414 | source = "registry+https://github.com/rust-lang/crates.io-index" 3415 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 3416 | 3417 | [[package]] 3418 | name = "version_check" 3419 | version = "0.9.5" 3420 | source = "registry+https://github.com/rust-lang/crates.io-index" 3421 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 3422 | 3423 | [[package]] 3424 | name = "walkdir" 3425 | version = "2.5.0" 3426 | source = "registry+https://github.com/rust-lang/crates.io-index" 3427 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 3428 | dependencies = [ 3429 | "same-file", 3430 | "winapi-util", 3431 | ] 3432 | 3433 | [[package]] 3434 | name = "want" 3435 | version = "0.3.1" 3436 | source = "registry+https://github.com/rust-lang/crates.io-index" 3437 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 3438 | dependencies = [ 3439 | "try-lock", 3440 | ] 3441 | 3442 | [[package]] 3443 | name = "wasi" 3444 | version = "0.11.0+wasi-snapshot-preview1" 3445 | source = "registry+https://github.com/rust-lang/crates.io-index" 3446 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 3447 | 3448 | [[package]] 3449 | name = "wasi" 3450 | version = "0.14.2+wasi-0.2.4" 3451 | source = "registry+https://github.com/rust-lang/crates.io-index" 3452 | checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 3453 | dependencies = [ 3454 | "wit-bindgen-rt", 3455 | ] 3456 | 3457 | [[package]] 3458 | name = "wasm-bindgen" 3459 | version = "0.2.100" 3460 | source = "registry+https://github.com/rust-lang/crates.io-index" 3461 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 3462 | dependencies = [ 3463 | "cfg-if", 3464 | "once_cell", 3465 | "rustversion", 3466 | "wasm-bindgen-macro", 3467 | ] 3468 | 3469 | [[package]] 3470 | name = "wasm-bindgen-backend" 3471 | version = "0.2.100" 3472 | source = "registry+https://github.com/rust-lang/crates.io-index" 3473 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 3474 | dependencies = [ 3475 | "bumpalo", 3476 | "log", 3477 | "proc-macro2", 3478 | "quote", 3479 | "syn", 3480 | "wasm-bindgen-shared", 3481 | ] 3482 | 3483 | [[package]] 3484 | name = "wasm-bindgen-futures" 3485 | version = "0.4.50" 3486 | source = "registry+https://github.com/rust-lang/crates.io-index" 3487 | checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 3488 | dependencies = [ 3489 | "cfg-if", 3490 | "js-sys", 3491 | "once_cell", 3492 | "wasm-bindgen", 3493 | "web-sys", 3494 | ] 3495 | 3496 | [[package]] 3497 | name = "wasm-bindgen-macro" 3498 | version = "0.2.100" 3499 | source = "registry+https://github.com/rust-lang/crates.io-index" 3500 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 3501 | dependencies = [ 3502 | "quote", 3503 | "wasm-bindgen-macro-support", 3504 | ] 3505 | 3506 | [[package]] 3507 | name = "wasm-bindgen-macro-support" 3508 | version = "0.2.100" 3509 | source = "registry+https://github.com/rust-lang/crates.io-index" 3510 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 3511 | dependencies = [ 3512 | "proc-macro2", 3513 | "quote", 3514 | "syn", 3515 | "wasm-bindgen-backend", 3516 | "wasm-bindgen-shared", 3517 | ] 3518 | 3519 | [[package]] 3520 | name = "wasm-bindgen-shared" 3521 | version = "0.2.100" 3522 | source = "registry+https://github.com/rust-lang/crates.io-index" 3523 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 3524 | dependencies = [ 3525 | "unicode-ident", 3526 | ] 3527 | 3528 | [[package]] 3529 | name = "wasm-streams" 3530 | version = "0.4.2" 3531 | source = "registry+https://github.com/rust-lang/crates.io-index" 3532 | checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" 3533 | dependencies = [ 3534 | "futures-util", 3535 | "js-sys", 3536 | "wasm-bindgen", 3537 | "wasm-bindgen-futures", 3538 | "web-sys", 3539 | ] 3540 | 3541 | [[package]] 3542 | name = "web-sys" 3543 | version = "0.3.77" 3544 | source = "registry+https://github.com/rust-lang/crates.io-index" 3545 | checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 3546 | dependencies = [ 3547 | "js-sys", 3548 | "wasm-bindgen", 3549 | ] 3550 | 3551 | [[package]] 3552 | name = "web-time" 3553 | version = "1.1.0" 3554 | source = "registry+https://github.com/rust-lang/crates.io-index" 3555 | checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 3556 | dependencies = [ 3557 | "js-sys", 3558 | "wasm-bindgen", 3559 | ] 3560 | 3561 | [[package]] 3562 | name = "webpki-roots" 3563 | version = "0.26.10" 3564 | source = "registry+https://github.com/rust-lang/crates.io-index" 3565 | checksum = "37493cadf42a2a939ed404698ded7fb378bf301b5011f973361779a3a74f8c93" 3566 | dependencies = [ 3567 | "rustls-pki-types", 3568 | ] 3569 | 3570 | [[package]] 3571 | name = "winapi" 3572 | version = "0.3.9" 3573 | source = "registry+https://github.com/rust-lang/crates.io-index" 3574 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3575 | dependencies = [ 3576 | "winapi-i686-pc-windows-gnu", 3577 | "winapi-x86_64-pc-windows-gnu", 3578 | ] 3579 | 3580 | [[package]] 3581 | name = "winapi-i686-pc-windows-gnu" 3582 | version = "0.4.0" 3583 | source = "registry+https://github.com/rust-lang/crates.io-index" 3584 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3585 | 3586 | [[package]] 3587 | name = "winapi-util" 3588 | version = "0.1.9" 3589 | source = "registry+https://github.com/rust-lang/crates.io-index" 3590 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 3591 | dependencies = [ 3592 | "windows-sys 0.59.0", 3593 | ] 3594 | 3595 | [[package]] 3596 | name = "winapi-x86_64-pc-windows-gnu" 3597 | version = "0.4.0" 3598 | source = "registry+https://github.com/rust-lang/crates.io-index" 3599 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3600 | 3601 | [[package]] 3602 | name = "windows-core" 3603 | version = "0.61.0" 3604 | source = "registry+https://github.com/rust-lang/crates.io-index" 3605 | checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" 3606 | dependencies = [ 3607 | "windows-implement", 3608 | "windows-interface", 3609 | "windows-link", 3610 | "windows-result", 3611 | "windows-strings 0.4.0", 3612 | ] 3613 | 3614 | [[package]] 3615 | name = "windows-implement" 3616 | version = "0.60.0" 3617 | source = "registry+https://github.com/rust-lang/crates.io-index" 3618 | checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" 3619 | dependencies = [ 3620 | "proc-macro2", 3621 | "quote", 3622 | "syn", 3623 | ] 3624 | 3625 | [[package]] 3626 | name = "windows-interface" 3627 | version = "0.59.1" 3628 | source = "registry+https://github.com/rust-lang/crates.io-index" 3629 | checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" 3630 | dependencies = [ 3631 | "proc-macro2", 3632 | "quote", 3633 | "syn", 3634 | ] 3635 | 3636 | [[package]] 3637 | name = "windows-link" 3638 | version = "0.1.1" 3639 | source = "registry+https://github.com/rust-lang/crates.io-index" 3640 | checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" 3641 | 3642 | [[package]] 3643 | name = "windows-registry" 3644 | version = "0.4.0" 3645 | source = "registry+https://github.com/rust-lang/crates.io-index" 3646 | checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" 3647 | dependencies = [ 3648 | "windows-result", 3649 | "windows-strings 0.3.1", 3650 | "windows-targets 0.53.0", 3651 | ] 3652 | 3653 | [[package]] 3654 | name = "windows-result" 3655 | version = "0.3.2" 3656 | source = "registry+https://github.com/rust-lang/crates.io-index" 3657 | checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" 3658 | dependencies = [ 3659 | "windows-link", 3660 | ] 3661 | 3662 | [[package]] 3663 | name = "windows-strings" 3664 | version = "0.3.1" 3665 | source = "registry+https://github.com/rust-lang/crates.io-index" 3666 | checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" 3667 | dependencies = [ 3668 | "windows-link", 3669 | ] 3670 | 3671 | [[package]] 3672 | name = "windows-strings" 3673 | version = "0.4.0" 3674 | source = "registry+https://github.com/rust-lang/crates.io-index" 3675 | checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" 3676 | dependencies = [ 3677 | "windows-link", 3678 | ] 3679 | 3680 | [[package]] 3681 | name = "windows-sys" 3682 | version = "0.52.0" 3683 | source = "registry+https://github.com/rust-lang/crates.io-index" 3684 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 3685 | dependencies = [ 3686 | "windows-targets 0.52.6", 3687 | ] 3688 | 3689 | [[package]] 3690 | name = "windows-sys" 3691 | version = "0.59.0" 3692 | source = "registry+https://github.com/rust-lang/crates.io-index" 3693 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 3694 | dependencies = [ 3695 | "windows-targets 0.52.6", 3696 | ] 3697 | 3698 | [[package]] 3699 | name = "windows-targets" 3700 | version = "0.52.6" 3701 | source = "registry+https://github.com/rust-lang/crates.io-index" 3702 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 3703 | dependencies = [ 3704 | "windows_aarch64_gnullvm 0.52.6", 3705 | "windows_aarch64_msvc 0.52.6", 3706 | "windows_i686_gnu 0.52.6", 3707 | "windows_i686_gnullvm 0.52.6", 3708 | "windows_i686_msvc 0.52.6", 3709 | "windows_x86_64_gnu 0.52.6", 3710 | "windows_x86_64_gnullvm 0.52.6", 3711 | "windows_x86_64_msvc 0.52.6", 3712 | ] 3713 | 3714 | [[package]] 3715 | name = "windows-targets" 3716 | version = "0.53.0" 3717 | source = "registry+https://github.com/rust-lang/crates.io-index" 3718 | checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" 3719 | dependencies = [ 3720 | "windows_aarch64_gnullvm 0.53.0", 3721 | "windows_aarch64_msvc 0.53.0", 3722 | "windows_i686_gnu 0.53.0", 3723 | "windows_i686_gnullvm 0.53.0", 3724 | "windows_i686_msvc 0.53.0", 3725 | "windows_x86_64_gnu 0.53.0", 3726 | "windows_x86_64_gnullvm 0.53.0", 3727 | "windows_x86_64_msvc 0.53.0", 3728 | ] 3729 | 3730 | [[package]] 3731 | name = "windows_aarch64_gnullvm" 3732 | version = "0.52.6" 3733 | source = "registry+https://github.com/rust-lang/crates.io-index" 3734 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 3735 | 3736 | [[package]] 3737 | name = "windows_aarch64_gnullvm" 3738 | version = "0.53.0" 3739 | source = "registry+https://github.com/rust-lang/crates.io-index" 3740 | checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" 3741 | 3742 | [[package]] 3743 | name = "windows_aarch64_msvc" 3744 | version = "0.52.6" 3745 | source = "registry+https://github.com/rust-lang/crates.io-index" 3746 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 3747 | 3748 | [[package]] 3749 | name = "windows_aarch64_msvc" 3750 | version = "0.53.0" 3751 | source = "registry+https://github.com/rust-lang/crates.io-index" 3752 | checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" 3753 | 3754 | [[package]] 3755 | name = "windows_i686_gnu" 3756 | version = "0.52.6" 3757 | source = "registry+https://github.com/rust-lang/crates.io-index" 3758 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 3759 | 3760 | [[package]] 3761 | name = "windows_i686_gnu" 3762 | version = "0.53.0" 3763 | source = "registry+https://github.com/rust-lang/crates.io-index" 3764 | checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" 3765 | 3766 | [[package]] 3767 | name = "windows_i686_gnullvm" 3768 | version = "0.52.6" 3769 | source = "registry+https://github.com/rust-lang/crates.io-index" 3770 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 3771 | 3772 | [[package]] 3773 | name = "windows_i686_gnullvm" 3774 | version = "0.53.0" 3775 | source = "registry+https://github.com/rust-lang/crates.io-index" 3776 | checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" 3777 | 3778 | [[package]] 3779 | name = "windows_i686_msvc" 3780 | version = "0.52.6" 3781 | source = "registry+https://github.com/rust-lang/crates.io-index" 3782 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 3783 | 3784 | [[package]] 3785 | name = "windows_i686_msvc" 3786 | version = "0.53.0" 3787 | source = "registry+https://github.com/rust-lang/crates.io-index" 3788 | checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" 3789 | 3790 | [[package]] 3791 | name = "windows_x86_64_gnu" 3792 | version = "0.52.6" 3793 | source = "registry+https://github.com/rust-lang/crates.io-index" 3794 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 3795 | 3796 | [[package]] 3797 | name = "windows_x86_64_gnu" 3798 | version = "0.53.0" 3799 | source = "registry+https://github.com/rust-lang/crates.io-index" 3800 | checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" 3801 | 3802 | [[package]] 3803 | name = "windows_x86_64_gnullvm" 3804 | version = "0.52.6" 3805 | source = "registry+https://github.com/rust-lang/crates.io-index" 3806 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 3807 | 3808 | [[package]] 3809 | name = "windows_x86_64_gnullvm" 3810 | version = "0.53.0" 3811 | source = "registry+https://github.com/rust-lang/crates.io-index" 3812 | checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" 3813 | 3814 | [[package]] 3815 | name = "windows_x86_64_msvc" 3816 | version = "0.52.6" 3817 | source = "registry+https://github.com/rust-lang/crates.io-index" 3818 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 3819 | 3820 | [[package]] 3821 | name = "windows_x86_64_msvc" 3822 | version = "0.53.0" 3823 | source = "registry+https://github.com/rust-lang/crates.io-index" 3824 | checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" 3825 | 3826 | [[package]] 3827 | name = "winnow" 3828 | version = "0.7.4" 3829 | source = "registry+https://github.com/rust-lang/crates.io-index" 3830 | checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" 3831 | dependencies = [ 3832 | "memchr", 3833 | ] 3834 | 3835 | [[package]] 3836 | name = "wit-bindgen-rt" 3837 | version = "0.39.0" 3838 | source = "registry+https://github.com/rust-lang/crates.io-index" 3839 | checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 3840 | dependencies = [ 3841 | "bitflags", 3842 | ] 3843 | 3844 | [[package]] 3845 | name = "write16" 3846 | version = "1.0.0" 3847 | source = "registry+https://github.com/rust-lang/crates.io-index" 3848 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 3849 | 3850 | [[package]] 3851 | name = "writeable" 3852 | version = "0.5.5" 3853 | source = "registry+https://github.com/rust-lang/crates.io-index" 3854 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 3855 | 3856 | [[package]] 3857 | name = "xz2" 3858 | version = "0.1.7" 3859 | source = "registry+https://github.com/rust-lang/crates.io-index" 3860 | checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2" 3861 | dependencies = [ 3862 | "lzma-sys", 3863 | ] 3864 | 3865 | [[package]] 3866 | name = "yansi" 3867 | version = "1.0.1" 3868 | source = "registry+https://github.com/rust-lang/crates.io-index" 3869 | checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" 3870 | 3871 | [[package]] 3872 | name = "yoke" 3873 | version = "0.7.5" 3874 | source = "registry+https://github.com/rust-lang/crates.io-index" 3875 | checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" 3876 | dependencies = [ 3877 | "serde", 3878 | "stable_deref_trait", 3879 | "yoke-derive", 3880 | "zerofrom", 3881 | ] 3882 | 3883 | [[package]] 3884 | name = "yoke-derive" 3885 | version = "0.7.5" 3886 | source = "registry+https://github.com/rust-lang/crates.io-index" 3887 | checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" 3888 | dependencies = [ 3889 | "proc-macro2", 3890 | "quote", 3891 | "syn", 3892 | "synstructure", 3893 | ] 3894 | 3895 | [[package]] 3896 | name = "zerocopy" 3897 | version = "0.7.35" 3898 | source = "registry+https://github.com/rust-lang/crates.io-index" 3899 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 3900 | dependencies = [ 3901 | "zerocopy-derive 0.7.35", 3902 | ] 3903 | 3904 | [[package]] 3905 | name = "zerocopy" 3906 | version = "0.8.25" 3907 | source = "registry+https://github.com/rust-lang/crates.io-index" 3908 | checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" 3909 | dependencies = [ 3910 | "zerocopy-derive 0.8.25", 3911 | ] 3912 | 3913 | [[package]] 3914 | name = "zerocopy-derive" 3915 | version = "0.7.35" 3916 | source = "registry+https://github.com/rust-lang/crates.io-index" 3917 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 3918 | dependencies = [ 3919 | "proc-macro2", 3920 | "quote", 3921 | "syn", 3922 | ] 3923 | 3924 | [[package]] 3925 | name = "zerocopy-derive" 3926 | version = "0.8.25" 3927 | source = "registry+https://github.com/rust-lang/crates.io-index" 3928 | checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" 3929 | dependencies = [ 3930 | "proc-macro2", 3931 | "quote", 3932 | "syn", 3933 | ] 3934 | 3935 | [[package]] 3936 | name = "zerofrom" 3937 | version = "0.1.6" 3938 | source = "registry+https://github.com/rust-lang/crates.io-index" 3939 | checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 3940 | dependencies = [ 3941 | "zerofrom-derive", 3942 | ] 3943 | 3944 | [[package]] 3945 | name = "zerofrom-derive" 3946 | version = "0.1.6" 3947 | source = "registry+https://github.com/rust-lang/crates.io-index" 3948 | checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 3949 | dependencies = [ 3950 | "proc-macro2", 3951 | "quote", 3952 | "syn", 3953 | "synstructure", 3954 | ] 3955 | 3956 | [[package]] 3957 | name = "zeroize" 3958 | version = "1.8.1" 3959 | source = "registry+https://github.com/rust-lang/crates.io-index" 3960 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 3961 | dependencies = [ 3962 | "zeroize_derive", 3963 | ] 3964 | 3965 | [[package]] 3966 | name = "zeroize_derive" 3967 | version = "1.4.2" 3968 | source = "registry+https://github.com/rust-lang/crates.io-index" 3969 | checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" 3970 | dependencies = [ 3971 | "proc-macro2", 3972 | "quote", 3973 | "syn", 3974 | ] 3975 | 3976 | [[package]] 3977 | name = "zerovec" 3978 | version = "0.10.4" 3979 | source = "registry+https://github.com/rust-lang/crates.io-index" 3980 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 3981 | dependencies = [ 3982 | "yoke", 3983 | "zerofrom", 3984 | "zerovec-derive", 3985 | ] 3986 | 3987 | [[package]] 3988 | name = "zerovec-derive" 3989 | version = "0.10.3" 3990 | source = "registry+https://github.com/rust-lang/crates.io-index" 3991 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 3992 | dependencies = [ 3993 | "proc-macro2", 3994 | "quote", 3995 | "syn", 3996 | ] 3997 | 3998 | [[package]] 3999 | name = "zip" 4000 | version = "2.6.1" 4001 | source = "registry+https://github.com/rust-lang/crates.io-index" 4002 | checksum = "1dcb24d0152526ae49b9b96c1dcf71850ca1e0b882e4e28ed898a93c41334744" 4003 | dependencies = [ 4004 | "aes", 4005 | "arbitrary", 4006 | "bzip2", 4007 | "constant_time_eq", 4008 | "crc32fast", 4009 | "crossbeam-utils", 4010 | "deflate64", 4011 | "flate2", 4012 | "getrandom 0.3.2", 4013 | "hmac", 4014 | "indexmap", 4015 | "lzma-rs", 4016 | "memchr", 4017 | "pbkdf2", 4018 | "sha1", 4019 | "time", 4020 | "xz2", 4021 | "zeroize", 4022 | "zopfli", 4023 | "zstd", 4024 | ] 4025 | 4026 | [[package]] 4027 | name = "zopfli" 4028 | version = "0.8.1" 4029 | source = "registry+https://github.com/rust-lang/crates.io-index" 4030 | checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" 4031 | dependencies = [ 4032 | "bumpalo", 4033 | "crc32fast", 4034 | "lockfree-object-pool", 4035 | "log", 4036 | "once_cell", 4037 | "simd-adler32", 4038 | ] 4039 | 4040 | [[package]] 4041 | name = "zstd" 4042 | version = "0.13.3" 4043 | source = "registry+https://github.com/rust-lang/crates.io-index" 4044 | checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" 4045 | dependencies = [ 4046 | "zstd-safe", 4047 | ] 4048 | 4049 | [[package]] 4050 | name = "zstd-safe" 4051 | version = "7.2.4" 4052 | source = "registry+https://github.com/rust-lang/crates.io-index" 4053 | checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" 4054 | dependencies = [ 4055 | "zstd-sys", 4056 | ] 4057 | 4058 | [[package]] 4059 | name = "zstd-sys" 4060 | version = "2.0.15+zstd.1.5.7" 4061 | source = "registry+https://github.com/rust-lang/crates.io-index" 4062 | checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" 4063 | dependencies = [ 4064 | "cc", 4065 | "pkg-config", 4066 | ] 4067 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "hmm-rs" 3 | version = "0.0.2" 4 | edition = "2021" 5 | authors = ["ninjamuffin99"] 6 | description = "Managing haxelibs via Haxe Module Manager, in Rust 🦀" 7 | repository = "https://github.com/ninjamuffin99/hmm-rs" 8 | keywords = ["haxe", "haxelib", "hmm"] 9 | license = "MIT OR Apache-2.0" 10 | build = "src/build.rs" 11 | 12 | 13 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 14 | 15 | [dependencies] 16 | anyhow = "1.0.86" 17 | bstr = "1.9.1" 18 | clap = { version = "4.5.20", features = ["derive", "unicode", "wrap_help"] } 19 | console = "0.15.8" 20 | error-chain = "0.12.4" 21 | futures = "0.3.30" 22 | futures-util = "0.3.30" 23 | gix = { version = "0.71.0", default-features = false, features = [ 24 | "revision", 25 | "index", 26 | "blocking-network-client", 27 | "worktree-mutation", 28 | "blocking-http-transport-reqwest-rust-tls", 29 | "status", 30 | "zlib-ng", 31 | "serde", 32 | "max-performance", 33 | "verbose-object-parsing-errors", 34 | "tracing-detail", 35 | ] } 36 | human_bytes = "0.4.3" 37 | indicatif = "0.17.8" 38 | reqwest = { version = "0.12.9", features = ["json", "stream", "blocking"] } 39 | semver = { version = "1.0.23", features = ["serde"] } 40 | serde = { version = "1.0.203", features = ["derive"] } 41 | serde_json = "1.0.118" 42 | shadow-rs = { version = "1.1.1", default-features = false } 43 | tempfile = "3.13.0" 44 | thiserror = "2.0.3" 45 | tokio = { version = "1.41.0", features = ["full"] } 46 | urlencoding = "2.1.3" 47 | yansi = "1.0.1" 48 | zip = "2.1.3" 49 | 50 | [build-dependencies] 51 | shadow-rs = "1.1.1" 52 | 53 | [[bin]] 54 | name = "hmm-rs" 55 | 56 | [profile.release] 57 | strip = true 58 | lto = true 59 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # hmm-rs 2 | 3 | A Rust implementation of Haxe Module Manager ([`hmm`](https://github.com/andywhite37/hmm)) 4 | 5 | # Installation 6 | 7 | `hmm-rs` can be installed as a binary from crates.io: https://crates.io/crates/hmm-rs 8 | 9 | With [Rust installed](https://www.rust-lang.org/tools/install): 10 | `cargo install hmm-rs` 11 | 12 | or directly from git: 13 | 14 | `cargo install --git https://github.com/ninjamuffin99/hmm-rs hmm-rs` 15 | 16 | ## TODO List 17 | 18 | The below is a broad todo list / notes for myself. 19 | 20 | - [ ] Github actions 21 | - [x] Windows Build 22 | - [x] Linux Build 23 | - [x] Mac Build 24 | - [ ] Github Releases 25 | - [ ] Create tests against haxe `hmm` 26 | 27 | - [ ] Implement something to slowly roll out from hmm -> hmm-rs 28 | - idea is to be able to integrate hmm with hmm-rs version, so certain commands get aliased. maybe need to make something on hmm haxe version perhaps to alias things? 29 | 30 | ### hmm command and notes 31 | 32 | - [ ] install - installs libraries listed in hmm.json 33 | - [x] haxelib: installs from lib.haxe.org 34 | - [ ] git: installs from a git based source 35 | - allow writing / initalizing non-empty directories for clones? 36 | - install with `--no-tags` for quicker install? 37 | - check to see if repo is shallow or not, or maybe do a fetch before? 38 | - support git tags 39 | - [ ] check if version is already installed 40 | - [~] check: shows info about the currently installed library, and what we want based on the hmm.json 41 | - git tags are sorta funky, try using hxcpp or something perhaps 42 | - improve speed, i think the git status thing slows it down. 43 | - need to dig into profiling code... 44 | - [ ] from-hxml 45 | - [ ] reinstall 46 | - this should function the way that `hmm reinstall -f` would, where it force reinstalls everything. `hmm-rs install` should be used for cases when you updated your hmm.json manually or something 47 | - [x] haxelib 48 | - [ ] git 49 | - [ ] hg 50 | - probably not planned since I don't use mecurial personally or know any haxelib repos that do! 51 | - [ ] dev 52 | - [ ] update 53 | - [ ] remove 54 | - Add the command simply 55 | - create the .rs file 56 | - Remove the library from `hmm.json` 57 | - Remove the directory from `.haxelib` folder 58 | - [ ] lock 59 | - how much depth should this go to for dependencies? 60 | -------------------------------------------------------------------------------- /src/build.rs: -------------------------------------------------------------------------------- 1 | use shadow_rs::ShadowBuilder; 2 | 3 | fn main() { 4 | ShadowBuilder::builder().build().unwrap(); 5 | } 6 | -------------------------------------------------------------------------------- /src/commands/check_command.rs: -------------------------------------------------------------------------------- 1 | use std::{fs::File, path::Path}; 2 | 3 | use crate::hmm::dependencies::Dependancies; 4 | use crate::hmm::haxelib::{self, Haxelib, HaxelibType}; 5 | use anyhow::{anyhow, Context, Result}; 6 | use console::Emoji; 7 | use gix::hash::Prefix; 8 | use std::io::Read; 9 | use yansi::Paint; 10 | 11 | pub struct HaxelibStatus<'a> { 12 | pub lib: &'a Haxelib, 13 | pub install_type: InstallType, 14 | pub wants: Option, 15 | pub installed: Option, 16 | } 17 | 18 | // First, define the install type enum 19 | #[derive(Debug, PartialEq)] 20 | pub enum InstallType { 21 | Missing, // Needs to be installed 22 | MissingGit, // Needs to be cloned 23 | Outdated, // Installed but wrong version 24 | AlreadyInstalled, // Correctly installed 25 | Conflict, // Version conflicts between dependencies 26 | NotLocked, // Version in hmm.json isn't locked to anything, prompt to lock? 27 | } 28 | 29 | impl<'a> HaxelibStatus<'a> { 30 | pub fn new( 31 | lib: &'a Haxelib, 32 | install_type: InstallType, 33 | wants: Option, 34 | installed: Option, 35 | ) -> Self { 36 | Self { 37 | lib, 38 | install_type, 39 | wants, 40 | installed, 41 | } 42 | } 43 | } 44 | 45 | pub fn check(deps: &Dependancies) -> Result<()> { 46 | match compare_haxelib_to_hmm(deps)? { 47 | installs => { 48 | println!( 49 | "{} / {} dependencie(s) are installed at the correct versions", 50 | installs 51 | .iter() 52 | .filter(|i| i.install_type == InstallType::AlreadyInstalled) 53 | .count() 54 | .bold(), 55 | deps.dependencies.len().bold() 56 | ); 57 | } 58 | } 59 | Ok(()) 60 | } 61 | 62 | pub fn compare_haxelib_to_hmm(deps: &Dependancies) -> Result> { 63 | let mut install_status = Vec::new(); 64 | 65 | for haxelib in deps.dependencies.iter() { 66 | let haxelib_status = check_dependency(haxelib)?; 67 | print_install_status(&haxelib_status)?; 68 | 69 | install_status.push(haxelib_status); 70 | continue; 71 | } 72 | 73 | Ok(install_status) 74 | } 75 | 76 | fn check_dependency(haxelib: &Haxelib) -> Result { 77 | // Haxelib folders replace . with , in the folder name 78 | let comma_replace = haxelib.name.replace(".", ","); 79 | let lib_path = Path::new(".haxelib").join(comma_replace.as_str()); 80 | 81 | // assumes an error will occur, and if not, this line will be rewritten at the end of the for loop 82 | println!( 83 | "Checking {} {}", 84 | haxelib.name.bold().yellow(), 85 | Emoji("🤔", "[...]") 86 | ); 87 | if !lib_path.exists() { 88 | return Ok(HaxelibStatus::new( 89 | haxelib, 90 | InstallType::Missing, 91 | get_wants(haxelib), 92 | None, 93 | )); 94 | } 95 | 96 | // Read the .current file 97 | let current_file = match lib_path.join(".dev").exists() { 98 | true => lib_path.join(".dev"), 99 | false => lib_path.join(".current"), 100 | }; 101 | // println!("Checking version at {}", current_file.display()); 102 | let mut current_version = String::new(); 103 | match File::open(¤t_file) { 104 | Ok(mut f) => f.read_to_string(&mut current_version)?, 105 | _ => { 106 | return Ok(HaxelibStatus::new( 107 | haxelib, 108 | InstallType::Missing, 109 | get_wants(haxelib), 110 | None, 111 | )); 112 | } 113 | }; 114 | 115 | match haxelib.haxelib_type { 116 | HaxelibType::Haxelib => match haxelib.version.as_ref() { 117 | Some(v) => { 118 | if v != ¤t_version { 119 | return Ok(HaxelibStatus::new( 120 | haxelib, 121 | InstallType::Outdated, 122 | get_wants(haxelib), 123 | Some(current_version.to_string()), 124 | )); 125 | } 126 | } 127 | None => { 128 | return Ok(HaxelibStatus::new( 129 | haxelib, 130 | InstallType::NotLocked, 131 | None, 132 | Some(current_version.to_string()), 133 | )) 134 | } 135 | }, 136 | HaxelibType::Git => { 137 | let repo_path = lib_path.join("git"); 138 | 139 | if !repo_path.exists() { 140 | return Ok(HaxelibStatus::new( 141 | haxelib, 142 | InstallType::MissingGit, 143 | get_wants(haxelib), 144 | None, 145 | )); 146 | } 147 | 148 | let repo = match gix::discover(&repo_path) { 149 | Ok(r) => r, 150 | Err(e) => { 151 | println!("{}", e.to_string().red()); 152 | 153 | return Ok(HaxelibStatus::new( 154 | haxelib, 155 | InstallType::Missing, 156 | get_wants(haxelib), 157 | None, 158 | )); 159 | } 160 | }; 161 | 162 | // TODO: Need to make sure this unwraps for detatched head! 163 | let head_ref = repo.head_commit().unwrap(); 164 | 165 | // If our head ref is a tag or branch, we check if we already have it in our history 166 | // If it's not a tag, we check via commit id 167 | let intended_commit = match repo.find_reference(haxelib.vcs_ref.as_ref().unwrap()) { 168 | Ok(r) => r.id().shorten_or_id(), 169 | Err(_) => Prefix::from_hex(haxelib.vcs_ref.as_ref().unwrap())?, 170 | }; 171 | 172 | if head_ref 173 | .id() 174 | .shorten_or_id() 175 | .cmp_oid(intended_commit.as_oid()) 176 | .is_ne() 177 | { 178 | return Ok(HaxelibStatus::new( 179 | haxelib, 180 | InstallType::Outdated, 181 | get_wants(haxelib), 182 | Some(head_ref.id().to_string()), 183 | )); 184 | } 185 | 186 | if repo.is_dirty()? { 187 | return Ok(HaxelibStatus::new( 188 | haxelib, 189 | InstallType::Conflict, 190 | get_wants(haxelib), 191 | None, 192 | )); 193 | } 194 | 195 | // we have a correct version, so we're going to update the current_version to to the vcs_ref 196 | current_version = haxelib.vcs_ref.as_ref().unwrap().to_string(); 197 | } 198 | _ => {} 199 | } 200 | 201 | Ok(HaxelibStatus::new( 202 | haxelib, 203 | InstallType::AlreadyInstalled, 204 | Some(current_version), 205 | None, 206 | )) 207 | } 208 | 209 | fn print_install_status(haxelib_status: &HaxelibStatus) -> Result<()> { 210 | // Clears the terminal 211 | print!("\x1B[1A\x1B[2K"); 212 | match haxelib_status.install_type { 213 | InstallType::Missing => { 214 | println!( 215 | "{} {}", 216 | haxelib_status.lib.name.red().bold(), 217 | "is not installed".red() 218 | ); 219 | println!( 220 | "Expected: {} | Installed: {}", 221 | haxelib_status.wants.as_ref().unwrap().red(), 222 | "None".red() 223 | ); 224 | } 225 | InstallType::MissingGit => { 226 | println!( 227 | "{} {}", 228 | haxelib_status.lib.name.red().bold(), 229 | "is not cloned / installed (via git)".red() 230 | ); 231 | println!( 232 | "Expected: {} | Installed: {}", 233 | haxelib_status.wants.as_ref().unwrap().red(), 234 | "None".red() 235 | ); 236 | } 237 | InstallType::Outdated => { 238 | println!( 239 | "{} {}", 240 | haxelib_status.lib.name.red().bold(), 241 | "is not at the correct version".red() 242 | ); 243 | println!( 244 | "Expected: {} | Installed: {}", 245 | haxelib_status.wants.as_ref().unwrap().red(), 246 | haxelib_status.installed.as_ref().unwrap().red() 247 | ); 248 | } 249 | InstallType::AlreadyInstalled => { 250 | let inner = format!( 251 | "{} [{:?}]: {} {}", 252 | haxelib_status.lib.name.green().bold(), 253 | haxelib_status.lib.haxelib_type.green().dim(), 254 | haxelib_status.wants.as_ref().unwrap().green().dim(), 255 | Emoji("✅", "[✔️]") 256 | ); 257 | println!("{}", inner.bright_green().wrap()); 258 | } 259 | InstallType::Conflict => { 260 | println!( 261 | "{} {}", 262 | haxelib_status.lib.name.red().bold(), 263 | "has local changes".red() 264 | ); 265 | } 266 | InstallType::NotLocked => { 267 | println!( 268 | "{} {}", 269 | haxelib_status.lib.name.yellow().bold(), 270 | "is not locked to a specific version (`\"version\": null` in json file). ".yellow(), 271 | ); 272 | println!( 273 | "{} {}", 274 | "`hmm lock` to version:".yellow().bright(), 275 | haxelib_status.installed.as_ref().unwrap().yellow() 276 | ) 277 | } 278 | } 279 | Ok(()) 280 | } 281 | 282 | /// Returns either the haxelib version or the git ref of the haxelib 283 | fn get_wants(haxelib: &Haxelib) -> Option { 284 | match haxelib.haxelib_type { 285 | HaxelibType::Haxelib => haxelib.version.clone(), 286 | HaxelibType::Git => haxelib.vcs_ref.clone(), 287 | _ => None, 288 | } 289 | } 290 | 291 | #[cfg(test)] 292 | mod tests { 293 | use super::*; 294 | 295 | #[test] 296 | fn test_get_wants() { 297 | let haxelib = Haxelib { 298 | name: "test".to_string(), 299 | haxelib_type: HaxelibType::Haxelib, 300 | vcs_ref: None, 301 | dir: None, 302 | url: None, 303 | version: Some("1.0.0".to_string()), 304 | }; 305 | assert_eq!(get_wants(&haxelib), Some("1.0.0".to_string())); 306 | 307 | let haxelib = Haxelib { 308 | name: "test".to_string(), 309 | haxelib_type: HaxelibType::Git, 310 | vcs_ref: Some("master".to_string()), 311 | dir: None, 312 | url: None, 313 | version: None, 314 | }; 315 | assert_eq!(get_wants(&haxelib), Some("master".to_string())); 316 | } 317 | } 318 | -------------------------------------------------------------------------------- /src/commands/clean_command.rs: -------------------------------------------------------------------------------- 1 | use anyhow::{anyhow, Context, Result}; 2 | use std::path::Path; 3 | use yansi::Paint; 4 | 5 | pub fn remove_haxelib_folder() -> Result<()> { 6 | let haxelib_path = Path::new(".haxelib"); 7 | if !haxelib_path.exists() { 8 | Err(anyhow!( 9 | "A .haxelib folder does not exist in this directory, so it cannot be removed." 10 | .bright_red() 11 | .bold() 12 | ))? 13 | } 14 | println!("Removing .haxelib/ folder"); 15 | std::fs::remove_dir_all(haxelib_path).context("Failed to remove .haxelib folder") 16 | } 17 | -------------------------------------------------------------------------------- /src/commands/haxelib_command.rs: -------------------------------------------------------------------------------- 1 | use std::path::PathBuf; 2 | 3 | use anyhow::{anyhow, Ok, Result}; 4 | use reqwest::blocking::Client; 5 | 6 | use crate::{ 7 | commands, 8 | hmm::{ 9 | self, 10 | dependencies::Dependancies, 11 | haxelib::{Haxelib, HaxelibType}, 12 | }, 13 | }; 14 | 15 | pub fn install_haxelib( 16 | name: &str, 17 | version: &Option, 18 | mut deps: Dependancies, 19 | json_path: PathBuf, 20 | ) -> Result<()> { 21 | let mut haxelib_install = Haxelib { 22 | name: name.to_string(), 23 | haxelib_type: HaxelibType::Haxelib, 24 | vcs_ref: None, 25 | dir: None, 26 | url: None, 27 | version: None, 28 | }; 29 | match version { 30 | Some(version) => haxelib_install.version = Some(version.to_string()), 31 | 32 | None => { 33 | // we need to query the latest version from haxelib 34 | // haxelib url: lib.haxe.org/api/3.0/index.n/ 35 | // needs X-Haxe-Remoting header 36 | // and __x param with the query 37 | // in __x param, we can query with something like 38 | // ay3:apiy16:getLatestVersionhay4:limeh 39 | 40 | let serialized = format!("ay3:apiy16:getLatestVersionhay{}:{}h", name.len(), name); 41 | let client = Client::new(); 42 | 43 | let resp = client 44 | .get("https://lib.haxe.org/api/3.0/index.n/") 45 | .header("X-Haxe-Remoting", "1") 46 | .query(&[("__x", serialized)]) 47 | .send()?; 48 | 49 | let resp = resp.text()?; 50 | let resp_splits = resp.split(":").collect::>(); 51 | let decoded_resp = urlencoding::decode(resp_splits[1])?; 52 | 53 | println!("Latest version of {} is {}", name, decoded_resp); 54 | 55 | if decoded_resp.starts_with("No such Project") { 56 | return Err(anyhow!("{}", decoded_resp)); // this haxelib doesn't exist 57 | } 58 | 59 | haxelib_install.version = Some(decoded_resp.to_string()); 60 | } 61 | }; 62 | commands::install_command::install_from_haxelib(&haxelib_install)?; 63 | deps.dependencies.push(haxelib_install); 64 | hmm::json::save_json(deps, json_path)?; 65 | Ok(()) 66 | } 67 | -------------------------------------------------------------------------------- /src/commands/init_command.rs: -------------------------------------------------------------------------------- 1 | use crate::hmm; 2 | use anyhow::{anyhow, Context, Result}; 3 | use std::path::Path; 4 | 5 | pub fn init_hmm() -> Result<()> { 6 | create_haxelib_folder()?; 7 | hmm::json::create_empty_hmm_json() 8 | } 9 | 10 | pub fn create_haxelib_folder() -> Result<()> { 11 | let haxelib_path = Path::new(".haxelib"); 12 | if haxelib_path.exists() { 13 | let err_message = format!( 14 | "{} \n{}", 15 | "A .haxelib folder already exists in this directory, so it won't be created.", 16 | "use `hmm-rs clean` to remove the folder" 17 | ); 18 | Err(anyhow!(err_message))? 19 | } 20 | println!("Creating .haxelib/ folder"); 21 | std::fs::create_dir(haxelib_path).context("Failed to create .haxelib folder") 22 | } 23 | -------------------------------------------------------------------------------- /src/commands/install_command.rs: -------------------------------------------------------------------------------- 1 | use crate::commands::check_command::InstallType; 2 | use crate::hmm::dependencies::Dependancies; 3 | use crate::hmm::haxelib::Haxelib; 4 | use crate::hmm::haxelib::HaxelibType; 5 | use anyhow::Ok; 6 | use anyhow::{anyhow, Context, Result}; 7 | use bstr::BString; 8 | use console::Emoji; 9 | use futures_util::StreamExt; 10 | use gix::clone; 11 | use gix::create; 12 | use gix::progress::Discard; 13 | use gix::Url; 14 | use human_bytes::human_bytes; 15 | use indicatif::{ProgressBar, ProgressStyle}; 16 | use std::env; 17 | use std::fs::File; 18 | use std::io::Write; 19 | use std::path::Path; 20 | use std::path::PathBuf; 21 | use std::sync::atomic::AtomicBool; 22 | use yansi::Paint; 23 | use zip::ZipArchive; 24 | 25 | use super::check_command::compare_haxelib_to_hmm; 26 | use super::check_command::HaxelibStatus; 27 | 28 | pub fn install_from_hmm(deps: &Dependancies) -> Result<()> { 29 | let installs_needed = compare_haxelib_to_hmm(deps)?; 30 | println!( 31 | "{} dependencies need to be installed", 32 | installs_needed.len().to_string().bold() 33 | ); 34 | 35 | for install_status in installs_needed.iter() { 36 | match &install_status.install_type { 37 | InstallType::Missing => handle_install(install_status)?, 38 | InstallType::Outdated => match &install_status.lib.haxelib_type { 39 | HaxelibType::Haxelib => install_from_haxelib(install_status.lib)?, 40 | HaxelibType::Git => install_from_git_using_gix_checkout(install_status.lib)?, 41 | lib_type => println!( 42 | "{}: Installing from {:?} not yet implemented", 43 | install_status.lib.name.red(), 44 | lib_type 45 | ), 46 | }, 47 | InstallType::AlreadyInstalled => (), // do nothing on things already installed at the right version 48 | _ => println!( 49 | "{} {:?}: Not implemented", 50 | install_status.lib.name, install_status.install_type 51 | ), 52 | } 53 | } 54 | 55 | Ok(()) 56 | } 57 | 58 | pub fn handle_install(haxelib_status: &HaxelibStatus) -> Result<()> { 59 | match &haxelib_status.lib.haxelib_type { 60 | HaxelibType::Haxelib => install_from_haxelib(haxelib_status.lib)?, 61 | HaxelibType::Git => install_from_git_using_gix_clone(haxelib_status.lib)?, 62 | lib_type => println!( 63 | "{}: Installing from {:?} not yet implemented", 64 | haxelib_status.lib.name.red(), 65 | lib_type 66 | ), 67 | } 68 | 69 | Ok(()) 70 | } 71 | 72 | pub fn install_from_git_using_gix_clone(haxelib: &Haxelib) -> Result<()> { 73 | println!("Installing {} from git using clone", haxelib.name); 74 | 75 | let haxelib_url = haxelib 76 | .url 77 | .as_ref() 78 | .ok_or(anyhow!("No url provided for {}", haxelib.name))?; 79 | 80 | let path_with_no_https = haxelib_url.replace("https://", ""); 81 | 82 | let clone_url = Url::from_parts( 83 | gix::url::Scheme::Https, 84 | None, 85 | None, 86 | None, 87 | None, 88 | BString::from(path_with_no_https), 89 | false, 90 | ) 91 | .context(format!("error creating gix url for {}", haxelib_url))?; 92 | 93 | let mut clone_path = PathBuf::from(".haxelib").join(&haxelib.name); 94 | 95 | create_current_file(&clone_path, &String::from("git"))?; 96 | 97 | clone_path = clone_path.join("git"); 98 | 99 | if let Err(e) = std::fs::create_dir_all(&clone_path) { 100 | if e.kind() == std::io::ErrorKind::AlreadyExists { 101 | println!("Directory already exists: {:?}", clone_path.as_path()); 102 | } else { 103 | return Err(anyhow!( 104 | "Error creating directory: {:?}", 105 | clone_path.as_path() 106 | )); 107 | } 108 | }; 109 | 110 | let mut da_fetch = clone::PrepareFetch::new( 111 | clone_url, 112 | clone_path, 113 | create::Kind::WithWorktree, 114 | create::Options::default(), 115 | gix::open::Options::default(), 116 | ) 117 | .context("error preparing clone")?; 118 | 119 | let repo = da_fetch 120 | .fetch_then_checkout(Discard, &AtomicBool::new(false))? 121 | .0 122 | .main_worktree(Discard, &AtomicBool::new(false)) 123 | .expect("Error checking out worktree") 124 | .0; 125 | 126 | let submodule_result = repo.submodules()?; 127 | 128 | if let Some(submodule_list) = submodule_result { 129 | for submodule in submodule_list { 130 | let submodule_path = submodule.path()?; 131 | let submodule_url = submodule.url()?; 132 | println!("Submodule: {} - {}", submodule_path, submodule_url); 133 | } 134 | } 135 | 136 | do_commit_checkout(&repo, haxelib)?; 137 | 138 | Ok(()) 139 | } 140 | 141 | #[tokio::main] 142 | pub async fn install_from_haxelib(haxelib: &Haxelib) -> Result<()> { 143 | // braindead... 144 | let mut target_url = String::from("https://lib.haxe.org/p/"); 145 | target_url.push_str(haxelib.name.as_str()); 146 | target_url.push('/'); 147 | target_url.push_str(haxelib.version.as_ref().unwrap().as_str()); 148 | target_url.push('/'); 149 | target_url.push_str("download"); 150 | 151 | println!( 152 | "Downloading: {} - {} - {}", 153 | haxelib.name.bold(), 154 | "lib.haxe.org".yellow().bold(), 155 | target_url.bold() 156 | ); 157 | 158 | let client = reqwest::Client::new(); 159 | 160 | let tmp_dir = env::temp_dir().join(format!("{}.zip", haxelib.name)); 161 | 162 | let response = client.get(target_url).send().await?; 163 | let total_size = response.content_length().unwrap(); 164 | // yoinked from haxeget ! 165 | let pb = ProgressBar::new(total_size); 166 | pb.set_style(ProgressStyle::with_template("{msg}\n{spinner:.green} [{elapsed_precise}] [{wide_bar:.yellow/red}] {bytes}/{total_bytes} ({bytes_per_sec}, {eta})") 167 | .unwrap()); 168 | 169 | let mut file = File::create(tmp_dir.as_path())?; 170 | let mut downloaded: u64 = 0; 171 | let mut stream = response.bytes_stream(); 172 | 173 | while let Some(item) = stream.next().await { 174 | let chunk = item?; 175 | file.write_all(&chunk)?; 176 | let new = std::cmp::min(downloaded + (chunk.len() as u64), total_size); 177 | downloaded = new; 178 | pb.set_position(new); 179 | } 180 | 181 | let finish_message = format!( 182 | "{}: {} done downloading from {}", 183 | haxelib.name.green().bold(), 184 | haxelib.version.as_ref().unwrap().bright_green(), 185 | "Haxelib".yellow().bold() 186 | ); 187 | pb.finish_with_message(finish_message); 188 | 189 | let version_as_commas = haxelib.version.as_ref().unwrap().replace(".", ","); 190 | let mut output_dir: PathBuf = [".haxelib", haxelib.name.as_str()].iter().collect(); 191 | 192 | if let Err(e) = std::fs::create_dir(&output_dir) { 193 | if e.kind() == std::io::ErrorKind::AlreadyExists { 194 | println!("Directory already exists: {:?}", output_dir.as_path()); 195 | } else { 196 | return Err(anyhow!( 197 | "Error creating directory: {:?}", 198 | output_dir.as_path() 199 | )); 200 | } 201 | } 202 | 203 | create_current_file(&output_dir, haxelib.version.as_ref().unwrap())?; 204 | 205 | // unzipping 206 | output_dir = output_dir.join(version_as_commas.as_str()); 207 | 208 | let archive = File::open(tmp_dir.as_path())?; 209 | let mut zip_file = ZipArchive::new(archive).context("Error opening zip file")?; 210 | zip_file 211 | .extract(output_dir.as_path()) 212 | .context("Error extracting zip file")?; 213 | 214 | std::fs::remove_file(tmp_dir.as_path())?; 215 | println!(); 216 | println!( 217 | "{}: {} installed {}", 218 | haxelib.name.green().bold(), 219 | haxelib.version.as_ref().unwrap().bright_green(), 220 | Emoji("✅", "[✔️]") 221 | ); 222 | // print an empty line, for readability between downloads 223 | println!(); 224 | Ok(()) 225 | } 226 | 227 | pub fn install_from_git_using_gix_checkout(haxelib: &Haxelib) -> Result<()> { 228 | println!("Updating {} from git using checkout", haxelib.name); 229 | 230 | let discover_result = gix::discover( 231 | Path::new(".haxelib") 232 | .join(haxelib.name.as_str()) 233 | .join("git"), 234 | ); 235 | 236 | let repo = match discover_result { 237 | core::result::Result::Ok(r) => r, 238 | Err(e) => { 239 | if e.to_string().contains("not a git repository") { 240 | return install_from_git_using_gix_clone(haxelib); 241 | } else { 242 | return Err(anyhow!("Error discovering git repo: {:?}", e)); 243 | } 244 | } 245 | }; 246 | 247 | // let fetch_url = repo 248 | // .find_fetch_remote(None)? 249 | // .url(gix::remote::Direction::Fetch) 250 | // .unwrap() 251 | // .clone(); 252 | 253 | do_commit_checkout(&repo, haxelib)?; 254 | 255 | println!( 256 | "{}: {} updated {}", 257 | haxelib.name.green().bold(), 258 | haxelib.vcs_ref.as_ref().unwrap().bright_green(), 259 | Emoji("✅", "[✔️]") 260 | ); 261 | 262 | Ok(()) 263 | } 264 | 265 | fn do_commit_checkout(repo: &gix::Repository, haxelib: &Haxelib) -> Result<()> { 266 | print!("Checking out {}", haxelib.name); 267 | if let Some(target_ref) = haxelib.vcs_ref.as_ref() { 268 | println!(" at {}", target_ref); 269 | let reflog_msg = BString::from("derp?"); 270 | 271 | let target_gix_ref = repo.find_reference(target_ref)?.id(); 272 | 273 | repo.head_ref() 274 | .unwrap() 275 | .unwrap() 276 | .set_target_id(target_gix_ref, reflog_msg)?; 277 | } 278 | 279 | Ok(()) 280 | } 281 | 282 | pub fn create_current_file(path: &Path, content: &String) -> Result<()> { 283 | std::fs::create_dir_all(path)?; 284 | let mut current_version_file = File::create(path.join(".current"))?; 285 | write!(current_version_file, "{}", content)?; 286 | Ok(()) 287 | } 288 | -------------------------------------------------------------------------------- /src/commands/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod check_command; 2 | pub mod clean_command; 3 | pub mod haxelib_command; 4 | pub mod init_command; 5 | pub mod install_command; 6 | pub mod remove_command; 7 | pub mod tohxml_command; 8 | -------------------------------------------------------------------------------- /src/commands/remove_command.rs: -------------------------------------------------------------------------------- 1 | use anyhow::Result; 2 | 3 | pub fn remove_haxelibs() -> Result<()> { 4 | Ok(()) 5 | } 6 | -------------------------------------------------------------------------------- /src/commands/tohxml_command.rs: -------------------------------------------------------------------------------- 1 | use std::path::PathBuf; 2 | 3 | use crate::hmm::dependencies::Dependancies; 4 | use crate::hmm::haxelib::HaxelibType; 5 | use anyhow::Result; 6 | 7 | pub fn dump_to_hxml(deps: &Dependancies, hxml_out: Option) -> Result<()> { 8 | let mut hxml = String::new(); 9 | for haxelib in deps.dependencies.iter() { 10 | let mut lib_string = String::from("-lib "); 11 | lib_string.push_str(haxelib.name.as_str()); 12 | 13 | match haxelib.haxelib_type { 14 | HaxelibType::Git => { 15 | lib_string 16 | .push_str(format!(":git:{}", &haxelib.url.as_ref().unwrap().as_str()).as_str()); 17 | if let Some(r) = &haxelib.vcs_ref { lib_string.push_str(format!("#{}", r).as_str()) } 18 | } 19 | HaxelibType::Haxelib => lib_string 20 | .push_str(format!(":{}", haxelib.version.as_ref().unwrap().as_str()).as_str()), 21 | _ => {} 22 | } 23 | hxml.push_str(&lib_string); 24 | hxml.push('\n'); 25 | } 26 | 27 | if let Some(hxml_out) = hxml_out { 28 | std::fs::write(hxml_out, hxml)?; 29 | } else { 30 | println!("{}", hxml); 31 | } 32 | 33 | Ok(()) 34 | } 35 | -------------------------------------------------------------------------------- /src/hmm/dependencies.rs: -------------------------------------------------------------------------------- 1 | use super::haxelib::{Haxelib, HaxelibType}; 2 | use anyhow::Result; 3 | use serde::{Deserialize, Serialize}; 4 | use std::fmt; 5 | 6 | #[derive(Serialize, Deserialize)] 7 | pub struct Dependancies { 8 | pub dependencies: Vec, 9 | } 10 | 11 | impl fmt::Display for Dependancies { 12 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 13 | write!(f, "{}", serde_json::to_string_pretty(self).unwrap()) 14 | } 15 | } 16 | 17 | impl Dependancies { 18 | pub fn print_string_list(&self, libs: &Option>) -> Result<()> { 19 | if let Some(libs) = libs { 20 | for lib in libs { 21 | let haxelib = Self::get_haxelib(self, lib)?; 22 | Self::print_haxelib(haxelib); 23 | } 24 | 25 | return Ok(()); 26 | } 27 | 28 | for haxelib in self.dependencies.iter() { 29 | Self::print_haxelib(haxelib); 30 | } 31 | Ok(()) 32 | } 33 | 34 | pub fn get_haxelib(&self, lib: &str) -> Result<&Haxelib> { 35 | for haxelib in self.dependencies.iter() { 36 | if haxelib.name == lib { 37 | return Ok(haxelib); 38 | } 39 | } 40 | Err(anyhow::anyhow!("Haxelib not found")) 41 | } 42 | 43 | pub fn print_haxelib(lib: &Haxelib) { 44 | let version_or_ref = match &lib.version { 45 | Some(v) => format!("version: {}", v), 46 | None => match &lib.vcs_ref { 47 | Some(r) => format!("ref: {}", r), 48 | None => "No version or ref".to_string(), 49 | }, 50 | }; 51 | 52 | let mut haxelib_output = format!( 53 | "{} [{haxelib_type:?}] \n{} \n", 54 | lib.name, 55 | version_or_ref, 56 | haxelib_type = lib.haxelib_type 57 | ); 58 | 59 | match lib.haxelib_type { 60 | HaxelibType::Git => if let Some(u) = &lib.url { haxelib_output.push_str(&format!("url: {}\n", u)) }, 61 | HaxelibType::Haxelib => { 62 | let haxelib_url = format!("https://lib.haxe.org/p/{}", lib.name); 63 | haxelib_output.push_str(&format!("url: {}\n", haxelib_url)) 64 | } 65 | _ => {} 66 | } 67 | 68 | println!("{}", haxelib_output); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/hmm/haxelib.rs: -------------------------------------------------------------------------------- 1 | use serde::{Deserialize, Serialize}; 2 | 3 | #[derive(Serialize, Deserialize, Clone)] 4 | pub struct Haxelib { 5 | pub name: String, 6 | #[serde(rename = "type")] 7 | pub haxelib_type: HaxelibType, 8 | #[serde(skip_serializing_if = "Option::is_none")] 9 | #[serde(rename = "ref")] 10 | pub vcs_ref: Option, 11 | pub dir: Option, 12 | #[serde(skip_serializing_if = "Option::is_none")] 13 | pub url: Option, 14 | #[serde(skip_serializing_if = "Option::is_none")] 15 | pub version: Option, 16 | } 17 | 18 | #[derive(Serialize, Deserialize, Debug, PartialEq, Clone)] 19 | pub enum HaxelibType { 20 | #[serde(rename = "git")] 21 | Git, 22 | #[serde(rename = "haxelib")] 23 | Haxelib, 24 | #[serde(rename = "dev")] 25 | Dev, 26 | #[serde(rename = "hg")] 27 | Mecurial, 28 | } 29 | -------------------------------------------------------------------------------- /src/hmm/json.rs: -------------------------------------------------------------------------------- 1 | use std::io::Write; 2 | use std::str::FromStr; 3 | use std::{fs::File, path::PathBuf}; 4 | 5 | use super::dependencies::Dependancies; 6 | use anyhow::{Context, Result}; 7 | 8 | pub fn save_json(deps: Dependancies, path: PathBuf) -> Result<()> { 9 | println!("{} saved/updated", path.display()); 10 | let j = serde_json::to_string_pretty(&deps)?; 11 | let mut file = File::create(path)?; 12 | file.write_all(j.as_bytes())?; 13 | Ok(()) 14 | } 15 | 16 | pub fn create_empty_hmm_json() -> Result<()> { 17 | let empty_deps = Dependancies { 18 | dependencies: vec![], 19 | }; 20 | 21 | save_json(empty_deps, PathBuf::from_str("hmm.json")?) 22 | } 23 | 24 | // Read the JSON, and return the Dependancies struct 25 | pub fn read_json(path: &PathBuf) -> Result { 26 | let file = File::open(path).context(format!("JSON {:?} not found", path))?; 27 | let deps: Dependancies = serde_json::from_reader(file)?; 28 | Ok(deps) 29 | } 30 | -------------------------------------------------------------------------------- /src/hmm/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod dependencies; 2 | pub mod haxelib; 3 | pub mod json; 4 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod commands; 2 | pub mod hmm; 3 | 4 | use std::path::PathBuf; 5 | 6 | use anyhow::{Ok, Result}; 7 | 8 | use clap::{Parser, Subcommand}; 9 | use shadow_rs::shadow; 10 | 11 | shadow!(build); 12 | 13 | #[derive(Parser, Debug)] 14 | #[command(author, version, about, long_about = None)] 15 | #[command(version = build::CLAP_LONG_VERSION)] 16 | struct Cli { 17 | #[command(subcommand)] 18 | cmd: Commands, 19 | 20 | /// Sets a custom hmm.json file to use 21 | #[arg(short, long, value_name = "JSON", default_value = "hmm.json")] 22 | json: Option, 23 | } 24 | 25 | #[derive(Subcommand, Debug, Clone)] 26 | enum Commands { 27 | /// Lists the dependencies in the hmm.json file (or a file of your choice with --path) 28 | /// use `hmm-rs check` to see if the dependencies are installed at the correct versions 29 | #[command(visible_alias = "ls")] 30 | List { 31 | /// Specific libraries you want to list, can be multiple 32 | /// `hmm-rs list lime openfl` will list lime and openfl 33 | #[arg(value_name = "LIBS")] 34 | lib: Option>, 35 | }, 36 | /// Creates an empty .haxelib/ folder, and an empty hmm.json file 37 | Init, 38 | /// Removes local .haxelib directory, useful for full clean reinstalls 39 | #[command(visible_alias = "cl")] 40 | Clean, 41 | /// dumps the dependencies in hmm.json, either to a .hxml file or stdout 42 | ToHxml { 43 | /// The path to the hxml file you want to write to 44 | #[arg(value_name = "HXML")] 45 | hxml: Option, 46 | }, 47 | /// Checks if the dependencies are installed at their correct hmm.json versions 48 | #[command(visible_alias = "ch")] 49 | Check, 50 | /// Installs the dependencies from hmm.json, if they aren't already installed. 51 | #[command(visible_alias = "i")] 52 | Install, 53 | /// Installs a haxelib from lib.haxe.org 54 | Haxelib { 55 | /// The name of the haxelib to install 56 | name: String, 57 | /// The version of the haxelib to install 58 | version: Option, 59 | }, 60 | /// Removes one or more library dependencies from `hmm.json` and the `.haxelib/` folder 61 | #[command(visible_alias = "rm")] 62 | Remove { 63 | /// The library(s) you wish to remove, can be multiple 64 | #[arg(value_name = "LIBS")] 65 | lib: Vec, 66 | }, 67 | } 68 | 69 | pub fn run() -> Result<()> { 70 | let args = Cli::parse(); 71 | 72 | let path = args.json.unwrap(); 73 | let load_deps = || hmm::json::read_json(&path); 74 | 75 | match args.cmd { 76 | Commands::List { lib } => hmm::json::read_json(&path)?.print_string_list(&lib)?, 77 | Commands::Init => commands::init_command::init_hmm()?, 78 | Commands::Clean => commands::clean_command::remove_haxelib_folder()?, 79 | Commands::ToHxml { hxml } => commands::tohxml_command::dump_to_hxml(&load_deps()?, hxml)?, 80 | Commands::Check => commands::check_command::check(&load_deps()?)?, 81 | Commands::Install => commands::install_command::install_from_hmm(&load_deps()?)?, 82 | Commands::Haxelib { name, version } => { 83 | commands::haxelib_command::install_haxelib(&name, &version, load_deps()?, path)? 84 | } 85 | Commands::Remove { lib: _ } => commands::remove_command::remove_haxelibs()?, 86 | } 87 | Ok(()) 88 | } 89 | 90 | #[test] 91 | fn verify_cli() { 92 | use clap::CommandFactory; 93 | Cli::command().debug_assert(); 94 | } 95 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use anyhow::Result; 2 | 3 | fn main() -> Result<()> { 4 | hmm_rs::run() 5 | } 6 | -------------------------------------------------------------------------------- /tests/common/mod.rs: -------------------------------------------------------------------------------- 1 | use std::{ 2 | fs, 3 | path::PathBuf, 4 | }; 5 | 6 | use yansi::Paint; 7 | 8 | pub fn setup() { 9 | // some setup code, like creating required files/directories, starting 10 | // servers, etc. 11 | let crate_dir = PathBuf::new().join(env!("CARGO_MANIFEST_DIR")); 12 | let tests_dir = crate_dir.join("tests"); 13 | let samples_dir = tests_dir.join("samples"); 14 | } 15 | 16 | pub fn remove_haxelib_folder() { 17 | let haxelib_path = get_samples_dir().join(".haxelib"); 18 | match fs::remove_dir_all(&haxelib_path) { 19 | Ok(_) => println!("{} .haxelib/ folder removed", "Removed".green().bold()), 20 | Err(e) => { 21 | println!( 22 | "{} .haxelib/ folder does not exist: {}", 23 | "Error".red().bold(), 24 | e 25 | ); 26 | } 27 | } 28 | } 29 | 30 | pub fn setup_haxelib_folder() { 31 | let haxelib_path = get_samples_dir().join(".haxelib"); 32 | if haxelib_path.exists() { 33 | fs::remove_dir_all(&haxelib_path).unwrap(); 34 | } 35 | match fs::create_dir(haxelib_path) { 36 | Ok(_) => println!("{} .haxelib/ folder created", "Created".green().bold()), 37 | Err(e) => println!( 38 | "{} .haxelib/ folder already exists: {}", 39 | "Error".red().bold(), 40 | e 41 | ), 42 | } 43 | } 44 | 45 | pub fn get_samples_dir() -> PathBuf { 46 | let crate_dir = PathBuf::new().join(env!("CARGO_MANIFEST_DIR")); 47 | let tests_dir = crate_dir.join("tests"); 48 | tests_dir.join("samples") 49 | } 50 | -------------------------------------------------------------------------------- /tests/samples/flixel.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "name": "flixel", 5 | "type": "git", 6 | "ref": "master", 7 | "dir": null, 8 | "url": "https://github.com/haxeflixel/flixel" 9 | } 10 | ] 11 | } -------------------------------------------------------------------------------- /tests/samples/hmm.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "name": "flixel", 5 | "type": "git", 6 | "ref": "master", 7 | "dir": null, 8 | "url": "https://github.com/haxeflixel/flixel" 9 | }, 10 | { 11 | "name": "flixel-addons", 12 | "type": "haxelib", 13 | "dir": null, 14 | "version": "3.3.0" 15 | }, 16 | { 17 | "name": "hxcpp", 18 | "type": "git", 19 | "dir": null, 20 | "ref": "v4.3.68", 21 | "url": "https://github.com/HaxeFoundation/hxcpp" 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /tests/samples/version_null.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": [ 3 | { 4 | "name": "format", 5 | "type": "haxelib", 6 | "version": null 7 | } 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /tests/test.rs: -------------------------------------------------------------------------------- 1 | use std::path::PathBuf; 2 | 3 | use common::remove_haxelib_folder; 4 | use hmm_rs::{ 5 | commands::{*}, 6 | hmm, 7 | }; 8 | mod common; 9 | 10 | #[test] 11 | fn test_clean_haxelib_folder() { 12 | common::setup_haxelib_folder(); 13 | assert!(clean_command::remove_haxelib_folder().is_ok()); 14 | assert!(clean_command::remove_haxelib_folder().is_err()); 15 | } 16 | 17 | #[test] 18 | fn test_create_haxelib_folder() { 19 | remove_haxelib_folder(); 20 | assert!(init_command::create_haxelib_folder().is_ok()); 21 | assert!(init_command::create_haxelib_folder().is_err()); 22 | 23 | remove_haxelib_folder(); 24 | } 25 | 26 | #[test] 27 | fn test_hmm_json_read() { 28 | // common::setup(); 29 | let flixel_json = PathBuf::new() 30 | .join(common::get_samples_dir()) 31 | .join("flixel.json"); 32 | assert!(hmm::json::read_json(&flixel_json).is_ok()); 33 | } 34 | --------------------------------------------------------------------------------