├── .cargo └── config.toml ├── .github └── workflows │ ├── build.yml │ ├── common.yml │ └── deploy.yml ├── .gitignore ├── .helix └── languages.toml ├── LICENSE ├── README.md ├── book.toml ├── scripts ├── Cargo.lock ├── Cargo.toml └── src │ ├── command │ ├── generate_demos.rs │ ├── mdbook_preprocessor.rs │ ├── mod.rs │ └── validate.rs │ ├── generate_helix_config.rs │ ├── generate_tape_file.rs │ ├── main.rs │ ├── parse_example.rs │ └── parse_helix_keys.rs └── src ├── SUMMARY.md ├── csv_to_sql.md ├── enumerate_and_align.md ├── export_from_mod.md ├── function_into_class.md ├── introduction.md ├── object_into_array.md ├── reverse_golf_example.md ├── snake_case_to_camel_case.md └── text_into_array.md /.cargo/config.toml: -------------------------------------------------------------------------------- 1 | [alias] 2 | generate-demos = "run --manifest-path ./scripts/Cargo.toml -- generate-demos" 3 | validate = "run --manifest-path ./scripts/Cargo.toml -- validate" 4 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | pull_request: 5 | 6 | jobs: 7 | build: 8 | uses: ./.github/workflows/common.yml 9 | -------------------------------------------------------------------------------- /.github/workflows/common.yml: -------------------------------------------------------------------------------- 1 | name: Common Setup 2 | 3 | on: 4 | workflow_call: 5 | inputs: 6 | do_deploy: 7 | required: false 8 | type: boolean 9 | default: false 10 | 11 | jobs: 12 | setup: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@v4 16 | - uses: actions-rust-lang/setup-rust-toolchain@v1 17 | - uses: actions/setup-go@v3 18 | 19 | - name: Install VHS 20 | run: | 21 | sudo apt-get update 22 | sudo apt-get install -y ffmpeg 23 | sudo snap install ttyd --classic 24 | go install github.com/charmbracelet/vhs@v0.9 25 | echo "$HOME/go/bin" >> $GITHUB_PATH 26 | 27 | - name: Install Helix 28 | run: | 29 | curl -L https://github.com/helix-editor/helix/releases/download/25.01.1/helix-25.01.1-x86_64-linux.tar.xz -o helix.tar.xz 30 | mkdir helix 31 | tar -xf helix.tar.xz -C helix --strip-components=1 32 | mkdir -p ~/.config/helix 33 | mv helix/runtime ~/.config/helix/runtime 34 | echo "$PWD/helix" >> $GITHUB_PATH 35 | 36 | - run: cargo check --manifest-path scripts/Cargo.toml 37 | - run: cargo fmt --manifest-path scripts/Cargo.toml --check 38 | - run: cargo clippy --manifest-path scripts/Cargo.toml --workspace --all-targets -- -D warnings 39 | env: 40 | RUSTDOCFLAGS: -D warnings 41 | 42 | - run: cargo generate-demos 43 | 44 | - name: Setup mdBook 45 | uses: peaceiris/actions-mdbook@v2 46 | with: 47 | mdbook-version: "0.4.50" 48 | 49 | - run: mdbook build 50 | 51 | - name: Copy generated files 52 | if: ${{ inputs.do_deploy }} 53 | run: cp -r ./src/generated ./book 54 | 55 | - name: Deploy to GitHub Pages 56 | if: ${{ inputs.do_deploy }} 57 | uses: peaceiris/actions-gh-pages@v4 58 | with: 59 | github_token: ${{ secrets.GITHUB_TOKEN }} 60 | publish_dir: ./book 61 | publish_branch: gh-pages 62 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | deploy: 10 | uses: ./.github/workflows/common.yml 11 | with: 12 | do_deploy: true 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | book 2 | target 3 | src/generated 4 | -------------------------------------------------------------------------------- /.helix/languages.toml: -------------------------------------------------------------------------------- 1 | [[language]] 2 | name = "markdown" 3 | auto-format = false 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Nikita Revenco 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Helix Golf 2 | 3 | Helix is _very_ good at editing text and this website has examples of how I've refactored some snippets of code using it. 4 | 5 | https://github.com/user-attachments/assets/d79d583e-f79b-40ce-add7-e60a8307156a 6 | 7 | All examples here: 8 | 9 | [https://nik-rev.github.io/helix-golf](https://nik-rev.github.io/helix-golf/) 10 | 11 | ## Contributing 12 | 13 | If you want to suggest a new example, make an issue and I'll add it. 14 | 15 | --- 16 | 17 | If you want to add a new example yourself: create `src/your_example.md` using the following template. 18 | 19 | ````md 20 | # Title 21 | 22 | Made `h` capital and added exclamation mark. 23 | 24 | ## Before 25 | 26 | ``` 27 | hello world 28 | ``` 29 | 30 | ## After 31 | 32 | ``` 33 | Hello world! 34 | ``` 35 | 36 | ## Command 37 | 38 | ``` 39 | ~A! 40 | ``` 41 | 42 | 1. `~` changes case of the selection 43 | 1. `A` go to end and enter insert mode 44 | 1. `!` write the exclamation mark 45 | ```` 46 | 47 | ### Dependencies 48 | 49 | - [Helix](https://docs.helix-editor.com/install.html) 50 | - [Rust](https://www.rust-lang.org/tools/install) 51 | - [mdbook](https://rust-lang.github.io/mdBook/guide/installation.html) 52 | - [VHS](https://github.com/charmbracelet/vhs?tab=readme-ov-file#installation) to generate the demo files and test examples for correctness 53 | 54 | If you don't want to install them but still would like to contribute, you can edit the markdown example files in the [`src/`](src/) folder, send a pull request and the GitHub CI will automatically test your PR. 55 | 56 | ### Validate 57 | 58 | Verify that your example is correctly structured by running the following command in the project root: 59 | 60 | ```sh 61 | cargo validate 62 | ``` 63 | 64 | ### Generate Demos 65 | 66 | The demos for each example are generated and tested by running the following command: 67 | 68 | ```sh 69 | cargo generate-demos 70 | ``` 71 | 72 | You can specify exactly which demos to generate: 73 | 74 | ```sh 75 | cargo generate-demos export_from_mod 76 | ``` 77 | 78 | ### Running locally 79 | 80 | You can run the website locally by running: 81 | 82 | ```sh 83 | mdbook serve 84 | ``` 85 | 86 | It will be available on `http://localhost:3000`. 87 | -------------------------------------------------------------------------------- /book.toml: -------------------------------------------------------------------------------- 1 | [book] 2 | authors = ["Nik Revenco"] 3 | language = "en" 4 | multilingual = false 5 | src = "src" 6 | title = "Helix Golf" 7 | description = "Using Helix to its true potential" 8 | 9 | [output.html] 10 | site-url = "https://nik-rev.github.io/helix-golf" 11 | git-repository-url = "https://github.com/nik-rev/helix-golf" 12 | edit-url-template = "https://github.com/nik-rev/helix-golf/edit/main/{path}" 13 | 14 | [preprocessor.helix-golf] 15 | command = "cargo run --manifest-path scripts/Cargo.toml -- mdbook-preprocessor" 16 | -------------------------------------------------------------------------------- /scripts/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 = "aho-corasick" 22 | version = "1.1.3" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 25 | dependencies = [ 26 | "memchr", 27 | ] 28 | 29 | [[package]] 30 | name = "ammonia" 31 | version = "4.1.0" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | checksum = "3ada2ee439075a3e70b6992fce18ac4e407cd05aea9ca3f75d2c0b0c20bbb364" 34 | dependencies = [ 35 | "cssparser", 36 | "html5ever", 37 | "maplit", 38 | "tendril", 39 | "url", 40 | ] 41 | 42 | [[package]] 43 | name = "android-tzdata" 44 | version = "0.1.1" 45 | source = "registry+https://github.com/rust-lang/crates.io-index" 46 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 47 | 48 | [[package]] 49 | name = "android_system_properties" 50 | version = "0.1.5" 51 | source = "registry+https://github.com/rust-lang/crates.io-index" 52 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 53 | dependencies = [ 54 | "libc", 55 | ] 56 | 57 | [[package]] 58 | name = "anstream" 59 | version = "0.6.18" 60 | source = "registry+https://github.com/rust-lang/crates.io-index" 61 | checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" 62 | dependencies = [ 63 | "anstyle", 64 | "anstyle-parse", 65 | "anstyle-query", 66 | "anstyle-wincon", 67 | "colorchoice", 68 | "is_terminal_polyfill", 69 | "utf8parse", 70 | ] 71 | 72 | [[package]] 73 | name = "anstyle" 74 | version = "1.0.10" 75 | source = "registry+https://github.com/rust-lang/crates.io-index" 76 | checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" 77 | 78 | [[package]] 79 | name = "anstyle-parse" 80 | version = "0.2.6" 81 | source = "registry+https://github.com/rust-lang/crates.io-index" 82 | checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" 83 | dependencies = [ 84 | "utf8parse", 85 | ] 86 | 87 | [[package]] 88 | name = "anstyle-query" 89 | version = "1.1.2" 90 | source = "registry+https://github.com/rust-lang/crates.io-index" 91 | checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" 92 | dependencies = [ 93 | "windows-sys 0.59.0", 94 | ] 95 | 96 | [[package]] 97 | name = "anstyle-wincon" 98 | version = "3.0.8" 99 | source = "registry+https://github.com/rust-lang/crates.io-index" 100 | checksum = "6680de5231bd6ee4c6191b8a1325daa282b415391ec9d3a37bd34f2060dc73fa" 101 | dependencies = [ 102 | "anstyle", 103 | "once_cell_polyfill", 104 | "windows-sys 0.59.0", 105 | ] 106 | 107 | [[package]] 108 | name = "anyhow" 109 | version = "1.0.98" 110 | source = "registry+https://github.com/rust-lang/crates.io-index" 111 | checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" 112 | 113 | [[package]] 114 | name = "autocfg" 115 | version = "1.4.0" 116 | source = "registry+https://github.com/rust-lang/crates.io-index" 117 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 118 | 119 | [[package]] 120 | name = "backtrace" 121 | version = "0.3.75" 122 | source = "registry+https://github.com/rust-lang/crates.io-index" 123 | checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" 124 | dependencies = [ 125 | "addr2line", 126 | "cfg-if", 127 | "libc", 128 | "miniz_oxide", 129 | "object", 130 | "rustc-demangle", 131 | "windows-targets", 132 | ] 133 | 134 | [[package]] 135 | name = "backtrace-ext" 136 | version = "0.2.1" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | checksum = "537beee3be4a18fb023b570f80e3ae28003db9167a751266b259926e25539d50" 139 | dependencies = [ 140 | "backtrace", 141 | ] 142 | 143 | [[package]] 144 | name = "base64" 145 | version = "0.21.7" 146 | source = "registry+https://github.com/rust-lang/crates.io-index" 147 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 148 | 149 | [[package]] 150 | name = "bitflags" 151 | version = "1.3.2" 152 | source = "registry+https://github.com/rust-lang/crates.io-index" 153 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 154 | 155 | [[package]] 156 | name = "bitflags" 157 | version = "2.9.1" 158 | source = "registry+https://github.com/rust-lang/crates.io-index" 159 | checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" 160 | 161 | [[package]] 162 | name = "block-buffer" 163 | version = "0.10.4" 164 | source = "registry+https://github.com/rust-lang/crates.io-index" 165 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 166 | dependencies = [ 167 | "generic-array", 168 | ] 169 | 170 | [[package]] 171 | name = "bstr" 172 | version = "1.12.0" 173 | source = "registry+https://github.com/rust-lang/crates.io-index" 174 | checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" 175 | dependencies = [ 176 | "memchr", 177 | "regex-automata", 178 | "serde", 179 | ] 180 | 181 | [[package]] 182 | name = "bumpalo" 183 | version = "3.17.0" 184 | source = "registry+https://github.com/rust-lang/crates.io-index" 185 | checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" 186 | 187 | [[package]] 188 | name = "byteorder" 189 | version = "1.5.0" 190 | source = "registry+https://github.com/rust-lang/crates.io-index" 191 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 192 | 193 | [[package]] 194 | name = "bytes" 195 | version = "1.10.1" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 198 | 199 | [[package]] 200 | name = "cc" 201 | version = "1.2.24" 202 | source = "registry+https://github.com/rust-lang/crates.io-index" 203 | checksum = "16595d3be041c03b09d08d0858631facccee9221e579704070e6e9e4915d3bc7" 204 | dependencies = [ 205 | "shlex", 206 | ] 207 | 208 | [[package]] 209 | name = "cfg-if" 210 | version = "1.0.0" 211 | source = "registry+https://github.com/rust-lang/crates.io-index" 212 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 213 | 214 | [[package]] 215 | name = "chrono" 216 | version = "0.4.41" 217 | source = "registry+https://github.com/rust-lang/crates.io-index" 218 | checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" 219 | dependencies = [ 220 | "android-tzdata", 221 | "iana-time-zone", 222 | "num-traits", 223 | "windows-link", 224 | ] 225 | 226 | [[package]] 227 | name = "clap" 228 | version = "4.5.39" 229 | source = "registry+https://github.com/rust-lang/crates.io-index" 230 | checksum = "fd60e63e9be68e5fb56422e397cf9baddded06dae1d2e523401542383bc72a9f" 231 | dependencies = [ 232 | "clap_builder", 233 | ] 234 | 235 | [[package]] 236 | name = "clap_builder" 237 | version = "4.5.39" 238 | source = "registry+https://github.com/rust-lang/crates.io-index" 239 | checksum = "89cc6392a1f72bbeb820d71f32108f61fdaf18bc526e1d23954168a67759ef51" 240 | dependencies = [ 241 | "anstream", 242 | "anstyle", 243 | "clap_lex", 244 | "strsim", 245 | "terminal_size", 246 | ] 247 | 248 | [[package]] 249 | name = "clap_complete" 250 | version = "4.5.51" 251 | source = "registry+https://github.com/rust-lang/crates.io-index" 252 | checksum = "8d2267df7f3c8e74e38268887ea5235d4dfadd39bfff2d56ab82d61776be355e" 253 | dependencies = [ 254 | "clap", 255 | ] 256 | 257 | [[package]] 258 | name = "clap_lex" 259 | version = "0.7.4" 260 | source = "registry+https://github.com/rust-lang/crates.io-index" 261 | checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" 262 | 263 | [[package]] 264 | name = "colorchoice" 265 | version = "1.0.3" 266 | source = "registry+https://github.com/rust-lang/crates.io-index" 267 | checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" 268 | 269 | [[package]] 270 | name = "core-foundation-sys" 271 | version = "0.8.7" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 274 | 275 | [[package]] 276 | name = "cpufeatures" 277 | version = "0.2.17" 278 | source = "registry+https://github.com/rust-lang/crates.io-index" 279 | checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 280 | dependencies = [ 281 | "libc", 282 | ] 283 | 284 | [[package]] 285 | name = "crossbeam-deque" 286 | version = "0.8.6" 287 | source = "registry+https://github.com/rust-lang/crates.io-index" 288 | checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" 289 | dependencies = [ 290 | "crossbeam-epoch", 291 | "crossbeam-utils", 292 | ] 293 | 294 | [[package]] 295 | name = "crossbeam-epoch" 296 | version = "0.9.18" 297 | source = "registry+https://github.com/rust-lang/crates.io-index" 298 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 299 | dependencies = [ 300 | "crossbeam-utils", 301 | ] 302 | 303 | [[package]] 304 | name = "crossbeam-utils" 305 | version = "0.8.21" 306 | source = "registry+https://github.com/rust-lang/crates.io-index" 307 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 308 | 309 | [[package]] 310 | name = "crypto-common" 311 | version = "0.1.6" 312 | source = "registry+https://github.com/rust-lang/crates.io-index" 313 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 314 | dependencies = [ 315 | "generic-array", 316 | "typenum", 317 | ] 318 | 319 | [[package]] 320 | name = "cssparser" 321 | version = "0.35.0" 322 | source = "registry+https://github.com/rust-lang/crates.io-index" 323 | checksum = "4e901edd733a1472f944a45116df3f846f54d37e67e68640ac8bb69689aca2aa" 324 | dependencies = [ 325 | "cssparser-macros", 326 | "dtoa-short", 327 | "itoa", 328 | "phf", 329 | "smallvec", 330 | ] 331 | 332 | [[package]] 333 | name = "cssparser-macros" 334 | version = "0.6.1" 335 | source = "registry+https://github.com/rust-lang/crates.io-index" 336 | checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" 337 | dependencies = [ 338 | "quote", 339 | "syn", 340 | ] 341 | 342 | [[package]] 343 | name = "darling" 344 | version = "0.20.11" 345 | source = "registry+https://github.com/rust-lang/crates.io-index" 346 | checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" 347 | dependencies = [ 348 | "darling_core", 349 | "darling_macro", 350 | ] 351 | 352 | [[package]] 353 | name = "darling_core" 354 | version = "0.20.11" 355 | source = "registry+https://github.com/rust-lang/crates.io-index" 356 | checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" 357 | dependencies = [ 358 | "fnv", 359 | "ident_case", 360 | "proc-macro2", 361 | "quote", 362 | "strsim", 363 | "syn", 364 | ] 365 | 366 | [[package]] 367 | name = "darling_macro" 368 | version = "0.20.11" 369 | source = "registry+https://github.com/rust-lang/crates.io-index" 370 | checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" 371 | dependencies = [ 372 | "darling_core", 373 | "quote", 374 | "syn", 375 | ] 376 | 377 | [[package]] 378 | name = "data-encoding" 379 | version = "2.9.0" 380 | source = "registry+https://github.com/rust-lang/crates.io-index" 381 | checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" 382 | 383 | [[package]] 384 | name = "derive_builder" 385 | version = "0.20.2" 386 | source = "registry+https://github.com/rust-lang/crates.io-index" 387 | checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" 388 | dependencies = [ 389 | "derive_builder_macro", 390 | ] 391 | 392 | [[package]] 393 | name = "derive_builder_core" 394 | version = "0.20.2" 395 | source = "registry+https://github.com/rust-lang/crates.io-index" 396 | checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" 397 | dependencies = [ 398 | "darling", 399 | "proc-macro2", 400 | "quote", 401 | "syn", 402 | ] 403 | 404 | [[package]] 405 | name = "derive_builder_macro" 406 | version = "0.20.2" 407 | source = "registry+https://github.com/rust-lang/crates.io-index" 408 | checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" 409 | dependencies = [ 410 | "derive_builder_core", 411 | "syn", 412 | ] 413 | 414 | [[package]] 415 | name = "diff" 416 | version = "0.1.13" 417 | source = "registry+https://github.com/rust-lang/crates.io-index" 418 | checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" 419 | 420 | [[package]] 421 | name = "digest" 422 | version = "0.10.7" 423 | source = "registry+https://github.com/rust-lang/crates.io-index" 424 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 425 | dependencies = [ 426 | "block-buffer", 427 | "crypto-common", 428 | ] 429 | 430 | [[package]] 431 | name = "displaydoc" 432 | version = "0.2.5" 433 | source = "registry+https://github.com/rust-lang/crates.io-index" 434 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 435 | dependencies = [ 436 | "proc-macro2", 437 | "quote", 438 | "syn", 439 | ] 440 | 441 | [[package]] 442 | name = "dtoa" 443 | version = "1.0.10" 444 | source = "registry+https://github.com/rust-lang/crates.io-index" 445 | checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" 446 | 447 | [[package]] 448 | name = "dtoa-short" 449 | version = "0.3.5" 450 | source = "registry+https://github.com/rust-lang/crates.io-index" 451 | checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" 452 | dependencies = [ 453 | "dtoa", 454 | ] 455 | 456 | [[package]] 457 | name = "either" 458 | version = "1.15.0" 459 | source = "registry+https://github.com/rust-lang/crates.io-index" 460 | checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 461 | 462 | [[package]] 463 | name = "elasticlunr-rs" 464 | version = "3.0.2" 465 | source = "registry+https://github.com/rust-lang/crates.io-index" 466 | checksum = "41e83863a500656dfa214fee6682de9c5b9f03de6860fec531235ed2ae9f6571" 467 | dependencies = [ 468 | "regex", 469 | "serde", 470 | "serde_derive", 471 | "serde_json", 472 | ] 473 | 474 | [[package]] 475 | name = "env_filter" 476 | version = "0.1.3" 477 | source = "registry+https://github.com/rust-lang/crates.io-index" 478 | checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" 479 | dependencies = [ 480 | "log", 481 | "regex", 482 | ] 483 | 484 | [[package]] 485 | name = "env_home" 486 | version = "0.1.0" 487 | source = "registry+https://github.com/rust-lang/crates.io-index" 488 | checksum = "c7f84e12ccf0a7ddc17a6c41c93326024c42920d7ee630d04950e6926645c0fe" 489 | 490 | [[package]] 491 | name = "env_logger" 492 | version = "0.11.8" 493 | source = "registry+https://github.com/rust-lang/crates.io-index" 494 | checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" 495 | dependencies = [ 496 | "anstream", 497 | "anstyle", 498 | "env_filter", 499 | "jiff", 500 | "log", 501 | ] 502 | 503 | [[package]] 504 | name = "equivalent" 505 | version = "1.0.2" 506 | source = "registry+https://github.com/rust-lang/crates.io-index" 507 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 508 | 509 | [[package]] 510 | name = "errno" 511 | version = "0.3.12" 512 | source = "registry+https://github.com/rust-lang/crates.io-index" 513 | checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" 514 | dependencies = [ 515 | "libc", 516 | "windows-sys 0.59.0", 517 | ] 518 | 519 | [[package]] 520 | name = "fastrand" 521 | version = "2.3.0" 522 | source = "registry+https://github.com/rust-lang/crates.io-index" 523 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 524 | 525 | [[package]] 526 | name = "filetime" 527 | version = "0.2.25" 528 | source = "registry+https://github.com/rust-lang/crates.io-index" 529 | checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" 530 | dependencies = [ 531 | "cfg-if", 532 | "libc", 533 | "libredox", 534 | "windows-sys 0.59.0", 535 | ] 536 | 537 | [[package]] 538 | name = "fnv" 539 | version = "1.0.7" 540 | source = "registry+https://github.com/rust-lang/crates.io-index" 541 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 542 | 543 | [[package]] 544 | name = "form_urlencoded" 545 | version = "1.2.1" 546 | source = "registry+https://github.com/rust-lang/crates.io-index" 547 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 548 | dependencies = [ 549 | "percent-encoding", 550 | ] 551 | 552 | [[package]] 553 | name = "fsevent-sys" 554 | version = "4.1.0" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" 557 | dependencies = [ 558 | "libc", 559 | ] 560 | 561 | [[package]] 562 | name = "futf" 563 | version = "0.1.5" 564 | source = "registry+https://github.com/rust-lang/crates.io-index" 565 | checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" 566 | dependencies = [ 567 | "mac", 568 | "new_debug_unreachable", 569 | ] 570 | 571 | [[package]] 572 | name = "futures-channel" 573 | version = "0.3.31" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 576 | dependencies = [ 577 | "futures-core", 578 | "futures-sink", 579 | ] 580 | 581 | [[package]] 582 | name = "futures-core" 583 | version = "0.3.31" 584 | source = "registry+https://github.com/rust-lang/crates.io-index" 585 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 586 | 587 | [[package]] 588 | name = "futures-macro" 589 | version = "0.3.31" 590 | source = "registry+https://github.com/rust-lang/crates.io-index" 591 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 592 | dependencies = [ 593 | "proc-macro2", 594 | "quote", 595 | "syn", 596 | ] 597 | 598 | [[package]] 599 | name = "futures-sink" 600 | version = "0.3.31" 601 | source = "registry+https://github.com/rust-lang/crates.io-index" 602 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 603 | 604 | [[package]] 605 | name = "futures-task" 606 | version = "0.3.31" 607 | source = "registry+https://github.com/rust-lang/crates.io-index" 608 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 609 | 610 | [[package]] 611 | name = "futures-util" 612 | version = "0.3.31" 613 | source = "registry+https://github.com/rust-lang/crates.io-index" 614 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 615 | dependencies = [ 616 | "futures-core", 617 | "futures-macro", 618 | "futures-sink", 619 | "futures-task", 620 | "pin-project-lite", 621 | "pin-utils", 622 | "slab", 623 | ] 624 | 625 | [[package]] 626 | name = "generic-array" 627 | version = "0.14.7" 628 | source = "registry+https://github.com/rust-lang/crates.io-index" 629 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 630 | dependencies = [ 631 | "typenum", 632 | "version_check", 633 | ] 634 | 635 | [[package]] 636 | name = "getrandom" 637 | version = "0.2.16" 638 | source = "registry+https://github.com/rust-lang/crates.io-index" 639 | checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 640 | dependencies = [ 641 | "cfg-if", 642 | "libc", 643 | "wasi 0.11.0+wasi-snapshot-preview1", 644 | ] 645 | 646 | [[package]] 647 | name = "getrandom" 648 | version = "0.3.3" 649 | source = "registry+https://github.com/rust-lang/crates.io-index" 650 | checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 651 | dependencies = [ 652 | "cfg-if", 653 | "libc", 654 | "r-efi", 655 | "wasi 0.14.2+wasi-0.2.4", 656 | ] 657 | 658 | [[package]] 659 | name = "gimli" 660 | version = "0.31.1" 661 | source = "registry+https://github.com/rust-lang/crates.io-index" 662 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 663 | 664 | [[package]] 665 | name = "globset" 666 | version = "0.4.16" 667 | source = "registry+https://github.com/rust-lang/crates.io-index" 668 | checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5" 669 | dependencies = [ 670 | "aho-corasick", 671 | "bstr", 672 | "log", 673 | "regex-automata", 674 | "regex-syntax", 675 | ] 676 | 677 | [[package]] 678 | name = "h2" 679 | version = "0.3.26" 680 | source = "registry+https://github.com/rust-lang/crates.io-index" 681 | checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" 682 | dependencies = [ 683 | "bytes", 684 | "fnv", 685 | "futures-core", 686 | "futures-sink", 687 | "futures-util", 688 | "http 0.2.12", 689 | "indexmap", 690 | "slab", 691 | "tokio", 692 | "tokio-util", 693 | "tracing", 694 | ] 695 | 696 | [[package]] 697 | name = "handlebars" 698 | version = "6.3.2" 699 | source = "registry+https://github.com/rust-lang/crates.io-index" 700 | checksum = "759e2d5aea3287cb1190c8ec394f42866cb5bf74fcbf213f354e3c856ea26098" 701 | dependencies = [ 702 | "derive_builder", 703 | "log", 704 | "num-order", 705 | "pest", 706 | "pest_derive", 707 | "serde", 708 | "serde_json", 709 | "thiserror 2.0.12", 710 | ] 711 | 712 | [[package]] 713 | name = "hashbrown" 714 | version = "0.15.3" 715 | source = "registry+https://github.com/rust-lang/crates.io-index" 716 | checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" 717 | 718 | [[package]] 719 | name = "headers" 720 | version = "0.3.9" 721 | source = "registry+https://github.com/rust-lang/crates.io-index" 722 | checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" 723 | dependencies = [ 724 | "base64", 725 | "bytes", 726 | "headers-core", 727 | "http 0.2.12", 728 | "httpdate", 729 | "mime", 730 | "sha1", 731 | ] 732 | 733 | [[package]] 734 | name = "headers-core" 735 | version = "0.2.0" 736 | source = "registry+https://github.com/rust-lang/crates.io-index" 737 | checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" 738 | dependencies = [ 739 | "http 0.2.12", 740 | ] 741 | 742 | [[package]] 743 | name = "hex" 744 | version = "0.4.3" 745 | source = "registry+https://github.com/rust-lang/crates.io-index" 746 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 747 | 748 | [[package]] 749 | name = "html5ever" 750 | version = "0.31.0" 751 | source = "registry+https://github.com/rust-lang/crates.io-index" 752 | checksum = "953cbbe631aae7fc0a112702ad5d3aaf09da38beaf45ea84610d6e1c358f569c" 753 | dependencies = [ 754 | "log", 755 | "mac", 756 | "markup5ever", 757 | "match_token", 758 | ] 759 | 760 | [[package]] 761 | name = "http" 762 | version = "0.2.12" 763 | source = "registry+https://github.com/rust-lang/crates.io-index" 764 | checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" 765 | dependencies = [ 766 | "bytes", 767 | "fnv", 768 | "itoa", 769 | ] 770 | 771 | [[package]] 772 | name = "http" 773 | version = "1.3.1" 774 | source = "registry+https://github.com/rust-lang/crates.io-index" 775 | checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" 776 | dependencies = [ 777 | "bytes", 778 | "fnv", 779 | "itoa", 780 | ] 781 | 782 | [[package]] 783 | name = "http-body" 784 | version = "0.4.6" 785 | source = "registry+https://github.com/rust-lang/crates.io-index" 786 | checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" 787 | dependencies = [ 788 | "bytes", 789 | "http 0.2.12", 790 | "pin-project-lite", 791 | ] 792 | 793 | [[package]] 794 | name = "httparse" 795 | version = "1.10.1" 796 | source = "registry+https://github.com/rust-lang/crates.io-index" 797 | checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 798 | 799 | [[package]] 800 | name = "httpdate" 801 | version = "1.0.3" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 804 | 805 | [[package]] 806 | name = "hyper" 807 | version = "0.14.32" 808 | source = "registry+https://github.com/rust-lang/crates.io-index" 809 | checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" 810 | dependencies = [ 811 | "bytes", 812 | "futures-channel", 813 | "futures-core", 814 | "futures-util", 815 | "h2", 816 | "http 0.2.12", 817 | "http-body", 818 | "httparse", 819 | "httpdate", 820 | "itoa", 821 | "pin-project-lite", 822 | "socket2", 823 | "tokio", 824 | "tower-service", 825 | "tracing", 826 | "want", 827 | ] 828 | 829 | [[package]] 830 | name = "iana-time-zone" 831 | version = "0.1.63" 832 | source = "registry+https://github.com/rust-lang/crates.io-index" 833 | checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" 834 | dependencies = [ 835 | "android_system_properties", 836 | "core-foundation-sys", 837 | "iana-time-zone-haiku", 838 | "js-sys", 839 | "log", 840 | "wasm-bindgen", 841 | "windows-core", 842 | ] 843 | 844 | [[package]] 845 | name = "iana-time-zone-haiku" 846 | version = "0.1.2" 847 | source = "registry+https://github.com/rust-lang/crates.io-index" 848 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 849 | dependencies = [ 850 | "cc", 851 | ] 852 | 853 | [[package]] 854 | name = "icu_collections" 855 | version = "2.0.0" 856 | source = "registry+https://github.com/rust-lang/crates.io-index" 857 | checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 858 | dependencies = [ 859 | "displaydoc", 860 | "potential_utf", 861 | "yoke", 862 | "zerofrom", 863 | "zerovec", 864 | ] 865 | 866 | [[package]] 867 | name = "icu_locale_core" 868 | version = "2.0.0" 869 | source = "registry+https://github.com/rust-lang/crates.io-index" 870 | checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 871 | dependencies = [ 872 | "displaydoc", 873 | "litemap", 874 | "tinystr", 875 | "writeable", 876 | "zerovec", 877 | ] 878 | 879 | [[package]] 880 | name = "icu_normalizer" 881 | version = "2.0.0" 882 | source = "registry+https://github.com/rust-lang/crates.io-index" 883 | checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 884 | dependencies = [ 885 | "displaydoc", 886 | "icu_collections", 887 | "icu_normalizer_data", 888 | "icu_properties", 889 | "icu_provider", 890 | "smallvec", 891 | "zerovec", 892 | ] 893 | 894 | [[package]] 895 | name = "icu_normalizer_data" 896 | version = "2.0.0" 897 | source = "registry+https://github.com/rust-lang/crates.io-index" 898 | checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 899 | 900 | [[package]] 901 | name = "icu_properties" 902 | version = "2.0.1" 903 | source = "registry+https://github.com/rust-lang/crates.io-index" 904 | checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" 905 | dependencies = [ 906 | "displaydoc", 907 | "icu_collections", 908 | "icu_locale_core", 909 | "icu_properties_data", 910 | "icu_provider", 911 | "potential_utf", 912 | "zerotrie", 913 | "zerovec", 914 | ] 915 | 916 | [[package]] 917 | name = "icu_properties_data" 918 | version = "2.0.1" 919 | source = "registry+https://github.com/rust-lang/crates.io-index" 920 | checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" 921 | 922 | [[package]] 923 | name = "icu_provider" 924 | version = "2.0.0" 925 | source = "registry+https://github.com/rust-lang/crates.io-index" 926 | checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 927 | dependencies = [ 928 | "displaydoc", 929 | "icu_locale_core", 930 | "stable_deref_trait", 931 | "tinystr", 932 | "writeable", 933 | "yoke", 934 | "zerofrom", 935 | "zerotrie", 936 | "zerovec", 937 | ] 938 | 939 | [[package]] 940 | name = "ident_case" 941 | version = "1.0.1" 942 | source = "registry+https://github.com/rust-lang/crates.io-index" 943 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 944 | 945 | [[package]] 946 | name = "idna" 947 | version = "1.0.3" 948 | source = "registry+https://github.com/rust-lang/crates.io-index" 949 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 950 | dependencies = [ 951 | "idna_adapter", 952 | "smallvec", 953 | "utf8_iter", 954 | ] 955 | 956 | [[package]] 957 | name = "idna_adapter" 958 | version = "1.2.1" 959 | source = "registry+https://github.com/rust-lang/crates.io-index" 960 | checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 961 | dependencies = [ 962 | "icu_normalizer", 963 | "icu_properties", 964 | ] 965 | 966 | [[package]] 967 | name = "ignore" 968 | version = "0.4.23" 969 | source = "registry+https://github.com/rust-lang/crates.io-index" 970 | checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" 971 | dependencies = [ 972 | "crossbeam-deque", 973 | "globset", 974 | "log", 975 | "memchr", 976 | "regex-automata", 977 | "same-file", 978 | "walkdir", 979 | "winapi-util", 980 | ] 981 | 982 | [[package]] 983 | name = "indexmap" 984 | version = "2.9.0" 985 | source = "registry+https://github.com/rust-lang/crates.io-index" 986 | checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" 987 | dependencies = [ 988 | "equivalent", 989 | "hashbrown", 990 | ] 991 | 992 | [[package]] 993 | name = "inotify" 994 | version = "0.11.0" 995 | source = "registry+https://github.com/rust-lang/crates.io-index" 996 | checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" 997 | dependencies = [ 998 | "bitflags 2.9.1", 999 | "inotify-sys", 1000 | "libc", 1001 | ] 1002 | 1003 | [[package]] 1004 | name = "inotify-sys" 1005 | version = "0.1.5" 1006 | source = "registry+https://github.com/rust-lang/crates.io-index" 1007 | checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" 1008 | dependencies = [ 1009 | "libc", 1010 | ] 1011 | 1012 | [[package]] 1013 | name = "is_ci" 1014 | version = "1.2.0" 1015 | source = "registry+https://github.com/rust-lang/crates.io-index" 1016 | checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" 1017 | 1018 | [[package]] 1019 | name = "is_terminal_polyfill" 1020 | version = "1.70.1" 1021 | source = "registry+https://github.com/rust-lang/crates.io-index" 1022 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 1023 | 1024 | [[package]] 1025 | name = "itoa" 1026 | version = "1.0.15" 1027 | source = "registry+https://github.com/rust-lang/crates.io-index" 1028 | checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 1029 | 1030 | [[package]] 1031 | name = "jiff" 1032 | version = "0.2.14" 1033 | source = "registry+https://github.com/rust-lang/crates.io-index" 1034 | checksum = "a194df1107f33c79f4f93d02c80798520551949d59dfad22b6157048a88cca93" 1035 | dependencies = [ 1036 | "jiff-static", 1037 | "log", 1038 | "portable-atomic", 1039 | "portable-atomic-util", 1040 | "serde", 1041 | ] 1042 | 1043 | [[package]] 1044 | name = "jiff-static" 1045 | version = "0.2.14" 1046 | source = "registry+https://github.com/rust-lang/crates.io-index" 1047 | checksum = "6c6e1db7ed32c6c71b759497fae34bf7933636f75a251b9e736555da426f6442" 1048 | dependencies = [ 1049 | "proc-macro2", 1050 | "quote", 1051 | "syn", 1052 | ] 1053 | 1054 | [[package]] 1055 | name = "js-sys" 1056 | version = "0.3.77" 1057 | source = "registry+https://github.com/rust-lang/crates.io-index" 1058 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 1059 | dependencies = [ 1060 | "once_cell", 1061 | "wasm-bindgen", 1062 | ] 1063 | 1064 | [[package]] 1065 | name = "kqueue" 1066 | version = "1.1.1" 1067 | source = "registry+https://github.com/rust-lang/crates.io-index" 1068 | checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" 1069 | dependencies = [ 1070 | "kqueue-sys", 1071 | "libc", 1072 | ] 1073 | 1074 | [[package]] 1075 | name = "kqueue-sys" 1076 | version = "1.0.4" 1077 | source = "registry+https://github.com/rust-lang/crates.io-index" 1078 | checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" 1079 | dependencies = [ 1080 | "bitflags 1.3.2", 1081 | "libc", 1082 | ] 1083 | 1084 | [[package]] 1085 | name = "libc" 1086 | version = "0.2.172" 1087 | source = "registry+https://github.com/rust-lang/crates.io-index" 1088 | checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" 1089 | 1090 | [[package]] 1091 | name = "libredox" 1092 | version = "0.1.3" 1093 | source = "registry+https://github.com/rust-lang/crates.io-index" 1094 | checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" 1095 | dependencies = [ 1096 | "bitflags 2.9.1", 1097 | "libc", 1098 | "redox_syscall", 1099 | ] 1100 | 1101 | [[package]] 1102 | name = "linux-raw-sys" 1103 | version = "0.9.4" 1104 | source = "registry+https://github.com/rust-lang/crates.io-index" 1105 | checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 1106 | 1107 | [[package]] 1108 | name = "litemap" 1109 | version = "0.8.0" 1110 | source = "registry+https://github.com/rust-lang/crates.io-index" 1111 | checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 1112 | 1113 | [[package]] 1114 | name = "lock_api" 1115 | version = "0.4.12" 1116 | source = "registry+https://github.com/rust-lang/crates.io-index" 1117 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 1118 | dependencies = [ 1119 | "autocfg", 1120 | "scopeguard", 1121 | ] 1122 | 1123 | [[package]] 1124 | name = "log" 1125 | version = "0.4.27" 1126 | source = "registry+https://github.com/rust-lang/crates.io-index" 1127 | checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 1128 | 1129 | [[package]] 1130 | name = "mac" 1131 | version = "0.1.1" 1132 | source = "registry+https://github.com/rust-lang/crates.io-index" 1133 | checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" 1134 | 1135 | [[package]] 1136 | name = "maplit" 1137 | version = "1.0.2" 1138 | source = "registry+https://github.com/rust-lang/crates.io-index" 1139 | checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" 1140 | 1141 | [[package]] 1142 | name = "markdown" 1143 | version = "1.0.0" 1144 | source = "registry+https://github.com/rust-lang/crates.io-index" 1145 | checksum = "a5cab8f2cadc416a82d2e783a1946388b31654d391d1c7d92cc1f03e295b1deb" 1146 | dependencies = [ 1147 | "unicode-id", 1148 | ] 1149 | 1150 | [[package]] 1151 | name = "markup5ever" 1152 | version = "0.16.1" 1153 | source = "registry+https://github.com/rust-lang/crates.io-index" 1154 | checksum = "d0a8096766c229e8c88a3900c9b44b7e06aa7f7343cc229158c3e58ef8f9973a" 1155 | dependencies = [ 1156 | "log", 1157 | "tendril", 1158 | "web_atoms", 1159 | ] 1160 | 1161 | [[package]] 1162 | name = "match_token" 1163 | version = "0.1.0" 1164 | source = "registry+https://github.com/rust-lang/crates.io-index" 1165 | checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" 1166 | dependencies = [ 1167 | "proc-macro2", 1168 | "quote", 1169 | "syn", 1170 | ] 1171 | 1172 | [[package]] 1173 | name = "mdbook" 1174 | version = "0.4.51" 1175 | source = "registry+https://github.com/rust-lang/crates.io-index" 1176 | checksum = "a87e65420ab45ca9c1b8cdf698f95b710cc826d373fa550f0f7fad82beac9328" 1177 | dependencies = [ 1178 | "ammonia", 1179 | "anyhow", 1180 | "chrono", 1181 | "clap", 1182 | "clap_complete", 1183 | "elasticlunr-rs", 1184 | "env_logger", 1185 | "futures-util", 1186 | "handlebars", 1187 | "hex", 1188 | "ignore", 1189 | "log", 1190 | "memchr", 1191 | "notify", 1192 | "notify-debouncer-mini", 1193 | "opener", 1194 | "pathdiff", 1195 | "pulldown-cmark", 1196 | "regex", 1197 | "serde", 1198 | "serde_json", 1199 | "sha2", 1200 | "shlex", 1201 | "tempfile", 1202 | "tokio", 1203 | "toml", 1204 | "topological-sort", 1205 | "walkdir", 1206 | "warp", 1207 | ] 1208 | 1209 | [[package]] 1210 | name = "memchr" 1211 | version = "2.7.4" 1212 | source = "registry+https://github.com/rust-lang/crates.io-index" 1213 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 1214 | 1215 | [[package]] 1216 | name = "miette" 1217 | version = "7.6.0" 1218 | source = "registry+https://github.com/rust-lang/crates.io-index" 1219 | checksum = "5f98efec8807c63c752b5bd61f862c165c115b0a35685bdcfd9238c7aeb592b7" 1220 | dependencies = [ 1221 | "backtrace", 1222 | "backtrace-ext", 1223 | "cfg-if", 1224 | "miette-derive", 1225 | "owo-colors", 1226 | "supports-color", 1227 | "supports-hyperlinks", 1228 | "supports-unicode", 1229 | "terminal_size", 1230 | "textwrap", 1231 | "unicode-width 0.1.14", 1232 | ] 1233 | 1234 | [[package]] 1235 | name = "miette-derive" 1236 | version = "7.6.0" 1237 | source = "registry+https://github.com/rust-lang/crates.io-index" 1238 | checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" 1239 | dependencies = [ 1240 | "proc-macro2", 1241 | "quote", 1242 | "syn", 1243 | ] 1244 | 1245 | [[package]] 1246 | name = "mime" 1247 | version = "0.3.17" 1248 | source = "registry+https://github.com/rust-lang/crates.io-index" 1249 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1250 | 1251 | [[package]] 1252 | name = "mime_guess" 1253 | version = "2.0.5" 1254 | source = "registry+https://github.com/rust-lang/crates.io-index" 1255 | checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 1256 | dependencies = [ 1257 | "mime", 1258 | "unicase", 1259 | ] 1260 | 1261 | [[package]] 1262 | name = "miniz_oxide" 1263 | version = "0.8.8" 1264 | source = "registry+https://github.com/rust-lang/crates.io-index" 1265 | checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" 1266 | dependencies = [ 1267 | "adler2", 1268 | ] 1269 | 1270 | [[package]] 1271 | name = "mio" 1272 | version = "1.0.4" 1273 | source = "registry+https://github.com/rust-lang/crates.io-index" 1274 | checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" 1275 | dependencies = [ 1276 | "libc", 1277 | "log", 1278 | "wasi 0.11.0+wasi-snapshot-preview1", 1279 | "windows-sys 0.59.0", 1280 | ] 1281 | 1282 | [[package]] 1283 | name = "new_debug_unreachable" 1284 | version = "1.0.6" 1285 | source = "registry+https://github.com/rust-lang/crates.io-index" 1286 | checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" 1287 | 1288 | [[package]] 1289 | name = "normpath" 1290 | version = "1.3.0" 1291 | source = "registry+https://github.com/rust-lang/crates.io-index" 1292 | checksum = "c8911957c4b1549ac0dc74e30db9c8b0e66ddcd6d7acc33098f4c63a64a6d7ed" 1293 | dependencies = [ 1294 | "windows-sys 0.59.0", 1295 | ] 1296 | 1297 | [[package]] 1298 | name = "notify" 1299 | version = "8.0.0" 1300 | source = "registry+https://github.com/rust-lang/crates.io-index" 1301 | checksum = "2fee8403b3d66ac7b26aee6e40a897d85dc5ce26f44da36b8b73e987cc52e943" 1302 | dependencies = [ 1303 | "bitflags 2.9.1", 1304 | "filetime", 1305 | "fsevent-sys", 1306 | "inotify", 1307 | "kqueue", 1308 | "libc", 1309 | "log", 1310 | "mio", 1311 | "notify-types", 1312 | "walkdir", 1313 | "windows-sys 0.59.0", 1314 | ] 1315 | 1316 | [[package]] 1317 | name = "notify-debouncer-mini" 1318 | version = "0.6.0" 1319 | source = "registry+https://github.com/rust-lang/crates.io-index" 1320 | checksum = "a689eb4262184d9a1727f9087cd03883ea716682ab03ed24efec57d7716dccb8" 1321 | dependencies = [ 1322 | "log", 1323 | "notify", 1324 | "notify-types", 1325 | "tempfile", 1326 | ] 1327 | 1328 | [[package]] 1329 | name = "notify-types" 1330 | version = "2.0.0" 1331 | source = "registry+https://github.com/rust-lang/crates.io-index" 1332 | checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" 1333 | 1334 | [[package]] 1335 | name = "num-modular" 1336 | version = "0.6.1" 1337 | source = "registry+https://github.com/rust-lang/crates.io-index" 1338 | checksum = "17bb261bf36fa7d83f4c294f834e91256769097b3cb505d44831e0a179ac647f" 1339 | 1340 | [[package]] 1341 | name = "num-order" 1342 | version = "1.2.0" 1343 | source = "registry+https://github.com/rust-lang/crates.io-index" 1344 | checksum = "537b596b97c40fcf8056d153049eb22f481c17ebce72a513ec9286e4986d1bb6" 1345 | dependencies = [ 1346 | "num-modular", 1347 | ] 1348 | 1349 | [[package]] 1350 | name = "num-traits" 1351 | version = "0.2.19" 1352 | source = "registry+https://github.com/rust-lang/crates.io-index" 1353 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1354 | dependencies = [ 1355 | "autocfg", 1356 | ] 1357 | 1358 | [[package]] 1359 | name = "object" 1360 | version = "0.36.7" 1361 | source = "registry+https://github.com/rust-lang/crates.io-index" 1362 | checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 1363 | dependencies = [ 1364 | "memchr", 1365 | ] 1366 | 1367 | [[package]] 1368 | name = "once_cell" 1369 | version = "1.21.3" 1370 | source = "registry+https://github.com/rust-lang/crates.io-index" 1371 | checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 1372 | 1373 | [[package]] 1374 | name = "once_cell_polyfill" 1375 | version = "1.70.1" 1376 | source = "registry+https://github.com/rust-lang/crates.io-index" 1377 | checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" 1378 | 1379 | [[package]] 1380 | name = "opener" 1381 | version = "0.8.1" 1382 | source = "registry+https://github.com/rust-lang/crates.io-index" 1383 | checksum = "de96cad6ee771be7f68df884d3767460b4684012308d8342ed5623fe62b2628c" 1384 | dependencies = [ 1385 | "bstr", 1386 | "normpath", 1387 | "windows-sys 0.59.0", 1388 | ] 1389 | 1390 | [[package]] 1391 | name = "owo-colors" 1392 | version = "4.2.1" 1393 | source = "registry+https://github.com/rust-lang/crates.io-index" 1394 | checksum = "26995317201fa17f3656c36716aed4a7c81743a9634ac4c99c0eeda495db0cec" 1395 | 1396 | [[package]] 1397 | name = "parking_lot" 1398 | version = "0.12.3" 1399 | source = "registry+https://github.com/rust-lang/crates.io-index" 1400 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 1401 | dependencies = [ 1402 | "lock_api", 1403 | "parking_lot_core", 1404 | ] 1405 | 1406 | [[package]] 1407 | name = "parking_lot_core" 1408 | version = "0.9.10" 1409 | source = "registry+https://github.com/rust-lang/crates.io-index" 1410 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 1411 | dependencies = [ 1412 | "cfg-if", 1413 | "libc", 1414 | "redox_syscall", 1415 | "smallvec", 1416 | "windows-targets", 1417 | ] 1418 | 1419 | [[package]] 1420 | name = "pathdiff" 1421 | version = "0.2.3" 1422 | source = "registry+https://github.com/rust-lang/crates.io-index" 1423 | checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" 1424 | 1425 | [[package]] 1426 | name = "percent-encoding" 1427 | version = "2.3.1" 1428 | source = "registry+https://github.com/rust-lang/crates.io-index" 1429 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1430 | 1431 | [[package]] 1432 | name = "pest" 1433 | version = "2.8.0" 1434 | source = "registry+https://github.com/rust-lang/crates.io-index" 1435 | checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" 1436 | dependencies = [ 1437 | "memchr", 1438 | "thiserror 2.0.12", 1439 | "ucd-trie", 1440 | ] 1441 | 1442 | [[package]] 1443 | name = "pest_derive" 1444 | version = "2.8.0" 1445 | source = "registry+https://github.com/rust-lang/crates.io-index" 1446 | checksum = "d725d9cfd79e87dccc9341a2ef39d1b6f6353d68c4b33c177febbe1a402c97c5" 1447 | dependencies = [ 1448 | "pest", 1449 | "pest_generator", 1450 | ] 1451 | 1452 | [[package]] 1453 | name = "pest_generator" 1454 | version = "2.8.0" 1455 | source = "registry+https://github.com/rust-lang/crates.io-index" 1456 | checksum = "db7d01726be8ab66ab32f9df467ae8b1148906685bbe75c82d1e65d7f5b3f841" 1457 | dependencies = [ 1458 | "pest", 1459 | "pest_meta", 1460 | "proc-macro2", 1461 | "quote", 1462 | "syn", 1463 | ] 1464 | 1465 | [[package]] 1466 | name = "pest_meta" 1467 | version = "2.8.0" 1468 | source = "registry+https://github.com/rust-lang/crates.io-index" 1469 | checksum = "7f9f832470494906d1fca5329f8ab5791cc60beb230c74815dff541cbd2b5ca0" 1470 | dependencies = [ 1471 | "once_cell", 1472 | "pest", 1473 | "sha2", 1474 | ] 1475 | 1476 | [[package]] 1477 | name = "phf" 1478 | version = "0.11.3" 1479 | source = "registry+https://github.com/rust-lang/crates.io-index" 1480 | checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 1481 | dependencies = [ 1482 | "phf_macros", 1483 | "phf_shared", 1484 | ] 1485 | 1486 | [[package]] 1487 | name = "phf_codegen" 1488 | version = "0.11.3" 1489 | source = "registry+https://github.com/rust-lang/crates.io-index" 1490 | checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" 1491 | dependencies = [ 1492 | "phf_generator", 1493 | "phf_shared", 1494 | ] 1495 | 1496 | [[package]] 1497 | name = "phf_generator" 1498 | version = "0.11.3" 1499 | source = "registry+https://github.com/rust-lang/crates.io-index" 1500 | checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" 1501 | dependencies = [ 1502 | "phf_shared", 1503 | "rand", 1504 | ] 1505 | 1506 | [[package]] 1507 | name = "phf_macros" 1508 | version = "0.11.3" 1509 | source = "registry+https://github.com/rust-lang/crates.io-index" 1510 | checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" 1511 | dependencies = [ 1512 | "phf_generator", 1513 | "phf_shared", 1514 | "proc-macro2", 1515 | "quote", 1516 | "syn", 1517 | ] 1518 | 1519 | [[package]] 1520 | name = "phf_shared" 1521 | version = "0.11.3" 1522 | source = "registry+https://github.com/rust-lang/crates.io-index" 1523 | checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 1524 | dependencies = [ 1525 | "siphasher", 1526 | ] 1527 | 1528 | [[package]] 1529 | name = "pin-project" 1530 | version = "1.1.10" 1531 | source = "registry+https://github.com/rust-lang/crates.io-index" 1532 | checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" 1533 | dependencies = [ 1534 | "pin-project-internal", 1535 | ] 1536 | 1537 | [[package]] 1538 | name = "pin-project-internal" 1539 | version = "1.1.10" 1540 | source = "registry+https://github.com/rust-lang/crates.io-index" 1541 | checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" 1542 | dependencies = [ 1543 | "proc-macro2", 1544 | "quote", 1545 | "syn", 1546 | ] 1547 | 1548 | [[package]] 1549 | name = "pin-project-lite" 1550 | version = "0.2.16" 1551 | source = "registry+https://github.com/rust-lang/crates.io-index" 1552 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 1553 | 1554 | [[package]] 1555 | name = "pin-utils" 1556 | version = "0.1.0" 1557 | source = "registry+https://github.com/rust-lang/crates.io-index" 1558 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1559 | 1560 | [[package]] 1561 | name = "portable-atomic" 1562 | version = "1.11.0" 1563 | source = "registry+https://github.com/rust-lang/crates.io-index" 1564 | checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" 1565 | 1566 | [[package]] 1567 | name = "portable-atomic-util" 1568 | version = "0.2.4" 1569 | source = "registry+https://github.com/rust-lang/crates.io-index" 1570 | checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" 1571 | dependencies = [ 1572 | "portable-atomic", 1573 | ] 1574 | 1575 | [[package]] 1576 | name = "potential_utf" 1577 | version = "0.1.2" 1578 | source = "registry+https://github.com/rust-lang/crates.io-index" 1579 | checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" 1580 | dependencies = [ 1581 | "zerovec", 1582 | ] 1583 | 1584 | [[package]] 1585 | name = "ppv-lite86" 1586 | version = "0.2.21" 1587 | source = "registry+https://github.com/rust-lang/crates.io-index" 1588 | checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 1589 | dependencies = [ 1590 | "zerocopy", 1591 | ] 1592 | 1593 | [[package]] 1594 | name = "precomputed-hash" 1595 | version = "0.1.1" 1596 | source = "registry+https://github.com/rust-lang/crates.io-index" 1597 | checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" 1598 | 1599 | [[package]] 1600 | name = "pretty_assertions" 1601 | version = "1.4.1" 1602 | source = "registry+https://github.com/rust-lang/crates.io-index" 1603 | checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" 1604 | dependencies = [ 1605 | "diff", 1606 | "yansi", 1607 | ] 1608 | 1609 | [[package]] 1610 | name = "proc-macro2" 1611 | version = "1.0.95" 1612 | source = "registry+https://github.com/rust-lang/crates.io-index" 1613 | checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 1614 | dependencies = [ 1615 | "unicode-ident", 1616 | ] 1617 | 1618 | [[package]] 1619 | name = "pulldown-cmark" 1620 | version = "0.10.3" 1621 | source = "registry+https://github.com/rust-lang/crates.io-index" 1622 | checksum = "76979bea66e7875e7509c4ec5300112b316af87fa7a252ca91c448b32dfe3993" 1623 | dependencies = [ 1624 | "bitflags 2.9.1", 1625 | "memchr", 1626 | "pulldown-cmark-escape", 1627 | "unicase", 1628 | ] 1629 | 1630 | [[package]] 1631 | name = "pulldown-cmark-escape" 1632 | version = "0.10.1" 1633 | source = "registry+https://github.com/rust-lang/crates.io-index" 1634 | checksum = "bd348ff538bc9caeda7ee8cad2d1d48236a1f443c1fa3913c6a02fe0043b1dd3" 1635 | 1636 | [[package]] 1637 | name = "quote" 1638 | version = "1.0.40" 1639 | source = "registry+https://github.com/rust-lang/crates.io-index" 1640 | checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 1641 | dependencies = [ 1642 | "proc-macro2", 1643 | ] 1644 | 1645 | [[package]] 1646 | name = "r-efi" 1647 | version = "5.2.0" 1648 | source = "registry+https://github.com/rust-lang/crates.io-index" 1649 | checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" 1650 | 1651 | [[package]] 1652 | name = "rand" 1653 | version = "0.8.5" 1654 | source = "registry+https://github.com/rust-lang/crates.io-index" 1655 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1656 | dependencies = [ 1657 | "libc", 1658 | "rand_chacha", 1659 | "rand_core", 1660 | ] 1661 | 1662 | [[package]] 1663 | name = "rand_chacha" 1664 | version = "0.3.1" 1665 | source = "registry+https://github.com/rust-lang/crates.io-index" 1666 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1667 | dependencies = [ 1668 | "ppv-lite86", 1669 | "rand_core", 1670 | ] 1671 | 1672 | [[package]] 1673 | name = "rand_core" 1674 | version = "0.6.4" 1675 | source = "registry+https://github.com/rust-lang/crates.io-index" 1676 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1677 | dependencies = [ 1678 | "getrandom 0.2.16", 1679 | ] 1680 | 1681 | [[package]] 1682 | name = "rayon" 1683 | version = "1.10.0" 1684 | source = "registry+https://github.com/rust-lang/crates.io-index" 1685 | checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" 1686 | dependencies = [ 1687 | "either", 1688 | "rayon-core", 1689 | ] 1690 | 1691 | [[package]] 1692 | name = "rayon-core" 1693 | version = "1.12.1" 1694 | source = "registry+https://github.com/rust-lang/crates.io-index" 1695 | checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" 1696 | dependencies = [ 1697 | "crossbeam-deque", 1698 | "crossbeam-utils", 1699 | ] 1700 | 1701 | [[package]] 1702 | name = "redox_syscall" 1703 | version = "0.5.12" 1704 | source = "registry+https://github.com/rust-lang/crates.io-index" 1705 | checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" 1706 | dependencies = [ 1707 | "bitflags 2.9.1", 1708 | ] 1709 | 1710 | [[package]] 1711 | name = "regex" 1712 | version = "1.11.1" 1713 | source = "registry+https://github.com/rust-lang/crates.io-index" 1714 | checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 1715 | dependencies = [ 1716 | "aho-corasick", 1717 | "memchr", 1718 | "regex-automata", 1719 | "regex-syntax", 1720 | ] 1721 | 1722 | [[package]] 1723 | name = "regex-automata" 1724 | version = "0.4.9" 1725 | source = "registry+https://github.com/rust-lang/crates.io-index" 1726 | checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 1727 | dependencies = [ 1728 | "aho-corasick", 1729 | "memchr", 1730 | "regex-syntax", 1731 | ] 1732 | 1733 | [[package]] 1734 | name = "regex-syntax" 1735 | version = "0.8.5" 1736 | source = "registry+https://github.com/rust-lang/crates.io-index" 1737 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 1738 | 1739 | [[package]] 1740 | name = "rustc-demangle" 1741 | version = "0.1.24" 1742 | source = "registry+https://github.com/rust-lang/crates.io-index" 1743 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1744 | 1745 | [[package]] 1746 | name = "rustix" 1747 | version = "1.0.7" 1748 | source = "registry+https://github.com/rust-lang/crates.io-index" 1749 | checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" 1750 | dependencies = [ 1751 | "bitflags 2.9.1", 1752 | "errno", 1753 | "libc", 1754 | "linux-raw-sys", 1755 | "windows-sys 0.59.0", 1756 | ] 1757 | 1758 | [[package]] 1759 | name = "rustversion" 1760 | version = "1.0.21" 1761 | source = "registry+https://github.com/rust-lang/crates.io-index" 1762 | checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" 1763 | 1764 | [[package]] 1765 | name = "ryu" 1766 | version = "1.0.20" 1767 | source = "registry+https://github.com/rust-lang/crates.io-index" 1768 | checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 1769 | 1770 | [[package]] 1771 | name = "same-file" 1772 | version = "1.0.6" 1773 | source = "registry+https://github.com/rust-lang/crates.io-index" 1774 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 1775 | dependencies = [ 1776 | "winapi-util", 1777 | ] 1778 | 1779 | [[package]] 1780 | name = "scoped-tls" 1781 | version = "1.0.1" 1782 | source = "registry+https://github.com/rust-lang/crates.io-index" 1783 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 1784 | 1785 | [[package]] 1786 | name = "scopeguard" 1787 | version = "1.2.0" 1788 | source = "registry+https://github.com/rust-lang/crates.io-index" 1789 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1790 | 1791 | [[package]] 1792 | name = "scripts" 1793 | version = "0.1.0" 1794 | dependencies = [ 1795 | "bitflags 2.9.1", 1796 | "markdown", 1797 | "mdbook", 1798 | "miette", 1799 | "pretty_assertions", 1800 | "rayon", 1801 | "serde_json", 1802 | "tap", 1803 | "thiserror 2.0.12", 1804 | "which", 1805 | ] 1806 | 1807 | [[package]] 1808 | name = "serde" 1809 | version = "1.0.219" 1810 | source = "registry+https://github.com/rust-lang/crates.io-index" 1811 | checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 1812 | dependencies = [ 1813 | "serde_derive", 1814 | ] 1815 | 1816 | [[package]] 1817 | name = "serde_derive" 1818 | version = "1.0.219" 1819 | source = "registry+https://github.com/rust-lang/crates.io-index" 1820 | checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 1821 | dependencies = [ 1822 | "proc-macro2", 1823 | "quote", 1824 | "syn", 1825 | ] 1826 | 1827 | [[package]] 1828 | name = "serde_json" 1829 | version = "1.0.140" 1830 | source = "registry+https://github.com/rust-lang/crates.io-index" 1831 | checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" 1832 | dependencies = [ 1833 | "itoa", 1834 | "memchr", 1835 | "ryu", 1836 | "serde", 1837 | ] 1838 | 1839 | [[package]] 1840 | name = "serde_urlencoded" 1841 | version = "0.7.1" 1842 | source = "registry+https://github.com/rust-lang/crates.io-index" 1843 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1844 | dependencies = [ 1845 | "form_urlencoded", 1846 | "itoa", 1847 | "ryu", 1848 | "serde", 1849 | ] 1850 | 1851 | [[package]] 1852 | name = "sha1" 1853 | version = "0.10.6" 1854 | source = "registry+https://github.com/rust-lang/crates.io-index" 1855 | checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 1856 | dependencies = [ 1857 | "cfg-if", 1858 | "cpufeatures", 1859 | "digest", 1860 | ] 1861 | 1862 | [[package]] 1863 | name = "sha2" 1864 | version = "0.10.9" 1865 | source = "registry+https://github.com/rust-lang/crates.io-index" 1866 | checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 1867 | dependencies = [ 1868 | "cfg-if", 1869 | "cpufeatures", 1870 | "digest", 1871 | ] 1872 | 1873 | [[package]] 1874 | name = "shlex" 1875 | version = "1.3.0" 1876 | source = "registry+https://github.com/rust-lang/crates.io-index" 1877 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1878 | 1879 | [[package]] 1880 | name = "siphasher" 1881 | version = "1.0.1" 1882 | source = "registry+https://github.com/rust-lang/crates.io-index" 1883 | checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" 1884 | 1885 | [[package]] 1886 | name = "slab" 1887 | version = "0.4.9" 1888 | source = "registry+https://github.com/rust-lang/crates.io-index" 1889 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1890 | dependencies = [ 1891 | "autocfg", 1892 | ] 1893 | 1894 | [[package]] 1895 | name = "smallvec" 1896 | version = "1.15.0" 1897 | source = "registry+https://github.com/rust-lang/crates.io-index" 1898 | checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" 1899 | 1900 | [[package]] 1901 | name = "socket2" 1902 | version = "0.5.10" 1903 | source = "registry+https://github.com/rust-lang/crates.io-index" 1904 | checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" 1905 | dependencies = [ 1906 | "libc", 1907 | "windows-sys 0.52.0", 1908 | ] 1909 | 1910 | [[package]] 1911 | name = "stable_deref_trait" 1912 | version = "1.2.0" 1913 | source = "registry+https://github.com/rust-lang/crates.io-index" 1914 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1915 | 1916 | [[package]] 1917 | name = "string_cache" 1918 | version = "0.8.9" 1919 | source = "registry+https://github.com/rust-lang/crates.io-index" 1920 | checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" 1921 | dependencies = [ 1922 | "new_debug_unreachable", 1923 | "parking_lot", 1924 | "phf_shared", 1925 | "precomputed-hash", 1926 | "serde", 1927 | ] 1928 | 1929 | [[package]] 1930 | name = "string_cache_codegen" 1931 | version = "0.5.4" 1932 | source = "registry+https://github.com/rust-lang/crates.io-index" 1933 | checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" 1934 | dependencies = [ 1935 | "phf_generator", 1936 | "phf_shared", 1937 | "proc-macro2", 1938 | "quote", 1939 | ] 1940 | 1941 | [[package]] 1942 | name = "strsim" 1943 | version = "0.11.1" 1944 | source = "registry+https://github.com/rust-lang/crates.io-index" 1945 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 1946 | 1947 | [[package]] 1948 | name = "supports-color" 1949 | version = "3.0.2" 1950 | source = "registry+https://github.com/rust-lang/crates.io-index" 1951 | checksum = "c64fc7232dd8d2e4ac5ce4ef302b1d81e0b80d055b9d77c7c4f51f6aa4c867d6" 1952 | dependencies = [ 1953 | "is_ci", 1954 | ] 1955 | 1956 | [[package]] 1957 | name = "supports-hyperlinks" 1958 | version = "3.1.0" 1959 | source = "registry+https://github.com/rust-lang/crates.io-index" 1960 | checksum = "804f44ed3c63152de6a9f90acbea1a110441de43006ea51bcce8f436196a288b" 1961 | 1962 | [[package]] 1963 | name = "supports-unicode" 1964 | version = "3.0.0" 1965 | source = "registry+https://github.com/rust-lang/crates.io-index" 1966 | checksum = "b7401a30af6cb5818bb64852270bb722533397edcfc7344954a38f420819ece2" 1967 | 1968 | [[package]] 1969 | name = "syn" 1970 | version = "2.0.101" 1971 | source = "registry+https://github.com/rust-lang/crates.io-index" 1972 | checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" 1973 | dependencies = [ 1974 | "proc-macro2", 1975 | "quote", 1976 | "unicode-ident", 1977 | ] 1978 | 1979 | [[package]] 1980 | name = "synstructure" 1981 | version = "0.13.2" 1982 | source = "registry+https://github.com/rust-lang/crates.io-index" 1983 | checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 1984 | dependencies = [ 1985 | "proc-macro2", 1986 | "quote", 1987 | "syn", 1988 | ] 1989 | 1990 | [[package]] 1991 | name = "tap" 1992 | version = "1.0.1" 1993 | source = "registry+https://github.com/rust-lang/crates.io-index" 1994 | checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" 1995 | 1996 | [[package]] 1997 | name = "tempfile" 1998 | version = "3.20.0" 1999 | source = "registry+https://github.com/rust-lang/crates.io-index" 2000 | checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" 2001 | dependencies = [ 2002 | "fastrand", 2003 | "getrandom 0.3.3", 2004 | "once_cell", 2005 | "rustix", 2006 | "windows-sys 0.59.0", 2007 | ] 2008 | 2009 | [[package]] 2010 | name = "tendril" 2011 | version = "0.4.3" 2012 | source = "registry+https://github.com/rust-lang/crates.io-index" 2013 | checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" 2014 | dependencies = [ 2015 | "futf", 2016 | "mac", 2017 | "utf-8", 2018 | ] 2019 | 2020 | [[package]] 2021 | name = "terminal_size" 2022 | version = "0.4.2" 2023 | source = "registry+https://github.com/rust-lang/crates.io-index" 2024 | checksum = "45c6481c4829e4cc63825e62c49186a34538b7b2750b73b266581ffb612fb5ed" 2025 | dependencies = [ 2026 | "rustix", 2027 | "windows-sys 0.59.0", 2028 | ] 2029 | 2030 | [[package]] 2031 | name = "textwrap" 2032 | version = "0.16.2" 2033 | source = "registry+https://github.com/rust-lang/crates.io-index" 2034 | checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" 2035 | dependencies = [ 2036 | "unicode-linebreak", 2037 | "unicode-width 0.2.0", 2038 | ] 2039 | 2040 | [[package]] 2041 | name = "thiserror" 2042 | version = "1.0.69" 2043 | source = "registry+https://github.com/rust-lang/crates.io-index" 2044 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 2045 | dependencies = [ 2046 | "thiserror-impl 1.0.69", 2047 | ] 2048 | 2049 | [[package]] 2050 | name = "thiserror" 2051 | version = "2.0.12" 2052 | source = "registry+https://github.com/rust-lang/crates.io-index" 2053 | checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 2054 | dependencies = [ 2055 | "thiserror-impl 2.0.12", 2056 | ] 2057 | 2058 | [[package]] 2059 | name = "thiserror-impl" 2060 | version = "1.0.69" 2061 | source = "registry+https://github.com/rust-lang/crates.io-index" 2062 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 2063 | dependencies = [ 2064 | "proc-macro2", 2065 | "quote", 2066 | "syn", 2067 | ] 2068 | 2069 | [[package]] 2070 | name = "thiserror-impl" 2071 | version = "2.0.12" 2072 | source = "registry+https://github.com/rust-lang/crates.io-index" 2073 | checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 2074 | dependencies = [ 2075 | "proc-macro2", 2076 | "quote", 2077 | "syn", 2078 | ] 2079 | 2080 | [[package]] 2081 | name = "tinystr" 2082 | version = "0.8.1" 2083 | source = "registry+https://github.com/rust-lang/crates.io-index" 2084 | checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 2085 | dependencies = [ 2086 | "displaydoc", 2087 | "zerovec", 2088 | ] 2089 | 2090 | [[package]] 2091 | name = "tokio" 2092 | version = "1.45.1" 2093 | source = "registry+https://github.com/rust-lang/crates.io-index" 2094 | checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" 2095 | dependencies = [ 2096 | "backtrace", 2097 | "bytes", 2098 | "libc", 2099 | "mio", 2100 | "pin-project-lite", 2101 | "socket2", 2102 | "tokio-macros", 2103 | "windows-sys 0.52.0", 2104 | ] 2105 | 2106 | [[package]] 2107 | name = "tokio-macros" 2108 | version = "2.5.0" 2109 | source = "registry+https://github.com/rust-lang/crates.io-index" 2110 | checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 2111 | dependencies = [ 2112 | "proc-macro2", 2113 | "quote", 2114 | "syn", 2115 | ] 2116 | 2117 | [[package]] 2118 | name = "tokio-tungstenite" 2119 | version = "0.21.0" 2120 | source = "registry+https://github.com/rust-lang/crates.io-index" 2121 | checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38" 2122 | dependencies = [ 2123 | "futures-util", 2124 | "log", 2125 | "tokio", 2126 | "tungstenite", 2127 | ] 2128 | 2129 | [[package]] 2130 | name = "tokio-util" 2131 | version = "0.7.15" 2132 | source = "registry+https://github.com/rust-lang/crates.io-index" 2133 | checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" 2134 | dependencies = [ 2135 | "bytes", 2136 | "futures-core", 2137 | "futures-sink", 2138 | "pin-project-lite", 2139 | "tokio", 2140 | ] 2141 | 2142 | [[package]] 2143 | name = "toml" 2144 | version = "0.5.11" 2145 | source = "registry+https://github.com/rust-lang/crates.io-index" 2146 | checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" 2147 | dependencies = [ 2148 | "serde", 2149 | ] 2150 | 2151 | [[package]] 2152 | name = "topological-sort" 2153 | version = "0.2.2" 2154 | source = "registry+https://github.com/rust-lang/crates.io-index" 2155 | checksum = "ea68304e134ecd095ac6c3574494fc62b909f416c4fca77e440530221e549d3d" 2156 | 2157 | [[package]] 2158 | name = "tower-service" 2159 | version = "0.3.3" 2160 | source = "registry+https://github.com/rust-lang/crates.io-index" 2161 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 2162 | 2163 | [[package]] 2164 | name = "tracing" 2165 | version = "0.1.41" 2166 | source = "registry+https://github.com/rust-lang/crates.io-index" 2167 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 2168 | dependencies = [ 2169 | "log", 2170 | "pin-project-lite", 2171 | "tracing-core", 2172 | ] 2173 | 2174 | [[package]] 2175 | name = "tracing-core" 2176 | version = "0.1.33" 2177 | source = "registry+https://github.com/rust-lang/crates.io-index" 2178 | checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" 2179 | dependencies = [ 2180 | "once_cell", 2181 | ] 2182 | 2183 | [[package]] 2184 | name = "try-lock" 2185 | version = "0.2.5" 2186 | source = "registry+https://github.com/rust-lang/crates.io-index" 2187 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 2188 | 2189 | [[package]] 2190 | name = "tungstenite" 2191 | version = "0.21.0" 2192 | source = "registry+https://github.com/rust-lang/crates.io-index" 2193 | checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" 2194 | dependencies = [ 2195 | "byteorder", 2196 | "bytes", 2197 | "data-encoding", 2198 | "http 1.3.1", 2199 | "httparse", 2200 | "log", 2201 | "rand", 2202 | "sha1", 2203 | "thiserror 1.0.69", 2204 | "url", 2205 | "utf-8", 2206 | ] 2207 | 2208 | [[package]] 2209 | name = "typenum" 2210 | version = "1.18.0" 2211 | source = "registry+https://github.com/rust-lang/crates.io-index" 2212 | checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 2213 | 2214 | [[package]] 2215 | name = "ucd-trie" 2216 | version = "0.1.7" 2217 | source = "registry+https://github.com/rust-lang/crates.io-index" 2218 | checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" 2219 | 2220 | [[package]] 2221 | name = "unicase" 2222 | version = "2.8.1" 2223 | source = "registry+https://github.com/rust-lang/crates.io-index" 2224 | checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" 2225 | 2226 | [[package]] 2227 | name = "unicode-id" 2228 | version = "0.3.5" 2229 | source = "registry+https://github.com/rust-lang/crates.io-index" 2230 | checksum = "10103c57044730945224467c09f71a4db0071c123a0648cc3e818913bde6b561" 2231 | 2232 | [[package]] 2233 | name = "unicode-ident" 2234 | version = "1.0.18" 2235 | source = "registry+https://github.com/rust-lang/crates.io-index" 2236 | checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 2237 | 2238 | [[package]] 2239 | name = "unicode-linebreak" 2240 | version = "0.1.5" 2241 | source = "registry+https://github.com/rust-lang/crates.io-index" 2242 | checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" 2243 | 2244 | [[package]] 2245 | name = "unicode-width" 2246 | version = "0.1.14" 2247 | source = "registry+https://github.com/rust-lang/crates.io-index" 2248 | checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 2249 | 2250 | [[package]] 2251 | name = "unicode-width" 2252 | version = "0.2.0" 2253 | source = "registry+https://github.com/rust-lang/crates.io-index" 2254 | checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" 2255 | 2256 | [[package]] 2257 | name = "url" 2258 | version = "2.5.4" 2259 | source = "registry+https://github.com/rust-lang/crates.io-index" 2260 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 2261 | dependencies = [ 2262 | "form_urlencoded", 2263 | "idna", 2264 | "percent-encoding", 2265 | ] 2266 | 2267 | [[package]] 2268 | name = "utf-8" 2269 | version = "0.7.6" 2270 | source = "registry+https://github.com/rust-lang/crates.io-index" 2271 | checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 2272 | 2273 | [[package]] 2274 | name = "utf8_iter" 2275 | version = "1.0.4" 2276 | source = "registry+https://github.com/rust-lang/crates.io-index" 2277 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 2278 | 2279 | [[package]] 2280 | name = "utf8parse" 2281 | version = "0.2.2" 2282 | source = "registry+https://github.com/rust-lang/crates.io-index" 2283 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 2284 | 2285 | [[package]] 2286 | name = "version_check" 2287 | version = "0.9.5" 2288 | source = "registry+https://github.com/rust-lang/crates.io-index" 2289 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 2290 | 2291 | [[package]] 2292 | name = "walkdir" 2293 | version = "2.5.0" 2294 | source = "registry+https://github.com/rust-lang/crates.io-index" 2295 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 2296 | dependencies = [ 2297 | "same-file", 2298 | "winapi-util", 2299 | ] 2300 | 2301 | [[package]] 2302 | name = "want" 2303 | version = "0.3.1" 2304 | source = "registry+https://github.com/rust-lang/crates.io-index" 2305 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 2306 | dependencies = [ 2307 | "try-lock", 2308 | ] 2309 | 2310 | [[package]] 2311 | name = "warp" 2312 | version = "0.3.7" 2313 | source = "registry+https://github.com/rust-lang/crates.io-index" 2314 | checksum = "4378d202ff965b011c64817db11d5829506d3404edeadb61f190d111da3f231c" 2315 | dependencies = [ 2316 | "bytes", 2317 | "futures-channel", 2318 | "futures-util", 2319 | "headers", 2320 | "http 0.2.12", 2321 | "hyper", 2322 | "log", 2323 | "mime", 2324 | "mime_guess", 2325 | "percent-encoding", 2326 | "pin-project", 2327 | "scoped-tls", 2328 | "serde", 2329 | "serde_json", 2330 | "serde_urlencoded", 2331 | "tokio", 2332 | "tokio-tungstenite", 2333 | "tokio-util", 2334 | "tower-service", 2335 | "tracing", 2336 | ] 2337 | 2338 | [[package]] 2339 | name = "wasi" 2340 | version = "0.11.0+wasi-snapshot-preview1" 2341 | source = "registry+https://github.com/rust-lang/crates.io-index" 2342 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 2343 | 2344 | [[package]] 2345 | name = "wasi" 2346 | version = "0.14.2+wasi-0.2.4" 2347 | source = "registry+https://github.com/rust-lang/crates.io-index" 2348 | checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 2349 | dependencies = [ 2350 | "wit-bindgen-rt", 2351 | ] 2352 | 2353 | [[package]] 2354 | name = "wasm-bindgen" 2355 | version = "0.2.100" 2356 | source = "registry+https://github.com/rust-lang/crates.io-index" 2357 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 2358 | dependencies = [ 2359 | "cfg-if", 2360 | "once_cell", 2361 | "rustversion", 2362 | "wasm-bindgen-macro", 2363 | ] 2364 | 2365 | [[package]] 2366 | name = "wasm-bindgen-backend" 2367 | version = "0.2.100" 2368 | source = "registry+https://github.com/rust-lang/crates.io-index" 2369 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 2370 | dependencies = [ 2371 | "bumpalo", 2372 | "log", 2373 | "proc-macro2", 2374 | "quote", 2375 | "syn", 2376 | "wasm-bindgen-shared", 2377 | ] 2378 | 2379 | [[package]] 2380 | name = "wasm-bindgen-macro" 2381 | version = "0.2.100" 2382 | source = "registry+https://github.com/rust-lang/crates.io-index" 2383 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 2384 | dependencies = [ 2385 | "quote", 2386 | "wasm-bindgen-macro-support", 2387 | ] 2388 | 2389 | [[package]] 2390 | name = "wasm-bindgen-macro-support" 2391 | version = "0.2.100" 2392 | source = "registry+https://github.com/rust-lang/crates.io-index" 2393 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 2394 | dependencies = [ 2395 | "proc-macro2", 2396 | "quote", 2397 | "syn", 2398 | "wasm-bindgen-backend", 2399 | "wasm-bindgen-shared", 2400 | ] 2401 | 2402 | [[package]] 2403 | name = "wasm-bindgen-shared" 2404 | version = "0.2.100" 2405 | source = "registry+https://github.com/rust-lang/crates.io-index" 2406 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 2407 | dependencies = [ 2408 | "unicode-ident", 2409 | ] 2410 | 2411 | [[package]] 2412 | name = "web_atoms" 2413 | version = "0.1.2" 2414 | source = "registry+https://github.com/rust-lang/crates.io-index" 2415 | checksum = "0b9c5f0bc545ea3b20b423e33b9b457764de0b3730cd957f6c6aa6c301785f6e" 2416 | dependencies = [ 2417 | "phf", 2418 | "phf_codegen", 2419 | "string_cache", 2420 | "string_cache_codegen", 2421 | ] 2422 | 2423 | [[package]] 2424 | name = "which" 2425 | version = "7.0.3" 2426 | source = "registry+https://github.com/rust-lang/crates.io-index" 2427 | checksum = "24d643ce3fd3e5b54854602a080f34fb10ab75e0b813ee32d00ca2b44fa74762" 2428 | dependencies = [ 2429 | "either", 2430 | "env_home", 2431 | "rustix", 2432 | "winsafe", 2433 | ] 2434 | 2435 | [[package]] 2436 | name = "winapi-util" 2437 | version = "0.1.9" 2438 | source = "registry+https://github.com/rust-lang/crates.io-index" 2439 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 2440 | dependencies = [ 2441 | "windows-sys 0.59.0", 2442 | ] 2443 | 2444 | [[package]] 2445 | name = "windows-core" 2446 | version = "0.61.2" 2447 | source = "registry+https://github.com/rust-lang/crates.io-index" 2448 | checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 2449 | dependencies = [ 2450 | "windows-implement", 2451 | "windows-interface", 2452 | "windows-link", 2453 | "windows-result", 2454 | "windows-strings", 2455 | ] 2456 | 2457 | [[package]] 2458 | name = "windows-implement" 2459 | version = "0.60.0" 2460 | source = "registry+https://github.com/rust-lang/crates.io-index" 2461 | checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" 2462 | dependencies = [ 2463 | "proc-macro2", 2464 | "quote", 2465 | "syn", 2466 | ] 2467 | 2468 | [[package]] 2469 | name = "windows-interface" 2470 | version = "0.59.1" 2471 | source = "registry+https://github.com/rust-lang/crates.io-index" 2472 | checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" 2473 | dependencies = [ 2474 | "proc-macro2", 2475 | "quote", 2476 | "syn", 2477 | ] 2478 | 2479 | [[package]] 2480 | name = "windows-link" 2481 | version = "0.1.1" 2482 | source = "registry+https://github.com/rust-lang/crates.io-index" 2483 | checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" 2484 | 2485 | [[package]] 2486 | name = "windows-result" 2487 | version = "0.3.4" 2488 | source = "registry+https://github.com/rust-lang/crates.io-index" 2489 | checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 2490 | dependencies = [ 2491 | "windows-link", 2492 | ] 2493 | 2494 | [[package]] 2495 | name = "windows-strings" 2496 | version = "0.4.2" 2497 | source = "registry+https://github.com/rust-lang/crates.io-index" 2498 | checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 2499 | dependencies = [ 2500 | "windows-link", 2501 | ] 2502 | 2503 | [[package]] 2504 | name = "windows-sys" 2505 | version = "0.52.0" 2506 | source = "registry+https://github.com/rust-lang/crates.io-index" 2507 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2508 | dependencies = [ 2509 | "windows-targets", 2510 | ] 2511 | 2512 | [[package]] 2513 | name = "windows-sys" 2514 | version = "0.59.0" 2515 | source = "registry+https://github.com/rust-lang/crates.io-index" 2516 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 2517 | dependencies = [ 2518 | "windows-targets", 2519 | ] 2520 | 2521 | [[package]] 2522 | name = "windows-targets" 2523 | version = "0.52.6" 2524 | source = "registry+https://github.com/rust-lang/crates.io-index" 2525 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 2526 | dependencies = [ 2527 | "windows_aarch64_gnullvm", 2528 | "windows_aarch64_msvc", 2529 | "windows_i686_gnu", 2530 | "windows_i686_gnullvm", 2531 | "windows_i686_msvc", 2532 | "windows_x86_64_gnu", 2533 | "windows_x86_64_gnullvm", 2534 | "windows_x86_64_msvc", 2535 | ] 2536 | 2537 | [[package]] 2538 | name = "windows_aarch64_gnullvm" 2539 | version = "0.52.6" 2540 | source = "registry+https://github.com/rust-lang/crates.io-index" 2541 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 2542 | 2543 | [[package]] 2544 | name = "windows_aarch64_msvc" 2545 | version = "0.52.6" 2546 | source = "registry+https://github.com/rust-lang/crates.io-index" 2547 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 2548 | 2549 | [[package]] 2550 | name = "windows_i686_gnu" 2551 | version = "0.52.6" 2552 | source = "registry+https://github.com/rust-lang/crates.io-index" 2553 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 2554 | 2555 | [[package]] 2556 | name = "windows_i686_gnullvm" 2557 | version = "0.52.6" 2558 | source = "registry+https://github.com/rust-lang/crates.io-index" 2559 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 2560 | 2561 | [[package]] 2562 | name = "windows_i686_msvc" 2563 | version = "0.52.6" 2564 | source = "registry+https://github.com/rust-lang/crates.io-index" 2565 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 2566 | 2567 | [[package]] 2568 | name = "windows_x86_64_gnu" 2569 | version = "0.52.6" 2570 | source = "registry+https://github.com/rust-lang/crates.io-index" 2571 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 2572 | 2573 | [[package]] 2574 | name = "windows_x86_64_gnullvm" 2575 | version = "0.52.6" 2576 | source = "registry+https://github.com/rust-lang/crates.io-index" 2577 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 2578 | 2579 | [[package]] 2580 | name = "windows_x86_64_msvc" 2581 | version = "0.52.6" 2582 | source = "registry+https://github.com/rust-lang/crates.io-index" 2583 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 2584 | 2585 | [[package]] 2586 | name = "winsafe" 2587 | version = "0.0.19" 2588 | source = "registry+https://github.com/rust-lang/crates.io-index" 2589 | checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" 2590 | 2591 | [[package]] 2592 | name = "wit-bindgen-rt" 2593 | version = "0.39.0" 2594 | source = "registry+https://github.com/rust-lang/crates.io-index" 2595 | checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 2596 | dependencies = [ 2597 | "bitflags 2.9.1", 2598 | ] 2599 | 2600 | [[package]] 2601 | name = "writeable" 2602 | version = "0.6.1" 2603 | source = "registry+https://github.com/rust-lang/crates.io-index" 2604 | checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 2605 | 2606 | [[package]] 2607 | name = "yansi" 2608 | version = "1.0.1" 2609 | source = "registry+https://github.com/rust-lang/crates.io-index" 2610 | checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" 2611 | 2612 | [[package]] 2613 | name = "yoke" 2614 | version = "0.8.0" 2615 | source = "registry+https://github.com/rust-lang/crates.io-index" 2616 | checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 2617 | dependencies = [ 2618 | "serde", 2619 | "stable_deref_trait", 2620 | "yoke-derive", 2621 | "zerofrom", 2622 | ] 2623 | 2624 | [[package]] 2625 | name = "yoke-derive" 2626 | version = "0.8.0" 2627 | source = "registry+https://github.com/rust-lang/crates.io-index" 2628 | checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 2629 | dependencies = [ 2630 | "proc-macro2", 2631 | "quote", 2632 | "syn", 2633 | "synstructure", 2634 | ] 2635 | 2636 | [[package]] 2637 | name = "zerocopy" 2638 | version = "0.8.25" 2639 | source = "registry+https://github.com/rust-lang/crates.io-index" 2640 | checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" 2641 | dependencies = [ 2642 | "zerocopy-derive", 2643 | ] 2644 | 2645 | [[package]] 2646 | name = "zerocopy-derive" 2647 | version = "0.8.25" 2648 | source = "registry+https://github.com/rust-lang/crates.io-index" 2649 | checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" 2650 | dependencies = [ 2651 | "proc-macro2", 2652 | "quote", 2653 | "syn", 2654 | ] 2655 | 2656 | [[package]] 2657 | name = "zerofrom" 2658 | version = "0.1.6" 2659 | source = "registry+https://github.com/rust-lang/crates.io-index" 2660 | checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 2661 | dependencies = [ 2662 | "zerofrom-derive", 2663 | ] 2664 | 2665 | [[package]] 2666 | name = "zerofrom-derive" 2667 | version = "0.1.6" 2668 | source = "registry+https://github.com/rust-lang/crates.io-index" 2669 | checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 2670 | dependencies = [ 2671 | "proc-macro2", 2672 | "quote", 2673 | "syn", 2674 | "synstructure", 2675 | ] 2676 | 2677 | [[package]] 2678 | name = "zerotrie" 2679 | version = "0.2.2" 2680 | source = "registry+https://github.com/rust-lang/crates.io-index" 2681 | checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 2682 | dependencies = [ 2683 | "displaydoc", 2684 | "yoke", 2685 | "zerofrom", 2686 | ] 2687 | 2688 | [[package]] 2689 | name = "zerovec" 2690 | version = "0.11.2" 2691 | source = "registry+https://github.com/rust-lang/crates.io-index" 2692 | checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" 2693 | dependencies = [ 2694 | "yoke", 2695 | "zerofrom", 2696 | "zerovec-derive", 2697 | ] 2698 | 2699 | [[package]] 2700 | name = "zerovec-derive" 2701 | version = "0.11.1" 2702 | source = "registry+https://github.com/rust-lang/crates.io-index" 2703 | checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 2704 | dependencies = [ 2705 | "proc-macro2", 2706 | "quote", 2707 | "syn", 2708 | ] 2709 | -------------------------------------------------------------------------------- /scripts/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "scripts" 3 | version = "0.1.0" 4 | edition = "2024" 5 | 6 | [dependencies] 7 | # required by helix vendor 8 | bitflags = "2.9.1" 9 | # parse markdown 10 | markdown = "1.0.0" 11 | mdbook = "0.4.51" 12 | # beautiful error messages 13 | miette = { version = "7.6.0", features = ["fancy"] } 14 | # ensure BEFORE and AFTER is the same and get a colorful diff if they aren't 15 | pretty_assertions = "1.4.1" 16 | # generate each example in parallel 17 | rayon = "1.10.0" 18 | serde_json = "1.0.140" 19 | # functional methods such as Pipe 20 | tap = "1.0.1" 21 | # `#[derive(Error)]` 22 | thiserror = "2.0.12" 23 | # check if binary `vhs` exists 24 | which = "7.0.3" 25 | 26 | [lints.rust] 27 | missing_docs = "warn" 28 | unused_qualifications = "warn" 29 | 30 | [lints.clippy] 31 | pedantic = { priority = -1, level = "warn" } 32 | nursery = { priority = -1, level = "warn" } 33 | # use Trait; => use Trait as _; 34 | unused_trait_names = "warn" 35 | # if we need it const, make it const. no need to make everything that can be const, const 36 | missing_const_for_fn = "allow" 37 | # arbitrary limit imposes unnecessary restriction and can make code harder to follow 38 | too_many_lines = "allow" 39 | -------------------------------------------------------------------------------- /scripts/src/command/generate_demos.rs: -------------------------------------------------------------------------------- 1 | //! Generate demo `.mp4` files for each example 2 | 3 | use miette::{IntoDiagnostic as _, ensure, miette}; 4 | use rayon::iter::{IntoParallelRefIterator as _, ParallelIterator as _}; 5 | use std::{fs, process::Command}; 6 | 7 | use crate::{command::GENERATED_DIR, parse_example::Example}; 8 | 9 | /// Generate `.mp4` files for each command 10 | pub fn generate_demos(examples: &[Example]) -> miette::Result<()> { 11 | // Use a custom helix config to ensure reproducibility 12 | // 13 | // This is also necessary because VHS cannot handle some 14 | crate::generate_helix_config::generate(); 15 | 16 | examples 17 | .par_iter() 18 | .try_for_each(|example| -> Result<(), miette::Error> { 19 | let name = &example.name; 20 | let ext = &example.language; 21 | 22 | let tape_contents = example.to_string(); 23 | 24 | let tape_file = GENERATED_DIR.join(format!("{name}.tape")); 25 | 26 | // Create .tape file 27 | // 28 | // These are the commands inputted into `vhs` 29 | fs::write(&tape_file, tape_contents).map_err(|err| { 30 | miette!( 31 | "Failed to create `{}` for example `{name}`: {err}", 32 | tape_file.display() 33 | ) 34 | })?; 35 | 36 | let modification_file = GENERATED_DIR.join(format!("{name}.{ext}")); 37 | 38 | // First, this file has contents Before 39 | // 40 | // as we modify it, it'll have the contents that we expect from After 41 | fs::write(&modification_file, &example.before).map_err(|err| { 42 | miette!("Failed to create `Before` for example `{name}.{ext}`: {err}",) 43 | })?; 44 | 45 | ensure!( 46 | which::which("vhs").is_ok(), 47 | "ERROR (command `vhs` not found): You need to \ 48 | install `vhs` in order to generate the demos" 49 | ); 50 | 51 | // Generate the .mp4 file preview 52 | Command::new("vhs") 53 | .arg(tape_file) 54 | .spawn() 55 | .into_diagnostic()? 56 | .wait() 57 | .into_diagnostic()?; 58 | 59 | // Assert that the `## Before` code block is equal to the `## After` code block 60 | // once we have executed the commands in `## Commands` code block. 61 | pretty_assertions::assert_str_eq!( 62 | fs::read_to_string(modification_file) 63 | .expect( 64 | "read to not fail, because file exists as \ 65 | we have just written to it earlier" 66 | ) 67 | .trim(), 68 | example.after.trim(), 69 | "example `{name}`" 70 | ); 71 | 72 | println!("Example `{name}` has been successfully tested."); 73 | 74 | Ok(()) 75 | })?; 76 | 77 | println!("All examples have been successfully rendered and tested."); 78 | 79 | Ok(()) 80 | } 81 | -------------------------------------------------------------------------------- /scripts/src/command/mdbook_preprocessor.rs: -------------------------------------------------------------------------------- 1 | //! Preprocessor for mdbook that adds the example video to each page 2 | 3 | use std::{env, io}; 4 | 5 | use mdbook::preprocess::{CmdPreprocessor, Preprocessor}; 6 | use miette::miette; 7 | use tap::Pipe as _; 8 | 9 | pub fn mdbook_preprocessor() -> miette::Result<()> { 10 | // 1. Skip the binary name 11 | // 2. Skip the first command `mdbook-preprocessor` which signals this binary to 12 | // run the markdown preprocessor 13 | match env::args().nth(2).as_deref() { 14 | Some("supports") => { 15 | // Supports all renderers 16 | return Ok(()); 17 | } 18 | Some(arg) => { 19 | eprintln!("unknown argument: {arg}"); 20 | std::process::exit(1); 21 | } 22 | None => {} 23 | } 24 | 25 | CmdPreprocessor::parse_input(io::stdin()) 26 | .map_err(|err| miette!("failed to parse mdbook input: {err}"))? 27 | .pipe(|(ctx, book)| GolfPreprocessor.run(&ctx, book)) 28 | .map_err(|err| miette!("failed to run the helix-golf mdbook preprocessor: {err}"))? 29 | .pipe(|book| serde_json::to_writer(io::stdout(), &book)) 30 | .map_err(|err| miette!("failed to write the modified mdbook: {err}")) 31 | } 32 | 33 | struct GolfPreprocessor; 34 | 35 | impl Preprocessor for GolfPreprocessor { 36 | fn name(&self) -> &'static str { 37 | "helix-golf-preprocessor" 38 | } 39 | 40 | fn run( 41 | &self, 42 | _ctx: &mdbook::preprocess::PreprocessorContext, 43 | mut book: mdbook::book::Book, 44 | ) -> mdbook::errors::Result { 45 | book.for_each_mut(|book_item| { 46 | if let mdbook::BookItem::Chapter(chapter) = book_item { 47 | if let (Some(name), Some(start)) = ( 48 | chapter 49 | .path 50 | .as_ref() 51 | .and_then(|path| path.file_stem()) 52 | .and_then(|stem| stem.to_str()), 53 | chapter.content.find("## Command"), 54 | ) { 55 | if name != "introduction" { 56 | let (before, after) = chapter.content.split_at(start); 57 | 58 | chapter.content = format!( 59 | r#" 60 | {before} 61 | 62 | ## Preview 63 | 64 | 67 | 68 | {after}"# 69 | ); 70 | } 71 | } 72 | } 73 | }); 74 | 75 | Ok(book) 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /scripts/src/command/mod.rs: -------------------------------------------------------------------------------- 1 | //! The `Command` represents possible things this binary can do 2 | 3 | mod generate_demos; 4 | mod mdbook_preprocessor; 5 | mod validate; 6 | 7 | use std::str::FromStr; 8 | use std::{ 9 | path::{Path, PathBuf}, 10 | sync::LazyLock, 11 | }; 12 | 13 | use tap::Pipe as _; 14 | 15 | /// Source directory for the mdbook content files 16 | pub static ROOT_DIR: LazyLock = 17 | LazyLock::new(|| Path::new(env!("CARGO_MANIFEST_DIR")).join("..").join("src")); 18 | 19 | /// Directory where we place all of the generated files 20 | pub static GENERATED_DIR: LazyLock = LazyLock::new(|| ROOT_DIR.join("generated")); 21 | 22 | /// The action that the binary should execute 23 | #[derive(Clone, Copy)] 24 | pub enum Command { 25 | /// Parse all examples, to make sure they conform to the required structure 26 | Validate, 27 | /// 1. Perform `Validate` 28 | /// 2. Generate demo `.mp4` files 29 | /// 3. Test that each demo is correct 30 | GenerateDemos, 31 | /// Transforms each markdown file, adding a `