From 181db4e8810af6a970a751ec9489a723f5e8fd40 Mon Sep 17 00:00:00 2001 From: core Date: Fri, 3 Jan 2025 22:23:08 -0500 Subject: [PATCH] break everything --- .gitignore | 3 +- .idea/wxbox.iml | 6 + Cargo.lock | 3376 +++++++++++++++++++- Cargo.toml | 4 +- config.toml | 2 +- wxbox-tiler/Cargo.toml | 3 + wxbox-tiler/src/main.rs | 2 +- wxbox-tiler/src/sources/grib2.rs | 164 +- wxbox-web/.dockerignore | 16 - wxbox-web/.env.example | 2 - wxbox-web/.gitignore | 21 - wxbox-web/.npmrc | 1 - wxbox-web/.prettierignore | 4 - wxbox-web/.prettierrc | 15 - wxbox-web/Dockerfile | 23 - wxbox-web/README.md | 38 - wxbox-web/bun.lockb | Bin 96055 -> 0 bytes wxbox-web/eslint.config.js | 33 - wxbox-web/package.json | 37 - wxbox-web/src/app.d.ts | 13 - wxbox-web/src/app.html | 12 - wxbox-web/src/lib/color.ts | 12 - wxbox-web/src/lib/global.css | 55 - wxbox-web/src/lib/map/Map.svelte | 170 - wxbox-web/src/lib/map/index.ts | 2 - wxbox-web/src/lib/map/layer.ts | 32 - wxbox-web/src/lib/map/sync.svelte.ts | 60 - wxbox-web/src/lib/menubar/ButtonBar.svelte | 50 - wxbox-web/src/lib/menubar/buttonlib.ts | 22 - wxbox-web/src/routes/+layout.svelte | 13 - wxbox-web/src/routes/+page.svelte | 415 --- wxbox-web/static/favicon.png | Bin 1571 -> 0 bytes wxbox-web/svelte.config.js | 18 - wxbox-web/tsconfig.json | 19 - wxbox-web/vite.config.ts | 6 - wxbox_client/Cargo.toml | 12 + wxbox_client/src/lib.rs | 96 + wxbox_client_native/Cargo.toml | 10 + wxbox_client_native/src/main.rs | 10 + wxbox_client_wasm/Cargo.toml | 6 + wxbox_client_wasm/src/lib.rs | 14 + wxbox_common/Cargo.toml | 7 + wxbox_common/src/lib.rs | 9 + 43 files changed, 3620 insertions(+), 1193 deletions(-) delete mode 100644 wxbox-web/.dockerignore delete mode 100644 wxbox-web/.env.example delete mode 100644 wxbox-web/.gitignore delete mode 100644 wxbox-web/.npmrc delete mode 100644 wxbox-web/.prettierignore delete mode 100644 wxbox-web/.prettierrc delete mode 100644 wxbox-web/Dockerfile delete mode 100644 wxbox-web/README.md delete mode 100755 wxbox-web/bun.lockb delete mode 100644 wxbox-web/eslint.config.js delete mode 100644 wxbox-web/package.json delete mode 100644 wxbox-web/src/app.d.ts delete mode 100644 wxbox-web/src/app.html delete mode 100644 wxbox-web/src/lib/color.ts delete mode 100644 wxbox-web/src/lib/global.css delete mode 100644 wxbox-web/src/lib/map/Map.svelte delete mode 100644 wxbox-web/src/lib/map/index.ts delete mode 100644 wxbox-web/src/lib/map/layer.ts delete mode 100644 wxbox-web/src/lib/map/sync.svelte.ts delete mode 100644 wxbox-web/src/lib/menubar/ButtonBar.svelte delete mode 100644 wxbox-web/src/lib/menubar/buttonlib.ts delete mode 100644 wxbox-web/src/routes/+layout.svelte delete mode 100644 wxbox-web/src/routes/+page.svelte delete mode 100644 wxbox-web/static/favicon.png delete mode 100644 wxbox-web/svelte.config.js delete mode 100644 wxbox-web/tsconfig.json delete mode 100644 wxbox-web/vite.config.ts create mode 100644 wxbox_client/Cargo.toml create mode 100644 wxbox_client/src/lib.rs create mode 100644 wxbox_client_native/Cargo.toml create mode 100644 wxbox_client_native/src/main.rs create mode 100644 wxbox_client_wasm/Cargo.toml create mode 100644 wxbox_client_wasm/src/lib.rs create mode 100644 wxbox_common/Cargo.toml create mode 100644 wxbox_common/src/lib.rs diff --git a/.gitignore b/.gitignore index 4939eb7..5426951 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ */target target -node_modules \ No newline at end of file +node_modules +.cache \ No newline at end of file diff --git a/.idea/wxbox.iml b/.idea/wxbox.iml index 74ddee0..d2174f3 100644 --- a/.idea/wxbox.iml +++ b/.idea/wxbox.iml @@ -6,6 +6,12 @@ + + + + + + diff --git a/Cargo.lock b/Cargo.lock index 0a636e4..5ebadcf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,114 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "ab_glyph" +version = "0.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" + +[[package]] +name = "accesskit" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3d3b8f9bae46a948369bc4a03e815d4ed6d616bd00de4051133a5019dc31c5a" + +[[package]] +name = "accesskit_atspi_common" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c5dd55e6e94949498698daf4d48fb5659e824d7abec0d394089656ceaf99d4f" +dependencies = [ + "accesskit", + "accesskit_consumer", + "atspi-common", + "serde", + "thiserror 1.0.69", + "zvariant", +] + +[[package]] +name = "accesskit_consumer" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f47983a1084940ba9a39c077a8c63e55c619388be5476ac04c804cfbd1e63459" +dependencies = [ + "accesskit", + "hashbrown", + "immutable-chunkmap", +] + +[[package]] +name = "accesskit_macos" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7329821f3bd1101e03a7d2e03bd339e3ac0dc64c70b4c9f9ae1949e3ba8dece1" +dependencies = [ + "accesskit", + "accesskit_consumer", + "hashbrown", + "objc2", + "objc2-app-kit", + "objc2-foundation", +] + +[[package]] +name = "accesskit_unix" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcee751cc20d88678c33edaf9c07e8b693cd02819fe89053776f5313492273f5" +dependencies = [ + "accesskit", + "accesskit_atspi_common", + "async-channel", + "async-executor", + "async-task", + "atspi", + "futures-lite", + "futures-util", + "serde", + "zbus", +] + +[[package]] +name = "accesskit_windows" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24fcd5d23d70670992b823e735e859374d694a3d12bfd8dd32bd3bd8bedb5d81" +dependencies = [ + "accesskit", + "accesskit_consumer", + "hashbrown", + "paste", + "static_assertions", + "windows", + "windows-core", +] + +[[package]] +name = "accesskit_winit" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6a48dad5530b6deb9fc7a52cc6c3bf72cdd9eb8157ac9d32d69f2427a5e879" +dependencies = [ + "accesskit", + "accesskit_macos", + "accesskit_unix", + "accesskit_windows", + "raw-window-handle", + "winit", +] + [[package]] name = "actix-codec" version = "0.5.2" @@ -30,7 +138,7 @@ dependencies = [ "actix-service", "actix-utils", "ahash", - "base64", + "base64 0.22.1", "bitflags 2.6.0", "brotli", "bytes", @@ -243,6 +351,48 @@ dependencies = [ "alloc-no-stdlib", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "android-activity" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" +dependencies = [ + "android-properties", + "bitflags 2.6.0", + "cc", + "cesu8", + "jni", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys 0.6.0+11769913", + "num_enum", + "thiserror 1.0.69", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anyhow" version = "1.0.95" @@ -264,6 +414,21 @@ version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +[[package]] +name = "arboard" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df099ccb16cd014ff054ac1bf392c67feeef57164b05c42f037cd40f5d4357f4" +dependencies = [ + "clipboard-win", + "log", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "parking_lot", + "x11rb", +] + [[package]] name = "arg_enum_proc_macro" version = "0.3.4" @@ -275,18 +440,233 @@ dependencies = [ "syn", ] +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + [[package]] name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +[[package]] +name = "as-raw-xcb-connection" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" + +[[package]] +name = "ash" +version = "0.38.0+1.3.281" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" +dependencies = [ + "libloading", +] + +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +dependencies = [ + "async-lock", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-io" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +dependencies = [ + "async-lock", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix", + "tracing", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-signal" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1244b10dcd56c92219da4e14caa97e312079e185f04ba3eea25061561dc0a0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "atomic-waker" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "atspi" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be534b16650e35237bb1ed189ba2aab86ce65e88cc84c66f4935ba38575cecbf" +dependencies = [ + "atspi-common", + "atspi-connection", + "atspi-proxies", +] + +[[package]] +name = "atspi-common" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1909ed2dc01d0a17505d89311d192518507e8a056a48148e3598fef5e7bb6ba7" +dependencies = [ + "enumflags2", + "serde", + "static_assertions", + "zbus", + "zbus-lockstep", + "zbus-lockstep-macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "atspi-connection" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "430c5960624a4baaa511c9c0fcc2218e3b58f5dbcc47e6190cafee344b873333" +dependencies = [ + "atspi-common", + "atspi-proxies", + "futures-lite", + "zbus", +] + +[[package]] +name = "atspi-proxies" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e6c5de3e524cf967569722446bcd458d5032348554d9a17d7d72b041ab7496" +dependencies = [ + "atspi-common", + "serde", + "zbus", + "zvariant", +] + [[package]] name = "autocfg" version = "1.4.0" @@ -328,15 +708,45 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets", + "windows-targets 0.52.6", ] +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bit_field" version = "0.10.2" @@ -361,6 +771,12 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + [[package]] name = "block-buffer" version = "0.10.4" @@ -370,6 +786,28 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +dependencies = [ + "objc2", +] + +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + [[package]] name = "brotli" version = "6.0.0" @@ -408,6 +846,20 @@ name = "bytemuck" version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "byteorder" @@ -436,6 +888,59 @@ dependencies = [ "bytes", ] +[[package]] +name = "cacache" +version = "12.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "142316461ed3a3dfcba10417317472da5bfd0461e4d276bf7c07b330766d9490" +dependencies = [ + "digest", + "either", + "futures", + "hex", + "libc", + "memmap2 0.5.10", + "miette", + "reflink-copy", + "serde", + "serde_derive", + "serde_json", + "sha1", + "sha2", + "ssri", + "tempfile", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "walkdir", +] + +[[package]] +name = "calloop" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" +dependencies = [ + "bitflags 2.6.0", + "log", + "polling", + "rustix", + "slab", + "thiserror 1.0.69", +] + +[[package]] +name = "calloop-wayland-source" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" +dependencies = [ + "calloop", + "rustix", + "wayland-backend", + "wayland-client", +] + [[package]] name = "cc" version = "1.1.28" @@ -447,6 +952,12 @@ dependencies = [ "shlex", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cfg-expr" version = "0.15.8" @@ -463,12 +974,71 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" +dependencies = [ + "libc", +] + +[[package]] +name = "clipboard-win" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" +dependencies = [ + "error-code", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + [[package]] name = "color_quant" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "console" version = "0.15.8" @@ -508,12 +1078,46 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "core-graphics" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "core-graphics-types", + "foreign-types 0.5.0", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "libc", +] + [[package]] name = "cpufeatures" version = "0.2.14" @@ -573,6 +1177,18 @@ dependencies = [ "typenum", ] +[[package]] +name = "cursor-icon" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" + +[[package]] +name = "data-url" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" + [[package]] name = "deranged" version = "0.3.11" @@ -605,12 +1221,190 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading", +] + +[[package]] +name = "document-features" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" +dependencies = [ + "litrs", +] + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dpi" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" + +[[package]] +name = "ecolor" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d72e9c39f6e11a2e922d04a34ec5e7ef522ea3f5a1acfca7a19d16ad5fe50f5" +dependencies = [ + "bytemuck", + "emath", +] + +[[package]] +name = "eframe" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2f2d9e7ea2d11ec9e98a8683b6eb99f9d7d0448394ef6e0d6d91bd4eb817220" +dependencies = [ + "ahash", + "bytemuck", + "document-features", + "egui", + "egui-wgpu", + "egui-winit", + "egui_glow", + "glow 0.16.0", + "glutin", + "glutin-winit", + "image", + "js-sys", + "log", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "parking_lot", + "percent-encoding", + "profiling", + "raw-window-handle", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "web-time", + "winapi", + "windows-sys 0.59.0", + "winit", +] + +[[package]] +name = "egui" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "252d52224d35be1535d7fd1d6139ce071fb42c9097773e79f7665604f5596b5e" +dependencies = [ + "accesskit", + "ahash", + "emath", + "epaint", + "log", + "nohash-hasher", + "profiling", +] + +[[package]] +name = "egui-wgpu" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26c1e821d2d8921ef6ce98b258c7e24d9d6aab2ca1f9cdf374eca997e7f67f59" +dependencies = [ + "ahash", + "bytemuck", + "document-features", + "egui", + "epaint", + "log", + "profiling", + "thiserror 1.0.69", + "type-map", + "web-time", + "wgpu", + "winit", +] + +[[package]] +name = "egui-winit" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e84c2919cd9f3a38a91e8f84ac6a245c19251fd95226ed9fae61d5ea564fce3" +dependencies = [ + "accesskit_winit", + "ahash", + "arboard", + "egui", + "log", + "profiling", + "raw-window-handle", + "smithay-clipboard", + "web-time", + "webbrowser", + "winit", +] + +[[package]] +name = "egui_extras" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7a8198c088b1007108cb2d403bc99a5e370999b200db4f14559610d7330126" +dependencies = [ + "ahash", + "egui", + "enum-map", + "log", + "mime_guess2", + "profiling", + "resvg", +] + +[[package]] +name = "egui_glow" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf6264cc7608e3e69a7d57a6175f438275f1b3889c1a551b418277721c95e6" +dependencies = [ + "ahash", + "bytemuck", + "egui", + "glow 0.16.0", + "log", + "memoffset", + "profiling", + "wasm-bindgen", + "web-sys", + "winit", +] + [[package]] name = "either" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "emath" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4fe73c1207b864ee40aa0b0c038d6092af1030744678c60188a05c28553515d" +dependencies = [ + "bytemuck", +] + [[package]] name = "encode_unicode" version = "0.3.6" @@ -626,6 +1420,78 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "endi" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" + +[[package]] +name = "enum-map" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" +dependencies = [ + "enum-map-derive", + "serde", +] + +[[package]] +name = "enum-map-derive" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "enumflags2" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "epaint" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5666f8d25236293c966fbb3635eac18b04ad1914e3bab55bc7d44b9980cafcac" +dependencies = [ + "ab_glyph", + "ahash", + "bytemuck", + "ecolor", + "emath", + "epaint_default_fonts", + "log", + "nohash-hasher", + "parking_lot", + "profiling", +] + +[[package]] +name = "epaint_default_fonts" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66f6ddac3e6ac6fd4c3d48bb8b1943472f8da0f43a4303bcd8a18aa594401c80" + [[package]] name = "equivalent" version = "1.0.1" @@ -642,6 +1508,33 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "error-code" +version = "3.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" + +[[package]] +name = "event-listener" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +dependencies = [ + "event-listener", + "pin-project-lite", +] + [[package]] name = "exr" version = "1.73.0" @@ -682,19 +1575,52 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" + [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" + [[package]] name = "foreign-types" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "foreign-types-shared", + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -703,6 +1629,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -712,6 +1644,21 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + [[package]] name = "futures-channel" version = "0.3.31" @@ -719,6 +1666,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", + "futures-sink", ] [[package]] @@ -727,6 +1675,47 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "futures-sink" version = "0.3.31" @@ -745,10 +1734,16 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ + "futures-channel", "futures-core", + "futures-io", + "futures-macro", + "futures-sink", "futures-task", + "memchr", "pin-project-lite", "pin-utils", + "slab", ] [[package]] @@ -761,6 +1756,27 @@ dependencies = [ "version_check", ] +[[package]] +name = "geo-types" +version = "0.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f47c611187777bbca61ea7aba780213f5f3441fd36294ab333e96cfa791b65" +dependencies = [ + "approx", + "num-traits", + "serde", +] + +[[package]] +name = "gethostname" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +dependencies = [ + "libc", + "windows-targets 0.48.5", +] + [[package]] name = "getrandom" version = "0.2.15" @@ -788,6 +1804,146 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + +[[package]] +name = "glow" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d51fa363f025f5c111e03f13eda21162faeacb6911fe8caa0c0349f9cf0c4483" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glow" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glutin" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec69412a0bf07ea7607e638b415447857a808846c2b685a43c8aa18bc6d5e499" +dependencies = [ + "bitflags 2.6.0", + "cfg_aliases 0.2.1", + "cgl", + "core-foundation 0.9.4", + "dispatch", + "glutin_egl_sys", + "glutin_glx_sys", + "glutin_wgl_sys", + "libloading", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "once_cell", + "raw-window-handle", + "wayland-sys", + "windows-sys 0.52.0", + "x11-dl", +] + +[[package]] +name = "glutin-winit" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f" +dependencies = [ + "cfg_aliases 0.2.1", + "glutin", + "raw-window-handle", + "winit", +] + +[[package]] +name = "glutin_egl_sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cae99fff4d2850dbe6fb8c1fa8e4fead5525bab715beaacfccf3fb994e01c827" +dependencies = [ + "gl_generator", + "windows-sys 0.52.0", +] + +[[package]] +name = "glutin_glx_sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2b2d3918e76e18e08796b55eb64e8fe6ec67d5a6b2e2a7e2edce224ad24c63" +dependencies = [ + "gl_generator", + "x11-dl", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4e1951bbd9434a81aa496fe59ccc2235af3820d27b85f9314e279609211e2c" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "gpu-alloc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" +dependencies = [ + "bitflags 2.6.0", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "gpu-descriptor" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf29e94d6d243368b7a56caa16bc213e4f9f8ed38c4d9557069527b5d5281ca" +dependencies = [ + "bitflags 2.6.0", + "gpu-descriptor-types", + "hashbrown", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" +dependencies = [ + "bitflags 2.6.0", +] + [[package]] name = "h2" version = "0.3.26" @@ -841,6 +1997,11 @@ name = "hashbrown" version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] [[package]] name = "heck" @@ -854,6 +2015,33 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + [[package]] name = "http" version = "0.2.12" @@ -876,6 +2064,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + [[package]] name = "http-body" version = "1.0.1" @@ -895,10 +2094,66 @@ dependencies = [ "bytes", "futures-util", "http 1.1.0", - "http-body", + "http-body 1.0.1", "pin-project-lite", ] +[[package]] +name = "http-cache" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b5ab65432bbdfe8490dfde21d0366353a8d39f2bc24aca0146889f931b0b4b5" +dependencies = [ + "async-trait", + "bincode", + "cacache", + "http 0.2.12", + "http-cache-semantics", + "httpdate", + "serde", + "url", +] + +[[package]] +name = "http-cache-reqwest" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8285341ce7e709c56a0f259ff1c789c70edfbaa88acd69d27e4d63980b92dc" +dependencies = [ + "anyhow", + "async-trait", + "http 0.2.12", + "http-cache", + "http-cache-semantics", + "reqwest 0.11.27", + "reqwest-middleware", + "serde", + "task-local-extensions", + "url", +] + +[[package]] +name = "http-cache-semantics" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aec9f678bca3f4a15194b980f20ed9bfe0dd38e8d298c65c559a93dfbd6380a" +dependencies = [ + "http 0.2.12", + "http-serde", + "serde", + "time", +] + +[[package]] +name = "http-serde" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f560b665ad9f1572cfcaf034f7fb84338a7ce945216d64a90fd81f046a3caee" +dependencies = [ + "http 0.2.12", + "serde", +] + [[package]] name = "httparse" version = "1.9.5" @@ -911,6 +2166,30 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + [[package]] name = "hyper" version = "1.4.1" @@ -922,7 +2201,7 @@ dependencies = [ "futures-util", "h2 0.4.6", "http 1.1.0", - "http-body", + "http-body 1.0.1", "httparse", "itoa", "pin-project-lite", @@ -931,6 +2210,20 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.32", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", +] + [[package]] name = "hyper-rustls" version = "0.27.3" @@ -939,12 +2232,12 @@ checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", "http 1.1.0", - "hyper", + "hyper 1.4.1", "hyper-util", - "rustls", + "rustls 0.23.14", "rustls-pki-types", "tokio", - "tokio-rustls", + "tokio-rustls 0.26.0", "tower-service", ] @@ -956,7 +2249,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper", + "hyper 1.4.1", "hyper-util", "native-tls", "tokio", @@ -974,8 +2267,8 @@ dependencies = [ "futures-channel", "futures-util", "http 1.1.0", - "http-body", - "hyper", + "http-body 1.0.1", + "hyper 1.4.1", "pin-project-lite", "socket2", "tokio", @@ -1026,12 +2319,27 @@ dependencies = [ "quick-error", ] +[[package]] +name = "imagesize" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" + [[package]] name = "imgref" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" +[[package]] +name = "immutable-chunkmap" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f97096f508d54f8f8ab8957862eee2ccd628847b6217af1a335e1c44dee578" +dependencies = [ + "arrayvec", +] + [[package]] name = "impl-more" version = "0.1.6" @@ -1092,6 +2400,28 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + [[package]] name = "jobserver" version = "0.1.32" @@ -1109,13 +2439,40 @@ checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" [[package]] name = "js-sys" -version = "0.3.71" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cb94a0ffd3f3ee755c20f7d8752f45cac88605a4dcf808abcff72873296ec7b" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] +[[package]] +name = "khronos-egl" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" +dependencies = [ + "libc", + "libloading", + "pkg-config", +] + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "kurbo" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd85a5776cd9500c2e2059c8c76c3b01528566b7fcbaf8098b55a33fc298849b" +dependencies = [ + "arrayvec", +] + [[package]] name = "language-tags" version = "0.3.2" @@ -1150,6 +2507,33 @@ dependencies = [ "cc", ] +[[package]] +name = "libloading" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +dependencies = [ + "cfg-if", + "windows-targets 0.52.6", +] + +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", + "redox_syscall 0.5.7", +] + [[package]] name = "linked-hash-map" version = "0.5.6" @@ -1162,6 +2546,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litrs" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" + [[package]] name = "local-channel" version = "0.1.5" @@ -1204,6 +2594,24 @@ dependencies = [ "imgref", ] +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + [[package]] name = "maybe-rayon" version = "0.1.1" @@ -1220,12 +2628,97 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memmap2" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "metal" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" +dependencies = [ + "bitflags 2.6.0", + "block", + "core-graphics-types", + "foreign-types 0.5.0", + "log", + "objc", + "paste", +] + +[[package]] +name = "miette" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" +dependencies = [ + "miette-derive", + "once_cell", + "thiserror 1.0.69", + "unicode-width", +] + +[[package]] +name = "miette-derive" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "mime" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "mime_guess2" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a3333bb1609500601edc766a39b4c1772874a4ce26022f4d866854dc020c41" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -1248,13 +2741,34 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.9", "libc", "log", "wasi", "windows-sys 0.52.0", ] +[[package]] +name = "naga" +version = "23.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "364f94bc34f61332abebe8cad6f6cd82a5b65cff22c828d05d0968911462ca4f" +dependencies = [ + "arrayvec", + "bit-set", + "bitflags 2.6.0", + "cfg_aliases 0.1.1", + "codespan-reporting", + "hexf-parse", + "indexmap", + "log", + "rustc-hash", + "spirv", + "termcolor", + "thiserror 1.0.69", + "unicode-xid", +] + [[package]] name = "native-tls" version = "0.2.12" @@ -1272,12 +2786,70 @@ dependencies = [ "tempfile", ] +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.6.0", + "jni-sys", + "log", + "ndk-sys 0.6.0+11769913", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.5.0+25.2.9519653" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys", +] + [[package]] name = "new_debug_unreachable" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "cfg_aliases 0.2.1", + "libc", + "memoffset", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + [[package]] name = "nom" version = "7.1.3" @@ -1358,6 +2930,240 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", +] + +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "objc-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" + +[[package]] +name = "objc2" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +dependencies = [ + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.6.0", + "block2", + "libc", + "objc2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-core-location", + "objc2-foundation", +] + +[[package]] +name = "objc2-contacts" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-image" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc2-core-location" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" +dependencies = [ + "block2", + "objc2", + "objc2-contacts", + "objc2-foundation", +] + +[[package]] +name = "objc2-encode" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" + +[[package]] +name = "objc2-foundation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" +dependencies = [ + "bitflags 2.6.0", + "block2", + "dispatch", + "libc", + "objc2", +] + +[[package]] +name = "objc2-link-presentation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" +dependencies = [ + "block2", + "objc2", + "objc2-app-kit", + "objc2-foundation", +] + +[[package]] +name = "objc2-metal" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc2-symbols" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-image", + "objc2-core-location", + "objc2-foundation", + "objc2-link-presentation", + "objc2-quartz-core", + "objc2-symbols", + "objc2-uniform-type-identifiers", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-uniform-type-identifiers" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-core-location", + "objc2-foundation", ] [[package]] @@ -1383,7 +3189,7 @@ checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ "bitflags 2.6.0", "cfg-if", - "foreign-types", + "foreign-types 0.3.2", "libc", "once_cell", "openssl-macros", @@ -1419,6 +3225,15 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "orbclient" +version = "0.3.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" +dependencies = [ + "libredox", +] + [[package]] name = "ordered-float" version = "4.3.0" @@ -1428,12 +3243,37 @@ dependencies = [ "num-traits", ] +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + [[package]] name = "overload" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +[[package]] +name = "owned_ttf_parser" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4" +dependencies = [ + "ttf-parser", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + [[package]] name = "parking_lot" version = "0.12.3" @@ -1452,9 +3292,9 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.5.7", "smallvec", - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -1469,6 +3309,32 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + +[[package]] +name = "pin-project" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "pin-project-lite" version = "0.2.14" @@ -1481,6 +3347,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + [[package]] name = "pkg-config" version = "0.3.31" @@ -1500,6 +3377,21 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "polling" +version = "3.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite", + "rustix", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -1515,6 +3407,15 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit", +] + [[package]] name = "proc-macro2" version = "1.0.92" @@ -1558,6 +3459,25 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" +[[package]] +name = "quick-xml" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quick-xml" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" +dependencies = [ + "memchr", +] + [[package]] name = "quote" version = "1.0.37" @@ -1627,7 +3547,7 @@ dependencies = [ "rand_chacha", "simd_helpers", "system-deps", - "thiserror 1.0.64", + "thiserror 1.0.69", "v_frame", "wasm-bindgen", ] @@ -1647,6 +3567,12 @@ dependencies = [ "rgb", ] +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + [[package]] name = "rayon" version = "1.10.0" @@ -1667,6 +3593,21 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "rctree" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f" + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "redox_syscall" version = "0.5.7" @@ -1676,6 +3617,17 @@ dependencies = [ "bitflags 2.6.0", ] +[[package]] +name = "reflink-copy" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17400ed684c3a0615932f00c271ae3eea13e47056a1455821995122348ab6438" +dependencies = [ + "cfg-if", + "rustix", + "windows", +] + [[package]] name = "regex" version = "1.11.0" @@ -1711,23 +3663,71 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +[[package]] +name = "renderdoc-sys" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper-rustls 0.24.2", + "ipnet", + "js-sys", + "log", + "mime", + "mime_guess", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls 0.21.12", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration 0.5.1", + "tokio", + "tokio-rustls 0.24.1", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", +] + [[package]] name = "reqwest" version = "0.12.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "encoding_rs", "futures-core", "futures-util", "h2 0.4.6", "http 1.1.0", - "http-body", + "http-body 1.0.1", "http-body-util", - "hyper", - "hyper-rustls", + "hyper 1.4.1", + "hyper-rustls 0.27.3", "hyper-tls", "hyper-util", "ipnet", @@ -1738,12 +3738,12 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pemfile", + "rustls-pemfile 2.2.0", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper", - "system-configuration", + "sync_wrapper 1.0.1", + "system-configuration 0.6.1", "tokio", "tokio-native-tls", "tower-service", @@ -1754,11 +3754,43 @@ dependencies = [ "windows-registry", ] +[[package]] +name = "reqwest-middleware" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a735987236a8e238bf0296c7e351b999c188ccc11477f311b82b55c93984216" +dependencies = [ + "anyhow", + "async-trait", + "http 0.2.12", + "reqwest 0.11.27", + "serde", + "task-local-extensions", + "thiserror 1.0.69", +] + +[[package]] +name = "resvg" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cadccb3d99a9efb8e5e00c16fbb732cbe400db2ec7fc004697ee7d97d86cf1f4" +dependencies = [ + "log", + "pico-args", + "rgb", + "svgtypes", + "tiny-skia", + "usvg", +] + [[package]] name = "rgb" version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" +dependencies = [ + "bytemuck", +] [[package]] name = "ring" @@ -1775,12 +3807,24 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "roxmltree" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f" + [[package]] name = "rustc-demangle" version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc_version" version = "0.4.1" @@ -1803,6 +3847,18 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", +] + [[package]] name = "rustls" version = "0.23.14" @@ -1811,11 +3867,20 @@ checksum = "415d9944693cb90382053259f89fbb077ea730ad7273047ec63b19bc9b160ba8" dependencies = [ "once_cell", "rustls-pki-types", - "rustls-webpki", + "rustls-webpki 0.102.8", "subtle", "zeroize", ] +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + [[package]] name = "rustls-pemfile" version = "2.2.0" @@ -1831,6 +3896,16 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e696e35370c65c9c541198af4543ccd580cf17fc25d8e05c5a242b202488c55" +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustls-webpki" version = "0.102.8" @@ -1848,6 +3923,15 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "schannel" version = "0.1.26" @@ -1857,12 +3941,41 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sctk-adwaita" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" +dependencies = [ + "ab_glyph", + "log", + "memmap2 0.9.5", + "smithay-client-toolkit", + "tiny-skia", +] + [[package]] name = "security-framework" version = "2.11.1" @@ -1870,7 +3983,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.6.0", - "core-foundation", + "core-foundation 0.9.4", "core-foundation-sys", "libc", "security-framework-sys", @@ -1924,6 +4037,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "serde_spanned" version = "0.6.8" @@ -1945,6 +4069,17 @@ dependencies = [ "serde", ] +[[package]] +name = "sha-1" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sha1" version = "0.10.6" @@ -1956,6 +4091,17 @@ dependencies = [ "digest", ] +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -2001,6 +4147,21 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" +[[package]] +name = "simplecss" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a11be7c62927d9427e9f40f3444d5499d868648e2edbc4e2116de69e7ec0e89d" +dependencies = [ + "log", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + [[package]] name = "slab" version = "0.4.9" @@ -2010,12 +4171,66 @@ dependencies = [ "autocfg", ] +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "version_check", +] + [[package]] name = "smallvec" version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +[[package]] +name = "smithay-client-toolkit" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" +dependencies = [ + "bitflags 2.6.0", + "calloop", + "calloop-wayland-source", + "cursor-icon", + "libc", + "log", + "memmap2 0.9.5", + "rustix", + "thiserror 1.0.69", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols", + "wayland-protocols-wlr", + "wayland-scanner", + "xkeysym", +] + +[[package]] +name = "smithay-clipboard" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" +dependencies = [ + "libc", + "smithay-client-toolkit", + "wayland-backend", +] + +[[package]] +name = "smol_str" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" +dependencies = [ + "serde", +] + [[package]] name = "socket2" version = "0.5.7" @@ -2032,12 +4247,63 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "spirv" +version = "0.3.0+sdk-1.3.268.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "ssri" +version = "9.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7a2b3c2bc9693bcb40870c4e9b5bf0d79f9cb46273321bf855ec513e919082" +dependencies = [ + "base64 0.21.7", + "digest", + "hex", + "miette", + "serde", + "sha-1", + "sha2", + "thiserror 1.0.69", + "xxhash-rust", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" +dependencies = [ + "float-cmp", +] + [[package]] name = "subtle" version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +[[package]] +name = "svgtypes" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e44e288cd960318917cbd540340968b90becc8bc81f171345d706e7a89d9d70" +dependencies = [ + "kurbo", + "siphasher", +] + [[package]] name = "syn" version = "2.0.93" @@ -2049,6 +4315,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "sync_wrapper" version = "1.0.1" @@ -2058,6 +4330,17 @@ dependencies = [ "futures-core", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "system-configuration-sys 0.5.0", +] + [[package]] name = "system-configuration" version = "0.6.1" @@ -2065,8 +4348,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ "bitflags 2.6.0", - "core-foundation", - "system-configuration-sys", + "core-foundation 0.9.4", + "system-configuration-sys 0.6.0", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", ] [[package]] @@ -2098,6 +4391,15 @@ version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" +[[package]] +name = "task-local-extensions" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba323866e5d033818e3240feeb9f7db2c4296674e4d9e16b97b7bf8f490434e8" +dependencies = [ + "pin-utils", +] + [[package]] name = "tempfile" version = "3.13.0" @@ -2112,12 +4414,21 @@ dependencies = [ ] [[package]] -name = "thiserror" -version = "1.0.64" +name = "termcolor" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ - "thiserror-impl 1.0.64", + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", ] [[package]] @@ -2131,9 +4442,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "1.0.64" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", @@ -2223,6 +4534,32 @@ dependencies = [ "time-core", ] +[[package]] +name = "tiny-skia" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "png", + "tiny-skia-path", +] + +[[package]] +name = "tiny-skia-path" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + [[package]] name = "tinyvec" version = "1.8.0" @@ -2252,9 +4589,21 @@ dependencies = [ "pin-project-lite", "signal-hook-registry", "socket2", + "tokio-macros", "windows-sys 0.52.0", ] +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tokio-native-tls" version = "0.3.1" @@ -2265,17 +4614,38 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + [[package]] name = "tokio-rustls" version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls", + "rustls 0.23.14", "rustls-pki-types", "tokio", ] +[[package]] +name = "tokio-stream" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-util" version = "0.7.12" @@ -2393,12 +4763,44 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "ttf-parser" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" + +[[package]] +name = "type-map" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" +dependencies = [ + "rustc-hash", +] + [[package]] name = "typenum" version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "uds_windows" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +dependencies = [ + "memoffset", + "tempfile", + "winapi", +] + +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + [[package]] name = "unicode-bidi" version = "0.3.17" @@ -2420,6 +4822,24 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + [[package]] name = "untrusted" version = "0.9.0" @@ -2435,6 +4855,51 @@ dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", +] + +[[package]] +name = "usvg" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b0a51b72ab80ca511d126b77feeeb4fb1e972764653e61feac30adc161a756" +dependencies = [ + "base64 0.21.7", + "log", + "pico-args", + "usvg-parser", + "usvg-tree", + "xmlwriter", +] + +[[package]] +name = "usvg-parser" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd4e3c291f45d152929a31f0f6c819245e2921bfd01e7bd91201a9af39a2bdc" +dependencies = [ + "data-url", + "flate2", + "imagesize", + "kurbo", + "log", + "roxmltree", + "simplecss", + "siphasher", + "svgtypes", + "usvg-tree", +] + +[[package]] +name = "usvg-tree" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee3d202ebdb97a6215604b8f5b4d6ef9024efd623cf2e373a6416ba976ec7d3" +dependencies = [ + "rctree", + "strict-num", + "svgtypes", + "tiny-skia-path", ] [[package]] @@ -2472,6 +4937,37 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "walkers" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ca9bf7f5ff8a6d57de654d06fb25e5c6d60e0acc7e938d6fc15324b8e22a2f" +dependencies = [ + "egui", + "egui_extras", + "futures", + "geo-types", + "http-cache-reqwest", + "image", + "log", + "lru", + "reqwest 0.11.27", + "reqwest-middleware", + "thiserror 2.0.9", + "tokio", + "wasm-bindgen-futures", +] + [[package]] name = "want" version = "0.3.1" @@ -2489,9 +4985,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.94" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef073ced962d62984fb38a36e5fdc1a2b23c9e0e1fa0689bb97afa4202ef6887" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", "once_cell", @@ -2500,13 +4996,12 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.94" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4bfab14ef75323f4eb75fa52ee0a3fb59611977fd3240da19b2cf36ff85030e" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", "syn", @@ -2515,21 +5010,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.44" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65471f79c1022ffa5291d33520cbbb53b7687b01c2f8e83b57d102eed7ed479d" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.94" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7bec9830f60924d9ceb3ef99d55c155be8afa76954edffbb5936ff4509474e7" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2537,9 +5033,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.94" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c74f6e152a76a2ad448e223b0fc0b6b5747649c3d769cc6bf45737bf97d0ed6" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", @@ -2550,26 +5046,269 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.94" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a42f6c679374623f295a8623adfe63d9284091245c3504bde47c17a3ce2777d9" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" + +[[package]] +name = "wayland-backend" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "056535ced7a150d45159d3a8dc30f91a2e2d588ca0b23f70e56033622b8016f6" +dependencies = [ + "cc", + "downcast-rs", + "rustix", + "scoped-tls", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-client" +version = "0.31.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66249d3fc69f76fd74c82cc319300faa554e9d865dab1f7cd66cc20db10b280" +dependencies = [ + "bitflags 2.6.0", + "rustix", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-csd-frame" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" +dependencies = [ + "bitflags 2.6.0", + "cursor-icon", + "wayland-backend", +] + +[[package]] +name = "wayland-cursor" +version = "0.31.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b08bc3aafdb0035e7fe0fdf17ba0c09c268732707dca4ae098f60cb28c9e4c" +dependencies = [ + "rustix", + "wayland-client", + "xcursor", +] + +[[package]] +name = "wayland-protocols" +version = "0.32.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd0ade57c4e6e9a8952741325c30bf82f4246885dca8bf561898b86d0c1f58e" +dependencies = [ + "bitflags 2.6.0", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-plasma" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b31cab548ee68c7eb155517f2212049dc151f7cd7910c2b66abfd31c3ee12bd" +dependencies = [ + "bitflags 2.6.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "782e12f6cd923c3c316130d56205ebab53f55d6666b7faddfad36cecaeeb4022" +dependencies = [ + "bitflags 2.6.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.31.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597f2001b2e5fc1121e3d5b9791d3e78f05ba6bfa4641053846248e3a13661c3" +dependencies = [ + "proc-macro2", + "quick-xml 0.36.2", + "quote", +] + +[[package]] +name = "wayland-sys" +version = "0.31.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efa8ac0d8e8ed3e3b5c9fc92c7881406a268e11555abe36493efabe649a29e09" +dependencies = [ + "dlib", + "log", + "once_cell", + "pkg-config", +] [[package]] name = "web-sys" -version = "0.3.71" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44188d185b5bdcae1052d08bcbcf9091a5524038d4572cc4f4f2bb9d5554ddd9" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" dependencies = [ "js-sys", "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webbrowser" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea9fe1ebb156110ff855242c1101df158b822487e4957b0556d9ffce9db0f535" +dependencies = [ + "block2", + "core-foundation 0.10.0", + "home", + "jni", + "log", + "ndk-context", + "objc2", + "objc2-foundation", + "url", + "web-sys", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + [[package]] name = "weezl" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" +[[package]] +name = "wgpu" +version = "23.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80f70000db37c469ea9d67defdc13024ddf9a5f1b89cb2941b812ad7cde1735a" +dependencies = [ + "arrayvec", + "cfg_aliases 0.1.1", + "document-features", + "js-sys", + "log", + "parking_lot", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "23.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d63c3c478de8e7e01786479919c8769f62a22eec16788d8c2ac77ce2c132778a" +dependencies = [ + "arrayvec", + "bit-vec", + "bitflags 2.6.0", + "cfg_aliases 0.1.1", + "document-features", + "indexmap", + "log", + "naga", + "once_cell", + "parking_lot", + "profiling", + "raw-window-handle", + "rustc-hash", + "smallvec", + "thiserror 1.0.69", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-hal" +version = "23.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89364b8a0b211adc7b16aeaf1bd5ad4a919c1154b44c9ce27838213ba05fd821" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bitflags 2.6.0", + "bytemuck", + "cfg_aliases 0.1.1", + "core-graphics-types", + "glow 0.14.2", + "glutin_wgl_sys", + "gpu-alloc", + "gpu-descriptor", + "js-sys", + "khronos-egl", + "libc", + "libloading", + "log", + "metal", + "naga", + "ndk-sys 0.5.0+25.2.9519653", + "objc", + "once_cell", + "parking_lot", + "profiling", + "raw-window-handle", + "renderdoc-sys", + "rustc-hash", + "smallvec", + "thiserror 1.0.69", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "windows", +] + +[[package]] +name = "wgpu-types" +version = "23.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "610f6ff27778148c31093f3b03abc4840f9636d58d597ca2f5977433acfe0068" +dependencies = [ + "bitflags 2.6.0", + "js-sys", + "web-sys", +] + [[package]] name = "winapi" version = "0.3.9" @@ -2586,12 +5325,66 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +dependencies = [ + "windows-core", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-registry" version = "0.2.0" @@ -2600,7 +5393,7 @@ checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ "windows-result", "windows-strings", - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -2609,7 +5402,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -2619,7 +5412,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" dependencies = [ "windows-result", - "windows-targets", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", ] [[package]] @@ -2628,7 +5439,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -2637,7 +5448,37 @@ version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] @@ -2646,28 +5487,64 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -2680,30 +5557,130 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "winit" +version = "0.30.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dba50bc8ef4b6f1a75c9274fb95aa9a8f63fbc66c56f391bd85cf68d51e7b1a3" +dependencies = [ + "ahash", + "android-activity", + "atomic-waker", + "bitflags 2.6.0", + "block2", + "bytemuck", + "calloop", + "cfg_aliases 0.2.1", + "concurrent-queue", + "core-foundation 0.9.4", + "core-graphics", + "cursor-icon", + "dpi", + "js-sys", + "libc", + "memmap2 0.9.5", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "orbclient", + "percent-encoding", + "pin-project", + "raw-window-handle", + "redox_syscall 0.4.1", + "rustix", + "sctk-adwaita", + "smithay-client-toolkit", + "smol_str", + "tracing", + "unicode-segmentation", + "wasm-bindgen", + "wasm-bindgen-futures", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-plasma", + "web-sys", + "web-time", + "windows-sys 0.52.0", + "x11-dl", + "x11rb", + "xkbcommon-dl", +] + [[package]] name = "winnow" version = "0.6.21" @@ -2713,6 +5690,16 @@ dependencies = [ "memchr", ] +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + [[package]] name = "wxbox-grib2" version = "0.1.0" @@ -2728,7 +5715,7 @@ name = "wxbox-pal" version = "0.1.0" dependencies = [ "ordered-float", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -2738,13 +5725,15 @@ dependencies = [ "actix-web", "approx", "flate2", + "image", "insta", "mime", "ordered-float", "png", - "reqwest", + "reqwest 0.12.8", "serde", - "thiserror 1.0.64", + "serde_json", + "thiserror 1.0.69", "tikv-jemallocator", "tokio", "toml", @@ -2752,6 +5741,224 @@ dependencies = [ "tracing-subscriber", "wxbox-grib2", "wxbox-pal", + "wxbox_common", +] + +[[package]] +name = "wxbox_client" +version = "0.1.0" +dependencies = [ + "eframe", + "egui", + "egui_extras", + "serde_json", + "walkers", + "wxbox_common", +] + +[[package]] +name = "wxbox_client_native" +version = "0.1.0" +dependencies = [ + "eframe", + "egui", + "tracing-subscriber", + "wxbox_client", +] + +[[package]] +name = "wxbox_client_wasm" +version = "0.1.0" + +[[package]] +name = "wxbox_common" +version = "0.1.0" +dependencies = [ + "serde", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" +dependencies = [ + "as-raw-xcb-connection", + "gethostname", + "libc", + "libloading", + "once_cell", + "rustix", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" + +[[package]] +name = "xcursor" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61" + +[[package]] +name = "xdg-home" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "xkbcommon-dl" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" +dependencies = [ + "bitflags 2.6.0", + "dlib", + "log", + "once_cell", + "xkeysym", +] + +[[package]] +name = "xkeysym" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" + +[[package]] +name = "xml-rs" +version = "0.8.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea8b391c9a790b496184c29f7f93b9ed5b16abb306c05415b68bcc16e4d06432" + +[[package]] +name = "xmlwriter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" + +[[package]] +name = "xxhash-rust" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" + +[[package]] +name = "zbus" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix", + "ordered-stream", + "rand", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "windows-sys 0.52.0", + "xdg-home", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus-lockstep" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca2c5dceb099bddaade154055c926bb8ae507a18756ba1d8963fd7b51d8ed1d" +dependencies = [ + "zbus_xml", + "zvariant", +] + +[[package]] +name = "zbus-lockstep-macros" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709ab20fc57cb22af85be7b360239563209258430bccf38d8b979c5a2ae3ecce" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "zbus-lockstep", + "zbus_xml", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + +[[package]] +name = "zbus_xml" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab3f374552b954f6abb4bd6ce979e6c9b38fb9d0cd7cc68a7d796e70c9f3a233" +dependencies = [ + "quick-xml 0.30.0", + "serde", + "static_assertions", + "zbus_names", + "zvariant", ] [[package]] @@ -2832,3 +6039,40 @@ checksum = "99a5bab8d7dedf81405c4bb1f2b83ea057643d9cb28778cea9eecddeedd2e028" dependencies = [ "zune-core", ] + +[[package]] +name = "zvariant" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" +dependencies = [ + "endi", + "enumflags2", + "serde", + "static_assertions", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml index 61b1384..6a8c54e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [workspace] resolver = "2" -members = [ "wxbox-grib2","wxbox-pal","wxbox-tiler"] +members = [ "wxbox-grib2","wxbox-pal","wxbox-tiler", "wxbox_client", "wxbox_client_native", "wxbox_client_wasm", "wxbox_common"] [profile.release] codegen-units = 1 @@ -9,4 +9,4 @@ lto = "fat" [profile.dev.package.image] opt-level = 3 [profile.dev.package.png] -opt-level = 3 \ No newline at end of file +opt-level = 3 diff --git a/config.toml b/config.toml index 6941b58..6144703 100644 --- a/config.toml +++ b/config.toml @@ -1,5 +1,5 @@ [sources.grib2.noaa_mrms_merged_composite_reflectivity_qc] -from = "https://mrms.ncep.noaa.gov/data/2D/HAWAII/MergedReflectivityQCComposite/MRMS_MergedReflectivityQCComposite.latest.grib2.gz" +from = "https://mrms.ncep.noaa.gov/data/2D/MergedReflectivityQCComposite/MRMS_MergedReflectivityQCComposite.latest.grib2.gz" needs_gzip = true valid_for = 120 palette = """ diff --git a/wxbox-tiler/Cargo.toml b/wxbox-tiler/Cargo.toml index eb71b27..0796734 100644 --- a/wxbox-tiler/Cargo.toml +++ b/wxbox-tiler/Cargo.toml @@ -21,6 +21,9 @@ tracing = "0.1" tracing-subscriber = "0.3" toml = "0.8" serde = { version = "1", features = ["derive"] } +serde_json = "1" +wxbox_common = { path = "../wxbox_common" } +image = "0.25" [dev-dependencies] approx = "0.5" diff --git a/wxbox-tiler/src/main.rs b/wxbox-tiler/src/main.rs index 4a2daf0..cc038f9 100644 --- a/wxbox-tiler/src/main.rs +++ b/wxbox-tiler/src/main.rs @@ -36,7 +36,7 @@ async fn main() -> std::io::Result<()> { }); HttpServer::new(move || { App::new() - .service(sources::grib2::grib2_source) + .service(sources::grib2::source) .app_data(data.clone()) }) .bind(("::", 8080))? diff --git a/wxbox-tiler/src/sources/grib2.rs b/wxbox-tiler/src/sources/grib2.rs index dab71a9..b69ac41 100644 --- a/wxbox-tiler/src/sources/grib2.rs +++ b/wxbox-tiler/src/sources/grib2.rs @@ -6,14 +6,19 @@ use std::time::SystemTime; use actix_web::error::UrlencodedError::ContentType; use actix_web::http::StatusCode; use actix_web::HttpResponse; -use actix_web::web::Data; +use actix_web::web::{Data, Query}; use flate2::read::GzDecoder; use png::{BitDepth, ColorType, Encoder}; +use serde::Deserialize; use tokio::sync::RwLock; +use wxbox_common::TileRequestOptions; +use image::{ImageFormat, ImageReader}; +use reqwest::ClientBuilder; use wxbox_grib2::GribMessage; use wxbox_grib2::wgs84::LatLong; use wxbox_pal::{Color, ColorPalette, Palette}; use crate::AppState; +use tracing::debug; use crate::config::Grib2Source; use crate::pixmap::Pixmap; @@ -69,7 +74,7 @@ pub async fn reload_if_required(from: &str, needs_gzip: bool, valid_for: u64, lu const TWO_PI: f64 = PI * 2.0; const HALF_PI: f64 = PI / 2.0; -pub async fn render(xtile: f64, ytile: f64, z: i32, tilesize: usize, pal: Palette, map: &Arc>, missing: Option, range_folded: Option, no_coverage: Option) -> Vec { +pub async fn render(xtile: f64, ytile: f64, z: i32, tilesize: usize, pal: Palette, map: &Arc>, missing: Option, range_folded: Option, no_coverage: Option) -> Pixmap { let mut image: Pixmap = Pixmap::new(); let denominator = 2.0_f64.powi(z) * tilesize as f64; @@ -106,12 +111,127 @@ pub async fn render(xtile: f64, ytile: f64, z: i32, tilesize: usize, pal: Palett } } + image +} + +#[derive(Deserialize)] +struct QueryReq { + settings: String +} + +fn colorf64(i: u8) -> f64 { + i as f64 / u8::MAX as f64 +} +fn coloru8(i: f64) -> u8 { + (i * u8::MAX as f64).floor() as u8 +} + +pub fn merge(base: Pixmap, data: Pixmap, settings: &TileRequestOptions) -> Pixmap { + let mut new = Pixmap::new(); + + let a = settings.data_transparency; + + for x in 0..256 { + for y in 0..256 { + let lower = base.get(x, y); + let upper = data.get(x, y); + + let lr = colorf64(lower.red); + let lg = colorf64(lower.green); + let lb = colorf64(lower.blue); + + let ur = colorf64(upper.red); + let ug = colorf64(upper.green); + let ub = colorf64(lower.blue); + + new.set(x, y, Color { + red: coloru8(lr + (lr - ur * a).abs()), + green: coloru8(lg + (lg - ug * a).abs()), + blue: coloru8(lb + (lb - ub * a).abs()), + alpha: 255 + }); + } + } + + new +} + +#[actix_web::get("/{z}/{x}/{y}.png")] +pub async fn source(path: actix_web::web::Path<(i32, u32, u32)>, req: Query, data: Data) -> HttpResponse { + let settings: TileRequestOptions = serde_json::from_str(&req.settings).unwrap(); + + // todo: load the base layer from external source + let base_layer = Pixmap::new(); + + let base_layer: Pixmap = if settings.baselayer == "osm" { + let client = ClientBuilder::new() + .user_agent(format!("wxbox-tiler/{}", env!("CARGO_PKG_VERSION"))) + .build().unwrap(); + let body = client.get(format!("https://tile.openstreetmap.org/{}/{}/{}.png", path.0, path.1, path.2)) + .send() + .await.unwrap().bytes().await.unwrap(); + let mut img = ImageReader::new(Cursor::new(body.to_vec())); + img.set_format(ImageFormat::Png); + let img = img.decode().unwrap(); + let rgb = img.into_rgba8(); + // copy it into a pixmap + let mut map = Pixmap::new(); + for x in 0..256_usize { + for y in 0..256_usize { + let pix = rgb.get_pixel(255 - x as u32, y as u32); + map.set(x, y, Color { + red: pix[0], + green: pix[1], + blue: pix[2], + alpha: pix[3] + }); + } + } + map + } else { + debug!("not found baselayer"); + return HttpResponse::new(StatusCode::NOT_FOUND) + }; + + // data layer + // valid types: + // - grib2/ + + let data_layer: Pixmap = if settings.data.starts_with("grib2/") { + if let Some(known_source) = data.config.sources.grib2.get(settings.data.strip_prefix("grib2/").unwrap()) { + reload_if_required( + &known_source.from, + known_source.needs_gzip, + known_source.valid_for.into(), + &settings.data, + &data.grib2_cache_timestamps, + &data.grib2_cache + ).await; + let lct_reader = data.grib2_cache_timestamps.read().await; + if let Some(grib2) = data.grib2_cache.read().await.get(&settings.data) { + crate::sources::grib2::render(path.1 as f64, path.2 as f64, path.0, 256, wxbox_pal::parser::parse(&known_source.palette).unwrap(), grib2, known_source.missing, known_source.range_folded, known_source.no_coverage).await + } else { + debug!("not found grib2 after reload in base cache"); + return HttpResponse::new(StatusCode::NOT_FOUND) + } + } else { + debug!("not found grib2 in configuration"); + return HttpResponse::new(StatusCode::NOT_FOUND) + } + } else { + debug!("not found datalayer registry"); + return HttpResponse::new(StatusCode::NOT_FOUND) + }; + + //let image = merge(base_layer, data_layer, &settings); + let image = base_layer; + let mut buf: Vec = vec![]; // borrow checker insanity { let mut cur: Cursor<_> = Cursor::new(&mut buf); let w = &mut BufWriter::new(&mut cur); - let mut encoder = Encoder::new(w, tilesize as u32, tilesize as u32); + let mut encoder = Encoder::new(w, 256, 256); encoder.set_color(ColorType::Rgba); encoder.set_depth(BitDepth::Eight); encoder.set_source_gamma(png::ScaledFloat::from_scaled(45455)); @@ -128,36 +248,14 @@ pub async fn render(xtile: f64, ytile: f64, z: i32, tilesize: usize, pal: Palett writer.finish().unwrap(); } - buf -} - -#[actix_web::get("/grib2/{id}/{z}/{x}/{y}.png")] -pub async fn grib2_source(path: actix_web::web::Path<(String, i32, u32, u32)>, data: Data) -> HttpResponse { - if let Some(known_source) = data.config.sources.grib2.get(&path.0) { - reload_if_required( - &known_source.from, - known_source.needs_gzip, - known_source.valid_for.into(), - &path.0, - &data.grib2_cache_timestamps, - &data.grib2_cache - ).await; - let lct_reader = data.grib2_cache_timestamps.read().await; - if let Some(grib2) = data.grib2_cache.read().await.get(&path.0) { - HttpResponse::Ok() - .insert_header(actix_web::http::header::ContentType(mime::IMAGE_PNG)) - // TODO: use the timestamp in the grib2 ID section - .insert_header(("x-wxbox-tiler-data-valid-time", lct_reader.get(&path.0).expect("impossible").duration_since(::std::time::UNIX_EPOCH).expect("time went backwards").as_secs().to_string())) - .insert_header(("Access-Control-Allow-Origin", "*")) - .insert_header(("Access-Control-Expose-Headers", "*")) - .insert_header(("Access-Control-Allow-Headers", "*")) - .body(crate::sources::grib2::render(path.2 as f64, path.3 as f64, path.1, 256, wxbox_pal::parser::parse(&known_source.palette).unwrap(), grib2, known_source.missing, known_source.range_folded, known_source.no_coverage).await) - } else { - HttpResponse::new(StatusCode::NOT_FOUND) - } - } else { - HttpResponse::new(StatusCode::NOT_FOUND) - } + HttpResponse::Ok() + .insert_header(actix_web::http::header::ContentType(mime::IMAGE_PNG)) + // TODO: use the timestamp in the grib2 ID section + //.insert_header(("x-wxbox-tiler-data-valid-time", lct_reader.get(&settings.data).expect("impossible").duration_since(::std::time::UNIX_EPOCH).expect("time went backwards").as_secs().to_string())) + .insert_header(("Access-Control-Allow-Origin", "*")) + .insert_header(("Access-Control-Expose-Headers", "*")) + .insert_header(("Access-Control-Allow-Headers", "*")) + .body(buf) } /* #[macro_export] diff --git a/wxbox-web/.dockerignore b/wxbox-web/.dockerignore deleted file mode 100644 index 835654a..0000000 --- a/wxbox-web/.dockerignore +++ /dev/null @@ -1,16 +0,0 @@ -node_modules -Dockerfile* -docker-compose* -.dockerignore -.git -.gitignore -README.md -LICENSE -.vscode -Makefile -helm-charts -.env -.editorconfig -.idea -cogerage* -target* diff --git a/wxbox-web/.env.example b/wxbox-web/.env.example deleted file mode 100644 index e8a45c3..0000000 --- a/wxbox-web/.env.example +++ /dev/null @@ -1,2 +0,0 @@ -# Base url of your wxbox-tiler instance -PUBLIC_TILER_URL_BASE="" \ No newline at end of file diff --git a/wxbox-web/.gitignore b/wxbox-web/.gitignore deleted file mode 100644 index 79518f7..0000000 --- a/wxbox-web/.gitignore +++ /dev/null @@ -1,21 +0,0 @@ -node_modules - -# Output -.output -.vercel -/.svelte-kit -/build - -# OS -.DS_Store -Thumbs.db - -# Env -.env -.env.* -!.env.example -!.env.test - -# Vite -vite.config.js.timestamp-* -vite.config.ts.timestamp-* diff --git a/wxbox-web/.npmrc b/wxbox-web/.npmrc deleted file mode 100644 index b6f27f1..0000000 --- a/wxbox-web/.npmrc +++ /dev/null @@ -1 +0,0 @@ -engine-strict=true diff --git a/wxbox-web/.prettierignore b/wxbox-web/.prettierignore deleted file mode 100644 index ab78a95..0000000 --- a/wxbox-web/.prettierignore +++ /dev/null @@ -1,4 +0,0 @@ -# Package Managers -package-lock.json -pnpm-lock.yaml -yarn.lock diff --git a/wxbox-web/.prettierrc b/wxbox-web/.prettierrc deleted file mode 100644 index 3f7802c..0000000 --- a/wxbox-web/.prettierrc +++ /dev/null @@ -1,15 +0,0 @@ -{ - "useTabs": true, - "singleQuote": true, - "trailingComma": "none", - "printWidth": 100, - "plugins": ["prettier-plugin-svelte"], - "overrides": [ - { - "files": "*.svelte", - "options": { - "parser": "svelte" - } - } - ] -} diff --git a/wxbox-web/Dockerfile b/wxbox-web/Dockerfile deleted file mode 100644 index 49312f3..0000000 --- a/wxbox-web/Dockerfile +++ /dev/null @@ -1,23 +0,0 @@ -FROM oven/bun:1 AS base -WORKDIR /usr/src/app - -FROM base AS install -RUN mkdir -p /tmp/dev -COPY package.json bun.lockb /tmp/dev -RUN cd /tmp/dev && bun install --frozen-lockfile - -RUN mkdir -p /tmp/prod -COPY package.json bun.lockb /tmp/prod -RUN cd /tmp/prod && bun install --frozen-lockfile --production - -FROM base AS release -COPY --from=install /tmp/dev/node_modules node_modules -COPY . . - -ENV NODE_ENV=production -RUN bun test -RUN bun run build - -USER bun -EXPOSE 3000/tcp -ENTRYPOINT [ "bun", "--bun", "run", "./build" ] diff --git a/wxbox-web/README.md b/wxbox-web/README.md deleted file mode 100644 index abd6f21..0000000 --- a/wxbox-web/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# create-svelte - -Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/main/packages/create-svelte). - -## Creating a project - -If you're seeing this, you've probably already done this step. Congrats! - -```bash -# create a new project in the current directory -npx sv create - -# create a new project in my-app -npx sv create my-app -``` - -## Developing - -Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: - -```bash -npm run dev - -# or start the server and open the app in a new browser tab -npm run dev -- --open -``` - -## Building - -To create a production version of your app: - -```bash -npm run build -``` - -You can preview the production build with `npm run preview`. - -> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment. diff --git a/wxbox-web/bun.lockb b/wxbox-web/bun.lockb deleted file mode 100755 index 2e36842b15ff53ae2dea209c812179cc46f890d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96055 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 Av;Y7A diff --git a/wxbox-web/eslint.config.js b/wxbox-web/eslint.config.js deleted file mode 100644 index a526565..0000000 --- a/wxbox-web/eslint.config.js +++ /dev/null @@ -1,33 +0,0 @@ -import prettier from 'eslint-config-prettier'; -import js from '@eslint/js'; -import svelte from 'eslint-plugin-svelte'; -import globals from 'globals'; -import ts from 'typescript-eslint'; - -export default ts.config( - js.configs.recommended, - ...ts.configs.recommended, - ...svelte.configs['flat/recommended'], - prettier, - ...svelte.configs['flat/prettier'], - { - languageOptions: { - globals: { - ...globals.browser, - ...globals.node - } - } - }, - { - files: ['**/*.svelte'], - - languageOptions: { - parserOptions: { - parser: ts.parser - } - } - }, - { - ignores: ['build/', '.svelte-kit/', 'dist/'] - } -); diff --git a/wxbox-web/package.json b/wxbox-web/package.json deleted file mode 100644 index ce9c825..0000000 --- a/wxbox-web/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "wxbox-web", - "version": "0.0.1", - "type": "module", - "scripts": { - "dev": "vite dev", - "build": "vite build", - "preview": "vite preview", - "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "eslint . && prettier --check .", - "format": "prettier --write ." - }, - "devDependencies": { - "@sveltejs/adapter-auto": "^3.3.1", - "@sveltejs/adapter-node": "^5.2.11", - "@sveltejs/kit": "^2.7.3", - "@sveltejs/vite-plugin-svelte": "^4.0.0", - "@types/eslint": "^9.6.1", - "@types/leaflet": "^1.9.14", - "eslint": "^9.13.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-svelte": "^2.46.0", - "globals": "^15.11.0", - "prettier": "^3.3.3", - "prettier-plugin-svelte": "^3.2.7", - "svelte": "^5.1.3", - "svelte-check": "^4.0.5", - "typescript": "^5.6.3", - "typescript-eslint": "^8.11.0", - "vite": "^5.4.10" - }, - "dependencies": { - "leaflet": "^1.9.4", - "leaflet.sync": "^0.2.4" - } -} diff --git a/wxbox-web/src/app.d.ts b/wxbox-web/src/app.d.ts deleted file mode 100644 index da08e6d..0000000 --- a/wxbox-web/src/app.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -// See https://svelte.dev/docs/kit/types#app.d.ts -// for information about these interfaces -declare global { - namespace App { - // interface Error {} - // interface Locals {} - // interface PageData {} - // interface PageState {} - // interface Platform {} - } -} - -export {}; diff --git a/wxbox-web/src/app.html b/wxbox-web/src/app.html deleted file mode 100644 index 77a5ff5..0000000 --- a/wxbox-web/src/app.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - %sveltekit.head% - - -
%sveltekit.body%
- - diff --git a/wxbox-web/src/lib/color.ts b/wxbox-web/src/lib/color.ts deleted file mode 100644 index b134021..0000000 --- a/wxbox-web/src/lib/color.ts +++ /dev/null @@ -1,12 +0,0 @@ -export function strToColor(str: string): string { - let hash = 0; - str.split('').forEach(char => { - hash = char.charCodeAt(0) + ((hash << 5) - hash) - }) - let colour = '#' - for (let i = 0; i < 3; i++) { - const value = (hash >> (i * 8)) & 0xff - colour += value.toString(16).padStart(2, '0') - } - return colour -} \ No newline at end of file diff --git a/wxbox-web/src/lib/global.css b/wxbox-web/src/lib/global.css deleted file mode 100644 index 9e95488..0000000 --- a/wxbox-web/src/lib/global.css +++ /dev/null @@ -1,55 +0,0 @@ -:root { - --size-0: 0px; - --size-px: 1px; - --size-0_5: 0.125rem; - --size-1: 0.25rem; - --size-1_5: 0.375rem; - --size-2: 0.5rem; - --size-2_5: 0.625rem; - --size-3: 0.75rem; - --size-3_5: 0.875rem; - --size-4: 1rem; - --size-5: 1.25rem; - --size-6: 1.5rem; - --size-7: 1.75rem; - --size-8: 2rem; - --size-9: 2.25rem; - --size-10: 2.5rem; - --size-11: 2.75rem; - --size-12: 3rem; - --size-14: 3.5rem; - --size-16: 4rem; - --size-20: 5rem; - --size-24: 6rem; - --size-28: 7rem; - --size-32: 8rem; - --size-36: 9rem; - --size-40: 10rem; - --size-44: 11rem; - --size-48: 12rem; - --size-52: 13rem; - --size-56: 14rem; - --size-60: 15rem; - --size-64: 16rem; - --size-72: 18rem; - --size-80: 20rem; - --size-96: 24rem; -} - -html { - font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-size: 1rem; - line-height: 1.5rem; - margin: 0; -} - -body { - margin: 0; - background-color: #000; - color: #fff; -} - -.text-sm { - font-size: 0.875rem; - line-height: 1.25rem; -} \ No newline at end of file diff --git a/wxbox-web/src/lib/map/Map.svelte b/wxbox-web/src/lib/map/Map.svelte deleted file mode 100644 index 0d495ba..0000000 --- a/wxbox-web/src/lib/map/Map.svelte +++ /dev/null @@ -1,170 +0,0 @@ - - -
- - diff --git a/wxbox-web/src/lib/map/index.ts b/wxbox-web/src/lib/map/index.ts deleted file mode 100644 index f619947..0000000 --- a/wxbox-web/src/lib/map/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -// There is no good-looking three-pane view -export type View = 'one' | 'two' | 'four'; diff --git a/wxbox-web/src/lib/map/layer.ts b/wxbox-web/src/lib/map/layer.ts deleted file mode 100644 index 71e997b..0000000 --- a/wxbox-web/src/lib/map/layer.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { env } from '$env/dynamic/public'; - -export interface MutexLayerSet { - map1: ValidOpts; - map2: ValidOpts; - map3: ValidOpts; - map4: ValidOpts; -} -export interface OverlayLayerSet { - map1: ValidOpts[]; - map2: ValidOpts[]; - map3: ValidOpts[]; - map4: ValidOpts[]; -} - -export type BaseLayers = 'osm'; -export type DataLayers = 'grib2/noaa_mrms_merged_composite_reflectivity_qc'; - -export function tilerLayerUrl(id: DataLayers): string { - if (!env.PUBLIC_TILER_URL_BASE) { - throw new Error('PUBLIC_TILER_URL_BASE env var not set!'); - } - const base = new URL(env.PUBLIC_TILER_URL_BASE); - return (base + `${id}/{z}/{x}/{y}.png`).toString(); -} -export function tilerLayerAttribution(id: DataLayers): string { - let base; - if (id === 'grib2/noaa_mrms_merged_composite_reflectivity_qc') { - base = '© NOAA'; - } - return base + ', © wxbox'; -} diff --git a/wxbox-web/src/lib/map/sync.svelte.ts b/wxbox-web/src/lib/map/sync.svelte.ts deleted file mode 100644 index 0e5b086..0000000 --- a/wxbox-web/src/lib/map/sync.svelte.ts +++ /dev/null @@ -1,60 +0,0 @@ -import type { Map as LMap } from 'leaflet'; -import type { View } from '$lib/map'; - -export function syncMaps( - view: View, - map1: LMap | null, - map2: LMap | null, - map3: LMap | null, - map4: LMap | null -) { - // resize the shown maps - if (view === 'one' && map1) { - map1.invalidateSize(); - } else if (view === 'two') { - if (map1) map1.invalidateSize(); - if (map2) map2.invalidateSize(); - } else if (view === 'four') { - if (map1) map1.invalidateSize(); - if (map2) map2.invalidateSize(); - if (map3) map3.invalidateSize(); - if (map4) map4.invalidateSize(); - } - - if (map1 && map2) { - map2.setView(map1.getCenter(), map1.getZoom()); - // @ts-expect-error leaflet.sync does not provide typedefs - map1.sync(map2); - } - if (map1 && map3) { - map3.setView(map1.getCenter(), map1.getZoom()); - // @ts-expect-error leaflet.sync does not provide typedefs - map1.sync(map3); - } - if (map1 && map4) { - map4.setView(map1.getCenter(), map1.getZoom()); - // @ts-expect-error leaflet.sync does not provide typedefs - map1.sync(map4); - } - - // @ts-expect-error leaflet.sync does not provide typedefs - if (map2 && map1) map2.sync(map1); - // @ts-expect-error leaflet.sync does not provide typedefs - if (map2 && map3) map2.sync(map3); - // @ts-expect-error leaflet.sync does not provide typedefs - if (map2 && map4) map2.sync(map4); - - // @ts-expect-error leaflet.sync does not provide typedefs - if (map3 && map1) map3.sync(map1); - // @ts-expect-error leaflet.sync does not provide typedefs - if (map3 && map2) map3.sync(map2); - // @ts-expect-error leaflet.sync does not provide typedefs - if (map3 && map4) map3.sync(map4); - - // @ts-expect-error leaflet.sync does not provide typedefs - if (map4 && map1) map4.sync(map1); - // @ts-expect-error leaflet.sync does not provide typedefs - if (map4 && map2) map4.sync(map2); - // @ts-expect-error leaflet.sync does not provide typedefs - if (map4 && map3) map4.sync(map3); -} diff --git a/wxbox-web/src/lib/menubar/ButtonBar.svelte b/wxbox-web/src/lib/menubar/ButtonBar.svelte deleted file mode 100644 index e560127..0000000 --- a/wxbox-web/src/lib/menubar/ButtonBar.svelte +++ /dev/null @@ -1,50 +0,0 @@ - - - - -{#each menu as menuItem} - {#if menuItem.visible} - {@const index = menuItem.display.indexOf(menuItem.keyboard)} - - {/if} -{/each} - - \ No newline at end of file diff --git a/wxbox-web/src/lib/menubar/buttonlib.ts b/wxbox-web/src/lib/menubar/buttonlib.ts deleted file mode 100644 index 80c1a33..0000000 --- a/wxbox-web/src/lib/menubar/buttonlib.ts +++ /dev/null @@ -1,22 +0,0 @@ -export type Mode = - | 'global' - | 'view' - | 'paneSelect' - | 'pane' - | 'baseLayerSelect' - | 'dataLayerSelect' - | 'overlayLayerSelect' - | 'dataNOAA' - | 'dataNOAAMRMS'; - -export interface MenuItem { - display: string; - keyboard: string; - disabled: boolean; - visible: boolean; - action: () => void; -} - -export type MenuRegistry = { - [id in Mode]: MenuItem[]; -}; diff --git a/wxbox-web/src/routes/+layout.svelte b/wxbox-web/src/routes/+layout.svelte deleted file mode 100644 index 3cc8fb9..0000000 --- a/wxbox-web/src/routes/+layout.svelte +++ /dev/null @@ -1,13 +0,0 @@ - - -{@render children()} \ No newline at end of file diff --git a/wxbox-web/src/routes/+page.svelte b/wxbox-web/src/routes/+page.svelte deleted file mode 100644 index 6da721c..0000000 --- a/wxbox-web/src/routes/+page.svelte +++ /dev/null @@ -1,415 +0,0 @@ - - -
-
-

wxbox

- {status} - - data reload in {timeUntilReload}s -
-
- - {#if view === 'two' || view === 'four'} - - {/if} -
- {#if view === 'four'} -
- - -
- {/if} - -
- - diff --git a/wxbox-web/static/favicon.png b/wxbox-web/static/favicon.png deleted file mode 100644 index 825b9e65af7c104cfb07089bb28659393b4f2097..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1571 zcmV+;2Hg3HP)Px)-AP12RCwC$UE6KzI1p6{F2N z1VK2vi|pOpn{~#djwYcWXTI_im_u^TJgMZ4JMOsSj!0ma>B?-(Hr@X&W@|R-$}W@Z zgj#$x=!~7LGqHW?IO8+*oE1MyDp!G=L0#^lUx?;!fXv@l^6SvTnf^ac{5OurzC#ZMYc20lI%HhX816AYVs1T3heS1*WaWH z%;x>)-J}YB5#CLzU@GBR6sXYrD>Vw(Fmt#|JP;+}<#6b63Ike{Fuo!?M{yEffez;| zp!PfsuaC)>h>-AdbnwN13g*1LowNjT5?+lFVd#9$!8Z9HA|$*6dQ8EHLu}U|obW6f z2%uGv?vr=KNq7YYa2Roj;|zooo<)lf=&2yxM@e`kM$CmCR#x>gI>I|*Ubr({5Y^rb zghxQU22N}F51}^yfDSt786oMTc!W&V;d?76)9KXX1 z+6Okem(d}YXmmOiZq$!IPk5t8nnS{%?+vDFz3BevmFNgpIod~R{>@#@5x9zJKEHLHv!gHeK~n)Ld!M8DB|Kfe%~123&Hz1Z(86nU7*G5chmyDe ziV7$pB7pJ=96hpxHv9rCR29%bLOXlKU<_13_M8x)6;P8E1Kz6G<&P?$P^%c!M5`2` zfY2zg;VK5~^>TJGQzc+33-n~gKt{{of8GzUkWmU110IgI0DLxRIM>0US|TsM=L|@F z0Bun8U!cRB7-2apz=y-7*UxOxz@Z0)@QM)9wSGki1AZ38ceG7Q72z5`i;i=J`ILzL z@iUO?SBBG-0cQuo+an4TsLy-g-x;8P4UVwk|D8{W@U1Zi z!M)+jqy@nQ$p?5tsHp-6J304Q={v-B>66$P0IDx&YT(`IcZ~bZfmn11#rXd7<5s}y zBi9eim&zQc0Dk|2>$bs0PnLmDfMP5lcXRY&cvJ=zKxI^f0%-d$tD!`LBf9^jMSYUA zI8U?CWdY@}cRq6{5~y+)#h1!*-HcGW@+gZ4B};0OnC~`xQOyH19z*TA!!BJ%9s0V3F?CAJ{hTd#*tf+ur-W9MOURF-@B77_-OshsY}6 zOXRY=5%C^*26z?l)1=$bz30!so5tfABdSYzO+H=CpV~aaUefmjvfZ3Ttu9W&W3Iu6 zROlh0MFA5h;my}8lB0tAV-Rvc2Zs_CCSJnx@d`**$idgy-iMob4dJWWw|21b4NB=LfsYp0Aeh{Ov)yztQi;eL4y5 zMi>8^SzKqk8~k?UiQK^^-5d8c%bV?$F8%X~czyiaKCI2=UH Self { + Self { + url_query: serde_json::to_string(options).unwrap() + } + } +} +impl TileSource for DynamicUrlSource { + fn tile_url(&self, tile_id: TileId) -> String { + format!( + "{}/{}/{}/{}.png?settings={}", + var("TILER_BASE_URL").unwrap(), + tile_id.zoom, tile_id.x, tile_id.y, + self.url_query + ) + } + + fn attribution(&self) -> Attribution { + Attribution { + text: "OpenStreetMap contributors, NOAA, wxbox", + url: "https://copyright.wxbox.e3t.cc", + logo_light: None, + logo_dark: None + } + } +} + + +impl WxboxApp { + pub fn new(ctx: Context) -> Self { + egui_extras::install_image_loaders(&ctx); + + Self { + provider: HttpTiles::with_options( + DynamicUrlSource::new_from(&TileRequestOptions { + baselayer: "osm".to_string(), + + data: "grib2/noaa_mrms_merged_composite_reflectivity_qc".to_string(), + data_transparency: 0.5, + }), + Default::default(), + ctx.clone() + ), + map_memory: MapMemory::default() + } + } +} + +impl eframe::App for WxboxApp { + fn update(&mut self, ctx: &Context, frame: &mut eframe::Frame) { + let rimless = Frame { + fill: ctx.style().visuals.panel_fill, + ..Default::default() + }; + + egui::CentralPanel::default() + .frame(rimless) + .show(ctx, |ui| { + let position = Position::from_lat_lon(44.967243, -103.771556); + + let tiles = &mut self.provider; + let attribution = tiles.attribution(); + + let map = walkers::Map::new(Some(tiles), &mut self.map_memory, position); + + ui.add(map); + + Window::new("Attribution") + .collapsible(false) + .resizable(false) + .title_bar(false) + .anchor(Align2::LEFT_TOP, [10.0, 10.0]) + .show(ui.ctx(), |ui| { + ui.horizontal(|ui| { + ui.hyperlink_to(attribution.text, attribution.url); + }) + }) + }); + } +} \ No newline at end of file diff --git a/wxbox_client_native/Cargo.toml b/wxbox_client_native/Cargo.toml new file mode 100644 index 0000000..b208c67 --- /dev/null +++ b/wxbox_client_native/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "wxbox_client_native" +version = "0.1.0" +edition = "2021" + +[dependencies] +wxbox_client = { path = "../wxbox_client" } +eframe = "0.30" +egui = "0.30" +tracing-subscriber = "0.3" diff --git a/wxbox_client_native/src/main.rs b/wxbox_client_native/src/main.rs new file mode 100644 index 0000000..6724612 --- /dev/null +++ b/wxbox_client_native/src/main.rs @@ -0,0 +1,10 @@ +use wxbox_client::WxboxApp; + +fn main() -> Result<(), eframe::Error> { + tracing_subscriber::fmt::init(); + eframe::run_native( + "wxbox", + Default::default(), + Box::new(|cc| Ok(Box::new(WxboxApp::new(cc.egui_ctx.clone())))) + ) +} \ No newline at end of file diff --git a/wxbox_client_wasm/Cargo.toml b/wxbox_client_wasm/Cargo.toml new file mode 100644 index 0000000..79f5ea5 --- /dev/null +++ b/wxbox_client_wasm/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "wxbox_client_wasm" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/wxbox_client_wasm/src/lib.rs b/wxbox_client_wasm/src/lib.rs new file mode 100644 index 0000000..b93cf3f --- /dev/null +++ b/wxbox_client_wasm/src/lib.rs @@ -0,0 +1,14 @@ +pub fn add(left: u64, right: u64) -> u64 { + left + right +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn it_works() { + let result = add(2, 2); + assert_eq!(result, 4); + } +} diff --git a/wxbox_common/Cargo.toml b/wxbox_common/Cargo.toml new file mode 100644 index 0000000..d953d4b --- /dev/null +++ b/wxbox_common/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "wxbox_common" +version = "0.1.0" +edition = "2021" + +[dependencies] +serde = "1" \ No newline at end of file diff --git a/wxbox_common/src/lib.rs b/wxbox_common/src/lib.rs new file mode 100644 index 0000000..a839f83 --- /dev/null +++ b/wxbox_common/src/lib.rs @@ -0,0 +1,9 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize)] +pub struct TileRequestOptions { + pub baselayer: String, + + pub data: String, + pub data_transparency: f64 +} \ No newline at end of file