├── cli ├── src │ ├── command │ │ ├── mod.rs │ │ └── generate.rs │ ├── main.rs │ └── types.rs └── Cargo.toml ├── assets ├── languages │ ├── fluent │ │ ├── ja-JP.ftl │ │ ├── zh-Hans.ftl │ │ └── en-US.ftl │ └── classic │ │ ├── ja_JP.egl │ │ ├── zh_CN.egl │ │ └── en_US.egl └── images │ └── ferris.png ├── .gitignore ├── i18n ├── src │ ├── vendor │ │ ├── mod.rs │ │ ├── fluent.rs │ │ └── classic.rs │ └── lib.rs ├── Cargo.toml ├── LICENSE └── README.md ├── rust-toolchain.toml ├── scripts ├── egui-i18n.sh └── egui-example.sh ├── examples ├── classic │ ├── Cargo.toml │ └── src │ │ └── main.rs └── fluent │ ├── Cargo.toml │ └── src │ └── main.rs ├── .github └── workflows │ ├── check.yml │ └── release.yml ├── .rustfmt.toml ├── Cargo.toml ├── README.md └── Cargo.lock /cli/src/command/mod.rs: -------------------------------------------------------------------------------- 1 | 2 | pub mod generate; 3 | -------------------------------------------------------------------------------- /assets/languages/fluent/ja-JP.ftl: -------------------------------------------------------------------------------- 1 | hello-name = こんにちは {$name}! 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | /target 4 | 5 | _tmp 6 | *.local.* 7 | -------------------------------------------------------------------------------- /assets/images/ferris.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fewensa/egui-i18n/HEAD/assets/images/ferris.png -------------------------------------------------------------------------------- /assets/languages/classic/ja_JP.egl: -------------------------------------------------------------------------------- 1 | Hello\=, {name}! = こんにちは {name}! 2 | hello-name = こんにちは {name}! 3 | -------------------------------------------------------------------------------- /i18n/src/vendor/mod.rs: -------------------------------------------------------------------------------- 1 | 2 | #[cfg(feature = "classic")] 3 | pub mod classic; 4 | #[cfg(feature = "fluent")] 5 | pub mod fluent; 6 | -------------------------------------------------------------------------------- /rust-toolchain.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | channel = "stable" 3 | components = ["cargo", "clippy", "rustc", "rustfmt", "rust-src"] 4 | profile = "minimal" 5 | -------------------------------------------------------------------------------- /assets/languages/classic/zh_CN.egl: -------------------------------------------------------------------------------- 1 | Hello\=, {name}! = 你好 {name}! 2 | hello-name = 你好 {name}! 3 | My name is {name} and {age} years old = 我的姓名是 {name}, 我今年 {age} 岁 4 | -------------------------------------------------------------------------------- /assets/languages/classic/en_US.egl: -------------------------------------------------------------------------------- 1 | Hello\=, {name}! = Hello=, {name}! 2 | hello-name = Hello, {name}! 3 | My name is {name} and {age} years old = My name is {name} and {age} years old 4 | -------------------------------------------------------------------------------- /assets/languages/fluent/zh-Hans.ftl: -------------------------------------------------------------------------------- 1 | hello-name = 你好 {$name}! 2 | my-name-and-age = 3 | 我的名字是 {$name} {$age -> 4 | [0] 年龄 ??? 5 | [1] 我今年 1 岁了! 6 | *[other] , 我 {$age} 岁了 7 | } 8 | -------------------------------------------------------------------------------- /assets/languages/fluent/en-US.ftl: -------------------------------------------------------------------------------- 1 | hello-name = Hello, { $name }! 2 | my-name-and-age = 3 | My name is {$name} and {$age -> 4 | [0] ??? 5 | [one] I'm one year old! 6 | *[other] {$age} years old 7 | } 8 | -------------------------------------------------------------------------------- /scripts/egui-i18n.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | 4 | 5 | set -ex 6 | 7 | BIN_PATH=$(cd "$(dirname "$0")"; pwd -P) 8 | WORK_PATH=${BIN_PATH}/../ 9 | 10 | 11 | cargo build \ 12 | --manifest-path=${WORK_PATH}/Cargo.toml 13 | 14 | export RUST_LOG=trace 15 | ${WORK_PATH}/target/debug/egui-i18n-cli $@ 16 | -------------------------------------------------------------------------------- /scripts/egui-example.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | 4 | 5 | set -ex 6 | 7 | BIN_PATH=$(cd "$(dirname "$0")"; pwd -P) 8 | WORK_PATH=${BIN_PATH}/../ 9 | 10 | 11 | cargo build \ 12 | --manifest-path=${WORK_PATH}/Cargo.toml 13 | 14 | export RUST_LOG=trace 15 | ${WORK_PATH}/target/debug/egui-i18n-example $@ 16 | -------------------------------------------------------------------------------- /cli/src/main.rs: -------------------------------------------------------------------------------- 1 | use structopt::StructOpt; 2 | 3 | mod types; 4 | mod command; 5 | 6 | fn main() -> color_eyre::Result<()> { 7 | init()?; 8 | let opt = types::Opt::from_args(); 9 | match opt.cmd { 10 | types::Command::Generate { opts } => command::generate::generate_languages(opts)?, 11 | }; 12 | Ok(()) 13 | } 14 | 15 | fn init() -> color_eyre::Result<()> { 16 | color_eyre::install()?; 17 | Ok(()) 18 | } 19 | -------------------------------------------------------------------------------- /examples/classic/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "egui-i18n-example-classic" 3 | version.workspace = true 4 | authors.workspace = true 5 | description.workspace = true 6 | edition.workspace = true 7 | homepage.workspace = true 8 | license.workspace = true 9 | repository.workspace = true 10 | include.workspace = true 11 | publish = false 12 | 13 | [dependencies] 14 | eframe = "0.31.0" 15 | 16 | egui-i18n = { workspace = true } 17 | 18 | # For image support: 19 | egui_extras = { version = "0.31.0", features = ["default", "image"] } 20 | env_logger = { version = "0.11.6", default-features = false, features = [ 21 | "auto-color", 22 | "humantime", 23 | ] } 24 | -------------------------------------------------------------------------------- /examples/fluent/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "egui-i18n-example-fluent" 3 | version.workspace = true 4 | authors.workspace = true 5 | description.workspace = true 6 | edition.workspace = true 7 | homepage.workspace = true 8 | license.workspace = true 9 | repository.workspace = true 10 | include.workspace = true 11 | publish = false 12 | 13 | [dependencies] 14 | eframe = "0.31" 15 | 16 | egui-i18n = { workspace = true, features = ["fluent"] } 17 | 18 | # For image support: 19 | egui_extras = { version = "0.31", features = ["default", "image"] } 20 | env_logger = { version = "0.11", default-features = false, features = [ 21 | "auto-color", 22 | "humantime", 23 | ] } 24 | -------------------------------------------------------------------------------- /cli/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "egui-i18n-cli" 3 | version.workspace = true 4 | authors.workspace = true 5 | description.workspace = true 6 | edition.workspace = true 7 | homepage.workspace = true 8 | license.workspace = true 9 | readme.workspace = true 10 | repository.workspace = true 11 | include.workspace = true 12 | categories = ["gui"] 13 | keywords = ["gui", "immediate", "portable"] 14 | publish = false 15 | 16 | [dependencies] 17 | color-eyre = { workspace = true } 18 | structopt = { workspace = true, features = ["paw"] } 19 | paw = { workspace = true } 20 | 21 | egui-i18n = { workspace = true } 22 | syn = { workspace = true } 23 | quote = { workspace = true } 24 | proc-macro2 = { workspace = true } 25 | -------------------------------------------------------------------------------- /.github/workflows/check.yml: -------------------------------------------------------------------------------- 1 | name: 'Check' 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | branches: 9 | - main 10 | 11 | jobs: 12 | 13 | check: 14 | name: Check 15 | runs-on: ubuntu-latest 16 | steps: 17 | - uses: actions/checkout@v4 18 | 19 | - name: Setup Rust 20 | uses: actions-rust-lang/setup-rust-toolchain@v1 21 | with: 22 | toolchain: stable 23 | 24 | - name: Test deps 25 | run: | 26 | rustc --version 27 | cargo --version 28 | 29 | - name: Lint 30 | run: cargo clippy --release --all -- -D warnings 31 | 32 | - name: Run tests 33 | run: cargo test --release 34 | -------------------------------------------------------------------------------- /.rustfmt.toml: -------------------------------------------------------------------------------- 1 | # Basic 2 | edition = "2021" 3 | hard_tabs = false 4 | max_width = 100 5 | tab_spaces = 2 6 | 7 | # Imports 8 | imports_granularity = "Crate" 9 | reorder_imports = true 10 | 11 | # Format comments 12 | comment_width = 100 13 | wrap_comments = true 14 | 15 | # Misc 16 | match_arm_blocks = false 17 | match_block_trailing_comma = true 18 | newline_style = "Unix" 19 | reorder_impl_items = true 20 | reorder_modules = true 21 | use_field_init_shorthand = true 22 | use_small_heuristics = "Max" 23 | 24 | # Wait for stablization 25 | # format_code_in_doc_comments = true 26 | 27 | # Could give it a try 28 | # group_imports = "StdExternalCrate" 29 | # inline_attribute_width = 100 30 | -------------------------------------------------------------------------------- /i18n/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "egui-i18n" 3 | version.workspace = true 4 | authors.workspace = true 5 | description.workspace = true 6 | edition.workspace = true 7 | homepage.workspace = true 8 | license.workspace = true 9 | repository.workspace = true 10 | categories = ["gui"] 11 | keywords = ["gui", "immediate", "portable"] 12 | 13 | readme = "README.md" 14 | include = ["**/*.rs", "Cargo.toml", "README.md", "LICENSE"] 15 | 16 | [features] 17 | default = ["classic"] 18 | classic = [] 19 | fluent = ["dep:fluent", "unic-langid", "intl-memoizer", "dep:fluent-bundle"] 20 | 21 | [dependencies] 22 | once_cell = { workspace = true } 23 | log = { workspace = true } 24 | 25 | fluent = { workspace = true, optional = true } 26 | fluent-bundle = { workspace = true, optional = true } 27 | 28 | unic-langid = { workspace = true, optional = true } 29 | intl-memoizer = { workspace = true, optional = true } 30 | -------------------------------------------------------------------------------- /i18n/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) [year] [fullname] 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 | -------------------------------------------------------------------------------- /cli/src/types.rs: -------------------------------------------------------------------------------- 1 | use structopt::{clap::arg_enum, StructOpt}; 2 | 3 | #[derive(Clone, Debug, StructOpt)] 4 | #[structopt(name = "egui-i18n", about = "egui-i18n-cli")] 5 | pub struct Opt { 6 | #[structopt(subcommand)] 7 | pub cmd: Command, 8 | } 9 | 10 | #[derive(Clone, Debug, StructOpt)] 11 | pub enum Command { 12 | /// generate 13 | Generate { 14 | #[structopt(flatten)] 15 | opts: GenerateOpts, 16 | }, 17 | } 18 | 19 | #[derive(Clone, Debug, StructOpt)] 20 | pub struct GenerateOpts { 21 | /// Source path to find i18n key files 22 | #[structopt(long)] 23 | pub source_path: String, 24 | /// Output path to write the generated language files 25 | #[structopt(long)] 26 | pub output_path: Option, 27 | /// Allowed file extensions to search for i18n keys, default only `rs` files 28 | #[structopt(long = "extension")] 29 | pub extensions: Vec, 30 | /// Languages to generate, default only `en_US` 31 | #[structopt(long = "language")] 32 | pub languages: Vec, 33 | // Set default language 34 | #[structopt(long)] 35 | pub default_language: Option, 36 | /// Language extension to use, default is `tgl` 37 | #[structopt(long)] 38 | pub ext: Option, 39 | } 40 | 41 | arg_enum! { 42 | #[derive(Clone, Debug)] 43 | pub enum LanguageExt { 44 | Egl, 45 | Ftl, 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | resolver = "2" 3 | members = ["cli", "i18n", "examples/*"] 4 | 5 | [workspace.package] 6 | edition = "2021" 7 | license = "MIT" 8 | rust-version = "1.77" 9 | version = "0.1.2" 10 | authors = ["fewensa "] 11 | description = "egui i18n" 12 | readme = "README.md" 13 | repository = "https://github.com/fewensa/egui-i18n" 14 | homepage = "https://github.com/fewensa/egui-i18n" 15 | include = ["**/*.rs", "Cargo.toml", "README.md", "LICENSE"] 16 | 17 | [profile.release] 18 | # lto = true # VERY slightly smaller wasm 19 | # opt-level = 's' # 10-20% smaller wasm compared to `opt-level = 3` 20 | # opt-level = 1 # very slow and big wasm. Don't do this. 21 | opt-level = 2 # fast and small wasm, basically same as `opt-level = 's'` 22 | # opt-level = 3 # unnecessarily large wasm for no performance gain 23 | 24 | # debug = true # include debug symbols, useful when profiling wasm 25 | 26 | panic = "abort" # This leads to better optimizations and smaller binaries (and is the default in Wasm anyways). 27 | 28 | [workspace.dependencies] 29 | 30 | color-eyre = "0.6" 31 | structopt = "0.3" 32 | paw = "1" 33 | 34 | proc-macro2 = "1" 35 | quote = "1" 36 | syn = { version = "2", features = ["derive", "parsing", "visit", "full"] } 37 | once_cell = "1" 38 | log = "0.4" 39 | 40 | 41 | fluent = "0.17" 42 | fluent-bundle = "0.16" 43 | unic-langid = "0.9" 44 | intl-memoizer = "0.5" 45 | 46 | 47 | egui-i18n = { version = "0.1", path = "./i18n" } 48 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # egui-i18n 2 | 3 | **`egui-i18n`** is an internationalization (i18n) library for [egui](https://github.com/emilk/egui), offering seamless multi-language support. It supports both [Fluent](https://projectfluent.org/) and traditional key-value translation formats, with features like dynamic parameter interpolation, language fallback, and high-performance resource loading — ideal for Rust-based GUI applications. 4 | 5 | --- 6 | 7 | ## 🚀 Quick Start 8 | 9 | Check out the example projects to see how to use `egui-i18n` in practice: 10 | 11 | - 📄 [`classic`](./examples/classic/) – Example using the classic key-value format. 12 | - 📄 [`fluent`](./examples/fluent/) – Example using Fluent's advanced syntax. 13 | 14 | --- 15 | 16 | ## 📚 Documentation Overview (See [i18n/README.md](./i18n/README.md) for full details) 17 | 18 | The documentation covers the following: 19 | 20 | - **Features** 21 | 22 | - Support for both Fluent and classic key-value translation formats. 23 | - Dynamic parameter interpolation (e.g., names, numbers). 24 | - Flexible resource loading (with language fallback and caching). 25 | - Optimized for real-time UI performance. 26 | 27 | - **Installation** 28 | 29 | - How to add `egui-i18n` to your project. 30 | 31 | - **Usage** 32 | 33 | - How to load `.ftl` or `.properties` translation files. 34 | - How to use the `tr!` macro for translation. 35 | 36 | - **Configuration** 37 | 38 | - Cargo features supported: `fluent` / `classic`. 39 | 40 | - **Translation Resource Examples** 41 | 42 | - Sample formats for both Fluent and key-value resources. 43 | 44 | - **Dependencies & Integration** 45 | 46 | - Core dependencies and optional crates explained. 47 | 48 | - **Contribution Guide** 49 | 50 | - How to contribute code, file issues, or submit PRs. 51 | 52 | 📖 **Read the full guide**: [i18n/README.md](./i18n/README.md) 53 | 54 | --- 55 | 56 | ## 📄 License 57 | 58 | This project is open-sourced under the [MIT License](LICENSE). Contributions are welcome! 59 | -------------------------------------------------------------------------------- /i18n/src/vendor/fluent.rs: -------------------------------------------------------------------------------- 1 | use fluent::FluentArgs; 2 | use intl_memoizer::concurrent::IntlLangMemoizer; 3 | use once_cell::sync::Lazy; 4 | use std::sync::RwLock; 5 | use std::{collections::HashMap, sync::Arc}; 6 | 7 | use fluent::{bundle::FluentBundle, FluentResource}; 8 | 9 | type SharedFluentBundle = Arc>; 10 | 11 | static TRANSLATIONS: Lazy>> = 12 | Lazy::new(|| RwLock::new(HashMap::new())); 13 | 14 | pub fn load_translations_from_text(language: impl AsRef, content: impl AsRef) -> Result<(), String> { 15 | let resource = match FluentResource::try_new(content.as_ref().to_string()) { 16 | Ok(v) => v, 17 | Err(e) => { 18 | return Err(format!("{:?}", e)); 19 | }, 20 | }; 21 | 22 | let language_ref = language.as_ref(); 23 | let lang_id = match language_ref.parse() { 24 | Ok(v) => v, 25 | Err(e) => { 26 | return Err(format!("{:?}", e)); 27 | }, 28 | }; 29 | let mut bundle = FluentBundle::new_concurrent(vec![lang_id]); 30 | if let Err(e) = bundle.add_resource(resource) { 31 | return Err(format!("{:?}", e)); 32 | } 33 | let mut translations_map = TRANSLATIONS.write().unwrap(); 34 | translations_map.insert(language_ref.to_string(), Arc::new(bundle)); 35 | Ok(()) 36 | } 37 | 38 | pub fn translate( 39 | language: impl AsRef, 40 | fallback_language: impl AsRef, 41 | key: &str, 42 | args: &FluentArgs, 43 | ) -> String { 44 | let language = language.as_ref(); 45 | let fallback_language = fallback_language.as_ref(); 46 | if language.is_empty() && fallback_language.is_empty() { 47 | return String::default(); 48 | } 49 | let language = if language.is_empty() { fallback_language } else { language }; 50 | 51 | let mut translated = extract_translate(language, key, args); 52 | 53 | if translated.is_empty() { 54 | translated = extract_translate(fallback_language, key, args); 55 | } 56 | translated 57 | } 58 | 59 | fn extract_translate(language: impl AsRef, key: &str, args: &FluentArgs) -> String { 60 | let translations = TRANSLATIONS.read().unwrap(); 61 | let language_ref = language.as_ref(); 62 | if let Some(bundle) = translations.get(language_ref) { 63 | if let Some(msg) = bundle.get_message(key) { 64 | if let Some(pattern) = msg.value() { 65 | let mut errors = vec![]; 66 | let value = bundle.format_pattern(pattern, Some(args), &mut errors); 67 | return value.to_string(); 68 | } 69 | } 70 | } 71 | String::default() 72 | } 73 | 74 | pub fn languages() -> Vec { 75 | let translations = TRANSLATIONS.read().unwrap(); 76 | translations.keys().cloned().collect() 77 | } 78 | 79 | -------------------------------------------------------------------------------- /examples/fluent/src/main.rs: -------------------------------------------------------------------------------- 1 | #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release 2 | #![allow(rustdoc::missing_crate_level_docs)] // it's an example 3 | 4 | use eframe::egui; 5 | 6 | use egui_i18n::tr; 7 | 8 | fn main() -> eframe::Result { 9 | env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`). 10 | init(); 11 | let options = eframe::NativeOptions { 12 | viewport: egui::ViewportBuilder::default().with_inner_size([320.0, 460.0]), 13 | ..Default::default() 14 | }; 15 | eframe::run_native( 16 | "My egui App", 17 | options, 18 | Box::new(|cc| { 19 | // This gives us image support: 20 | egui_extras::install_image_loaders(&cc.egui_ctx); 21 | 22 | Ok(Box::::default()) 23 | }), 24 | ) 25 | } 26 | 27 | fn init() { 28 | let en_us = 29 | String::from_utf8_lossy(include_bytes!("../../../assets/languages/fluent/en-US.ftl")); 30 | let zh_cn = 31 | String::from_utf8_lossy(include_bytes!("../../../assets/languages/fluent/zh-Hans.ftl")); 32 | let ja_jp = 33 | String::from_utf8_lossy(include_bytes!("../../../assets/languages/fluent/ja-JP.ftl")); 34 | egui_i18n::load_translations_from_text("en-US", en_us).unwrap(); 35 | egui_i18n::load_translations_from_text("zh-Hans", zh_cn).unwrap(); 36 | egui_i18n::load_translations_from_text("ja-JP", ja_jp).unwrap(); 37 | 38 | // 设置初始语言 39 | egui_i18n::set_language("en-US"); 40 | egui_i18n::set_fallback("en-US"); 41 | } 42 | 43 | struct MyApp { 44 | name: String, 45 | age: u32, 46 | } 47 | 48 | impl Default for MyApp { 49 | fn default() -> Self { 50 | Self { name: "Arthur".to_owned(), age: 42 } 51 | } 52 | } 53 | 54 | impl eframe::App for MyApp { 55 | fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { 56 | egui::CentralPanel::default().show(ctx, |ui| { 57 | ui.heading("My egui Application"); 58 | ui.horizontal(|ui| { 59 | let name_label = ui.label("Your name: "); 60 | ui.text_edit_singleline(&mut self.name).labelled_by(name_label.id); 61 | }); 62 | ui.add(egui::Slider::new(&mut self.age, 0..=120).text("age")); 63 | if ui.button("Increment").clicked() { 64 | self.age += 1; 65 | } 66 | if ui.button("en-US").clicked() { 67 | egui_i18n::set_language("en-US"); 68 | } 69 | if ui.button("zh-Hans").clicked() { 70 | egui_i18n::set_language("zh-Hans"); 71 | } 72 | if ui.button("ja-JP").clicked() { 73 | egui_i18n::set_language("ja-JP"); 74 | } 75 | ui.label(format!("Current language: {}", egui_i18n::get_language())); 76 | ui.label(format!("Fallback language: {}", egui_i18n::get_fallback())); 77 | ui.label(format!("Hello '{}', age {}", self.name, self.age)); 78 | ui.label(tr!("hello-name", {name: &self.name})); 79 | ui.label(egui_i18n::tr!("my-name-and-age", { 80 | name: &self.name, age: self.age 81 | })); 82 | 83 | ui.image(egui::include_image!("../../../assets/images/ferris.png")); 84 | }); 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /examples/classic/src/main.rs: -------------------------------------------------------------------------------- 1 | #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release 2 | #![allow(rustdoc::missing_crate_level_docs)] // it's an example 3 | 4 | use eframe::egui; 5 | 6 | use egui_i18n::tr; 7 | 8 | fn main() -> eframe::Result { 9 | env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`). 10 | init(); 11 | let options = eframe::NativeOptions { 12 | viewport: egui::ViewportBuilder::default().with_inner_size([320.0, 460.0]), 13 | ..Default::default() 14 | }; 15 | eframe::run_native( 16 | "My egui App", 17 | options, 18 | Box::new(|cc| { 19 | // This gives us image support: 20 | egui_extras::install_image_loaders(&cc.egui_ctx); 21 | 22 | Ok(Box::::default()) 23 | }), 24 | ) 25 | } 26 | 27 | fn init() { 28 | let en_us = String::from_utf8_lossy(include_bytes!("../../../assets/languages/classic/en_US.egl")); 29 | let zh_cn = String::from_utf8_lossy(include_bytes!("../../../assets/languages/classic/zh_CN.egl")); 30 | let ja_jp = String::from_utf8_lossy(include_bytes!("../../../assets/languages/classic/ja_JP.egl")); 31 | egui_i18n::load_translations_from_text("en_US", en_us).unwrap(); 32 | egui_i18n::load_translations_from_text("zh_CN", zh_cn).unwrap(); 33 | egui_i18n::load_translations_from_text("ja_JP", ja_jp).unwrap(); 34 | 35 | egui_i18n::set_language("en_US"); 36 | egui_i18n::set_fallback("en_US"); 37 | } 38 | 39 | struct MyApp { 40 | name: String, 41 | age: u32, 42 | } 43 | 44 | impl Default for MyApp { 45 | fn default() -> Self { 46 | Self { name: "Arthur".to_owned(), age: 42 } 47 | } 48 | } 49 | 50 | impl eframe::App for MyApp { 51 | fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { 52 | egui::CentralPanel::default().show(ctx, |ui| { 53 | ui.heading("My egui Application"); 54 | ui.horizontal(|ui| { 55 | let name_label = ui.label("Your name: "); 56 | ui.text_edit_singleline(&mut self.name).labelled_by(name_label.id); 57 | }); 58 | ui.add(egui::Slider::new(&mut self.age, 0..=120).text("age")); 59 | if ui.button("Increment").clicked() { 60 | self.age += 1; 61 | } 62 | if ui.button("en_US").clicked() { 63 | egui_i18n::set_language("en_US"); 64 | } 65 | if ui.button("zh_CN").clicked() { 66 | egui_i18n::set_language("zh_CN"); 67 | } 68 | if ui.button("ja_JP").clicked() { 69 | egui_i18n::set_language("ja_JP"); 70 | } 71 | ui.label(format!("Current language: {}", egui_i18n::get_language())); 72 | ui.label(format!("Fallback language: {}", egui_i18n::get_fallback())); 73 | ui.label(format!("Hello '{}', age {}", self.name, self.age)); 74 | ui.label(tr!("Hello=, {name}!", {name: &self.name})); 75 | ui.label(tr!("hello-name", {name: &self.name})); 76 | ui.label(egui_i18n::tr!("My name is {name} and {age} years old", { 77 | name: &self.name, age: self.age 78 | })); 79 | 80 | ui.image(egui::include_image!("../../../assets/images/ferris.png")); 81 | }); 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /i18n/README.md: -------------------------------------------------------------------------------- 1 | # egui-i18n 2 | 3 | **`egui-i18n`** is an internationalization (i18n) solution designed specifically for the [egui](https://github.com/emilk/egui) framework. It supports both [Fluent](https://projectfluent.org/) syntax and traditional key-value translation formats. With flexible resource loading, dynamic parameter interpolation, and performance optimizations, it helps developers easily implement multi-language support in their applications. 4 | 5 | --- 6 | 7 | ## 🛠 Project Origin 8 | 9 | `egui-i18n` originated from a [proposal to add i18n support](https://github.com/emilk/egui/pull/5403) in the official `egui` repository. Since `egui` does not currently include a built-in i18n system, this project was developed independently to fulfill real-world needs without modifying `egui`'s core. The goals include: 10 | 11 | - Provide multi-language support **without modifying egui's source code**. 12 | - Support both **Fluent** and **classic key-value** translation formats. 13 | - Enable **runtime language switching and dynamic parameter interpolation**. 14 | - Deliver high performance and flexibility for **Rust-based GUI applications**. 15 | 16 | --- 17 | 18 | ## ✨ Features 19 | 20 | ### 🗣 Multi-language Support 21 | 22 | - **[Fluent](https://projectfluent.org/)**: Ideal for complex linguistic structures. 23 | - **Classic key-value format**: Suitable for simple and straightforward translations. 24 | 25 | ### 🔄 Dynamic Parameter Interpolation 26 | 27 | - Easily insert dynamic values (e.g. names, dates, numbers) into translation strings. 28 | 29 | ### 📂 Flexible Resource Loading 30 | 31 | - Load `.ftl` (Fluent) or `.properties` (key-value) files from specified file paths. 32 | - Language fallback support (e.g. fallback from `zh-HK` to `zh`). 33 | 34 | ### ⚡ High Performance 35 | 36 | - Built-in caching system to speed up parsing and lookup of translation resources, suitable for real-time UI rendering. 37 | 38 | --- 39 | 40 | ## 📦 Installation 41 | 42 | Add the dependency in your `Cargo.toml`: 43 | 44 | ```toml 45 | [dependencies] 46 | egui-i18n = "0.1" 47 | ``` 48 | 49 | --- 50 | 51 | ## 🚀 Getting Started 52 | 53 | ### Using Fluent Translations 54 | 55 | ```toml 56 | [dependencies] 57 | egui-i18n = { version = "0.1", features = ["fluent"] } 58 | ``` 59 | 60 | ```rust 61 | use egui_i18n::tr; 62 | 63 | fn main() { 64 | let greeting = tr!("greeting", { name: "Alice" }); 65 | println!("{}", greeting); // Output: Hello, Alice! 66 | } 67 | ``` 68 | 69 | Fluent resource file example (`en-US.ftl`): 70 | 71 | ``` 72 | greeting = Hello, { $name }! 73 | ``` 74 | 75 | --- 76 | 77 | ### Using Classic Key-Value Translations 78 | 79 | ```rust 80 | use egui_i18n::tr; 81 | 82 | fn main() { 83 | let greeting = tr!("classic_greeting"); 84 | println!("{}", greeting); // Output: Hello, world! 85 | } 86 | ``` 87 | 88 | Classic key-value resource example: 89 | 90 | ``` 91 | classic_greeting = Hello, world! 92 | ``` 93 | 94 | --- 95 | 96 | ## ⚙️ Configuration Options 97 | 98 | ### Cargo Features 99 | 100 | - `fluent`: Enables Fluent translation mode. 101 | - `classic`: Enables classic key-value translation mode (enabled by default). 102 | 103 | --- 104 | 105 | ## 📄 License 106 | 107 | This project is open source under the [MIT License](https://opensource.org/licenses/MIT). Contributions and feedback are welcome! 108 | 109 | --- 110 | 111 | For more examples, API documentation, or integration guides, check the project source code and the [`examples`](https://github.com/fewensa/egui-i18n/tree/main/examples) directory. If you encounter any issues or have suggestions, feel free to open an issue or submit a PR! 112 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | # pull_request: 5 | # branches: [main] 6 | workflow_dispatch: 7 | push: 8 | tags: 9 | - "v*" 10 | 11 | env: 12 | DOCKER_REGISTRY: ghcr.io 13 | 14 | jobs: 15 | build-egui-i18n: 16 | name: Build egui-i18n 17 | strategy: 18 | matrix: 19 | package: 20 | - target: x86_64-unknown-linux-musl 21 | runner: ubuntu-latest 22 | slug: linux-x86_64 23 | - target: x86_64-pc-windows-gnu 24 | runner: ubuntu-latest 25 | slug: windows-x86_64 26 | - target: x86_64-apple-darwin 27 | runner: macos-latest 28 | slug: darwin-x86_64 29 | - target: aarch64-apple-darwin 30 | runner: macos-latest 31 | slug: darwin-aarch64 32 | runs-on: ${{ matrix.package.runner }} 33 | steps: 34 | - uses: actions/checkout@v4 35 | 36 | - name: Setup Rust 37 | uses: actions-rust-lang/setup-rust-toolchain@v1 38 | with: 39 | toolchain: stable 40 | target: ${{ matrix.package.target }} 41 | 42 | - name: Build binary 43 | uses: houseabsolute/actions-rust-cross@v1 44 | with: 45 | command: build 46 | target: ${{ matrix.package.target }} 47 | args: "--locked --release" 48 | strip: true 49 | 50 | - name: Collect artifacts 51 | run: | 52 | mkdir dist 53 | FILE_SUFFIX='' 54 | if [[ "${{ matrix.package.target }}" == "x86_64-pc-windows-gnu" ]]; then 55 | FILE_SUFFIX='.exe' 56 | fi 57 | cp target/${{ matrix.package.target }}/release/egui-i18n-cli${FILE_SUFFIX} dist/egui-i18n-cli-${{ matrix.package.slug }}${FILE_SUFFIX} 58 | cp target/${{ matrix.package.target }}/release/egui-i18n-example-classic${FILE_SUFFIX} dist/example-classic-${{ matrix.package.slug }}${FILE_SUFFIX} 59 | cp target/${{ matrix.package.target }}/release/egui-i18n-example-fluent${FILE_SUFFIX} dist/example-fluent-${{ matrix.package.slug }}${FILE_SUFFIX} 60 | 61 | - uses: actions/upload-artifact@v4 62 | with: 63 | name: artifact-${{ matrix.package.target }} 64 | path: dist 65 | overwrite: true 66 | 67 | publish-crate: 68 | name: Publish crate 69 | runs-on: ubuntu-latest 70 | if: startsWith(github.ref, 'refs/tags/v') 71 | steps: 72 | - uses: actions/checkout@v4 73 | 74 | - name: Setup Rust 75 | uses: actions-rust-lang/setup-rust-toolchain@v1 76 | with: 77 | toolchain: stable 78 | 79 | - name: Package 80 | working-directory: i18n 81 | run: cargo package 82 | 83 | - name: Publish crate 84 | working-directory: i18n 85 | run: cargo publish --token ${{ secrets.TOKEN_CRATES_IO }} 86 | 87 | publish-github-release: 88 | name: Publish GitHub Release 89 | runs-on: ubuntu-latest 90 | needs: 91 | - build-egui-i18n 92 | - publish-crate 93 | if: startsWith(github.ref, 'refs/tags/v') 94 | steps: 95 | - uses: actions/download-artifact@v4 96 | with: 97 | pattern: artifact-* 98 | merge-multiple: true 99 | 100 | - name: Check 101 | run: | 102 | ls -R 103 | 104 | - name: Hash file 105 | run: | 106 | (sha256sum * | tee sha256sums.txt) 107 | 108 | - name: Release 109 | uses: softprops/action-gh-release@v2 110 | with: 111 | files: ./* 112 | 113 | clean-artifacts: 114 | name: Clean artifacts 115 | runs-on: ubuntu-latest 116 | needs: [publish-github-release] 117 | if: always() 118 | steps: 119 | - uses: geekyeggo/delete-artifact@v5 120 | with: 121 | name: artifact-* 122 | -------------------------------------------------------------------------------- /i18n/src/vendor/classic.rs: -------------------------------------------------------------------------------- 1 | use once_cell::sync::Lazy; 2 | use std::collections::HashMap; 3 | use std::sync::RwLock; 4 | 5 | static TRANSLATIONS: Lazy>>> = 6 | Lazy::new(|| RwLock::new(HashMap::new())); 7 | 8 | pub fn load_translations_from_text(language: impl AsRef, content: impl AsRef) -> Result<(), String> { 9 | let translations = parse_translations(content.as_ref().to_string(), true); 10 | load_translations_from_map(language, translations); 11 | Ok(()) 12 | } 13 | 14 | pub fn load_translations_from_map( 15 | language: impl AsRef, 16 | translations: HashMap, 17 | ) { 18 | let mut translations_map = TRANSLATIONS.write().unwrap(); 19 | translations_map.insert(language.as_ref().to_string(), translations); 20 | } 21 | 22 | pub fn parse_translations(content: String, clean_empty: bool) -> HashMap { 23 | let mut map = HashMap::new(); 24 | let mut name = String::default(); 25 | let mut values = vec![]; 26 | for line in content.split("\n") { 27 | if !line.contains("=") { 28 | values.push(line.to_string()); 29 | continue; 30 | } 31 | if !name.is_empty() { 32 | let value = values.join("\n").trim().to_string(); 33 | let allow = if value.is_empty() { !clean_empty } else { true }; 34 | if allow { 35 | map.insert(name, value); 36 | } 37 | // name = String::default(); 38 | values.clear(); 39 | } 40 | if line.contains("\\=") { 41 | let items_of_escaping: Vec<&str> = line.split("\\=").collect(); 42 | let mut e_names = vec![]; 43 | let mut e_values = vec![]; 44 | let len = items_of_escaping.len(); 45 | for i in 0..len { 46 | let item = items_of_escaping.get(i).unwrap(); 47 | if item.contains('=') { 48 | let (first, second) = item.split_once('=').unwrap(); 49 | e_names.push(first.trim().to_string()); 50 | e_values.push(second.trim().to_string()); 51 | if i + 1 == len { 52 | break; 53 | } 54 | let remain: Vec = 55 | items_of_escaping[i + 1..].iter().map(|&item| item.to_string()).collect(); 56 | e_values.extend(remain); 57 | break; 58 | } else { 59 | e_names.push(item.trim().to_string()); 60 | } 61 | } 62 | name = e_names.join("="); 63 | values.push(e_values.join("=")); 64 | } else { 65 | let (first, second) = line.split_once('=').unwrap(); 66 | name = first.trim().to_string(); 67 | values.push(second.trim().to_string()); 68 | } 69 | } 70 | if !name.is_empty() { 71 | let value = values.join("\n").trim().to_string(); 72 | let allow = if value.is_empty() { !clean_empty } else { true }; 73 | if allow { 74 | map.insert(name, value); 75 | } 76 | } 77 | map 78 | } 79 | 80 | pub fn format(template: &str, args: &HashMap<&str, String>) -> String { 81 | let mut result = template.to_string(); 82 | for (key, value) in args { 83 | result = result.replace(&format!("{{{}}}", key), value); 84 | } 85 | result 86 | } 87 | 88 | pub fn translate( 89 | language: impl AsRef, 90 | fallback_language: impl AsRef, 91 | key: &str, 92 | args: &HashMap<&str, String>, 93 | ) -> String { 94 | let language = language.as_ref(); 95 | let fallback_language = fallback_language.as_ref(); 96 | if language.is_empty() && fallback_language.is_empty() { 97 | return String::default(); 98 | } 99 | let language = if language.is_empty() { fallback_language } else { language }; 100 | 101 | let mut translated = extract_translate(language, key, args); 102 | 103 | if translated.is_empty() { 104 | translated = extract_translate(fallback_language, key, args); 105 | } 106 | translated 107 | } 108 | 109 | fn extract_translate(language: impl AsRef, key: &str, args: &HashMap<&str, String>) -> String { 110 | let translations = TRANSLATIONS.read().unwrap(); 111 | if let Some(language_map) = translations.get(language.as_ref()) { 112 | if let Some(template) = language_map.get(key) { 113 | if !template.is_empty() { 114 | return format(template, args); 115 | } 116 | } 117 | } 118 | String::default() 119 | } 120 | 121 | pub fn languages() -> Vec { 122 | let translations = TRANSLATIONS.read().unwrap(); 123 | translations.keys().cloned().collect() 124 | } 125 | -------------------------------------------------------------------------------- /i18n/src/lib.rs: -------------------------------------------------------------------------------- 1 | use once_cell::sync::Lazy; 2 | use std::collections::HashMap; 3 | use std::fs; 4 | use std::path::Path; 5 | use std::sync::RwLock; 6 | 7 | #[cfg(feature = "classic")] 8 | pub use self::vendor::classic::parse_translations; 9 | 10 | #[cfg(feature = "fluent")] 11 | pub use fluent; 12 | 13 | #[cfg(feature = "fluent")] 14 | pub use fluent_bundle; 15 | 16 | mod vendor; 17 | 18 | // todo: migrate to egui context 19 | static CURRENT_LANGUAGE: Lazy> = Lazy::new(|| RwLock::new(String::default())); 20 | static FALLBACK_LANGUAGE: Lazy> = Lazy::new(|| RwLock::new(String::default())); 21 | 22 | pub fn set_language(locale: &str) { 23 | let mut current_locale = CURRENT_LANGUAGE.write().unwrap(); 24 | *current_locale = locale.to_string(); 25 | } 26 | 27 | pub fn get_language() -> String { 28 | let current_locale = CURRENT_LANGUAGE.read().unwrap(); 29 | current_locale.clone() 30 | } 31 | 32 | pub fn set_fallback(locale: &str) { 33 | let mut current_locale = FALLBACK_LANGUAGE.write().unwrap(); 34 | *current_locale = locale.to_string(); 35 | } 36 | 37 | pub fn get_fallback() -> String { 38 | let current_locale = FALLBACK_LANGUAGE.read().unwrap(); 39 | current_locale.clone() 40 | } 41 | 42 | #[allow(unreachable_code)] 43 | pub fn languages() -> Vec { 44 | #[cfg(feature = "fluent")] 45 | return vendor::fluent::languages(); 46 | #[cfg(feature = "classic")] 47 | return vendor::classic::languages(); 48 | } 49 | 50 | pub fn load_translations_from_map( 51 | language: impl AsRef, 52 | translations: HashMap, 53 | ) -> Result<(), String> { 54 | let mut translations_contents = vec![]; 55 | for (key, value) in translations.iter() { 56 | let key = if key.contains("=") { key.replace("=", "\\=") } else { key.to_string() }; 57 | translations_contents.push(format!("{} = {}", key, value)); 58 | } 59 | load_translations_from_text(language, translations_contents.join("\n")) 60 | } 61 | 62 | #[allow(unreachable_code)] 63 | pub fn load_translations_from_text( 64 | language: impl AsRef, 65 | content: impl AsRef, 66 | ) -> Result<(), String> { 67 | let language = language.as_ref(); 68 | let content = content.as_ref(); 69 | 70 | #[cfg(feature = "fluent")] 71 | return vendor::fluent::load_translations_from_text(language, content); 72 | 73 | #[cfg(feature = "classic")] 74 | return vendor::classic::load_translations_from_text(language, content); 75 | } 76 | 77 | pub fn load_translations_from_path(path: impl AsRef) -> Result<(), String> { 78 | let path_ref = Path::new(path.as_ref()); 79 | let mut files = vec![]; 80 | if path_ref.is_file() { 81 | files.push(path_ref.to_path_buf()); 82 | } else { 83 | let read_dir = match fs::read_dir(path_ref) { 84 | Ok(v) => v, 85 | Err(e) => return Err(format!("{:?}", e)), 86 | }; 87 | for entry in read_dir { 88 | let path_file = match entry { 89 | Ok(dir_entry) => dir_entry.path(), 90 | Err(e) => { 91 | log::warn!("faild to get path: {:?}", e); 92 | continue; 93 | }, 94 | }; 95 | let allow_ext = if let Some(ext) = path_file.extension() { 96 | let ext = ext.to_string_lossy().to_lowercase(); 97 | ext == "egl" || ext == "ftl" 98 | } else { 99 | false 100 | }; 101 | if !allow_ext { 102 | continue; 103 | } 104 | files.push(path_file); 105 | } 106 | } 107 | for file in files { 108 | let name = match file.file_stem() { 109 | Some(v) => v.to_string_lossy().to_string(), 110 | None => continue, 111 | }; 112 | 113 | match fs::read_to_string(file) { 114 | Ok(content) => load_translations_from_text(name, content)?, 115 | Err(e) => return Err(format!("{:?}", e)), 116 | }; 117 | } 118 | Ok(()) 119 | } 120 | 121 | //#===== transalte 122 | 123 | #[cfg(feature = "classic")] 124 | pub fn translate_classic(key: &str, args: &HashMap<&str, String>) -> String { 125 | let language = get_language(); 126 | let fallback = get_fallback(); 127 | vendor::classic::translate(language, fallback, key, args) 128 | } 129 | 130 | #[cfg(feature = "fluent")] 131 | pub fn translate_fluent(key: &str, args: &crate::fluent::FluentArgs) -> String { 132 | let language = get_language(); 133 | let fallback = get_fallback(); 134 | vendor::fluent::translate(language, fallback, key, args) 135 | } 136 | 137 | #[cfg(not(any(feature = "fluent")))] 138 | #[macro_export] 139 | macro_rules! tr { 140 | ($key:expr, {$($name:ident: $val:expr),*}) => {{ 141 | let mut args = std::collections::HashMap::new(); 142 | $( 143 | args.insert(stringify!($name), $val.to_string()); 144 | )* 145 | $crate::translate_classic($key, &args) 146 | }}; 147 | ($key:expr) => {{ 148 | $crate::translate_classic($key, &std::collections::HashMap::new()) 149 | }}; 150 | } 151 | 152 | #[cfg(feature = "fluent")] 153 | #[macro_export] 154 | macro_rules! tr { 155 | ($key:expr, {$($name:ident: $val:expr),*}) => {{ 156 | let mut args = $crate::fluent::FluentArgs::new(); 157 | $( 158 | args.set(stringify!($name), $val); 159 | )* 160 | $crate::translate_fluent($key, &args) 161 | }}; 162 | ($key:expr) => {{ 163 | $crate::translate_fluent($key, &$crate::fluent::FluentArgs::new()) 164 | }}; 165 | } 166 | -------------------------------------------------------------------------------- /cli/src/command/generate.rs: -------------------------------------------------------------------------------- 1 | use std::env::current_dir; 2 | use std::fs::{self, OpenOptions}; 3 | use std::io::Write; 4 | use std::path::Path; 5 | use syn::visit::Visit; 6 | 7 | use crate::types::GenerateOpts; 8 | 9 | pub fn generate_languages(opts: GenerateOpts) -> color_eyre::Result<()> { 10 | let mut generator = Generator { opts }; 11 | generator.generate() 12 | } 13 | 14 | struct Generator { 15 | opts: GenerateOpts, 16 | } 17 | 18 | impl Generator { 19 | fn generate(&mut self) -> color_eyre::Result<()> { 20 | let source_path = &self.opts.source_path; 21 | 22 | let mut visitor = TranslationVisitor::new(); 23 | let mut extensions = self.opts.extensions.clone(); 24 | if extensions.is_empty() { 25 | extensions.push("rs".to_string()); 26 | } 27 | self.visit_dir(Path::new(&source_path), &extensions, &mut visitor); 28 | self.write_language(visitor.translations)?; 29 | Ok(()) 30 | } 31 | 32 | fn visit_dir(&self, dir: &Path, extensions: &Vec, visitor: &mut TranslationVisitor) { 33 | if !dir.is_dir() { 34 | eprintln!("source path is not a directory"); 35 | return; 36 | } 37 | 38 | for entry in fs::read_dir(dir).unwrap() { 39 | let path = entry.unwrap().path(); 40 | if path.is_dir() { 41 | self.visit_dir(&path, extensions, visitor); 42 | continue; 43 | } 44 | let path_text = path.to_string_lossy().to_string(); 45 | if path_text.contains("/target/") { 46 | continue; 47 | } 48 | let allow = if let Some(ext) = path.extension() { 49 | let ext = ext.to_string_lossy().to_string().to_lowercase(); 50 | extensions.iter().any(|item| item.to_lowercase() == ext) 51 | } else { 52 | false 53 | }; 54 | if !allow { 55 | continue; 56 | } 57 | 58 | self.visit_file(&path, visitor); 59 | } 60 | } 61 | 62 | fn visit_file(&self, file: &Path, visitor: &mut TranslationVisitor) { 63 | let content = fs::read_to_string(file).unwrap_or_else(|_| panic!("Failed to read file: {:?}", file)); 64 | let syntax = syn::parse_file(&content).unwrap_or_else(|_| panic!("Failed to parse file: {:?}", file)); 65 | visitor.visit_file(&syntax); 66 | } 67 | } 68 | 69 | impl Generator { 70 | fn write_language(&self, translations: Vec) -> color_eyre::Result<()> { 71 | println!("{:?}", translations); 72 | let mut languages = self.opts.languages.clone(); 73 | if languages.is_empty() { 74 | languages.push("en_US".to_string()); 75 | } 76 | 77 | let output_path = match &self.opts.output_path { 78 | Some(v) => Path::new(v).to_path_buf(), 79 | None => current_dir()?, 80 | }; 81 | if !output_path.exists() { 82 | fs::create_dir_all(&output_path)?; 83 | } 84 | let ext = match &self.opts.ext { 85 | Some(crate::types::LanguageExt::Egl) => "egl", 86 | Some(crate::types::LanguageExt::Ftl) => "ftl", 87 | None => "tgl", 88 | }; 89 | for language in &languages { 90 | let language_path = output_path.join(format!("{}.{}", language, ext)); 91 | let mut stored_translations = if language_path.exists() { 92 | let content = fs::read_to_string(&language_path)?; 93 | let t = egui_i18n::parse_translations(content, false); 94 | t.keys().cloned().collect() 95 | } else { 96 | vec![] 97 | }; 98 | // println!("stored translations: {:?}", stored_translations); 99 | let mut contents = vec![]; 100 | let is_default = match &self.opts.default_language { 101 | Some(v) => v == language, 102 | None => false, 103 | }; 104 | for t in &translations { 105 | if stored_translations.contains(t) { 106 | continue; 107 | } 108 | let key = t.replace("=", "\\="); 109 | if is_default { 110 | contents.push(format!("{} = {}", key, t)); 111 | } else { 112 | contents.push(format!("{} =", key)); 113 | } 114 | stored_translations.push(key); 115 | } 116 | if contents.is_empty() { 117 | continue; 118 | } 119 | contents.push("".to_string()); 120 | 121 | let mut file = OpenOptions::new().append(true).create(true).open(&language_path)?; 122 | file.write_all(contents.join("\n").as_bytes())?; 123 | println!("write transation to: {}", language_path.to_string_lossy()); 124 | } 125 | Ok(()) 126 | } 127 | } 128 | 129 | struct TranslationVisitor { 130 | translations: Vec, 131 | } 132 | 133 | impl TranslationVisitor { 134 | fn new() -> Self { 135 | TranslationVisitor { translations: vec![] } 136 | } 137 | 138 | fn record_translation(&mut self, key: &str) { 139 | self.translations.push(key.to_string()); 140 | } 141 | 142 | fn is_from_egui_i18n( 143 | &self, 144 | segments: &syn::punctuated::Punctuated, 145 | ) -> bool { 146 | let mut iter = segments.iter(); 147 | let first = iter.next().unwrap(); 148 | 149 | if segments.len() < 2 { 150 | return first.ident == "tr"; 151 | } 152 | 153 | let second = iter.next().unwrap(); 154 | 155 | (first.ident == "egui" || first.ident == "egui_i18n") && second.ident == "tr" 156 | } 157 | } 158 | 159 | impl<'ast> Visit<'ast> for TranslationVisitor { 160 | fn visit_macro(&mut self, mac: &'ast syn::Macro) { 161 | if self.is_from_egui_i18n(&mac.path.segments) { 162 | if let Some(first_arg) = extract_first_string_literal(&mac.tokens) { 163 | self.record_translation(&first_arg); 164 | } 165 | } 166 | 167 | syn::visit::visit_macro(self, mac); 168 | } 169 | } 170 | 171 | fn extract_first_string_literal(tokens: &proc_macro2::TokenStream) -> Option { 172 | let iter = tokens.clone().into_iter(); 173 | 174 | for token in iter { 175 | if let proc_macro2::TokenTree::Literal(literal) = token { 176 | if let Ok(syn::Lit::Str(lit_str)) = syn::parse_str::(&literal.to_string()) { 177 | return Some(lit_str.value()); 178 | } 179 | } 180 | } 181 | None 182 | } 183 | -------------------------------------------------------------------------------- /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 = "ab_glyph" 7 | version = "0.2.29" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0" 10 | dependencies = [ 11 | "ab_glyph_rasterizer", 12 | "owned_ttf_parser", 13 | ] 14 | 15 | [[package]] 16 | name = "ab_glyph_rasterizer" 17 | version = "0.1.8" 18 | source = "registry+https://github.com/rust-lang/crates.io-index" 19 | checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" 20 | 21 | [[package]] 22 | name = "accesskit" 23 | version = "0.17.1" 24 | source = "registry+https://github.com/rust-lang/crates.io-index" 25 | checksum = "d3d3b8f9bae46a948369bc4a03e815d4ed6d616bd00de4051133a5019dc31c5a" 26 | 27 | [[package]] 28 | name = "accesskit_atspi_common" 29 | version = "0.10.1" 30 | source = "registry+https://github.com/rust-lang/crates.io-index" 31 | checksum = "7c5dd55e6e94949498698daf4d48fb5659e824d7abec0d394089656ceaf99d4f" 32 | dependencies = [ 33 | "accesskit", 34 | "accesskit_consumer", 35 | "atspi-common", 36 | "serde", 37 | "thiserror 1.0.69", 38 | "zvariant", 39 | ] 40 | 41 | [[package]] 42 | name = "accesskit_consumer" 43 | version = "0.26.0" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "f47983a1084940ba9a39c077a8c63e55c619388be5476ac04c804cfbd1e63459" 46 | dependencies = [ 47 | "accesskit", 48 | "hashbrown", 49 | "immutable-chunkmap", 50 | ] 51 | 52 | [[package]] 53 | name = "accesskit_macos" 54 | version = "0.18.1" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | checksum = "7329821f3bd1101e03a7d2e03bd339e3ac0dc64c70b4c9f9ae1949e3ba8dece1" 57 | dependencies = [ 58 | "accesskit", 59 | "accesskit_consumer", 60 | "hashbrown", 61 | "objc2 0.5.2", 62 | "objc2-app-kit 0.2.2", 63 | "objc2-foundation 0.2.2", 64 | ] 65 | 66 | [[package]] 67 | name = "accesskit_unix" 68 | version = "0.13.1" 69 | source = "registry+https://github.com/rust-lang/crates.io-index" 70 | checksum = "fcee751cc20d88678c33edaf9c07e8b693cd02819fe89053776f5313492273f5" 71 | dependencies = [ 72 | "accesskit", 73 | "accesskit_atspi_common", 74 | "async-channel", 75 | "async-executor", 76 | "async-task", 77 | "atspi", 78 | "futures-lite", 79 | "futures-util", 80 | "serde", 81 | "zbus", 82 | ] 83 | 84 | [[package]] 85 | name = "accesskit_windows" 86 | version = "0.24.1" 87 | source = "registry+https://github.com/rust-lang/crates.io-index" 88 | checksum = "24fcd5d23d70670992b823e735e859374d694a3d12bfd8dd32bd3bd8bedb5d81" 89 | dependencies = [ 90 | "accesskit", 91 | "accesskit_consumer", 92 | "hashbrown", 93 | "paste", 94 | "static_assertions", 95 | "windows", 96 | "windows-core", 97 | ] 98 | 99 | [[package]] 100 | name = "accesskit_winit" 101 | version = "0.23.1" 102 | source = "registry+https://github.com/rust-lang/crates.io-index" 103 | checksum = "6a6a48dad5530b6deb9fc7a52cc6c3bf72cdd9eb8157ac9d32d69f2427a5e879" 104 | dependencies = [ 105 | "accesskit", 106 | "accesskit_macos", 107 | "accesskit_unix", 108 | "accesskit_windows", 109 | "raw-window-handle", 110 | "winit", 111 | ] 112 | 113 | [[package]] 114 | name = "addr2line" 115 | version = "0.24.2" 116 | source = "registry+https://github.com/rust-lang/crates.io-index" 117 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 118 | dependencies = [ 119 | "gimli", 120 | ] 121 | 122 | [[package]] 123 | name = "adler2" 124 | version = "2.0.0" 125 | source = "registry+https://github.com/rust-lang/crates.io-index" 126 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 127 | 128 | [[package]] 129 | name = "ahash" 130 | version = "0.8.12" 131 | source = "registry+https://github.com/rust-lang/crates.io-index" 132 | checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" 133 | dependencies = [ 134 | "cfg-if", 135 | "getrandom 0.3.3", 136 | "once_cell", 137 | "version_check", 138 | "zerocopy", 139 | ] 140 | 141 | [[package]] 142 | name = "android-activity" 143 | version = "0.6.0" 144 | source = "registry+https://github.com/rust-lang/crates.io-index" 145 | checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" 146 | dependencies = [ 147 | "android-properties", 148 | "bitflags 2.9.1", 149 | "cc", 150 | "cesu8", 151 | "jni", 152 | "jni-sys", 153 | "libc", 154 | "log", 155 | "ndk", 156 | "ndk-context", 157 | "ndk-sys 0.6.0+11769913", 158 | "num_enum", 159 | "thiserror 1.0.69", 160 | ] 161 | 162 | [[package]] 163 | name = "android-properties" 164 | version = "0.2.2" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" 167 | 168 | [[package]] 169 | name = "android_system_properties" 170 | version = "0.1.5" 171 | source = "registry+https://github.com/rust-lang/crates.io-index" 172 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 173 | dependencies = [ 174 | "libc", 175 | ] 176 | 177 | [[package]] 178 | name = "ansi_term" 179 | version = "0.12.1" 180 | source = "registry+https://github.com/rust-lang/crates.io-index" 181 | checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" 182 | dependencies = [ 183 | "winapi", 184 | ] 185 | 186 | [[package]] 187 | name = "anstream" 188 | version = "0.6.18" 189 | source = "registry+https://github.com/rust-lang/crates.io-index" 190 | checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" 191 | dependencies = [ 192 | "anstyle", 193 | "anstyle-parse", 194 | "anstyle-query", 195 | "anstyle-wincon", 196 | "colorchoice", 197 | "is_terminal_polyfill", 198 | "utf8parse", 199 | ] 200 | 201 | [[package]] 202 | name = "anstyle" 203 | version = "1.0.10" 204 | source = "registry+https://github.com/rust-lang/crates.io-index" 205 | checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" 206 | 207 | [[package]] 208 | name = "anstyle-parse" 209 | version = "0.2.6" 210 | source = "registry+https://github.com/rust-lang/crates.io-index" 211 | checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" 212 | dependencies = [ 213 | "utf8parse", 214 | ] 215 | 216 | [[package]] 217 | name = "anstyle-query" 218 | version = "1.1.2" 219 | source = "registry+https://github.com/rust-lang/crates.io-index" 220 | checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" 221 | dependencies = [ 222 | "windows-sys 0.59.0", 223 | ] 224 | 225 | [[package]] 226 | name = "anstyle-wincon" 227 | version = "3.0.8" 228 | source = "registry+https://github.com/rust-lang/crates.io-index" 229 | checksum = "6680de5231bd6ee4c6191b8a1325daa282b415391ec9d3a37bd34f2060dc73fa" 230 | dependencies = [ 231 | "anstyle", 232 | "once_cell_polyfill", 233 | "windows-sys 0.59.0", 234 | ] 235 | 236 | [[package]] 237 | name = "arboard" 238 | version = "3.5.0" 239 | source = "registry+https://github.com/rust-lang/crates.io-index" 240 | checksum = "c1df21f715862ede32a0c525ce2ca4d52626bb0007f8c18b87a384503ac33e70" 241 | dependencies = [ 242 | "clipboard-win", 243 | "image", 244 | "log", 245 | "objc2 0.6.1", 246 | "objc2-app-kit 0.3.1", 247 | "objc2-core-foundation", 248 | "objc2-core-graphics", 249 | "objc2-foundation 0.3.1", 250 | "parking_lot", 251 | "percent-encoding", 252 | "windows-sys 0.59.0", 253 | "x11rb", 254 | ] 255 | 256 | [[package]] 257 | name = "arrayref" 258 | version = "0.3.9" 259 | source = "registry+https://github.com/rust-lang/crates.io-index" 260 | checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" 261 | 262 | [[package]] 263 | name = "arrayvec" 264 | version = "0.7.6" 265 | source = "registry+https://github.com/rust-lang/crates.io-index" 266 | checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 267 | 268 | [[package]] 269 | name = "as-raw-xcb-connection" 270 | version = "1.0.1" 271 | source = "registry+https://github.com/rust-lang/crates.io-index" 272 | checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" 273 | 274 | [[package]] 275 | name = "ash" 276 | version = "0.38.0+1.3.281" 277 | source = "registry+https://github.com/rust-lang/crates.io-index" 278 | checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" 279 | dependencies = [ 280 | "libloading", 281 | ] 282 | 283 | [[package]] 284 | name = "async-broadcast" 285 | version = "0.7.2" 286 | source = "registry+https://github.com/rust-lang/crates.io-index" 287 | checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" 288 | dependencies = [ 289 | "event-listener", 290 | "event-listener-strategy", 291 | "futures-core", 292 | "pin-project-lite", 293 | ] 294 | 295 | [[package]] 296 | name = "async-channel" 297 | version = "2.3.1" 298 | source = "registry+https://github.com/rust-lang/crates.io-index" 299 | checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" 300 | dependencies = [ 301 | "concurrent-queue", 302 | "event-listener-strategy", 303 | "futures-core", 304 | "pin-project-lite", 305 | ] 306 | 307 | [[package]] 308 | name = "async-executor" 309 | version = "1.13.2" 310 | source = "registry+https://github.com/rust-lang/crates.io-index" 311 | checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" 312 | dependencies = [ 313 | "async-task", 314 | "concurrent-queue", 315 | "fastrand", 316 | "futures-lite", 317 | "pin-project-lite", 318 | "slab", 319 | ] 320 | 321 | [[package]] 322 | name = "async-fs" 323 | version = "2.1.2" 324 | source = "registry+https://github.com/rust-lang/crates.io-index" 325 | checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" 326 | dependencies = [ 327 | "async-lock", 328 | "blocking", 329 | "futures-lite", 330 | ] 331 | 332 | [[package]] 333 | name = "async-io" 334 | version = "2.4.1" 335 | source = "registry+https://github.com/rust-lang/crates.io-index" 336 | checksum = "1237c0ae75a0f3765f58910ff9cdd0a12eeb39ab2f4c7de23262f337f0aacbb3" 337 | dependencies = [ 338 | "async-lock", 339 | "cfg-if", 340 | "concurrent-queue", 341 | "futures-io", 342 | "futures-lite", 343 | "parking", 344 | "polling", 345 | "rustix 1.0.7", 346 | "slab", 347 | "tracing", 348 | "windows-sys 0.59.0", 349 | ] 350 | 351 | [[package]] 352 | name = "async-lock" 353 | version = "3.4.0" 354 | source = "registry+https://github.com/rust-lang/crates.io-index" 355 | checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" 356 | dependencies = [ 357 | "event-listener", 358 | "event-listener-strategy", 359 | "pin-project-lite", 360 | ] 361 | 362 | [[package]] 363 | name = "async-process" 364 | version = "2.3.1" 365 | source = "registry+https://github.com/rust-lang/crates.io-index" 366 | checksum = "cde3f4e40e6021d7acffc90095cbd6dc54cb593903d1de5832f435eb274b85dc" 367 | dependencies = [ 368 | "async-channel", 369 | "async-io", 370 | "async-lock", 371 | "async-signal", 372 | "async-task", 373 | "blocking", 374 | "cfg-if", 375 | "event-listener", 376 | "futures-lite", 377 | "rustix 1.0.7", 378 | "tracing", 379 | ] 380 | 381 | [[package]] 382 | name = "async-recursion" 383 | version = "1.1.1" 384 | source = "registry+https://github.com/rust-lang/crates.io-index" 385 | checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" 386 | dependencies = [ 387 | "proc-macro2", 388 | "quote", 389 | "syn 2.0.101", 390 | ] 391 | 392 | [[package]] 393 | name = "async-signal" 394 | version = "0.2.11" 395 | source = "registry+https://github.com/rust-lang/crates.io-index" 396 | checksum = "d7605a4e50d4b06df3898d5a70bf5fde51ed9059b0434b73105193bc27acce0d" 397 | dependencies = [ 398 | "async-io", 399 | "async-lock", 400 | "atomic-waker", 401 | "cfg-if", 402 | "futures-core", 403 | "futures-io", 404 | "rustix 1.0.7", 405 | "signal-hook-registry", 406 | "slab", 407 | "windows-sys 0.59.0", 408 | ] 409 | 410 | [[package]] 411 | name = "async-task" 412 | version = "4.7.1" 413 | source = "registry+https://github.com/rust-lang/crates.io-index" 414 | checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" 415 | 416 | [[package]] 417 | name = "async-trait" 418 | version = "0.1.88" 419 | source = "registry+https://github.com/rust-lang/crates.io-index" 420 | checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" 421 | dependencies = [ 422 | "proc-macro2", 423 | "quote", 424 | "syn 2.0.101", 425 | ] 426 | 427 | [[package]] 428 | name = "atomic-waker" 429 | version = "1.1.2" 430 | source = "registry+https://github.com/rust-lang/crates.io-index" 431 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 432 | 433 | [[package]] 434 | name = "atspi" 435 | version = "0.22.0" 436 | source = "registry+https://github.com/rust-lang/crates.io-index" 437 | checksum = "be534b16650e35237bb1ed189ba2aab86ce65e88cc84c66f4935ba38575cecbf" 438 | dependencies = [ 439 | "atspi-common", 440 | "atspi-connection", 441 | "atspi-proxies", 442 | ] 443 | 444 | [[package]] 445 | name = "atspi-common" 446 | version = "0.6.0" 447 | source = "registry+https://github.com/rust-lang/crates.io-index" 448 | checksum = "1909ed2dc01d0a17505d89311d192518507e8a056a48148e3598fef5e7bb6ba7" 449 | dependencies = [ 450 | "enumflags2", 451 | "serde", 452 | "static_assertions", 453 | "zbus", 454 | "zbus-lockstep", 455 | "zbus-lockstep-macros", 456 | "zbus_names", 457 | "zvariant", 458 | ] 459 | 460 | [[package]] 461 | name = "atspi-connection" 462 | version = "0.6.0" 463 | source = "registry+https://github.com/rust-lang/crates.io-index" 464 | checksum = "430c5960624a4baaa511c9c0fcc2218e3b58f5dbcc47e6190cafee344b873333" 465 | dependencies = [ 466 | "atspi-common", 467 | "atspi-proxies", 468 | "futures-lite", 469 | "zbus", 470 | ] 471 | 472 | [[package]] 473 | name = "atspi-proxies" 474 | version = "0.6.0" 475 | source = "registry+https://github.com/rust-lang/crates.io-index" 476 | checksum = "a5e6c5de3e524cf967569722446bcd458d5032348554d9a17d7d72b041ab7496" 477 | dependencies = [ 478 | "atspi-common", 479 | "serde", 480 | "zbus", 481 | "zvariant", 482 | ] 483 | 484 | [[package]] 485 | name = "atty" 486 | version = "0.2.14" 487 | source = "registry+https://github.com/rust-lang/crates.io-index" 488 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 489 | dependencies = [ 490 | "hermit-abi 0.1.19", 491 | "libc", 492 | "winapi", 493 | ] 494 | 495 | [[package]] 496 | name = "autocfg" 497 | version = "1.4.0" 498 | source = "registry+https://github.com/rust-lang/crates.io-index" 499 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 500 | 501 | [[package]] 502 | name = "backtrace" 503 | version = "0.3.75" 504 | source = "registry+https://github.com/rust-lang/crates.io-index" 505 | checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" 506 | dependencies = [ 507 | "addr2line", 508 | "cfg-if", 509 | "libc", 510 | "miniz_oxide", 511 | "object", 512 | "rustc-demangle", 513 | "windows-targets 0.52.6", 514 | ] 515 | 516 | [[package]] 517 | name = "bit-set" 518 | version = "0.8.0" 519 | source = "registry+https://github.com/rust-lang/crates.io-index" 520 | checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" 521 | dependencies = [ 522 | "bit-vec", 523 | ] 524 | 525 | [[package]] 526 | name = "bit-vec" 527 | version = "0.8.0" 528 | source = "registry+https://github.com/rust-lang/crates.io-index" 529 | checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" 530 | 531 | [[package]] 532 | name = "bitflags" 533 | version = "1.3.2" 534 | source = "registry+https://github.com/rust-lang/crates.io-index" 535 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 536 | 537 | [[package]] 538 | name = "bitflags" 539 | version = "2.9.1" 540 | source = "registry+https://github.com/rust-lang/crates.io-index" 541 | checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" 542 | dependencies = [ 543 | "serde", 544 | ] 545 | 546 | [[package]] 547 | name = "block" 548 | version = "0.1.6" 549 | source = "registry+https://github.com/rust-lang/crates.io-index" 550 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 551 | 552 | [[package]] 553 | name = "block-buffer" 554 | version = "0.10.4" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 557 | dependencies = [ 558 | "generic-array", 559 | ] 560 | 561 | [[package]] 562 | name = "block2" 563 | version = "0.5.1" 564 | source = "registry+https://github.com/rust-lang/crates.io-index" 565 | checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" 566 | dependencies = [ 567 | "objc2 0.5.2", 568 | ] 569 | 570 | [[package]] 571 | name = "blocking" 572 | version = "1.6.1" 573 | source = "registry+https://github.com/rust-lang/crates.io-index" 574 | checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" 575 | dependencies = [ 576 | "async-channel", 577 | "async-task", 578 | "futures-io", 579 | "futures-lite", 580 | "piper", 581 | ] 582 | 583 | [[package]] 584 | name = "bumpalo" 585 | version = "3.17.0" 586 | source = "registry+https://github.com/rust-lang/crates.io-index" 587 | checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" 588 | 589 | [[package]] 590 | name = "bytemuck" 591 | version = "1.23.0" 592 | source = "registry+https://github.com/rust-lang/crates.io-index" 593 | checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" 594 | dependencies = [ 595 | "bytemuck_derive", 596 | ] 597 | 598 | [[package]] 599 | name = "bytemuck_derive" 600 | version = "1.9.3" 601 | source = "registry+https://github.com/rust-lang/crates.io-index" 602 | checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" 603 | dependencies = [ 604 | "proc-macro2", 605 | "quote", 606 | "syn 2.0.101", 607 | ] 608 | 609 | [[package]] 610 | name = "byteorder-lite" 611 | version = "0.1.0" 612 | source = "registry+https://github.com/rust-lang/crates.io-index" 613 | checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" 614 | 615 | [[package]] 616 | name = "bytes" 617 | version = "1.10.1" 618 | source = "registry+https://github.com/rust-lang/crates.io-index" 619 | checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 620 | 621 | [[package]] 622 | name = "calloop" 623 | version = "0.13.0" 624 | source = "registry+https://github.com/rust-lang/crates.io-index" 625 | checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" 626 | dependencies = [ 627 | "bitflags 2.9.1", 628 | "log", 629 | "polling", 630 | "rustix 0.38.44", 631 | "slab", 632 | "thiserror 1.0.69", 633 | ] 634 | 635 | [[package]] 636 | name = "calloop-wayland-source" 637 | version = "0.3.0" 638 | source = "registry+https://github.com/rust-lang/crates.io-index" 639 | checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" 640 | dependencies = [ 641 | "calloop", 642 | "rustix 0.38.44", 643 | "wayland-backend", 644 | "wayland-client", 645 | ] 646 | 647 | [[package]] 648 | name = "cc" 649 | version = "1.2.24" 650 | source = "registry+https://github.com/rust-lang/crates.io-index" 651 | checksum = "16595d3be041c03b09d08d0858631facccee9221e579704070e6e9e4915d3bc7" 652 | dependencies = [ 653 | "jobserver", 654 | "libc", 655 | "shlex", 656 | ] 657 | 658 | [[package]] 659 | name = "cesu8" 660 | version = "1.1.0" 661 | source = "registry+https://github.com/rust-lang/crates.io-index" 662 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 663 | 664 | [[package]] 665 | name = "cfg-if" 666 | version = "1.0.0" 667 | source = "registry+https://github.com/rust-lang/crates.io-index" 668 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 669 | 670 | [[package]] 671 | name = "cfg_aliases" 672 | version = "0.2.1" 673 | source = "registry+https://github.com/rust-lang/crates.io-index" 674 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 675 | 676 | [[package]] 677 | name = "cgl" 678 | version = "0.3.2" 679 | source = "registry+https://github.com/rust-lang/crates.io-index" 680 | checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" 681 | dependencies = [ 682 | "libc", 683 | ] 684 | 685 | [[package]] 686 | name = "clap" 687 | version = "2.34.0" 688 | source = "registry+https://github.com/rust-lang/crates.io-index" 689 | checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" 690 | dependencies = [ 691 | "ansi_term", 692 | "atty", 693 | "bitflags 1.3.2", 694 | "strsim", 695 | "textwrap", 696 | "unicode-width", 697 | "vec_map", 698 | ] 699 | 700 | [[package]] 701 | name = "clipboard-win" 702 | version = "5.4.0" 703 | source = "registry+https://github.com/rust-lang/crates.io-index" 704 | checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" 705 | dependencies = [ 706 | "error-code", 707 | ] 708 | 709 | [[package]] 710 | name = "codespan-reporting" 711 | version = "0.11.1" 712 | source = "registry+https://github.com/rust-lang/crates.io-index" 713 | checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" 714 | dependencies = [ 715 | "termcolor", 716 | "unicode-width", 717 | ] 718 | 719 | [[package]] 720 | name = "color-eyre" 721 | version = "0.6.4" 722 | source = "registry+https://github.com/rust-lang/crates.io-index" 723 | checksum = "e6e1761c0e16f8883bbbb8ce5990867f4f06bf11a0253da6495a04ce4b6ef0ec" 724 | dependencies = [ 725 | "backtrace", 726 | "color-spantrace", 727 | "eyre", 728 | "indenter", 729 | "once_cell", 730 | "owo-colors", 731 | "tracing-error", 732 | ] 733 | 734 | [[package]] 735 | name = "color-spantrace" 736 | version = "0.2.2" 737 | source = "registry+https://github.com/rust-lang/crates.io-index" 738 | checksum = "2ddd8d5bfda1e11a501d0a7303f3bfed9aa632ebdb859be40d0fd70478ed70d5" 739 | dependencies = [ 740 | "once_cell", 741 | "owo-colors", 742 | "tracing-core", 743 | "tracing-error", 744 | ] 745 | 746 | [[package]] 747 | name = "colorchoice" 748 | version = "1.0.3" 749 | source = "registry+https://github.com/rust-lang/crates.io-index" 750 | checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" 751 | 752 | [[package]] 753 | name = "combine" 754 | version = "4.6.7" 755 | source = "registry+https://github.com/rust-lang/crates.io-index" 756 | checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" 757 | dependencies = [ 758 | "bytes", 759 | "memchr", 760 | ] 761 | 762 | [[package]] 763 | name = "concurrent-queue" 764 | version = "2.5.0" 765 | source = "registry+https://github.com/rust-lang/crates.io-index" 766 | checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 767 | dependencies = [ 768 | "crossbeam-utils", 769 | ] 770 | 771 | [[package]] 772 | name = "core-foundation" 773 | version = "0.9.4" 774 | source = "registry+https://github.com/rust-lang/crates.io-index" 775 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 776 | dependencies = [ 777 | "core-foundation-sys", 778 | "libc", 779 | ] 780 | 781 | [[package]] 782 | name = "core-foundation" 783 | version = "0.10.1" 784 | source = "registry+https://github.com/rust-lang/crates.io-index" 785 | checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" 786 | dependencies = [ 787 | "core-foundation-sys", 788 | "libc", 789 | ] 790 | 791 | [[package]] 792 | name = "core-foundation-sys" 793 | version = "0.8.7" 794 | source = "registry+https://github.com/rust-lang/crates.io-index" 795 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 796 | 797 | [[package]] 798 | name = "core-graphics" 799 | version = "0.23.2" 800 | source = "registry+https://github.com/rust-lang/crates.io-index" 801 | checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" 802 | dependencies = [ 803 | "bitflags 1.3.2", 804 | "core-foundation 0.9.4", 805 | "core-graphics-types", 806 | "foreign-types", 807 | "libc", 808 | ] 809 | 810 | [[package]] 811 | name = "core-graphics-types" 812 | version = "0.1.3" 813 | source = "registry+https://github.com/rust-lang/crates.io-index" 814 | checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" 815 | dependencies = [ 816 | "bitflags 1.3.2", 817 | "core-foundation 0.9.4", 818 | "libc", 819 | ] 820 | 821 | [[package]] 822 | name = "cpufeatures" 823 | version = "0.2.17" 824 | source = "registry+https://github.com/rust-lang/crates.io-index" 825 | checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 826 | dependencies = [ 827 | "libc", 828 | ] 829 | 830 | [[package]] 831 | name = "crc32fast" 832 | version = "1.4.2" 833 | source = "registry+https://github.com/rust-lang/crates.io-index" 834 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 835 | dependencies = [ 836 | "cfg-if", 837 | ] 838 | 839 | [[package]] 840 | name = "crossbeam-utils" 841 | version = "0.8.21" 842 | source = "registry+https://github.com/rust-lang/crates.io-index" 843 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 844 | 845 | [[package]] 846 | name = "crypto-common" 847 | version = "0.1.6" 848 | source = "registry+https://github.com/rust-lang/crates.io-index" 849 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 850 | dependencies = [ 851 | "generic-array", 852 | "typenum", 853 | ] 854 | 855 | [[package]] 856 | name = "cursor-icon" 857 | version = "1.2.0" 858 | source = "registry+https://github.com/rust-lang/crates.io-index" 859 | checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" 860 | 861 | [[package]] 862 | name = "digest" 863 | version = "0.10.7" 864 | source = "registry+https://github.com/rust-lang/crates.io-index" 865 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 866 | dependencies = [ 867 | "block-buffer", 868 | "crypto-common", 869 | ] 870 | 871 | [[package]] 872 | name = "dispatch" 873 | version = "0.2.0" 874 | source = "registry+https://github.com/rust-lang/crates.io-index" 875 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 876 | 877 | [[package]] 878 | name = "dispatch2" 879 | version = "0.3.0" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" 882 | dependencies = [ 883 | "bitflags 2.9.1", 884 | "objc2 0.6.1", 885 | ] 886 | 887 | [[package]] 888 | name = "displaydoc" 889 | version = "0.2.5" 890 | source = "registry+https://github.com/rust-lang/crates.io-index" 891 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 892 | dependencies = [ 893 | "proc-macro2", 894 | "quote", 895 | "syn 2.0.101", 896 | ] 897 | 898 | [[package]] 899 | name = "dlib" 900 | version = "0.5.2" 901 | source = "registry+https://github.com/rust-lang/crates.io-index" 902 | checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" 903 | dependencies = [ 904 | "libloading", 905 | ] 906 | 907 | [[package]] 908 | name = "document-features" 909 | version = "0.2.11" 910 | source = "registry+https://github.com/rust-lang/crates.io-index" 911 | checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" 912 | dependencies = [ 913 | "litrs", 914 | ] 915 | 916 | [[package]] 917 | name = "downcast-rs" 918 | version = "1.2.1" 919 | source = "registry+https://github.com/rust-lang/crates.io-index" 920 | checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" 921 | 922 | [[package]] 923 | name = "dpi" 924 | version = "0.1.2" 925 | source = "registry+https://github.com/rust-lang/crates.io-index" 926 | checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" 927 | 928 | [[package]] 929 | name = "ecolor" 930 | version = "0.31.1" 931 | source = "registry+https://github.com/rust-lang/crates.io-index" 932 | checksum = "bc4feb366740ded31a004a0e4452fbf84e80ef432ecf8314c485210229672fd1" 933 | dependencies = [ 934 | "bytemuck", 935 | "emath", 936 | ] 937 | 938 | [[package]] 939 | name = "eframe" 940 | version = "0.31.1" 941 | source = "registry+https://github.com/rust-lang/crates.io-index" 942 | checksum = "d0dfe0859f3fb1bc6424c57d41e10e9093fe938f426b691e42272c2f336d915c" 943 | dependencies = [ 944 | "ahash", 945 | "bytemuck", 946 | "document-features", 947 | "egui", 948 | "egui-wgpu", 949 | "egui-winit", 950 | "egui_glow", 951 | "glow", 952 | "glutin", 953 | "glutin-winit", 954 | "image", 955 | "js-sys", 956 | "log", 957 | "objc2 0.5.2", 958 | "objc2-app-kit 0.2.2", 959 | "objc2-foundation 0.2.2", 960 | "parking_lot", 961 | "percent-encoding", 962 | "profiling", 963 | "raw-window-handle", 964 | "static_assertions", 965 | "wasm-bindgen", 966 | "wasm-bindgen-futures", 967 | "web-sys", 968 | "web-time", 969 | "winapi", 970 | "windows-sys 0.59.0", 971 | "winit", 972 | ] 973 | 974 | [[package]] 975 | name = "egui" 976 | version = "0.31.1" 977 | source = "registry+https://github.com/rust-lang/crates.io-index" 978 | checksum = "25dd34cec49ab55d85ebf70139cb1ccd29c977ef6b6ba4fe85489d6877ee9ef3" 979 | dependencies = [ 980 | "accesskit", 981 | "ahash", 982 | "bitflags 2.9.1", 983 | "emath", 984 | "epaint", 985 | "log", 986 | "nohash-hasher", 987 | "profiling", 988 | ] 989 | 990 | [[package]] 991 | name = "egui-i18n" 992 | version = "0.1.2" 993 | dependencies = [ 994 | "fluent", 995 | "fluent-bundle", 996 | "intl-memoizer", 997 | "log", 998 | "once_cell", 999 | "unic-langid", 1000 | ] 1001 | 1002 | [[package]] 1003 | name = "egui-i18n-cli" 1004 | version = "0.1.2" 1005 | dependencies = [ 1006 | "color-eyre", 1007 | "egui-i18n", 1008 | "paw", 1009 | "proc-macro2", 1010 | "quote", 1011 | "structopt", 1012 | "syn 2.0.101", 1013 | ] 1014 | 1015 | [[package]] 1016 | name = "egui-i18n-example-classic" 1017 | version = "0.1.2" 1018 | dependencies = [ 1019 | "eframe", 1020 | "egui-i18n", 1021 | "egui_extras", 1022 | "env_logger", 1023 | ] 1024 | 1025 | [[package]] 1026 | name = "egui-i18n-example-fluent" 1027 | version = "0.1.2" 1028 | dependencies = [ 1029 | "eframe", 1030 | "egui-i18n", 1031 | "egui_extras", 1032 | "env_logger", 1033 | ] 1034 | 1035 | [[package]] 1036 | name = "egui-wgpu" 1037 | version = "0.31.1" 1038 | source = "registry+https://github.com/rust-lang/crates.io-index" 1039 | checksum = "d319dfef570f699b6e9114e235e862a2ddcf75f0d1a061de9e1328d92146d820" 1040 | dependencies = [ 1041 | "ahash", 1042 | "bytemuck", 1043 | "document-features", 1044 | "egui", 1045 | "epaint", 1046 | "log", 1047 | "profiling", 1048 | "thiserror 1.0.69", 1049 | "type-map", 1050 | "web-time", 1051 | "wgpu", 1052 | "winit", 1053 | ] 1054 | 1055 | [[package]] 1056 | name = "egui-winit" 1057 | version = "0.31.1" 1058 | source = "registry+https://github.com/rust-lang/crates.io-index" 1059 | checksum = "7d9dfbb78fe4eb9c3a39ad528b90ee5915c252e77bbab9d4ebc576541ab67e13" 1060 | dependencies = [ 1061 | "accesskit_winit", 1062 | "ahash", 1063 | "arboard", 1064 | "bytemuck", 1065 | "egui", 1066 | "log", 1067 | "profiling", 1068 | "raw-window-handle", 1069 | "smithay-clipboard", 1070 | "web-time", 1071 | "webbrowser", 1072 | "winit", 1073 | ] 1074 | 1075 | [[package]] 1076 | name = "egui_extras" 1077 | version = "0.31.1" 1078 | source = "registry+https://github.com/rust-lang/crates.io-index" 1079 | checksum = "624659a2e972a46f4d5f646557906c55f1cd5a0836eddbe610fdf1afba1b4226" 1080 | dependencies = [ 1081 | "ahash", 1082 | "egui", 1083 | "enum-map", 1084 | "image", 1085 | "log", 1086 | "mime_guess2", 1087 | "profiling", 1088 | ] 1089 | 1090 | [[package]] 1091 | name = "egui_glow" 1092 | version = "0.31.1" 1093 | source = "registry+https://github.com/rust-lang/crates.io-index" 1094 | checksum = "910906e3f042ea6d2378ec12a6fd07698e14ddae68aed2d819ffe944a73aab9e" 1095 | dependencies = [ 1096 | "ahash", 1097 | "bytemuck", 1098 | "egui", 1099 | "glow", 1100 | "log", 1101 | "memoffset", 1102 | "profiling", 1103 | "wasm-bindgen", 1104 | "web-sys", 1105 | "winit", 1106 | ] 1107 | 1108 | [[package]] 1109 | name = "emath" 1110 | version = "0.31.1" 1111 | source = "registry+https://github.com/rust-lang/crates.io-index" 1112 | checksum = "9e4cadcff7a5353ba72b7fea76bf2122b5ebdbc68e8155aa56dfdea90083fe1b" 1113 | dependencies = [ 1114 | "bytemuck", 1115 | ] 1116 | 1117 | [[package]] 1118 | name = "endi" 1119 | version = "1.1.0" 1120 | source = "registry+https://github.com/rust-lang/crates.io-index" 1121 | checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" 1122 | 1123 | [[package]] 1124 | name = "enum-map" 1125 | version = "2.7.3" 1126 | source = "registry+https://github.com/rust-lang/crates.io-index" 1127 | checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" 1128 | dependencies = [ 1129 | "enum-map-derive", 1130 | "serde", 1131 | ] 1132 | 1133 | [[package]] 1134 | name = "enum-map-derive" 1135 | version = "0.17.0" 1136 | source = "registry+https://github.com/rust-lang/crates.io-index" 1137 | checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" 1138 | dependencies = [ 1139 | "proc-macro2", 1140 | "quote", 1141 | "syn 2.0.101", 1142 | ] 1143 | 1144 | [[package]] 1145 | name = "enumflags2" 1146 | version = "0.7.11" 1147 | source = "registry+https://github.com/rust-lang/crates.io-index" 1148 | checksum = "ba2f4b465f5318854c6f8dd686ede6c0a9dc67d4b1ac241cf0eb51521a309147" 1149 | dependencies = [ 1150 | "enumflags2_derive", 1151 | "serde", 1152 | ] 1153 | 1154 | [[package]] 1155 | name = "enumflags2_derive" 1156 | version = "0.7.11" 1157 | source = "registry+https://github.com/rust-lang/crates.io-index" 1158 | checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79" 1159 | dependencies = [ 1160 | "proc-macro2", 1161 | "quote", 1162 | "syn 2.0.101", 1163 | ] 1164 | 1165 | [[package]] 1166 | name = "env_filter" 1167 | version = "0.1.3" 1168 | source = "registry+https://github.com/rust-lang/crates.io-index" 1169 | checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" 1170 | dependencies = [ 1171 | "log", 1172 | ] 1173 | 1174 | [[package]] 1175 | name = "env_logger" 1176 | version = "0.11.8" 1177 | source = "registry+https://github.com/rust-lang/crates.io-index" 1178 | checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" 1179 | dependencies = [ 1180 | "anstream", 1181 | "anstyle", 1182 | "env_filter", 1183 | "jiff", 1184 | "log", 1185 | ] 1186 | 1187 | [[package]] 1188 | name = "epaint" 1189 | version = "0.31.1" 1190 | source = "registry+https://github.com/rust-lang/crates.io-index" 1191 | checksum = "41fcc0f5a7c613afd2dee5e4b30c3e6acafb8ad6f0edb06068811f708a67c562" 1192 | dependencies = [ 1193 | "ab_glyph", 1194 | "ahash", 1195 | "bytemuck", 1196 | "ecolor", 1197 | "emath", 1198 | "epaint_default_fonts", 1199 | "log", 1200 | "nohash-hasher", 1201 | "parking_lot", 1202 | "profiling", 1203 | ] 1204 | 1205 | [[package]] 1206 | name = "epaint_default_fonts" 1207 | version = "0.31.1" 1208 | source = "registry+https://github.com/rust-lang/crates.io-index" 1209 | checksum = "fc7e7a64c02cf7a5b51e745a9e45f60660a286f151c238b9d397b3e923f5082f" 1210 | 1211 | [[package]] 1212 | name = "equivalent" 1213 | version = "1.0.2" 1214 | source = "registry+https://github.com/rust-lang/crates.io-index" 1215 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 1216 | 1217 | [[package]] 1218 | name = "errno" 1219 | version = "0.3.12" 1220 | source = "registry+https://github.com/rust-lang/crates.io-index" 1221 | checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" 1222 | dependencies = [ 1223 | "libc", 1224 | "windows-sys 0.59.0", 1225 | ] 1226 | 1227 | [[package]] 1228 | name = "error-code" 1229 | version = "3.3.2" 1230 | source = "registry+https://github.com/rust-lang/crates.io-index" 1231 | checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" 1232 | 1233 | [[package]] 1234 | name = "event-listener" 1235 | version = "5.4.0" 1236 | source = "registry+https://github.com/rust-lang/crates.io-index" 1237 | checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" 1238 | dependencies = [ 1239 | "concurrent-queue", 1240 | "parking", 1241 | "pin-project-lite", 1242 | ] 1243 | 1244 | [[package]] 1245 | name = "event-listener-strategy" 1246 | version = "0.5.4" 1247 | source = "registry+https://github.com/rust-lang/crates.io-index" 1248 | checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" 1249 | dependencies = [ 1250 | "event-listener", 1251 | "pin-project-lite", 1252 | ] 1253 | 1254 | [[package]] 1255 | name = "eyre" 1256 | version = "0.6.12" 1257 | source = "registry+https://github.com/rust-lang/crates.io-index" 1258 | checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" 1259 | dependencies = [ 1260 | "indenter", 1261 | "once_cell", 1262 | ] 1263 | 1264 | [[package]] 1265 | name = "fastrand" 1266 | version = "2.3.0" 1267 | source = "registry+https://github.com/rust-lang/crates.io-index" 1268 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 1269 | 1270 | [[package]] 1271 | name = "fdeflate" 1272 | version = "0.3.7" 1273 | source = "registry+https://github.com/rust-lang/crates.io-index" 1274 | checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" 1275 | dependencies = [ 1276 | "simd-adler32", 1277 | ] 1278 | 1279 | [[package]] 1280 | name = "flate2" 1281 | version = "1.1.1" 1282 | source = "registry+https://github.com/rust-lang/crates.io-index" 1283 | checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" 1284 | dependencies = [ 1285 | "crc32fast", 1286 | "miniz_oxide", 1287 | ] 1288 | 1289 | [[package]] 1290 | name = "fluent" 1291 | version = "0.17.0" 1292 | source = "registry+https://github.com/rust-lang/crates.io-index" 1293 | checksum = "8137a6d5a2c50d6b0ebfcb9aaa91a28154e0a70605f112d30cb0cd4a78670477" 1294 | dependencies = [ 1295 | "fluent-bundle", 1296 | "unic-langid", 1297 | ] 1298 | 1299 | [[package]] 1300 | name = "fluent-bundle" 1301 | version = "0.16.0" 1302 | source = "registry+https://github.com/rust-lang/crates.io-index" 1303 | checksum = "01203cb8918f5711e73891b347816d932046f95f54207710bda99beaeb423bf4" 1304 | dependencies = [ 1305 | "fluent-langneg", 1306 | "fluent-syntax", 1307 | "intl-memoizer", 1308 | "intl_pluralrules", 1309 | "rustc-hash 2.1.1", 1310 | "self_cell", 1311 | "smallvec", 1312 | "unic-langid", 1313 | ] 1314 | 1315 | [[package]] 1316 | name = "fluent-langneg" 1317 | version = "0.13.0" 1318 | source = "registry+https://github.com/rust-lang/crates.io-index" 1319 | checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94" 1320 | dependencies = [ 1321 | "unic-langid", 1322 | ] 1323 | 1324 | [[package]] 1325 | name = "fluent-syntax" 1326 | version = "0.12.0" 1327 | source = "registry+https://github.com/rust-lang/crates.io-index" 1328 | checksum = "54f0d287c53ffd184d04d8677f590f4ac5379785529e5e08b1c8083acdd5c198" 1329 | dependencies = [ 1330 | "memchr", 1331 | "thiserror 2.0.12", 1332 | ] 1333 | 1334 | [[package]] 1335 | name = "foldhash" 1336 | version = "0.1.5" 1337 | source = "registry+https://github.com/rust-lang/crates.io-index" 1338 | checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 1339 | 1340 | [[package]] 1341 | name = "foreign-types" 1342 | version = "0.5.0" 1343 | source = "registry+https://github.com/rust-lang/crates.io-index" 1344 | checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" 1345 | dependencies = [ 1346 | "foreign-types-macros", 1347 | "foreign-types-shared", 1348 | ] 1349 | 1350 | [[package]] 1351 | name = "foreign-types-macros" 1352 | version = "0.2.3" 1353 | source = "registry+https://github.com/rust-lang/crates.io-index" 1354 | checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" 1355 | dependencies = [ 1356 | "proc-macro2", 1357 | "quote", 1358 | "syn 2.0.101", 1359 | ] 1360 | 1361 | [[package]] 1362 | name = "foreign-types-shared" 1363 | version = "0.3.1" 1364 | source = "registry+https://github.com/rust-lang/crates.io-index" 1365 | checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" 1366 | 1367 | [[package]] 1368 | name = "form_urlencoded" 1369 | version = "1.2.1" 1370 | source = "registry+https://github.com/rust-lang/crates.io-index" 1371 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 1372 | dependencies = [ 1373 | "percent-encoding", 1374 | ] 1375 | 1376 | [[package]] 1377 | name = "futures-core" 1378 | version = "0.3.31" 1379 | source = "registry+https://github.com/rust-lang/crates.io-index" 1380 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 1381 | 1382 | [[package]] 1383 | name = "futures-io" 1384 | version = "0.3.31" 1385 | source = "registry+https://github.com/rust-lang/crates.io-index" 1386 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 1387 | 1388 | [[package]] 1389 | name = "futures-lite" 1390 | version = "2.6.0" 1391 | source = "registry+https://github.com/rust-lang/crates.io-index" 1392 | checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" 1393 | dependencies = [ 1394 | "fastrand", 1395 | "futures-core", 1396 | "futures-io", 1397 | "parking", 1398 | "pin-project-lite", 1399 | ] 1400 | 1401 | [[package]] 1402 | name = "futures-macro" 1403 | version = "0.3.31" 1404 | source = "registry+https://github.com/rust-lang/crates.io-index" 1405 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 1406 | dependencies = [ 1407 | "proc-macro2", 1408 | "quote", 1409 | "syn 2.0.101", 1410 | ] 1411 | 1412 | [[package]] 1413 | name = "futures-sink" 1414 | version = "0.3.31" 1415 | source = "registry+https://github.com/rust-lang/crates.io-index" 1416 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 1417 | 1418 | [[package]] 1419 | name = "futures-task" 1420 | version = "0.3.31" 1421 | source = "registry+https://github.com/rust-lang/crates.io-index" 1422 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 1423 | 1424 | [[package]] 1425 | name = "futures-util" 1426 | version = "0.3.31" 1427 | source = "registry+https://github.com/rust-lang/crates.io-index" 1428 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 1429 | dependencies = [ 1430 | "futures-core", 1431 | "futures-io", 1432 | "futures-macro", 1433 | "futures-sink", 1434 | "futures-task", 1435 | "memchr", 1436 | "pin-project-lite", 1437 | "pin-utils", 1438 | "slab", 1439 | ] 1440 | 1441 | [[package]] 1442 | name = "generic-array" 1443 | version = "0.14.7" 1444 | source = "registry+https://github.com/rust-lang/crates.io-index" 1445 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 1446 | dependencies = [ 1447 | "typenum", 1448 | "version_check", 1449 | ] 1450 | 1451 | [[package]] 1452 | name = "gethostname" 1453 | version = "0.4.3" 1454 | source = "registry+https://github.com/rust-lang/crates.io-index" 1455 | checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" 1456 | dependencies = [ 1457 | "libc", 1458 | "windows-targets 0.48.5", 1459 | ] 1460 | 1461 | [[package]] 1462 | name = "getrandom" 1463 | version = "0.2.16" 1464 | source = "registry+https://github.com/rust-lang/crates.io-index" 1465 | checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 1466 | dependencies = [ 1467 | "cfg-if", 1468 | "libc", 1469 | "wasi 0.11.0+wasi-snapshot-preview1", 1470 | ] 1471 | 1472 | [[package]] 1473 | name = "getrandom" 1474 | version = "0.3.3" 1475 | source = "registry+https://github.com/rust-lang/crates.io-index" 1476 | checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 1477 | dependencies = [ 1478 | "cfg-if", 1479 | "libc", 1480 | "r-efi", 1481 | "wasi 0.14.2+wasi-0.2.4", 1482 | ] 1483 | 1484 | [[package]] 1485 | name = "gimli" 1486 | version = "0.31.1" 1487 | source = "registry+https://github.com/rust-lang/crates.io-index" 1488 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 1489 | 1490 | [[package]] 1491 | name = "gl_generator" 1492 | version = "0.14.0" 1493 | source = "registry+https://github.com/rust-lang/crates.io-index" 1494 | checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" 1495 | dependencies = [ 1496 | "khronos_api", 1497 | "log", 1498 | "xml-rs", 1499 | ] 1500 | 1501 | [[package]] 1502 | name = "glow" 1503 | version = "0.16.0" 1504 | source = "registry+https://github.com/rust-lang/crates.io-index" 1505 | checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" 1506 | dependencies = [ 1507 | "js-sys", 1508 | "slotmap", 1509 | "wasm-bindgen", 1510 | "web-sys", 1511 | ] 1512 | 1513 | [[package]] 1514 | name = "glutin" 1515 | version = "0.32.3" 1516 | source = "registry+https://github.com/rust-lang/crates.io-index" 1517 | checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" 1518 | dependencies = [ 1519 | "bitflags 2.9.1", 1520 | "cfg_aliases", 1521 | "cgl", 1522 | "dispatch2", 1523 | "glutin_egl_sys", 1524 | "glutin_glx_sys", 1525 | "glutin_wgl_sys", 1526 | "libloading", 1527 | "objc2 0.6.1", 1528 | "objc2-app-kit 0.3.1", 1529 | "objc2-core-foundation", 1530 | "objc2-foundation 0.3.1", 1531 | "once_cell", 1532 | "raw-window-handle", 1533 | "wayland-sys", 1534 | "windows-sys 0.52.0", 1535 | "x11-dl", 1536 | ] 1537 | 1538 | [[package]] 1539 | name = "glutin-winit" 1540 | version = "0.5.0" 1541 | source = "registry+https://github.com/rust-lang/crates.io-index" 1542 | checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f" 1543 | dependencies = [ 1544 | "cfg_aliases", 1545 | "glutin", 1546 | "raw-window-handle", 1547 | "winit", 1548 | ] 1549 | 1550 | [[package]] 1551 | name = "glutin_egl_sys" 1552 | version = "0.7.1" 1553 | source = "registry+https://github.com/rust-lang/crates.io-index" 1554 | checksum = "4c4680ba6195f424febdc3ba46e7a42a0e58743f2edb115297b86d7f8ecc02d2" 1555 | dependencies = [ 1556 | "gl_generator", 1557 | "windows-sys 0.52.0", 1558 | ] 1559 | 1560 | [[package]] 1561 | name = "glutin_glx_sys" 1562 | version = "0.6.1" 1563 | source = "registry+https://github.com/rust-lang/crates.io-index" 1564 | checksum = "8a7bb2938045a88b612499fbcba375a77198e01306f52272e692f8c1f3751185" 1565 | dependencies = [ 1566 | "gl_generator", 1567 | "x11-dl", 1568 | ] 1569 | 1570 | [[package]] 1571 | name = "glutin_wgl_sys" 1572 | version = "0.6.1" 1573 | source = "registry+https://github.com/rust-lang/crates.io-index" 1574 | checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" 1575 | dependencies = [ 1576 | "gl_generator", 1577 | ] 1578 | 1579 | [[package]] 1580 | name = "gpu-alloc" 1581 | version = "0.6.0" 1582 | source = "registry+https://github.com/rust-lang/crates.io-index" 1583 | checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" 1584 | dependencies = [ 1585 | "bitflags 2.9.1", 1586 | "gpu-alloc-types", 1587 | ] 1588 | 1589 | [[package]] 1590 | name = "gpu-alloc-types" 1591 | version = "0.3.0" 1592 | source = "registry+https://github.com/rust-lang/crates.io-index" 1593 | checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" 1594 | dependencies = [ 1595 | "bitflags 2.9.1", 1596 | ] 1597 | 1598 | [[package]] 1599 | name = "gpu-descriptor" 1600 | version = "0.3.2" 1601 | source = "registry+https://github.com/rust-lang/crates.io-index" 1602 | checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" 1603 | dependencies = [ 1604 | "bitflags 2.9.1", 1605 | "gpu-descriptor-types", 1606 | "hashbrown", 1607 | ] 1608 | 1609 | [[package]] 1610 | name = "gpu-descriptor-types" 1611 | version = "0.2.0" 1612 | source = "registry+https://github.com/rust-lang/crates.io-index" 1613 | checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" 1614 | dependencies = [ 1615 | "bitflags 2.9.1", 1616 | ] 1617 | 1618 | [[package]] 1619 | name = "hashbrown" 1620 | version = "0.15.3" 1621 | source = "registry+https://github.com/rust-lang/crates.io-index" 1622 | checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" 1623 | dependencies = [ 1624 | "foldhash", 1625 | ] 1626 | 1627 | [[package]] 1628 | name = "heck" 1629 | version = "0.3.3" 1630 | source = "registry+https://github.com/rust-lang/crates.io-index" 1631 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" 1632 | dependencies = [ 1633 | "unicode-segmentation", 1634 | ] 1635 | 1636 | [[package]] 1637 | name = "heck" 1638 | version = "0.5.0" 1639 | source = "registry+https://github.com/rust-lang/crates.io-index" 1640 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1641 | 1642 | [[package]] 1643 | name = "hermit-abi" 1644 | version = "0.1.19" 1645 | source = "registry+https://github.com/rust-lang/crates.io-index" 1646 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 1647 | dependencies = [ 1648 | "libc", 1649 | ] 1650 | 1651 | [[package]] 1652 | name = "hermit-abi" 1653 | version = "0.5.1" 1654 | source = "registry+https://github.com/rust-lang/crates.io-index" 1655 | checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" 1656 | 1657 | [[package]] 1658 | name = "hex" 1659 | version = "0.4.3" 1660 | source = "registry+https://github.com/rust-lang/crates.io-index" 1661 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1662 | 1663 | [[package]] 1664 | name = "hexf-parse" 1665 | version = "0.2.1" 1666 | source = "registry+https://github.com/rust-lang/crates.io-index" 1667 | checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" 1668 | 1669 | [[package]] 1670 | name = "home" 1671 | version = "0.5.11" 1672 | source = "registry+https://github.com/rust-lang/crates.io-index" 1673 | checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" 1674 | dependencies = [ 1675 | "windows-sys 0.59.0", 1676 | ] 1677 | 1678 | [[package]] 1679 | name = "icu_collections" 1680 | version = "2.0.0" 1681 | source = "registry+https://github.com/rust-lang/crates.io-index" 1682 | checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 1683 | dependencies = [ 1684 | "displaydoc", 1685 | "potential_utf", 1686 | "yoke", 1687 | "zerofrom", 1688 | "zerovec", 1689 | ] 1690 | 1691 | [[package]] 1692 | name = "icu_locale_core" 1693 | version = "2.0.0" 1694 | source = "registry+https://github.com/rust-lang/crates.io-index" 1695 | checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 1696 | dependencies = [ 1697 | "displaydoc", 1698 | "litemap", 1699 | "tinystr", 1700 | "writeable", 1701 | "zerovec", 1702 | ] 1703 | 1704 | [[package]] 1705 | name = "icu_normalizer" 1706 | version = "2.0.0" 1707 | source = "registry+https://github.com/rust-lang/crates.io-index" 1708 | checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 1709 | dependencies = [ 1710 | "displaydoc", 1711 | "icu_collections", 1712 | "icu_normalizer_data", 1713 | "icu_properties", 1714 | "icu_provider", 1715 | "smallvec", 1716 | "zerovec", 1717 | ] 1718 | 1719 | [[package]] 1720 | name = "icu_normalizer_data" 1721 | version = "2.0.0" 1722 | source = "registry+https://github.com/rust-lang/crates.io-index" 1723 | checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 1724 | 1725 | [[package]] 1726 | name = "icu_properties" 1727 | version = "2.0.1" 1728 | source = "registry+https://github.com/rust-lang/crates.io-index" 1729 | checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" 1730 | dependencies = [ 1731 | "displaydoc", 1732 | "icu_collections", 1733 | "icu_locale_core", 1734 | "icu_properties_data", 1735 | "icu_provider", 1736 | "potential_utf", 1737 | "zerotrie", 1738 | "zerovec", 1739 | ] 1740 | 1741 | [[package]] 1742 | name = "icu_properties_data" 1743 | version = "2.0.1" 1744 | source = "registry+https://github.com/rust-lang/crates.io-index" 1745 | checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" 1746 | 1747 | [[package]] 1748 | name = "icu_provider" 1749 | version = "2.0.0" 1750 | source = "registry+https://github.com/rust-lang/crates.io-index" 1751 | checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 1752 | dependencies = [ 1753 | "displaydoc", 1754 | "icu_locale_core", 1755 | "stable_deref_trait", 1756 | "tinystr", 1757 | "writeable", 1758 | "yoke", 1759 | "zerofrom", 1760 | "zerotrie", 1761 | "zerovec", 1762 | ] 1763 | 1764 | [[package]] 1765 | name = "idna" 1766 | version = "1.0.3" 1767 | source = "registry+https://github.com/rust-lang/crates.io-index" 1768 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 1769 | dependencies = [ 1770 | "idna_adapter", 1771 | "smallvec", 1772 | "utf8_iter", 1773 | ] 1774 | 1775 | [[package]] 1776 | name = "idna_adapter" 1777 | version = "1.2.1" 1778 | source = "registry+https://github.com/rust-lang/crates.io-index" 1779 | checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 1780 | dependencies = [ 1781 | "icu_normalizer", 1782 | "icu_properties", 1783 | ] 1784 | 1785 | [[package]] 1786 | name = "image" 1787 | version = "0.25.6" 1788 | source = "registry+https://github.com/rust-lang/crates.io-index" 1789 | checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" 1790 | dependencies = [ 1791 | "bytemuck", 1792 | "byteorder-lite", 1793 | "num-traits", 1794 | "png", 1795 | "tiff", 1796 | ] 1797 | 1798 | [[package]] 1799 | name = "immutable-chunkmap" 1800 | version = "2.0.6" 1801 | source = "registry+https://github.com/rust-lang/crates.io-index" 1802 | checksum = "12f97096f508d54f8f8ab8957862eee2ccd628847b6217af1a335e1c44dee578" 1803 | dependencies = [ 1804 | "arrayvec", 1805 | ] 1806 | 1807 | [[package]] 1808 | name = "indenter" 1809 | version = "0.3.3" 1810 | source = "registry+https://github.com/rust-lang/crates.io-index" 1811 | checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" 1812 | 1813 | [[package]] 1814 | name = "indexmap" 1815 | version = "2.9.0" 1816 | source = "registry+https://github.com/rust-lang/crates.io-index" 1817 | checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" 1818 | dependencies = [ 1819 | "equivalent", 1820 | "hashbrown", 1821 | ] 1822 | 1823 | [[package]] 1824 | name = "intl-memoizer" 1825 | version = "0.5.3" 1826 | source = "registry+https://github.com/rust-lang/crates.io-index" 1827 | checksum = "310da2e345f5eb861e7a07ee182262e94975051db9e4223e909ba90f392f163f" 1828 | dependencies = [ 1829 | "type-map", 1830 | "unic-langid", 1831 | ] 1832 | 1833 | [[package]] 1834 | name = "intl_pluralrules" 1835 | version = "7.0.2" 1836 | source = "registry+https://github.com/rust-lang/crates.io-index" 1837 | checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972" 1838 | dependencies = [ 1839 | "unic-langid", 1840 | ] 1841 | 1842 | [[package]] 1843 | name = "is_terminal_polyfill" 1844 | version = "1.70.1" 1845 | source = "registry+https://github.com/rust-lang/crates.io-index" 1846 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 1847 | 1848 | [[package]] 1849 | name = "jiff" 1850 | version = "0.2.14" 1851 | source = "registry+https://github.com/rust-lang/crates.io-index" 1852 | checksum = "a194df1107f33c79f4f93d02c80798520551949d59dfad22b6157048a88cca93" 1853 | dependencies = [ 1854 | "jiff-static", 1855 | "log", 1856 | "portable-atomic", 1857 | "portable-atomic-util", 1858 | "serde", 1859 | ] 1860 | 1861 | [[package]] 1862 | name = "jiff-static" 1863 | version = "0.2.14" 1864 | source = "registry+https://github.com/rust-lang/crates.io-index" 1865 | checksum = "6c6e1db7ed32c6c71b759497fae34bf7933636f75a251b9e736555da426f6442" 1866 | dependencies = [ 1867 | "proc-macro2", 1868 | "quote", 1869 | "syn 2.0.101", 1870 | ] 1871 | 1872 | [[package]] 1873 | name = "jni" 1874 | version = "0.21.1" 1875 | source = "registry+https://github.com/rust-lang/crates.io-index" 1876 | checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" 1877 | dependencies = [ 1878 | "cesu8", 1879 | "cfg-if", 1880 | "combine", 1881 | "jni-sys", 1882 | "log", 1883 | "thiserror 1.0.69", 1884 | "walkdir", 1885 | "windows-sys 0.45.0", 1886 | ] 1887 | 1888 | [[package]] 1889 | name = "jni-sys" 1890 | version = "0.3.0" 1891 | source = "registry+https://github.com/rust-lang/crates.io-index" 1892 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 1893 | 1894 | [[package]] 1895 | name = "jobserver" 1896 | version = "0.1.33" 1897 | source = "registry+https://github.com/rust-lang/crates.io-index" 1898 | checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" 1899 | dependencies = [ 1900 | "getrandom 0.3.3", 1901 | "libc", 1902 | ] 1903 | 1904 | [[package]] 1905 | name = "jpeg-decoder" 1906 | version = "0.3.1" 1907 | source = "registry+https://github.com/rust-lang/crates.io-index" 1908 | checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" 1909 | 1910 | [[package]] 1911 | name = "js-sys" 1912 | version = "0.3.77" 1913 | source = "registry+https://github.com/rust-lang/crates.io-index" 1914 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 1915 | dependencies = [ 1916 | "once_cell", 1917 | "wasm-bindgen", 1918 | ] 1919 | 1920 | [[package]] 1921 | name = "khronos-egl" 1922 | version = "6.0.0" 1923 | source = "registry+https://github.com/rust-lang/crates.io-index" 1924 | checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" 1925 | dependencies = [ 1926 | "libc", 1927 | "libloading", 1928 | "pkg-config", 1929 | ] 1930 | 1931 | [[package]] 1932 | name = "khronos_api" 1933 | version = "3.1.0" 1934 | source = "registry+https://github.com/rust-lang/crates.io-index" 1935 | checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" 1936 | 1937 | [[package]] 1938 | name = "lazy_static" 1939 | version = "1.5.0" 1940 | source = "registry+https://github.com/rust-lang/crates.io-index" 1941 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1942 | 1943 | [[package]] 1944 | name = "libc" 1945 | version = "0.2.172" 1946 | source = "registry+https://github.com/rust-lang/crates.io-index" 1947 | checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" 1948 | 1949 | [[package]] 1950 | name = "libloading" 1951 | version = "0.8.8" 1952 | source = "registry+https://github.com/rust-lang/crates.io-index" 1953 | checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" 1954 | dependencies = [ 1955 | "cfg-if", 1956 | "windows-targets 0.53.0", 1957 | ] 1958 | 1959 | [[package]] 1960 | name = "libredox" 1961 | version = "0.1.3" 1962 | source = "registry+https://github.com/rust-lang/crates.io-index" 1963 | checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" 1964 | dependencies = [ 1965 | "bitflags 2.9.1", 1966 | "libc", 1967 | "redox_syscall 0.5.12", 1968 | ] 1969 | 1970 | [[package]] 1971 | name = "linux-raw-sys" 1972 | version = "0.4.15" 1973 | source = "registry+https://github.com/rust-lang/crates.io-index" 1974 | checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" 1975 | 1976 | [[package]] 1977 | name = "linux-raw-sys" 1978 | version = "0.9.4" 1979 | source = "registry+https://github.com/rust-lang/crates.io-index" 1980 | checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 1981 | 1982 | [[package]] 1983 | name = "litemap" 1984 | version = "0.8.0" 1985 | source = "registry+https://github.com/rust-lang/crates.io-index" 1986 | checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 1987 | 1988 | [[package]] 1989 | name = "litrs" 1990 | version = "0.4.1" 1991 | source = "registry+https://github.com/rust-lang/crates.io-index" 1992 | checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" 1993 | 1994 | [[package]] 1995 | name = "lock_api" 1996 | version = "0.4.12" 1997 | source = "registry+https://github.com/rust-lang/crates.io-index" 1998 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 1999 | dependencies = [ 2000 | "autocfg", 2001 | "scopeguard", 2002 | ] 2003 | 2004 | [[package]] 2005 | name = "log" 2006 | version = "0.4.27" 2007 | source = "registry+https://github.com/rust-lang/crates.io-index" 2008 | checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 2009 | 2010 | [[package]] 2011 | name = "malloc_buf" 2012 | version = "0.0.6" 2013 | source = "registry+https://github.com/rust-lang/crates.io-index" 2014 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 2015 | dependencies = [ 2016 | "libc", 2017 | ] 2018 | 2019 | [[package]] 2020 | name = "memchr" 2021 | version = "2.7.4" 2022 | source = "registry+https://github.com/rust-lang/crates.io-index" 2023 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 2024 | 2025 | [[package]] 2026 | name = "memmap2" 2027 | version = "0.9.5" 2028 | source = "registry+https://github.com/rust-lang/crates.io-index" 2029 | checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" 2030 | dependencies = [ 2031 | "libc", 2032 | ] 2033 | 2034 | [[package]] 2035 | name = "memoffset" 2036 | version = "0.9.1" 2037 | source = "registry+https://github.com/rust-lang/crates.io-index" 2038 | checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" 2039 | dependencies = [ 2040 | "autocfg", 2041 | ] 2042 | 2043 | [[package]] 2044 | name = "metal" 2045 | version = "0.31.0" 2046 | source = "registry+https://github.com/rust-lang/crates.io-index" 2047 | checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" 2048 | dependencies = [ 2049 | "bitflags 2.9.1", 2050 | "block", 2051 | "core-graphics-types", 2052 | "foreign-types", 2053 | "log", 2054 | "objc", 2055 | "paste", 2056 | ] 2057 | 2058 | [[package]] 2059 | name = "mime" 2060 | version = "0.3.17" 2061 | source = "registry+https://github.com/rust-lang/crates.io-index" 2062 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 2063 | 2064 | [[package]] 2065 | name = "mime_guess2" 2066 | version = "2.3.1" 2067 | source = "registry+https://github.com/rust-lang/crates.io-index" 2068 | checksum = "1706dc14a2e140dec0a7a07109d9a3d5890b81e85bd6c60b906b249a77adf0ca" 2069 | dependencies = [ 2070 | "mime", 2071 | "phf", 2072 | "phf_shared", 2073 | "unicase", 2074 | ] 2075 | 2076 | [[package]] 2077 | name = "miniz_oxide" 2078 | version = "0.8.8" 2079 | source = "registry+https://github.com/rust-lang/crates.io-index" 2080 | checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" 2081 | dependencies = [ 2082 | "adler2", 2083 | "simd-adler32", 2084 | ] 2085 | 2086 | [[package]] 2087 | name = "naga" 2088 | version = "24.0.0" 2089 | source = "registry+https://github.com/rust-lang/crates.io-index" 2090 | checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e" 2091 | dependencies = [ 2092 | "arrayvec", 2093 | "bit-set", 2094 | "bitflags 2.9.1", 2095 | "cfg_aliases", 2096 | "codespan-reporting", 2097 | "hexf-parse", 2098 | "indexmap", 2099 | "log", 2100 | "rustc-hash 1.1.0", 2101 | "spirv", 2102 | "strum", 2103 | "termcolor", 2104 | "thiserror 2.0.12", 2105 | "unicode-xid", 2106 | ] 2107 | 2108 | [[package]] 2109 | name = "ndk" 2110 | version = "0.9.0" 2111 | source = "registry+https://github.com/rust-lang/crates.io-index" 2112 | checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" 2113 | dependencies = [ 2114 | "bitflags 2.9.1", 2115 | "jni-sys", 2116 | "log", 2117 | "ndk-sys 0.6.0+11769913", 2118 | "num_enum", 2119 | "raw-window-handle", 2120 | "thiserror 1.0.69", 2121 | ] 2122 | 2123 | [[package]] 2124 | name = "ndk-context" 2125 | version = "0.1.1" 2126 | source = "registry+https://github.com/rust-lang/crates.io-index" 2127 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 2128 | 2129 | [[package]] 2130 | name = "ndk-sys" 2131 | version = "0.5.0+25.2.9519653" 2132 | source = "registry+https://github.com/rust-lang/crates.io-index" 2133 | checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" 2134 | dependencies = [ 2135 | "jni-sys", 2136 | ] 2137 | 2138 | [[package]] 2139 | name = "ndk-sys" 2140 | version = "0.6.0+11769913" 2141 | source = "registry+https://github.com/rust-lang/crates.io-index" 2142 | checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" 2143 | dependencies = [ 2144 | "jni-sys", 2145 | ] 2146 | 2147 | [[package]] 2148 | name = "nix" 2149 | version = "0.29.0" 2150 | source = "registry+https://github.com/rust-lang/crates.io-index" 2151 | checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" 2152 | dependencies = [ 2153 | "bitflags 2.9.1", 2154 | "cfg-if", 2155 | "cfg_aliases", 2156 | "libc", 2157 | "memoffset", 2158 | ] 2159 | 2160 | [[package]] 2161 | name = "nohash-hasher" 2162 | version = "0.2.0" 2163 | source = "registry+https://github.com/rust-lang/crates.io-index" 2164 | checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" 2165 | 2166 | [[package]] 2167 | name = "num-traits" 2168 | version = "0.2.19" 2169 | source = "registry+https://github.com/rust-lang/crates.io-index" 2170 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 2171 | dependencies = [ 2172 | "autocfg", 2173 | ] 2174 | 2175 | [[package]] 2176 | name = "num_enum" 2177 | version = "0.7.3" 2178 | source = "registry+https://github.com/rust-lang/crates.io-index" 2179 | checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" 2180 | dependencies = [ 2181 | "num_enum_derive", 2182 | ] 2183 | 2184 | [[package]] 2185 | name = "num_enum_derive" 2186 | version = "0.7.3" 2187 | source = "registry+https://github.com/rust-lang/crates.io-index" 2188 | checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" 2189 | dependencies = [ 2190 | "proc-macro-crate", 2191 | "proc-macro2", 2192 | "quote", 2193 | "syn 2.0.101", 2194 | ] 2195 | 2196 | [[package]] 2197 | name = "objc" 2198 | version = "0.2.7" 2199 | source = "registry+https://github.com/rust-lang/crates.io-index" 2200 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 2201 | dependencies = [ 2202 | "malloc_buf", 2203 | ] 2204 | 2205 | [[package]] 2206 | name = "objc-sys" 2207 | version = "0.3.5" 2208 | source = "registry+https://github.com/rust-lang/crates.io-index" 2209 | checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" 2210 | 2211 | [[package]] 2212 | name = "objc2" 2213 | version = "0.5.2" 2214 | source = "registry+https://github.com/rust-lang/crates.io-index" 2215 | checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" 2216 | dependencies = [ 2217 | "objc-sys", 2218 | "objc2-encode", 2219 | ] 2220 | 2221 | [[package]] 2222 | name = "objc2" 2223 | version = "0.6.1" 2224 | source = "registry+https://github.com/rust-lang/crates.io-index" 2225 | checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" 2226 | dependencies = [ 2227 | "objc2-encode", 2228 | ] 2229 | 2230 | [[package]] 2231 | name = "objc2-app-kit" 2232 | version = "0.2.2" 2233 | source = "registry+https://github.com/rust-lang/crates.io-index" 2234 | checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" 2235 | dependencies = [ 2236 | "bitflags 2.9.1", 2237 | "block2", 2238 | "libc", 2239 | "objc2 0.5.2", 2240 | "objc2-core-data", 2241 | "objc2-core-image", 2242 | "objc2-foundation 0.2.2", 2243 | "objc2-quartz-core", 2244 | ] 2245 | 2246 | [[package]] 2247 | name = "objc2-app-kit" 2248 | version = "0.3.1" 2249 | source = "registry+https://github.com/rust-lang/crates.io-index" 2250 | checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" 2251 | dependencies = [ 2252 | "bitflags 2.9.1", 2253 | "objc2 0.6.1", 2254 | "objc2-core-foundation", 2255 | "objc2-core-graphics", 2256 | "objc2-foundation 0.3.1", 2257 | ] 2258 | 2259 | [[package]] 2260 | name = "objc2-cloud-kit" 2261 | version = "0.2.2" 2262 | source = "registry+https://github.com/rust-lang/crates.io-index" 2263 | checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" 2264 | dependencies = [ 2265 | "bitflags 2.9.1", 2266 | "block2", 2267 | "objc2 0.5.2", 2268 | "objc2-core-location", 2269 | "objc2-foundation 0.2.2", 2270 | ] 2271 | 2272 | [[package]] 2273 | name = "objc2-contacts" 2274 | version = "0.2.2" 2275 | source = "registry+https://github.com/rust-lang/crates.io-index" 2276 | checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" 2277 | dependencies = [ 2278 | "block2", 2279 | "objc2 0.5.2", 2280 | "objc2-foundation 0.2.2", 2281 | ] 2282 | 2283 | [[package]] 2284 | name = "objc2-core-data" 2285 | version = "0.2.2" 2286 | source = "registry+https://github.com/rust-lang/crates.io-index" 2287 | checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" 2288 | dependencies = [ 2289 | "bitflags 2.9.1", 2290 | "block2", 2291 | "objc2 0.5.2", 2292 | "objc2-foundation 0.2.2", 2293 | ] 2294 | 2295 | [[package]] 2296 | name = "objc2-core-foundation" 2297 | version = "0.3.1" 2298 | source = "registry+https://github.com/rust-lang/crates.io-index" 2299 | checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" 2300 | dependencies = [ 2301 | "bitflags 2.9.1", 2302 | "dispatch2", 2303 | "objc2 0.6.1", 2304 | ] 2305 | 2306 | [[package]] 2307 | name = "objc2-core-graphics" 2308 | version = "0.3.1" 2309 | source = "registry+https://github.com/rust-lang/crates.io-index" 2310 | checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" 2311 | dependencies = [ 2312 | "bitflags 2.9.1", 2313 | "dispatch2", 2314 | "objc2 0.6.1", 2315 | "objc2-core-foundation", 2316 | "objc2-io-surface", 2317 | ] 2318 | 2319 | [[package]] 2320 | name = "objc2-core-image" 2321 | version = "0.2.2" 2322 | source = "registry+https://github.com/rust-lang/crates.io-index" 2323 | checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" 2324 | dependencies = [ 2325 | "block2", 2326 | "objc2 0.5.2", 2327 | "objc2-foundation 0.2.2", 2328 | "objc2-metal", 2329 | ] 2330 | 2331 | [[package]] 2332 | name = "objc2-core-location" 2333 | version = "0.2.2" 2334 | source = "registry+https://github.com/rust-lang/crates.io-index" 2335 | checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" 2336 | dependencies = [ 2337 | "block2", 2338 | "objc2 0.5.2", 2339 | "objc2-contacts", 2340 | "objc2-foundation 0.2.2", 2341 | ] 2342 | 2343 | [[package]] 2344 | name = "objc2-encode" 2345 | version = "4.1.0" 2346 | source = "registry+https://github.com/rust-lang/crates.io-index" 2347 | checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" 2348 | 2349 | [[package]] 2350 | name = "objc2-foundation" 2351 | version = "0.2.2" 2352 | source = "registry+https://github.com/rust-lang/crates.io-index" 2353 | checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" 2354 | dependencies = [ 2355 | "bitflags 2.9.1", 2356 | "block2", 2357 | "dispatch", 2358 | "libc", 2359 | "objc2 0.5.2", 2360 | ] 2361 | 2362 | [[package]] 2363 | name = "objc2-foundation" 2364 | version = "0.3.1" 2365 | source = "registry+https://github.com/rust-lang/crates.io-index" 2366 | checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" 2367 | dependencies = [ 2368 | "bitflags 2.9.1", 2369 | "objc2 0.6.1", 2370 | "objc2-core-foundation", 2371 | ] 2372 | 2373 | [[package]] 2374 | name = "objc2-io-surface" 2375 | version = "0.3.1" 2376 | source = "registry+https://github.com/rust-lang/crates.io-index" 2377 | checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" 2378 | dependencies = [ 2379 | "bitflags 2.9.1", 2380 | "objc2 0.6.1", 2381 | "objc2-core-foundation", 2382 | ] 2383 | 2384 | [[package]] 2385 | name = "objc2-link-presentation" 2386 | version = "0.2.2" 2387 | source = "registry+https://github.com/rust-lang/crates.io-index" 2388 | checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" 2389 | dependencies = [ 2390 | "block2", 2391 | "objc2 0.5.2", 2392 | "objc2-app-kit 0.2.2", 2393 | "objc2-foundation 0.2.2", 2394 | ] 2395 | 2396 | [[package]] 2397 | name = "objc2-metal" 2398 | version = "0.2.2" 2399 | source = "registry+https://github.com/rust-lang/crates.io-index" 2400 | checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" 2401 | dependencies = [ 2402 | "bitflags 2.9.1", 2403 | "block2", 2404 | "objc2 0.5.2", 2405 | "objc2-foundation 0.2.2", 2406 | ] 2407 | 2408 | [[package]] 2409 | name = "objc2-quartz-core" 2410 | version = "0.2.2" 2411 | source = "registry+https://github.com/rust-lang/crates.io-index" 2412 | checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" 2413 | dependencies = [ 2414 | "bitflags 2.9.1", 2415 | "block2", 2416 | "objc2 0.5.2", 2417 | "objc2-foundation 0.2.2", 2418 | "objc2-metal", 2419 | ] 2420 | 2421 | [[package]] 2422 | name = "objc2-symbols" 2423 | version = "0.2.2" 2424 | source = "registry+https://github.com/rust-lang/crates.io-index" 2425 | checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" 2426 | dependencies = [ 2427 | "objc2 0.5.2", 2428 | "objc2-foundation 0.2.2", 2429 | ] 2430 | 2431 | [[package]] 2432 | name = "objc2-ui-kit" 2433 | version = "0.2.2" 2434 | source = "registry+https://github.com/rust-lang/crates.io-index" 2435 | checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" 2436 | dependencies = [ 2437 | "bitflags 2.9.1", 2438 | "block2", 2439 | "objc2 0.5.2", 2440 | "objc2-cloud-kit", 2441 | "objc2-core-data", 2442 | "objc2-core-image", 2443 | "objc2-core-location", 2444 | "objc2-foundation 0.2.2", 2445 | "objc2-link-presentation", 2446 | "objc2-quartz-core", 2447 | "objc2-symbols", 2448 | "objc2-uniform-type-identifiers", 2449 | "objc2-user-notifications", 2450 | ] 2451 | 2452 | [[package]] 2453 | name = "objc2-uniform-type-identifiers" 2454 | version = "0.2.2" 2455 | source = "registry+https://github.com/rust-lang/crates.io-index" 2456 | checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" 2457 | dependencies = [ 2458 | "block2", 2459 | "objc2 0.5.2", 2460 | "objc2-foundation 0.2.2", 2461 | ] 2462 | 2463 | [[package]] 2464 | name = "objc2-user-notifications" 2465 | version = "0.2.2" 2466 | source = "registry+https://github.com/rust-lang/crates.io-index" 2467 | checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" 2468 | dependencies = [ 2469 | "bitflags 2.9.1", 2470 | "block2", 2471 | "objc2 0.5.2", 2472 | "objc2-core-location", 2473 | "objc2-foundation 0.2.2", 2474 | ] 2475 | 2476 | [[package]] 2477 | name = "object" 2478 | version = "0.36.7" 2479 | source = "registry+https://github.com/rust-lang/crates.io-index" 2480 | checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 2481 | dependencies = [ 2482 | "memchr", 2483 | ] 2484 | 2485 | [[package]] 2486 | name = "once_cell" 2487 | version = "1.21.3" 2488 | source = "registry+https://github.com/rust-lang/crates.io-index" 2489 | checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 2490 | 2491 | [[package]] 2492 | name = "once_cell_polyfill" 2493 | version = "1.70.1" 2494 | source = "registry+https://github.com/rust-lang/crates.io-index" 2495 | checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" 2496 | 2497 | [[package]] 2498 | name = "orbclient" 2499 | version = "0.3.48" 2500 | source = "registry+https://github.com/rust-lang/crates.io-index" 2501 | checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" 2502 | dependencies = [ 2503 | "libredox", 2504 | ] 2505 | 2506 | [[package]] 2507 | name = "ordered-float" 2508 | version = "4.6.0" 2509 | source = "registry+https://github.com/rust-lang/crates.io-index" 2510 | checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" 2511 | dependencies = [ 2512 | "num-traits", 2513 | ] 2514 | 2515 | [[package]] 2516 | name = "ordered-stream" 2517 | version = "0.2.0" 2518 | source = "registry+https://github.com/rust-lang/crates.io-index" 2519 | checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" 2520 | dependencies = [ 2521 | "futures-core", 2522 | "pin-project-lite", 2523 | ] 2524 | 2525 | [[package]] 2526 | name = "owned_ttf_parser" 2527 | version = "0.25.0" 2528 | source = "registry+https://github.com/rust-lang/crates.io-index" 2529 | checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4" 2530 | dependencies = [ 2531 | "ttf-parser", 2532 | ] 2533 | 2534 | [[package]] 2535 | name = "owo-colors" 2536 | version = "4.2.1" 2537 | source = "registry+https://github.com/rust-lang/crates.io-index" 2538 | checksum = "26995317201fa17f3656c36716aed4a7c81743a9634ac4c99c0eeda495db0cec" 2539 | 2540 | [[package]] 2541 | name = "parking" 2542 | version = "2.2.1" 2543 | source = "registry+https://github.com/rust-lang/crates.io-index" 2544 | checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 2545 | 2546 | [[package]] 2547 | name = "parking_lot" 2548 | version = "0.12.3" 2549 | source = "registry+https://github.com/rust-lang/crates.io-index" 2550 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 2551 | dependencies = [ 2552 | "lock_api", 2553 | "parking_lot_core", 2554 | ] 2555 | 2556 | [[package]] 2557 | name = "parking_lot_core" 2558 | version = "0.9.10" 2559 | source = "registry+https://github.com/rust-lang/crates.io-index" 2560 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 2561 | dependencies = [ 2562 | "cfg-if", 2563 | "libc", 2564 | "redox_syscall 0.5.12", 2565 | "smallvec", 2566 | "windows-targets 0.52.6", 2567 | ] 2568 | 2569 | [[package]] 2570 | name = "paste" 2571 | version = "1.0.15" 2572 | source = "registry+https://github.com/rust-lang/crates.io-index" 2573 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 2574 | 2575 | [[package]] 2576 | name = "paw" 2577 | version = "1.0.0" 2578 | source = "registry+https://github.com/rust-lang/crates.io-index" 2579 | checksum = "09c0fc9b564dbc3dc2ed7c92c0c144f4de340aa94514ce2b446065417c4084e9" 2580 | dependencies = [ 2581 | "paw-attributes", 2582 | "paw-raw", 2583 | ] 2584 | 2585 | [[package]] 2586 | name = "paw-attributes" 2587 | version = "1.0.2" 2588 | source = "registry+https://github.com/rust-lang/crates.io-index" 2589 | checksum = "0f35583365be5d148e959284f42526841917b7bfa09e2d1a7ad5dde2cf0eaa39" 2590 | dependencies = [ 2591 | "proc-macro2", 2592 | "quote", 2593 | "syn 1.0.109", 2594 | ] 2595 | 2596 | [[package]] 2597 | name = "paw-raw" 2598 | version = "1.0.0" 2599 | source = "registry+https://github.com/rust-lang/crates.io-index" 2600 | checksum = "7f0b59668fe80c5afe998f0c0bf93322bf2cd66cafeeb80581f291716f3467f2" 2601 | 2602 | [[package]] 2603 | name = "percent-encoding" 2604 | version = "2.3.1" 2605 | source = "registry+https://github.com/rust-lang/crates.io-index" 2606 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 2607 | 2608 | [[package]] 2609 | name = "phf" 2610 | version = "0.11.3" 2611 | source = "registry+https://github.com/rust-lang/crates.io-index" 2612 | checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 2613 | dependencies = [ 2614 | "phf_macros", 2615 | "phf_shared", 2616 | ] 2617 | 2618 | [[package]] 2619 | name = "phf_generator" 2620 | version = "0.11.3" 2621 | source = "registry+https://github.com/rust-lang/crates.io-index" 2622 | checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" 2623 | dependencies = [ 2624 | "phf_shared", 2625 | "rand", 2626 | ] 2627 | 2628 | [[package]] 2629 | name = "phf_macros" 2630 | version = "0.11.3" 2631 | source = "registry+https://github.com/rust-lang/crates.io-index" 2632 | checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" 2633 | dependencies = [ 2634 | "phf_generator", 2635 | "phf_shared", 2636 | "proc-macro2", 2637 | "quote", 2638 | "syn 2.0.101", 2639 | "unicase", 2640 | ] 2641 | 2642 | [[package]] 2643 | name = "phf_shared" 2644 | version = "0.11.3" 2645 | source = "registry+https://github.com/rust-lang/crates.io-index" 2646 | checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 2647 | dependencies = [ 2648 | "siphasher", 2649 | "unicase", 2650 | ] 2651 | 2652 | [[package]] 2653 | name = "pin-project" 2654 | version = "1.1.10" 2655 | source = "registry+https://github.com/rust-lang/crates.io-index" 2656 | checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" 2657 | dependencies = [ 2658 | "pin-project-internal", 2659 | ] 2660 | 2661 | [[package]] 2662 | name = "pin-project-internal" 2663 | version = "1.1.10" 2664 | source = "registry+https://github.com/rust-lang/crates.io-index" 2665 | checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" 2666 | dependencies = [ 2667 | "proc-macro2", 2668 | "quote", 2669 | "syn 2.0.101", 2670 | ] 2671 | 2672 | [[package]] 2673 | name = "pin-project-lite" 2674 | version = "0.2.16" 2675 | source = "registry+https://github.com/rust-lang/crates.io-index" 2676 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 2677 | 2678 | [[package]] 2679 | name = "pin-utils" 2680 | version = "0.1.0" 2681 | source = "registry+https://github.com/rust-lang/crates.io-index" 2682 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2683 | 2684 | [[package]] 2685 | name = "piper" 2686 | version = "0.2.4" 2687 | source = "registry+https://github.com/rust-lang/crates.io-index" 2688 | checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" 2689 | dependencies = [ 2690 | "atomic-waker", 2691 | "fastrand", 2692 | "futures-io", 2693 | ] 2694 | 2695 | [[package]] 2696 | name = "pkg-config" 2697 | version = "0.3.32" 2698 | source = "registry+https://github.com/rust-lang/crates.io-index" 2699 | checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 2700 | 2701 | [[package]] 2702 | name = "png" 2703 | version = "0.17.16" 2704 | source = "registry+https://github.com/rust-lang/crates.io-index" 2705 | checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" 2706 | dependencies = [ 2707 | "bitflags 1.3.2", 2708 | "crc32fast", 2709 | "fdeflate", 2710 | "flate2", 2711 | "miniz_oxide", 2712 | ] 2713 | 2714 | [[package]] 2715 | name = "polling" 2716 | version = "3.8.0" 2717 | source = "registry+https://github.com/rust-lang/crates.io-index" 2718 | checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" 2719 | dependencies = [ 2720 | "cfg-if", 2721 | "concurrent-queue", 2722 | "hermit-abi 0.5.1", 2723 | "pin-project-lite", 2724 | "rustix 1.0.7", 2725 | "tracing", 2726 | "windows-sys 0.59.0", 2727 | ] 2728 | 2729 | [[package]] 2730 | name = "portable-atomic" 2731 | version = "1.11.0" 2732 | source = "registry+https://github.com/rust-lang/crates.io-index" 2733 | checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" 2734 | 2735 | [[package]] 2736 | name = "portable-atomic-util" 2737 | version = "0.2.4" 2738 | source = "registry+https://github.com/rust-lang/crates.io-index" 2739 | checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" 2740 | dependencies = [ 2741 | "portable-atomic", 2742 | ] 2743 | 2744 | [[package]] 2745 | name = "potential_utf" 2746 | version = "0.1.2" 2747 | source = "registry+https://github.com/rust-lang/crates.io-index" 2748 | checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" 2749 | dependencies = [ 2750 | "zerovec", 2751 | ] 2752 | 2753 | [[package]] 2754 | name = "ppv-lite86" 2755 | version = "0.2.21" 2756 | source = "registry+https://github.com/rust-lang/crates.io-index" 2757 | checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 2758 | dependencies = [ 2759 | "zerocopy", 2760 | ] 2761 | 2762 | [[package]] 2763 | name = "proc-macro-crate" 2764 | version = "3.3.0" 2765 | source = "registry+https://github.com/rust-lang/crates.io-index" 2766 | checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" 2767 | dependencies = [ 2768 | "toml_edit", 2769 | ] 2770 | 2771 | [[package]] 2772 | name = "proc-macro-error" 2773 | version = "1.0.4" 2774 | source = "registry+https://github.com/rust-lang/crates.io-index" 2775 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 2776 | dependencies = [ 2777 | "proc-macro-error-attr", 2778 | "proc-macro2", 2779 | "quote", 2780 | "syn 1.0.109", 2781 | "version_check", 2782 | ] 2783 | 2784 | [[package]] 2785 | name = "proc-macro-error-attr" 2786 | version = "1.0.4" 2787 | source = "registry+https://github.com/rust-lang/crates.io-index" 2788 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 2789 | dependencies = [ 2790 | "proc-macro2", 2791 | "quote", 2792 | "version_check", 2793 | ] 2794 | 2795 | [[package]] 2796 | name = "proc-macro2" 2797 | version = "1.0.95" 2798 | source = "registry+https://github.com/rust-lang/crates.io-index" 2799 | checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 2800 | dependencies = [ 2801 | "unicode-ident", 2802 | ] 2803 | 2804 | [[package]] 2805 | name = "profiling" 2806 | version = "1.0.16" 2807 | source = "registry+https://github.com/rust-lang/crates.io-index" 2808 | checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" 2809 | 2810 | [[package]] 2811 | name = "quick-xml" 2812 | version = "0.30.0" 2813 | source = "registry+https://github.com/rust-lang/crates.io-index" 2814 | checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" 2815 | dependencies = [ 2816 | "memchr", 2817 | "serde", 2818 | ] 2819 | 2820 | [[package]] 2821 | name = "quick-xml" 2822 | version = "0.37.5" 2823 | source = "registry+https://github.com/rust-lang/crates.io-index" 2824 | checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" 2825 | dependencies = [ 2826 | "memchr", 2827 | ] 2828 | 2829 | [[package]] 2830 | name = "quote" 2831 | version = "1.0.40" 2832 | source = "registry+https://github.com/rust-lang/crates.io-index" 2833 | checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 2834 | dependencies = [ 2835 | "proc-macro2", 2836 | ] 2837 | 2838 | [[package]] 2839 | name = "r-efi" 2840 | version = "5.2.0" 2841 | source = "registry+https://github.com/rust-lang/crates.io-index" 2842 | checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" 2843 | 2844 | [[package]] 2845 | name = "rand" 2846 | version = "0.8.5" 2847 | source = "registry+https://github.com/rust-lang/crates.io-index" 2848 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2849 | dependencies = [ 2850 | "libc", 2851 | "rand_chacha", 2852 | "rand_core", 2853 | ] 2854 | 2855 | [[package]] 2856 | name = "rand_chacha" 2857 | version = "0.3.1" 2858 | source = "registry+https://github.com/rust-lang/crates.io-index" 2859 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2860 | dependencies = [ 2861 | "ppv-lite86", 2862 | "rand_core", 2863 | ] 2864 | 2865 | [[package]] 2866 | name = "rand_core" 2867 | version = "0.6.4" 2868 | source = "registry+https://github.com/rust-lang/crates.io-index" 2869 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2870 | dependencies = [ 2871 | "getrandom 0.2.16", 2872 | ] 2873 | 2874 | [[package]] 2875 | name = "raw-window-handle" 2876 | version = "0.6.2" 2877 | source = "registry+https://github.com/rust-lang/crates.io-index" 2878 | checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" 2879 | 2880 | [[package]] 2881 | name = "redox_syscall" 2882 | version = "0.4.1" 2883 | source = "registry+https://github.com/rust-lang/crates.io-index" 2884 | checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" 2885 | dependencies = [ 2886 | "bitflags 1.3.2", 2887 | ] 2888 | 2889 | [[package]] 2890 | name = "redox_syscall" 2891 | version = "0.5.12" 2892 | source = "registry+https://github.com/rust-lang/crates.io-index" 2893 | checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" 2894 | dependencies = [ 2895 | "bitflags 2.9.1", 2896 | ] 2897 | 2898 | [[package]] 2899 | name = "renderdoc-sys" 2900 | version = "1.1.0" 2901 | source = "registry+https://github.com/rust-lang/crates.io-index" 2902 | checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" 2903 | 2904 | [[package]] 2905 | name = "rustc-demangle" 2906 | version = "0.1.24" 2907 | source = "registry+https://github.com/rust-lang/crates.io-index" 2908 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 2909 | 2910 | [[package]] 2911 | name = "rustc-hash" 2912 | version = "1.1.0" 2913 | source = "registry+https://github.com/rust-lang/crates.io-index" 2914 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 2915 | 2916 | [[package]] 2917 | name = "rustc-hash" 2918 | version = "2.1.1" 2919 | source = "registry+https://github.com/rust-lang/crates.io-index" 2920 | checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 2921 | 2922 | [[package]] 2923 | name = "rustix" 2924 | version = "0.38.44" 2925 | source = "registry+https://github.com/rust-lang/crates.io-index" 2926 | checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" 2927 | dependencies = [ 2928 | "bitflags 2.9.1", 2929 | "errno", 2930 | "libc", 2931 | "linux-raw-sys 0.4.15", 2932 | "windows-sys 0.59.0", 2933 | ] 2934 | 2935 | [[package]] 2936 | name = "rustix" 2937 | version = "1.0.7" 2938 | source = "registry+https://github.com/rust-lang/crates.io-index" 2939 | checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" 2940 | dependencies = [ 2941 | "bitflags 2.9.1", 2942 | "errno", 2943 | "libc", 2944 | "linux-raw-sys 0.9.4", 2945 | "windows-sys 0.59.0", 2946 | ] 2947 | 2948 | [[package]] 2949 | name = "rustversion" 2950 | version = "1.0.21" 2951 | source = "registry+https://github.com/rust-lang/crates.io-index" 2952 | checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" 2953 | 2954 | [[package]] 2955 | name = "same-file" 2956 | version = "1.0.6" 2957 | source = "registry+https://github.com/rust-lang/crates.io-index" 2958 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2959 | dependencies = [ 2960 | "winapi-util", 2961 | ] 2962 | 2963 | [[package]] 2964 | name = "scoped-tls" 2965 | version = "1.0.1" 2966 | source = "registry+https://github.com/rust-lang/crates.io-index" 2967 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 2968 | 2969 | [[package]] 2970 | name = "scopeguard" 2971 | version = "1.2.0" 2972 | source = "registry+https://github.com/rust-lang/crates.io-index" 2973 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2974 | 2975 | [[package]] 2976 | name = "sctk-adwaita" 2977 | version = "0.10.1" 2978 | source = "registry+https://github.com/rust-lang/crates.io-index" 2979 | checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" 2980 | dependencies = [ 2981 | "ab_glyph", 2982 | "log", 2983 | "memmap2", 2984 | "smithay-client-toolkit", 2985 | "tiny-skia", 2986 | ] 2987 | 2988 | [[package]] 2989 | name = "self_cell" 2990 | version = "1.2.0" 2991 | source = "registry+https://github.com/rust-lang/crates.io-index" 2992 | checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" 2993 | 2994 | [[package]] 2995 | name = "serde" 2996 | version = "1.0.219" 2997 | source = "registry+https://github.com/rust-lang/crates.io-index" 2998 | checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 2999 | dependencies = [ 3000 | "serde_derive", 3001 | ] 3002 | 3003 | [[package]] 3004 | name = "serde_derive" 3005 | version = "1.0.219" 3006 | source = "registry+https://github.com/rust-lang/crates.io-index" 3007 | checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 3008 | dependencies = [ 3009 | "proc-macro2", 3010 | "quote", 3011 | "syn 2.0.101", 3012 | ] 3013 | 3014 | [[package]] 3015 | name = "serde_repr" 3016 | version = "0.1.20" 3017 | source = "registry+https://github.com/rust-lang/crates.io-index" 3018 | checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" 3019 | dependencies = [ 3020 | "proc-macro2", 3021 | "quote", 3022 | "syn 2.0.101", 3023 | ] 3024 | 3025 | [[package]] 3026 | name = "sha1" 3027 | version = "0.10.6" 3028 | source = "registry+https://github.com/rust-lang/crates.io-index" 3029 | checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 3030 | dependencies = [ 3031 | "cfg-if", 3032 | "cpufeatures", 3033 | "digest", 3034 | ] 3035 | 3036 | [[package]] 3037 | name = "sharded-slab" 3038 | version = "0.1.7" 3039 | source = "registry+https://github.com/rust-lang/crates.io-index" 3040 | checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 3041 | dependencies = [ 3042 | "lazy_static", 3043 | ] 3044 | 3045 | [[package]] 3046 | name = "shlex" 3047 | version = "1.3.0" 3048 | source = "registry+https://github.com/rust-lang/crates.io-index" 3049 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 3050 | 3051 | [[package]] 3052 | name = "signal-hook-registry" 3053 | version = "1.4.5" 3054 | source = "registry+https://github.com/rust-lang/crates.io-index" 3055 | checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" 3056 | dependencies = [ 3057 | "libc", 3058 | ] 3059 | 3060 | [[package]] 3061 | name = "simd-adler32" 3062 | version = "0.3.7" 3063 | source = "registry+https://github.com/rust-lang/crates.io-index" 3064 | checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 3065 | 3066 | [[package]] 3067 | name = "siphasher" 3068 | version = "1.0.1" 3069 | source = "registry+https://github.com/rust-lang/crates.io-index" 3070 | checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" 3071 | 3072 | [[package]] 3073 | name = "slab" 3074 | version = "0.4.9" 3075 | source = "registry+https://github.com/rust-lang/crates.io-index" 3076 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 3077 | dependencies = [ 3078 | "autocfg", 3079 | ] 3080 | 3081 | [[package]] 3082 | name = "slotmap" 3083 | version = "1.0.7" 3084 | source = "registry+https://github.com/rust-lang/crates.io-index" 3085 | checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" 3086 | dependencies = [ 3087 | "version_check", 3088 | ] 3089 | 3090 | [[package]] 3091 | name = "smallvec" 3092 | version = "1.15.0" 3093 | source = "registry+https://github.com/rust-lang/crates.io-index" 3094 | checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" 3095 | 3096 | [[package]] 3097 | name = "smithay-client-toolkit" 3098 | version = "0.19.2" 3099 | source = "registry+https://github.com/rust-lang/crates.io-index" 3100 | checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" 3101 | dependencies = [ 3102 | "bitflags 2.9.1", 3103 | "calloop", 3104 | "calloop-wayland-source", 3105 | "cursor-icon", 3106 | "libc", 3107 | "log", 3108 | "memmap2", 3109 | "rustix 0.38.44", 3110 | "thiserror 1.0.69", 3111 | "wayland-backend", 3112 | "wayland-client", 3113 | "wayland-csd-frame", 3114 | "wayland-cursor", 3115 | "wayland-protocols", 3116 | "wayland-protocols-wlr", 3117 | "wayland-scanner", 3118 | "xkeysym", 3119 | ] 3120 | 3121 | [[package]] 3122 | name = "smithay-clipboard" 3123 | version = "0.7.2" 3124 | source = "registry+https://github.com/rust-lang/crates.io-index" 3125 | checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" 3126 | dependencies = [ 3127 | "libc", 3128 | "smithay-client-toolkit", 3129 | "wayland-backend", 3130 | ] 3131 | 3132 | [[package]] 3133 | name = "smol_str" 3134 | version = "0.2.2" 3135 | source = "registry+https://github.com/rust-lang/crates.io-index" 3136 | checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" 3137 | dependencies = [ 3138 | "serde", 3139 | ] 3140 | 3141 | [[package]] 3142 | name = "spirv" 3143 | version = "0.3.0+sdk-1.3.268.0" 3144 | source = "registry+https://github.com/rust-lang/crates.io-index" 3145 | checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" 3146 | dependencies = [ 3147 | "bitflags 2.9.1", 3148 | ] 3149 | 3150 | [[package]] 3151 | name = "stable_deref_trait" 3152 | version = "1.2.0" 3153 | source = "registry+https://github.com/rust-lang/crates.io-index" 3154 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 3155 | 3156 | [[package]] 3157 | name = "static_assertions" 3158 | version = "1.1.0" 3159 | source = "registry+https://github.com/rust-lang/crates.io-index" 3160 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 3161 | 3162 | [[package]] 3163 | name = "strict-num" 3164 | version = "0.1.1" 3165 | source = "registry+https://github.com/rust-lang/crates.io-index" 3166 | checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" 3167 | 3168 | [[package]] 3169 | name = "strsim" 3170 | version = "0.8.0" 3171 | source = "registry+https://github.com/rust-lang/crates.io-index" 3172 | checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 3173 | 3174 | [[package]] 3175 | name = "structopt" 3176 | version = "0.3.26" 3177 | source = "registry+https://github.com/rust-lang/crates.io-index" 3178 | checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" 3179 | dependencies = [ 3180 | "clap", 3181 | "lazy_static", 3182 | "paw", 3183 | "structopt-derive", 3184 | ] 3185 | 3186 | [[package]] 3187 | name = "structopt-derive" 3188 | version = "0.4.18" 3189 | source = "registry+https://github.com/rust-lang/crates.io-index" 3190 | checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" 3191 | dependencies = [ 3192 | "heck 0.3.3", 3193 | "proc-macro-error", 3194 | "proc-macro2", 3195 | "quote", 3196 | "syn 1.0.109", 3197 | ] 3198 | 3199 | [[package]] 3200 | name = "strum" 3201 | version = "0.26.3" 3202 | source = "registry+https://github.com/rust-lang/crates.io-index" 3203 | checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" 3204 | dependencies = [ 3205 | "strum_macros", 3206 | ] 3207 | 3208 | [[package]] 3209 | name = "strum_macros" 3210 | version = "0.26.4" 3211 | source = "registry+https://github.com/rust-lang/crates.io-index" 3212 | checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" 3213 | dependencies = [ 3214 | "heck 0.5.0", 3215 | "proc-macro2", 3216 | "quote", 3217 | "rustversion", 3218 | "syn 2.0.101", 3219 | ] 3220 | 3221 | [[package]] 3222 | name = "syn" 3223 | version = "1.0.109" 3224 | source = "registry+https://github.com/rust-lang/crates.io-index" 3225 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 3226 | dependencies = [ 3227 | "proc-macro2", 3228 | "quote", 3229 | "unicode-ident", 3230 | ] 3231 | 3232 | [[package]] 3233 | name = "syn" 3234 | version = "2.0.101" 3235 | source = "registry+https://github.com/rust-lang/crates.io-index" 3236 | checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" 3237 | dependencies = [ 3238 | "proc-macro2", 3239 | "quote", 3240 | "unicode-ident", 3241 | ] 3242 | 3243 | [[package]] 3244 | name = "synstructure" 3245 | version = "0.13.2" 3246 | source = "registry+https://github.com/rust-lang/crates.io-index" 3247 | checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 3248 | dependencies = [ 3249 | "proc-macro2", 3250 | "quote", 3251 | "syn 2.0.101", 3252 | ] 3253 | 3254 | [[package]] 3255 | name = "tempfile" 3256 | version = "3.20.0" 3257 | source = "registry+https://github.com/rust-lang/crates.io-index" 3258 | checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" 3259 | dependencies = [ 3260 | "fastrand", 3261 | "getrandom 0.3.3", 3262 | "once_cell", 3263 | "rustix 1.0.7", 3264 | "windows-sys 0.59.0", 3265 | ] 3266 | 3267 | [[package]] 3268 | name = "termcolor" 3269 | version = "1.4.1" 3270 | source = "registry+https://github.com/rust-lang/crates.io-index" 3271 | checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" 3272 | dependencies = [ 3273 | "winapi-util", 3274 | ] 3275 | 3276 | [[package]] 3277 | name = "textwrap" 3278 | version = "0.11.0" 3279 | source = "registry+https://github.com/rust-lang/crates.io-index" 3280 | checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 3281 | dependencies = [ 3282 | "unicode-width", 3283 | ] 3284 | 3285 | [[package]] 3286 | name = "thiserror" 3287 | version = "1.0.69" 3288 | source = "registry+https://github.com/rust-lang/crates.io-index" 3289 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 3290 | dependencies = [ 3291 | "thiserror-impl 1.0.69", 3292 | ] 3293 | 3294 | [[package]] 3295 | name = "thiserror" 3296 | version = "2.0.12" 3297 | source = "registry+https://github.com/rust-lang/crates.io-index" 3298 | checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 3299 | dependencies = [ 3300 | "thiserror-impl 2.0.12", 3301 | ] 3302 | 3303 | [[package]] 3304 | name = "thiserror-impl" 3305 | version = "1.0.69" 3306 | source = "registry+https://github.com/rust-lang/crates.io-index" 3307 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 3308 | dependencies = [ 3309 | "proc-macro2", 3310 | "quote", 3311 | "syn 2.0.101", 3312 | ] 3313 | 3314 | [[package]] 3315 | name = "thiserror-impl" 3316 | version = "2.0.12" 3317 | source = "registry+https://github.com/rust-lang/crates.io-index" 3318 | checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 3319 | dependencies = [ 3320 | "proc-macro2", 3321 | "quote", 3322 | "syn 2.0.101", 3323 | ] 3324 | 3325 | [[package]] 3326 | name = "thread_local" 3327 | version = "1.1.8" 3328 | source = "registry+https://github.com/rust-lang/crates.io-index" 3329 | checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" 3330 | dependencies = [ 3331 | "cfg-if", 3332 | "once_cell", 3333 | ] 3334 | 3335 | [[package]] 3336 | name = "tiff" 3337 | version = "0.9.1" 3338 | source = "registry+https://github.com/rust-lang/crates.io-index" 3339 | checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" 3340 | dependencies = [ 3341 | "flate2", 3342 | "jpeg-decoder", 3343 | "weezl", 3344 | ] 3345 | 3346 | [[package]] 3347 | name = "tiny-skia" 3348 | version = "0.11.4" 3349 | source = "registry+https://github.com/rust-lang/crates.io-index" 3350 | checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" 3351 | dependencies = [ 3352 | "arrayref", 3353 | "arrayvec", 3354 | "bytemuck", 3355 | "cfg-if", 3356 | "log", 3357 | "tiny-skia-path", 3358 | ] 3359 | 3360 | [[package]] 3361 | name = "tiny-skia-path" 3362 | version = "0.11.4" 3363 | source = "registry+https://github.com/rust-lang/crates.io-index" 3364 | checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" 3365 | dependencies = [ 3366 | "arrayref", 3367 | "bytemuck", 3368 | "strict-num", 3369 | ] 3370 | 3371 | [[package]] 3372 | name = "tinystr" 3373 | version = "0.8.1" 3374 | source = "registry+https://github.com/rust-lang/crates.io-index" 3375 | checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 3376 | dependencies = [ 3377 | "displaydoc", 3378 | "zerovec", 3379 | ] 3380 | 3381 | [[package]] 3382 | name = "toml_datetime" 3383 | version = "0.6.9" 3384 | source = "registry+https://github.com/rust-lang/crates.io-index" 3385 | checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" 3386 | 3387 | [[package]] 3388 | name = "toml_edit" 3389 | version = "0.22.26" 3390 | source = "registry+https://github.com/rust-lang/crates.io-index" 3391 | checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" 3392 | dependencies = [ 3393 | "indexmap", 3394 | "toml_datetime", 3395 | "winnow", 3396 | ] 3397 | 3398 | [[package]] 3399 | name = "tracing" 3400 | version = "0.1.41" 3401 | source = "registry+https://github.com/rust-lang/crates.io-index" 3402 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 3403 | dependencies = [ 3404 | "pin-project-lite", 3405 | "tracing-attributes", 3406 | "tracing-core", 3407 | ] 3408 | 3409 | [[package]] 3410 | name = "tracing-attributes" 3411 | version = "0.1.28" 3412 | source = "registry+https://github.com/rust-lang/crates.io-index" 3413 | checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" 3414 | dependencies = [ 3415 | "proc-macro2", 3416 | "quote", 3417 | "syn 2.0.101", 3418 | ] 3419 | 3420 | [[package]] 3421 | name = "tracing-core" 3422 | version = "0.1.33" 3423 | source = "registry+https://github.com/rust-lang/crates.io-index" 3424 | checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" 3425 | dependencies = [ 3426 | "once_cell", 3427 | "valuable", 3428 | ] 3429 | 3430 | [[package]] 3431 | name = "tracing-error" 3432 | version = "0.2.1" 3433 | source = "registry+https://github.com/rust-lang/crates.io-index" 3434 | checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db" 3435 | dependencies = [ 3436 | "tracing", 3437 | "tracing-subscriber", 3438 | ] 3439 | 3440 | [[package]] 3441 | name = "tracing-subscriber" 3442 | version = "0.3.19" 3443 | source = "registry+https://github.com/rust-lang/crates.io-index" 3444 | checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" 3445 | dependencies = [ 3446 | "sharded-slab", 3447 | "thread_local", 3448 | "tracing-core", 3449 | ] 3450 | 3451 | [[package]] 3452 | name = "ttf-parser" 3453 | version = "0.25.1" 3454 | source = "registry+https://github.com/rust-lang/crates.io-index" 3455 | checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" 3456 | 3457 | [[package]] 3458 | name = "type-map" 3459 | version = "0.5.1" 3460 | source = "registry+https://github.com/rust-lang/crates.io-index" 3461 | checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" 3462 | dependencies = [ 3463 | "rustc-hash 2.1.1", 3464 | ] 3465 | 3466 | [[package]] 3467 | name = "typenum" 3468 | version = "1.18.0" 3469 | source = "registry+https://github.com/rust-lang/crates.io-index" 3470 | checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 3471 | 3472 | [[package]] 3473 | name = "uds_windows" 3474 | version = "1.1.0" 3475 | source = "registry+https://github.com/rust-lang/crates.io-index" 3476 | checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" 3477 | dependencies = [ 3478 | "memoffset", 3479 | "tempfile", 3480 | "winapi", 3481 | ] 3482 | 3483 | [[package]] 3484 | name = "unic-langid" 3485 | version = "0.9.6" 3486 | source = "registry+https://github.com/rust-lang/crates.io-index" 3487 | checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05" 3488 | dependencies = [ 3489 | "unic-langid-impl", 3490 | ] 3491 | 3492 | [[package]] 3493 | name = "unic-langid-impl" 3494 | version = "0.9.6" 3495 | source = "registry+https://github.com/rust-lang/crates.io-index" 3496 | checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658" 3497 | dependencies = [ 3498 | "tinystr", 3499 | ] 3500 | 3501 | [[package]] 3502 | name = "unicase" 3503 | version = "2.8.1" 3504 | source = "registry+https://github.com/rust-lang/crates.io-index" 3505 | checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" 3506 | 3507 | [[package]] 3508 | name = "unicode-ident" 3509 | version = "1.0.18" 3510 | source = "registry+https://github.com/rust-lang/crates.io-index" 3511 | checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 3512 | 3513 | [[package]] 3514 | name = "unicode-segmentation" 3515 | version = "1.12.0" 3516 | source = "registry+https://github.com/rust-lang/crates.io-index" 3517 | checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 3518 | 3519 | [[package]] 3520 | name = "unicode-width" 3521 | version = "0.1.14" 3522 | source = "registry+https://github.com/rust-lang/crates.io-index" 3523 | checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 3524 | 3525 | [[package]] 3526 | name = "unicode-xid" 3527 | version = "0.2.6" 3528 | source = "registry+https://github.com/rust-lang/crates.io-index" 3529 | checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 3530 | 3531 | [[package]] 3532 | name = "url" 3533 | version = "2.5.4" 3534 | source = "registry+https://github.com/rust-lang/crates.io-index" 3535 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 3536 | dependencies = [ 3537 | "form_urlencoded", 3538 | "idna", 3539 | "percent-encoding", 3540 | ] 3541 | 3542 | [[package]] 3543 | name = "utf8_iter" 3544 | version = "1.0.4" 3545 | source = "registry+https://github.com/rust-lang/crates.io-index" 3546 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 3547 | 3548 | [[package]] 3549 | name = "utf8parse" 3550 | version = "0.2.2" 3551 | source = "registry+https://github.com/rust-lang/crates.io-index" 3552 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 3553 | 3554 | [[package]] 3555 | name = "valuable" 3556 | version = "0.1.1" 3557 | source = "registry+https://github.com/rust-lang/crates.io-index" 3558 | checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 3559 | 3560 | [[package]] 3561 | name = "vec_map" 3562 | version = "0.8.2" 3563 | source = "registry+https://github.com/rust-lang/crates.io-index" 3564 | checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" 3565 | 3566 | [[package]] 3567 | name = "version_check" 3568 | version = "0.9.5" 3569 | source = "registry+https://github.com/rust-lang/crates.io-index" 3570 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 3571 | 3572 | [[package]] 3573 | name = "walkdir" 3574 | version = "2.5.0" 3575 | source = "registry+https://github.com/rust-lang/crates.io-index" 3576 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 3577 | dependencies = [ 3578 | "same-file", 3579 | "winapi-util", 3580 | ] 3581 | 3582 | [[package]] 3583 | name = "wasi" 3584 | version = "0.11.0+wasi-snapshot-preview1" 3585 | source = "registry+https://github.com/rust-lang/crates.io-index" 3586 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 3587 | 3588 | [[package]] 3589 | name = "wasi" 3590 | version = "0.14.2+wasi-0.2.4" 3591 | source = "registry+https://github.com/rust-lang/crates.io-index" 3592 | checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 3593 | dependencies = [ 3594 | "wit-bindgen-rt", 3595 | ] 3596 | 3597 | [[package]] 3598 | name = "wasm-bindgen" 3599 | version = "0.2.100" 3600 | source = "registry+https://github.com/rust-lang/crates.io-index" 3601 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 3602 | dependencies = [ 3603 | "cfg-if", 3604 | "once_cell", 3605 | "rustversion", 3606 | "wasm-bindgen-macro", 3607 | ] 3608 | 3609 | [[package]] 3610 | name = "wasm-bindgen-backend" 3611 | version = "0.2.100" 3612 | source = "registry+https://github.com/rust-lang/crates.io-index" 3613 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 3614 | dependencies = [ 3615 | "bumpalo", 3616 | "log", 3617 | "proc-macro2", 3618 | "quote", 3619 | "syn 2.0.101", 3620 | "wasm-bindgen-shared", 3621 | ] 3622 | 3623 | [[package]] 3624 | name = "wasm-bindgen-futures" 3625 | version = "0.4.50" 3626 | source = "registry+https://github.com/rust-lang/crates.io-index" 3627 | checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 3628 | dependencies = [ 3629 | "cfg-if", 3630 | "js-sys", 3631 | "once_cell", 3632 | "wasm-bindgen", 3633 | "web-sys", 3634 | ] 3635 | 3636 | [[package]] 3637 | name = "wasm-bindgen-macro" 3638 | version = "0.2.100" 3639 | source = "registry+https://github.com/rust-lang/crates.io-index" 3640 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 3641 | dependencies = [ 3642 | "quote", 3643 | "wasm-bindgen-macro-support", 3644 | ] 3645 | 3646 | [[package]] 3647 | name = "wasm-bindgen-macro-support" 3648 | version = "0.2.100" 3649 | source = "registry+https://github.com/rust-lang/crates.io-index" 3650 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 3651 | dependencies = [ 3652 | "proc-macro2", 3653 | "quote", 3654 | "syn 2.0.101", 3655 | "wasm-bindgen-backend", 3656 | "wasm-bindgen-shared", 3657 | ] 3658 | 3659 | [[package]] 3660 | name = "wasm-bindgen-shared" 3661 | version = "0.2.100" 3662 | source = "registry+https://github.com/rust-lang/crates.io-index" 3663 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 3664 | dependencies = [ 3665 | "unicode-ident", 3666 | ] 3667 | 3668 | [[package]] 3669 | name = "wayland-backend" 3670 | version = "0.3.10" 3671 | source = "registry+https://github.com/rust-lang/crates.io-index" 3672 | checksum = "fe770181423e5fc79d3e2a7f4410b7799d5aab1de4372853de3c6aa13ca24121" 3673 | dependencies = [ 3674 | "cc", 3675 | "downcast-rs", 3676 | "rustix 0.38.44", 3677 | "scoped-tls", 3678 | "smallvec", 3679 | "wayland-sys", 3680 | ] 3681 | 3682 | [[package]] 3683 | name = "wayland-client" 3684 | version = "0.31.10" 3685 | source = "registry+https://github.com/rust-lang/crates.io-index" 3686 | checksum = "978fa7c67b0847dbd6a9f350ca2569174974cd4082737054dbb7fbb79d7d9a61" 3687 | dependencies = [ 3688 | "bitflags 2.9.1", 3689 | "rustix 0.38.44", 3690 | "wayland-backend", 3691 | "wayland-scanner", 3692 | ] 3693 | 3694 | [[package]] 3695 | name = "wayland-csd-frame" 3696 | version = "0.3.0" 3697 | source = "registry+https://github.com/rust-lang/crates.io-index" 3698 | checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" 3699 | dependencies = [ 3700 | "bitflags 2.9.1", 3701 | "cursor-icon", 3702 | "wayland-backend", 3703 | ] 3704 | 3705 | [[package]] 3706 | name = "wayland-cursor" 3707 | version = "0.31.10" 3708 | source = "registry+https://github.com/rust-lang/crates.io-index" 3709 | checksum = "a65317158dec28d00416cb16705934070aef4f8393353d41126c54264ae0f182" 3710 | dependencies = [ 3711 | "rustix 0.38.44", 3712 | "wayland-client", 3713 | "xcursor", 3714 | ] 3715 | 3716 | [[package]] 3717 | name = "wayland-protocols" 3718 | version = "0.32.8" 3719 | source = "registry+https://github.com/rust-lang/crates.io-index" 3720 | checksum = "779075454e1e9a521794fed15886323ea0feda3f8b0fc1390f5398141310422a" 3721 | dependencies = [ 3722 | "bitflags 2.9.1", 3723 | "wayland-backend", 3724 | "wayland-client", 3725 | "wayland-scanner", 3726 | ] 3727 | 3728 | [[package]] 3729 | name = "wayland-protocols-plasma" 3730 | version = "0.3.8" 3731 | source = "registry+https://github.com/rust-lang/crates.io-index" 3732 | checksum = "4fd38cdad69b56ace413c6bcc1fbf5acc5e2ef4af9d5f8f1f9570c0c83eae175" 3733 | dependencies = [ 3734 | "bitflags 2.9.1", 3735 | "wayland-backend", 3736 | "wayland-client", 3737 | "wayland-protocols", 3738 | "wayland-scanner", 3739 | ] 3740 | 3741 | [[package]] 3742 | name = "wayland-protocols-wlr" 3743 | version = "0.3.8" 3744 | source = "registry+https://github.com/rust-lang/crates.io-index" 3745 | checksum = "1cb6cdc73399c0e06504c437fe3cf886f25568dd5454473d565085b36d6a8bbf" 3746 | dependencies = [ 3747 | "bitflags 2.9.1", 3748 | "wayland-backend", 3749 | "wayland-client", 3750 | "wayland-protocols", 3751 | "wayland-scanner", 3752 | ] 3753 | 3754 | [[package]] 3755 | name = "wayland-scanner" 3756 | version = "0.31.6" 3757 | source = "registry+https://github.com/rust-lang/crates.io-index" 3758 | checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" 3759 | dependencies = [ 3760 | "proc-macro2", 3761 | "quick-xml 0.37.5", 3762 | "quote", 3763 | ] 3764 | 3765 | [[package]] 3766 | name = "wayland-sys" 3767 | version = "0.31.6" 3768 | source = "registry+https://github.com/rust-lang/crates.io-index" 3769 | checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615" 3770 | dependencies = [ 3771 | "dlib", 3772 | "log", 3773 | "once_cell", 3774 | "pkg-config", 3775 | ] 3776 | 3777 | [[package]] 3778 | name = "web-sys" 3779 | version = "0.3.77" 3780 | source = "registry+https://github.com/rust-lang/crates.io-index" 3781 | checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 3782 | dependencies = [ 3783 | "js-sys", 3784 | "wasm-bindgen", 3785 | ] 3786 | 3787 | [[package]] 3788 | name = "web-time" 3789 | version = "1.1.0" 3790 | source = "registry+https://github.com/rust-lang/crates.io-index" 3791 | checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 3792 | dependencies = [ 3793 | "js-sys", 3794 | "wasm-bindgen", 3795 | ] 3796 | 3797 | [[package]] 3798 | name = "webbrowser" 3799 | version = "1.0.4" 3800 | source = "registry+https://github.com/rust-lang/crates.io-index" 3801 | checksum = "d5df295f8451142f1856b1bd86a606dfe9587d439bc036e319c827700dbd555e" 3802 | dependencies = [ 3803 | "core-foundation 0.10.1", 3804 | "home", 3805 | "jni", 3806 | "log", 3807 | "ndk-context", 3808 | "objc2 0.6.1", 3809 | "objc2-foundation 0.3.1", 3810 | "url", 3811 | "web-sys", 3812 | ] 3813 | 3814 | [[package]] 3815 | name = "weezl" 3816 | version = "0.1.10" 3817 | source = "registry+https://github.com/rust-lang/crates.io-index" 3818 | checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" 3819 | 3820 | [[package]] 3821 | name = "wgpu" 3822 | version = "24.0.5" 3823 | source = "registry+https://github.com/rust-lang/crates.io-index" 3824 | checksum = "6b0b3436f0729f6cdf2e6e9201f3d39dc95813fad61d826c1ed07918b4539353" 3825 | dependencies = [ 3826 | "arrayvec", 3827 | "bitflags 2.9.1", 3828 | "cfg_aliases", 3829 | "document-features", 3830 | "js-sys", 3831 | "log", 3832 | "parking_lot", 3833 | "profiling", 3834 | "raw-window-handle", 3835 | "smallvec", 3836 | "static_assertions", 3837 | "wasm-bindgen", 3838 | "wasm-bindgen-futures", 3839 | "web-sys", 3840 | "wgpu-core", 3841 | "wgpu-hal", 3842 | "wgpu-types", 3843 | ] 3844 | 3845 | [[package]] 3846 | name = "wgpu-core" 3847 | version = "24.0.5" 3848 | source = "registry+https://github.com/rust-lang/crates.io-index" 3849 | checksum = "7f0aa306497a238d169b9dc70659105b4a096859a34894544ca81719242e1499" 3850 | dependencies = [ 3851 | "arrayvec", 3852 | "bit-vec", 3853 | "bitflags 2.9.1", 3854 | "cfg_aliases", 3855 | "document-features", 3856 | "indexmap", 3857 | "log", 3858 | "naga", 3859 | "once_cell", 3860 | "parking_lot", 3861 | "profiling", 3862 | "raw-window-handle", 3863 | "rustc-hash 1.1.0", 3864 | "smallvec", 3865 | "thiserror 2.0.12", 3866 | "wgpu-hal", 3867 | "wgpu-types", 3868 | ] 3869 | 3870 | [[package]] 3871 | name = "wgpu-hal" 3872 | version = "24.0.4" 3873 | source = "registry+https://github.com/rust-lang/crates.io-index" 3874 | checksum = "f112f464674ca69f3533248508ee30cb84c67cf06c25ff6800685f5e0294e259" 3875 | dependencies = [ 3876 | "android_system_properties", 3877 | "arrayvec", 3878 | "ash", 3879 | "bitflags 2.9.1", 3880 | "bytemuck", 3881 | "cfg_aliases", 3882 | "core-graphics-types", 3883 | "glow", 3884 | "glutin_wgl_sys", 3885 | "gpu-alloc", 3886 | "gpu-descriptor", 3887 | "js-sys", 3888 | "khronos-egl", 3889 | "libc", 3890 | "libloading", 3891 | "log", 3892 | "metal", 3893 | "naga", 3894 | "ndk-sys 0.5.0+25.2.9519653", 3895 | "objc", 3896 | "once_cell", 3897 | "ordered-float", 3898 | "parking_lot", 3899 | "profiling", 3900 | "raw-window-handle", 3901 | "renderdoc-sys", 3902 | "rustc-hash 1.1.0", 3903 | "smallvec", 3904 | "thiserror 2.0.12", 3905 | "wasm-bindgen", 3906 | "web-sys", 3907 | "wgpu-types", 3908 | "windows", 3909 | ] 3910 | 3911 | [[package]] 3912 | name = "wgpu-types" 3913 | version = "24.0.0" 3914 | source = "registry+https://github.com/rust-lang/crates.io-index" 3915 | checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c" 3916 | dependencies = [ 3917 | "bitflags 2.9.1", 3918 | "js-sys", 3919 | "log", 3920 | "web-sys", 3921 | ] 3922 | 3923 | [[package]] 3924 | name = "winapi" 3925 | version = "0.3.9" 3926 | source = "registry+https://github.com/rust-lang/crates.io-index" 3927 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3928 | dependencies = [ 3929 | "winapi-i686-pc-windows-gnu", 3930 | "winapi-x86_64-pc-windows-gnu", 3931 | ] 3932 | 3933 | [[package]] 3934 | name = "winapi-i686-pc-windows-gnu" 3935 | version = "0.4.0" 3936 | source = "registry+https://github.com/rust-lang/crates.io-index" 3937 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3938 | 3939 | [[package]] 3940 | name = "winapi-util" 3941 | version = "0.1.9" 3942 | source = "registry+https://github.com/rust-lang/crates.io-index" 3943 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 3944 | dependencies = [ 3945 | "windows-sys 0.59.0", 3946 | ] 3947 | 3948 | [[package]] 3949 | name = "winapi-x86_64-pc-windows-gnu" 3950 | version = "0.4.0" 3951 | source = "registry+https://github.com/rust-lang/crates.io-index" 3952 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3953 | 3954 | [[package]] 3955 | name = "windows" 3956 | version = "0.58.0" 3957 | source = "registry+https://github.com/rust-lang/crates.io-index" 3958 | checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" 3959 | dependencies = [ 3960 | "windows-core", 3961 | "windows-targets 0.52.6", 3962 | ] 3963 | 3964 | [[package]] 3965 | name = "windows-core" 3966 | version = "0.58.0" 3967 | source = "registry+https://github.com/rust-lang/crates.io-index" 3968 | checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" 3969 | dependencies = [ 3970 | "windows-implement", 3971 | "windows-interface", 3972 | "windows-result", 3973 | "windows-strings", 3974 | "windows-targets 0.52.6", 3975 | ] 3976 | 3977 | [[package]] 3978 | name = "windows-implement" 3979 | version = "0.58.0" 3980 | source = "registry+https://github.com/rust-lang/crates.io-index" 3981 | checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" 3982 | dependencies = [ 3983 | "proc-macro2", 3984 | "quote", 3985 | "syn 2.0.101", 3986 | ] 3987 | 3988 | [[package]] 3989 | name = "windows-interface" 3990 | version = "0.58.0" 3991 | source = "registry+https://github.com/rust-lang/crates.io-index" 3992 | checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" 3993 | dependencies = [ 3994 | "proc-macro2", 3995 | "quote", 3996 | "syn 2.0.101", 3997 | ] 3998 | 3999 | [[package]] 4000 | name = "windows-result" 4001 | version = "0.2.0" 4002 | source = "registry+https://github.com/rust-lang/crates.io-index" 4003 | checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 4004 | dependencies = [ 4005 | "windows-targets 0.52.6", 4006 | ] 4007 | 4008 | [[package]] 4009 | name = "windows-strings" 4010 | version = "0.1.0" 4011 | source = "registry+https://github.com/rust-lang/crates.io-index" 4012 | checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 4013 | dependencies = [ 4014 | "windows-result", 4015 | "windows-targets 0.52.6", 4016 | ] 4017 | 4018 | [[package]] 4019 | name = "windows-sys" 4020 | version = "0.45.0" 4021 | source = "registry+https://github.com/rust-lang/crates.io-index" 4022 | checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 4023 | dependencies = [ 4024 | "windows-targets 0.42.2", 4025 | ] 4026 | 4027 | [[package]] 4028 | name = "windows-sys" 4029 | version = "0.52.0" 4030 | source = "registry+https://github.com/rust-lang/crates.io-index" 4031 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 4032 | dependencies = [ 4033 | "windows-targets 0.52.6", 4034 | ] 4035 | 4036 | [[package]] 4037 | name = "windows-sys" 4038 | version = "0.59.0" 4039 | source = "registry+https://github.com/rust-lang/crates.io-index" 4040 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 4041 | dependencies = [ 4042 | "windows-targets 0.52.6", 4043 | ] 4044 | 4045 | [[package]] 4046 | name = "windows-targets" 4047 | version = "0.42.2" 4048 | source = "registry+https://github.com/rust-lang/crates.io-index" 4049 | checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 4050 | dependencies = [ 4051 | "windows_aarch64_gnullvm 0.42.2", 4052 | "windows_aarch64_msvc 0.42.2", 4053 | "windows_i686_gnu 0.42.2", 4054 | "windows_i686_msvc 0.42.2", 4055 | "windows_x86_64_gnu 0.42.2", 4056 | "windows_x86_64_gnullvm 0.42.2", 4057 | "windows_x86_64_msvc 0.42.2", 4058 | ] 4059 | 4060 | [[package]] 4061 | name = "windows-targets" 4062 | version = "0.48.5" 4063 | source = "registry+https://github.com/rust-lang/crates.io-index" 4064 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 4065 | dependencies = [ 4066 | "windows_aarch64_gnullvm 0.48.5", 4067 | "windows_aarch64_msvc 0.48.5", 4068 | "windows_i686_gnu 0.48.5", 4069 | "windows_i686_msvc 0.48.5", 4070 | "windows_x86_64_gnu 0.48.5", 4071 | "windows_x86_64_gnullvm 0.48.5", 4072 | "windows_x86_64_msvc 0.48.5", 4073 | ] 4074 | 4075 | [[package]] 4076 | name = "windows-targets" 4077 | version = "0.52.6" 4078 | source = "registry+https://github.com/rust-lang/crates.io-index" 4079 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 4080 | dependencies = [ 4081 | "windows_aarch64_gnullvm 0.52.6", 4082 | "windows_aarch64_msvc 0.52.6", 4083 | "windows_i686_gnu 0.52.6", 4084 | "windows_i686_gnullvm 0.52.6", 4085 | "windows_i686_msvc 0.52.6", 4086 | "windows_x86_64_gnu 0.52.6", 4087 | "windows_x86_64_gnullvm 0.52.6", 4088 | "windows_x86_64_msvc 0.52.6", 4089 | ] 4090 | 4091 | [[package]] 4092 | name = "windows-targets" 4093 | version = "0.53.0" 4094 | source = "registry+https://github.com/rust-lang/crates.io-index" 4095 | checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" 4096 | dependencies = [ 4097 | "windows_aarch64_gnullvm 0.53.0", 4098 | "windows_aarch64_msvc 0.53.0", 4099 | "windows_i686_gnu 0.53.0", 4100 | "windows_i686_gnullvm 0.53.0", 4101 | "windows_i686_msvc 0.53.0", 4102 | "windows_x86_64_gnu 0.53.0", 4103 | "windows_x86_64_gnullvm 0.53.0", 4104 | "windows_x86_64_msvc 0.53.0", 4105 | ] 4106 | 4107 | [[package]] 4108 | name = "windows_aarch64_gnullvm" 4109 | version = "0.42.2" 4110 | source = "registry+https://github.com/rust-lang/crates.io-index" 4111 | checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 4112 | 4113 | [[package]] 4114 | name = "windows_aarch64_gnullvm" 4115 | version = "0.48.5" 4116 | source = "registry+https://github.com/rust-lang/crates.io-index" 4117 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 4118 | 4119 | [[package]] 4120 | name = "windows_aarch64_gnullvm" 4121 | version = "0.52.6" 4122 | source = "registry+https://github.com/rust-lang/crates.io-index" 4123 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 4124 | 4125 | [[package]] 4126 | name = "windows_aarch64_gnullvm" 4127 | version = "0.53.0" 4128 | source = "registry+https://github.com/rust-lang/crates.io-index" 4129 | checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" 4130 | 4131 | [[package]] 4132 | name = "windows_aarch64_msvc" 4133 | version = "0.42.2" 4134 | source = "registry+https://github.com/rust-lang/crates.io-index" 4135 | checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" 4136 | 4137 | [[package]] 4138 | name = "windows_aarch64_msvc" 4139 | version = "0.48.5" 4140 | source = "registry+https://github.com/rust-lang/crates.io-index" 4141 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 4142 | 4143 | [[package]] 4144 | name = "windows_aarch64_msvc" 4145 | version = "0.52.6" 4146 | source = "registry+https://github.com/rust-lang/crates.io-index" 4147 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 4148 | 4149 | [[package]] 4150 | name = "windows_aarch64_msvc" 4151 | version = "0.53.0" 4152 | source = "registry+https://github.com/rust-lang/crates.io-index" 4153 | checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" 4154 | 4155 | [[package]] 4156 | name = "windows_i686_gnu" 4157 | version = "0.42.2" 4158 | source = "registry+https://github.com/rust-lang/crates.io-index" 4159 | checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" 4160 | 4161 | [[package]] 4162 | name = "windows_i686_gnu" 4163 | version = "0.48.5" 4164 | source = "registry+https://github.com/rust-lang/crates.io-index" 4165 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 4166 | 4167 | [[package]] 4168 | name = "windows_i686_gnu" 4169 | version = "0.52.6" 4170 | source = "registry+https://github.com/rust-lang/crates.io-index" 4171 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 4172 | 4173 | [[package]] 4174 | name = "windows_i686_gnu" 4175 | version = "0.53.0" 4176 | source = "registry+https://github.com/rust-lang/crates.io-index" 4177 | checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" 4178 | 4179 | [[package]] 4180 | name = "windows_i686_gnullvm" 4181 | version = "0.52.6" 4182 | source = "registry+https://github.com/rust-lang/crates.io-index" 4183 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 4184 | 4185 | [[package]] 4186 | name = "windows_i686_gnullvm" 4187 | version = "0.53.0" 4188 | source = "registry+https://github.com/rust-lang/crates.io-index" 4189 | checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" 4190 | 4191 | [[package]] 4192 | name = "windows_i686_msvc" 4193 | version = "0.42.2" 4194 | source = "registry+https://github.com/rust-lang/crates.io-index" 4195 | checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" 4196 | 4197 | [[package]] 4198 | name = "windows_i686_msvc" 4199 | version = "0.48.5" 4200 | source = "registry+https://github.com/rust-lang/crates.io-index" 4201 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 4202 | 4203 | [[package]] 4204 | name = "windows_i686_msvc" 4205 | version = "0.52.6" 4206 | source = "registry+https://github.com/rust-lang/crates.io-index" 4207 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 4208 | 4209 | [[package]] 4210 | name = "windows_i686_msvc" 4211 | version = "0.53.0" 4212 | source = "registry+https://github.com/rust-lang/crates.io-index" 4213 | checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" 4214 | 4215 | [[package]] 4216 | name = "windows_x86_64_gnu" 4217 | version = "0.42.2" 4218 | source = "registry+https://github.com/rust-lang/crates.io-index" 4219 | checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" 4220 | 4221 | [[package]] 4222 | name = "windows_x86_64_gnu" 4223 | version = "0.48.5" 4224 | source = "registry+https://github.com/rust-lang/crates.io-index" 4225 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 4226 | 4227 | [[package]] 4228 | name = "windows_x86_64_gnu" 4229 | version = "0.52.6" 4230 | source = "registry+https://github.com/rust-lang/crates.io-index" 4231 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 4232 | 4233 | [[package]] 4234 | name = "windows_x86_64_gnu" 4235 | version = "0.53.0" 4236 | source = "registry+https://github.com/rust-lang/crates.io-index" 4237 | checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" 4238 | 4239 | [[package]] 4240 | name = "windows_x86_64_gnullvm" 4241 | version = "0.42.2" 4242 | source = "registry+https://github.com/rust-lang/crates.io-index" 4243 | checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" 4244 | 4245 | [[package]] 4246 | name = "windows_x86_64_gnullvm" 4247 | version = "0.48.5" 4248 | source = "registry+https://github.com/rust-lang/crates.io-index" 4249 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 4250 | 4251 | [[package]] 4252 | name = "windows_x86_64_gnullvm" 4253 | version = "0.52.6" 4254 | source = "registry+https://github.com/rust-lang/crates.io-index" 4255 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 4256 | 4257 | [[package]] 4258 | name = "windows_x86_64_gnullvm" 4259 | version = "0.53.0" 4260 | source = "registry+https://github.com/rust-lang/crates.io-index" 4261 | checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" 4262 | 4263 | [[package]] 4264 | name = "windows_x86_64_msvc" 4265 | version = "0.42.2" 4266 | source = "registry+https://github.com/rust-lang/crates.io-index" 4267 | checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" 4268 | 4269 | [[package]] 4270 | name = "windows_x86_64_msvc" 4271 | version = "0.48.5" 4272 | source = "registry+https://github.com/rust-lang/crates.io-index" 4273 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 4274 | 4275 | [[package]] 4276 | name = "windows_x86_64_msvc" 4277 | version = "0.52.6" 4278 | source = "registry+https://github.com/rust-lang/crates.io-index" 4279 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 4280 | 4281 | [[package]] 4282 | name = "windows_x86_64_msvc" 4283 | version = "0.53.0" 4284 | source = "registry+https://github.com/rust-lang/crates.io-index" 4285 | checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" 4286 | 4287 | [[package]] 4288 | name = "winit" 4289 | version = "0.30.11" 4290 | source = "registry+https://github.com/rust-lang/crates.io-index" 4291 | checksum = "a4409c10174df8779dc29a4788cac85ed84024ccbc1743b776b21a520ee1aaf4" 4292 | dependencies = [ 4293 | "ahash", 4294 | "android-activity", 4295 | "atomic-waker", 4296 | "bitflags 2.9.1", 4297 | "block2", 4298 | "bytemuck", 4299 | "calloop", 4300 | "cfg_aliases", 4301 | "concurrent-queue", 4302 | "core-foundation 0.9.4", 4303 | "core-graphics", 4304 | "cursor-icon", 4305 | "dpi", 4306 | "js-sys", 4307 | "libc", 4308 | "memmap2", 4309 | "ndk", 4310 | "objc2 0.5.2", 4311 | "objc2-app-kit 0.2.2", 4312 | "objc2-foundation 0.2.2", 4313 | "objc2-ui-kit", 4314 | "orbclient", 4315 | "percent-encoding", 4316 | "pin-project", 4317 | "raw-window-handle", 4318 | "redox_syscall 0.4.1", 4319 | "rustix 0.38.44", 4320 | "sctk-adwaita", 4321 | "smithay-client-toolkit", 4322 | "smol_str", 4323 | "tracing", 4324 | "unicode-segmentation", 4325 | "wasm-bindgen", 4326 | "wasm-bindgen-futures", 4327 | "wayland-backend", 4328 | "wayland-client", 4329 | "wayland-protocols", 4330 | "wayland-protocols-plasma", 4331 | "web-sys", 4332 | "web-time", 4333 | "windows-sys 0.52.0", 4334 | "x11-dl", 4335 | "x11rb", 4336 | "xkbcommon-dl", 4337 | ] 4338 | 4339 | [[package]] 4340 | name = "winnow" 4341 | version = "0.7.10" 4342 | source = "registry+https://github.com/rust-lang/crates.io-index" 4343 | checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" 4344 | dependencies = [ 4345 | "memchr", 4346 | ] 4347 | 4348 | [[package]] 4349 | name = "wit-bindgen-rt" 4350 | version = "0.39.0" 4351 | source = "registry+https://github.com/rust-lang/crates.io-index" 4352 | checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 4353 | dependencies = [ 4354 | "bitflags 2.9.1", 4355 | ] 4356 | 4357 | [[package]] 4358 | name = "writeable" 4359 | version = "0.6.1" 4360 | source = "registry+https://github.com/rust-lang/crates.io-index" 4361 | checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 4362 | 4363 | [[package]] 4364 | name = "x11-dl" 4365 | version = "2.21.0" 4366 | source = "registry+https://github.com/rust-lang/crates.io-index" 4367 | checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" 4368 | dependencies = [ 4369 | "libc", 4370 | "once_cell", 4371 | "pkg-config", 4372 | ] 4373 | 4374 | [[package]] 4375 | name = "x11rb" 4376 | version = "0.13.1" 4377 | source = "registry+https://github.com/rust-lang/crates.io-index" 4378 | checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" 4379 | dependencies = [ 4380 | "as-raw-xcb-connection", 4381 | "gethostname", 4382 | "libc", 4383 | "libloading", 4384 | "once_cell", 4385 | "rustix 0.38.44", 4386 | "x11rb-protocol", 4387 | ] 4388 | 4389 | [[package]] 4390 | name = "x11rb-protocol" 4391 | version = "0.13.1" 4392 | source = "registry+https://github.com/rust-lang/crates.io-index" 4393 | checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" 4394 | 4395 | [[package]] 4396 | name = "xcursor" 4397 | version = "0.3.8" 4398 | source = "registry+https://github.com/rust-lang/crates.io-index" 4399 | checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61" 4400 | 4401 | [[package]] 4402 | name = "xdg-home" 4403 | version = "1.3.0" 4404 | source = "registry+https://github.com/rust-lang/crates.io-index" 4405 | checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" 4406 | dependencies = [ 4407 | "libc", 4408 | "windows-sys 0.59.0", 4409 | ] 4410 | 4411 | [[package]] 4412 | name = "xkbcommon-dl" 4413 | version = "0.4.2" 4414 | source = "registry+https://github.com/rust-lang/crates.io-index" 4415 | checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" 4416 | dependencies = [ 4417 | "bitflags 2.9.1", 4418 | "dlib", 4419 | "log", 4420 | "once_cell", 4421 | "xkeysym", 4422 | ] 4423 | 4424 | [[package]] 4425 | name = "xkeysym" 4426 | version = "0.2.1" 4427 | source = "registry+https://github.com/rust-lang/crates.io-index" 4428 | checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" 4429 | 4430 | [[package]] 4431 | name = "xml-rs" 4432 | version = "0.8.26" 4433 | source = "registry+https://github.com/rust-lang/crates.io-index" 4434 | checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" 4435 | 4436 | [[package]] 4437 | name = "yoke" 4438 | version = "0.8.0" 4439 | source = "registry+https://github.com/rust-lang/crates.io-index" 4440 | checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 4441 | dependencies = [ 4442 | "serde", 4443 | "stable_deref_trait", 4444 | "yoke-derive", 4445 | "zerofrom", 4446 | ] 4447 | 4448 | [[package]] 4449 | name = "yoke-derive" 4450 | version = "0.8.0" 4451 | source = "registry+https://github.com/rust-lang/crates.io-index" 4452 | checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 4453 | dependencies = [ 4454 | "proc-macro2", 4455 | "quote", 4456 | "syn 2.0.101", 4457 | "synstructure", 4458 | ] 4459 | 4460 | [[package]] 4461 | name = "zbus" 4462 | version = "4.4.0" 4463 | source = "registry+https://github.com/rust-lang/crates.io-index" 4464 | checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" 4465 | dependencies = [ 4466 | "async-broadcast", 4467 | "async-executor", 4468 | "async-fs", 4469 | "async-io", 4470 | "async-lock", 4471 | "async-process", 4472 | "async-recursion", 4473 | "async-task", 4474 | "async-trait", 4475 | "blocking", 4476 | "enumflags2", 4477 | "event-listener", 4478 | "futures-core", 4479 | "futures-sink", 4480 | "futures-util", 4481 | "hex", 4482 | "nix", 4483 | "ordered-stream", 4484 | "rand", 4485 | "serde", 4486 | "serde_repr", 4487 | "sha1", 4488 | "static_assertions", 4489 | "tracing", 4490 | "uds_windows", 4491 | "windows-sys 0.52.0", 4492 | "xdg-home", 4493 | "zbus_macros", 4494 | "zbus_names", 4495 | "zvariant", 4496 | ] 4497 | 4498 | [[package]] 4499 | name = "zbus-lockstep" 4500 | version = "0.4.4" 4501 | source = "registry+https://github.com/rust-lang/crates.io-index" 4502 | checksum = "4ca2c5dceb099bddaade154055c926bb8ae507a18756ba1d8963fd7b51d8ed1d" 4503 | dependencies = [ 4504 | "zbus_xml", 4505 | "zvariant", 4506 | ] 4507 | 4508 | [[package]] 4509 | name = "zbus-lockstep-macros" 4510 | version = "0.4.4" 4511 | source = "registry+https://github.com/rust-lang/crates.io-index" 4512 | checksum = "709ab20fc57cb22af85be7b360239563209258430bccf38d8b979c5a2ae3ecce" 4513 | dependencies = [ 4514 | "proc-macro2", 4515 | "quote", 4516 | "syn 2.0.101", 4517 | "zbus-lockstep", 4518 | "zbus_xml", 4519 | "zvariant", 4520 | ] 4521 | 4522 | [[package]] 4523 | name = "zbus_macros" 4524 | version = "4.4.0" 4525 | source = "registry+https://github.com/rust-lang/crates.io-index" 4526 | checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" 4527 | dependencies = [ 4528 | "proc-macro-crate", 4529 | "proc-macro2", 4530 | "quote", 4531 | "syn 2.0.101", 4532 | "zvariant_utils", 4533 | ] 4534 | 4535 | [[package]] 4536 | name = "zbus_names" 4537 | version = "3.0.0" 4538 | source = "registry+https://github.com/rust-lang/crates.io-index" 4539 | checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" 4540 | dependencies = [ 4541 | "serde", 4542 | "static_assertions", 4543 | "zvariant", 4544 | ] 4545 | 4546 | [[package]] 4547 | name = "zbus_xml" 4548 | version = "4.0.0" 4549 | source = "registry+https://github.com/rust-lang/crates.io-index" 4550 | checksum = "ab3f374552b954f6abb4bd6ce979e6c9b38fb9d0cd7cc68a7d796e70c9f3a233" 4551 | dependencies = [ 4552 | "quick-xml 0.30.0", 4553 | "serde", 4554 | "static_assertions", 4555 | "zbus_names", 4556 | "zvariant", 4557 | ] 4558 | 4559 | [[package]] 4560 | name = "zerocopy" 4561 | version = "0.8.25" 4562 | source = "registry+https://github.com/rust-lang/crates.io-index" 4563 | checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" 4564 | dependencies = [ 4565 | "zerocopy-derive", 4566 | ] 4567 | 4568 | [[package]] 4569 | name = "zerocopy-derive" 4570 | version = "0.8.25" 4571 | source = "registry+https://github.com/rust-lang/crates.io-index" 4572 | checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" 4573 | dependencies = [ 4574 | "proc-macro2", 4575 | "quote", 4576 | "syn 2.0.101", 4577 | ] 4578 | 4579 | [[package]] 4580 | name = "zerofrom" 4581 | version = "0.1.6" 4582 | source = "registry+https://github.com/rust-lang/crates.io-index" 4583 | checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 4584 | dependencies = [ 4585 | "zerofrom-derive", 4586 | ] 4587 | 4588 | [[package]] 4589 | name = "zerofrom-derive" 4590 | version = "0.1.6" 4591 | source = "registry+https://github.com/rust-lang/crates.io-index" 4592 | checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 4593 | dependencies = [ 4594 | "proc-macro2", 4595 | "quote", 4596 | "syn 2.0.101", 4597 | "synstructure", 4598 | ] 4599 | 4600 | [[package]] 4601 | name = "zerotrie" 4602 | version = "0.2.2" 4603 | source = "registry+https://github.com/rust-lang/crates.io-index" 4604 | checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 4605 | dependencies = [ 4606 | "displaydoc", 4607 | "yoke", 4608 | "zerofrom", 4609 | ] 4610 | 4611 | [[package]] 4612 | name = "zerovec" 4613 | version = "0.11.2" 4614 | source = "registry+https://github.com/rust-lang/crates.io-index" 4615 | checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" 4616 | dependencies = [ 4617 | "yoke", 4618 | "zerofrom", 4619 | "zerovec-derive", 4620 | ] 4621 | 4622 | [[package]] 4623 | name = "zerovec-derive" 4624 | version = "0.11.1" 4625 | source = "registry+https://github.com/rust-lang/crates.io-index" 4626 | checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 4627 | dependencies = [ 4628 | "proc-macro2", 4629 | "quote", 4630 | "syn 2.0.101", 4631 | ] 4632 | 4633 | [[package]] 4634 | name = "zvariant" 4635 | version = "4.2.0" 4636 | source = "registry+https://github.com/rust-lang/crates.io-index" 4637 | checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" 4638 | dependencies = [ 4639 | "endi", 4640 | "enumflags2", 4641 | "serde", 4642 | "static_assertions", 4643 | "zvariant_derive", 4644 | ] 4645 | 4646 | [[package]] 4647 | name = "zvariant_derive" 4648 | version = "4.2.0" 4649 | source = "registry+https://github.com/rust-lang/crates.io-index" 4650 | checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" 4651 | dependencies = [ 4652 | "proc-macro-crate", 4653 | "proc-macro2", 4654 | "quote", 4655 | "syn 2.0.101", 4656 | "zvariant_utils", 4657 | ] 4658 | 4659 | [[package]] 4660 | name = "zvariant_utils" 4661 | version = "2.1.0" 4662 | source = "registry+https://github.com/rust-lang/crates.io-index" 4663 | checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" 4664 | dependencies = [ 4665 | "proc-macro2", 4666 | "quote", 4667 | "syn 2.0.101", 4668 | ] 4669 | --------------------------------------------------------------------------------