diff --git a/Cargo.lock b/Cargo.lock
index 615d2bfd..50af9f50 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -351,7 +351,7 @@ dependencies = [
"arrow-schema",
"chrono",
"half",
- "indexmap 2.10.0",
+ "indexmap",
"lexical-core",
"memchr",
"num",
@@ -423,56 +423,6 @@ dependencies = [
"regex-syntax 0.8.5",
]
-[[package]]
-name = "ashpd"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd884d7c72877a94102c3715f3b1cd09ff4fac28221add3e57cfbe25c236d093"
-dependencies = [
- "enumflags2",
- "futures-channel",
- "futures-util",
- "rand 0.8.5",
- "serde",
- "serde_repr",
- "tokio",
- "url",
- "zbus 4.4.0",
-]
-
-[[package]]
-name = "ashpd"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6cbdf310d77fd3aaee6ea2093db7011dc2d35d2eb3481e5607f1f8d942ed99df"
-dependencies = [
- "enumflags2",
- "futures-channel",
- "futures-util",
- "rand 0.9.2",
- "raw-window-handle 0.6.2",
- "serde",
- "serde_repr",
- "tokio",
- "url",
- "wayland-backend",
- "wayland-client",
- "wayland-protocols",
- "zbus 5.9.0",
-]
-
-[[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.5.0"
@@ -502,53 +452,6 @@ dependencies = [
"zstd-safe",
]
-[[package]]
-name = "async-io"
-version = "2.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca"
-dependencies = [
- "async-lock",
- "cfg-if",
- "concurrent-queue",
- "futures-io",
- "futures-lite",
- "parking",
- "polling",
- "rustix 1.0.8",
- "slab",
- "windows-sys 0.60.2",
-]
-
-[[package]]
-name = "async-lock"
-version = "3.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc"
-dependencies = [
- "event-listener",
- "event-listener-strategy",
- "pin-project-lite",
-]
-
-[[package]]
-name = "async-process"
-version = "2.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00"
-dependencies = [
- "async-channel",
- "async-io",
- "async-lock",
- "async-signal",
- "async-task",
- "blocking",
- "cfg-if",
- "event-listener",
- "futures-lite",
- "rustix 1.0.8",
-]
-
[[package]]
name = "async-recursion"
version = "1.1.1"
@@ -560,24 +463,6 @@ dependencies = [
"syn 2.0.106",
]
-[[package]]
-name = "async-signal"
-version = "0.2.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1"
-dependencies = [
- "async-io",
- "async-lock",
- "atomic-waker",
- "cfg-if",
- "futures-core",
- "futures-io",
- "rustix 1.0.8",
- "signal-hook-registry",
- "slab",
- "windows-sys 0.60.2",
-]
-
[[package]]
name = "async-stream"
version = "0.3.6"
@@ -600,12 +485,6 @@ dependencies = [
"syn 2.0.106",
]
-[[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.89"
@@ -617,29 +496,6 @@ dependencies = [
"syn 2.0.106",
]
-[[package]]
-name = "atk"
-version = "0.18.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b"
-dependencies = [
- "atk-sys",
- "glib",
- "libc",
-]
-
-[[package]]
-name = "atk-sys"
-version = "0.18.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086"
-dependencies = [
- "glib-sys",
- "gobject-sys",
- "libc",
- "system-deps",
-]
-
[[package]]
name = "atoi"
version = "2.0.0"
@@ -1077,7 +933,7 @@ dependencies = [
"http-body 0.4.6",
"http-body 1.0.1",
"http-body-util",
- "itoa 1.0.15",
+ "itoa",
"num-integer",
"pin-project-lite",
"pin-utils",
@@ -1126,7 +982,7 @@ dependencies = [
"http-body-util",
"hyper 1.7.0",
"hyper-util",
- "itoa 1.0.15",
+ "itoa",
"matchit",
"memchr",
"mime",
@@ -1186,15 +1042,6 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce"
-[[package]]
-name = "base62"
-version = "2.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10e52a7bcb1d6beebee21fb5053af9e3cbb7a7ed1a4909e534040e676437ab1f"
-dependencies = [
- "rustversion",
-]
-
[[package]]
name = "base64"
version = "0.21.7"
@@ -1270,9 +1117,6 @@ name = "bitflags"
version = "2.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29"
-dependencies = [
- "serde",
-]
[[package]]
name = "blake2"
@@ -1296,12 +1140,6 @@ dependencies = [
"constant_time_eq",
]
-[[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"
@@ -1320,37 +1158,6 @@ dependencies = [
"hybrid-array",
]
-[[package]]
-name = "block2"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f"
-dependencies = [
- "objc2 0.5.2",
-]
-
-[[package]]
-name = "block2"
-version = "0.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2"
-dependencies = [
- "objc2 0.6.2",
-]
-
-[[package]]
-name = "blocking"
-version = "1.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21"
-dependencies = [
- "async-channel",
- "async-task",
- "futures-io",
- "futures-lite",
- "piper",
-]
-
[[package]]
name = "brotli"
version = "7.0.0"
@@ -1393,16 +1200,6 @@ dependencies = [
"alloc-stdlib",
]
-[[package]]
-name = "bstr"
-version = "1.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4"
-dependencies = [
- "memchr",
- "serde",
-]
-
[[package]]
name = "bumpalo"
version = "3.19.0"
@@ -1474,31 +1271,6 @@ dependencies = [
"pkg-config",
]
-[[package]]
-name = "cairo-rs"
-version = "0.18.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2"
-dependencies = [
- "bitflags 2.9.2",
- "cairo-sys-rs",
- "glib",
- "libc",
- "once_cell",
- "thiserror 1.0.69",
-]
-
-[[package]]
-name = "cairo-sys-rs"
-version = "0.18.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51"
-dependencies = [
- "glib-sys",
- "libc",
- "system-deps",
-]
-
[[package]]
name = "camino"
version = "1.1.11"
@@ -1565,12 +1337,6 @@ dependencies = [
"shlex",
]
-[[package]]
-name = "cesu8"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
-
[[package]]
name = "cexpr"
version = "0.6.0"
@@ -1580,27 +1346,6 @@ dependencies = [
"nom 7.1.3",
]
-[[package]]
-name = "cfb"
-version = "0.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f"
-dependencies = [
- "byteorder",
- "fnv",
- "uuid",
-]
-
-[[package]]
-name = "cfg-expr"
-version = "0.15.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02"
-dependencies = [
- "smallvec",
- "target-lexicon",
-]
-
[[package]]
name = "cfg-if"
version = "1.0.1"
@@ -1659,7 +1404,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6139a8597ed92cf816dfb33f5dd6cf0bb93a6adc938f11039f371bc5bcd26c3"
dependencies = [
"chrono",
- "phf 0.12.1",
+ "phf",
]
[[package]]
@@ -1708,7 +1453,7 @@ checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4"
dependencies = [
"glob",
"libc",
- "libloading 0.8.8",
+ "libloading",
]
[[package]]
@@ -1739,7 +1484,7 @@ version = "4.5.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6"
dependencies = [
- "heck 0.5.0",
+ "heck",
"proc-macro2",
"quote",
"syn 2.0.106",
@@ -1760,81 +1505,12 @@ dependencies = [
"cc",
]
-[[package]]
-name = "cocoa"
-version = "0.25.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c"
-dependencies = [
- "bitflags 1.3.2",
- "block",
- "cocoa-foundation 0.1.2",
- "core-foundation 0.9.4",
- "core-graphics 0.23.2",
- "foreign-types",
- "libc",
- "objc",
-]
-
-[[package]]
-name = "cocoa"
-version = "0.26.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad36507aeb7e16159dfe68db81ccc27571c3ccd4b76fb2fb72fc59e7a4b1b64c"
-dependencies = [
- "bitflags 2.9.2",
- "block",
- "cocoa-foundation 0.2.1",
- "core-foundation 0.10.1",
- "core-graphics 0.24.0",
- "foreign-types",
- "libc",
- "objc",
-]
-
-[[package]]
-name = "cocoa-foundation"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7"
-dependencies = [
- "bitflags 1.3.2",
- "block",
- "core-foundation 0.9.4",
- "core-graphics-types 0.1.3",
- "libc",
- "objc",
-]
-
-[[package]]
-name = "cocoa-foundation"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81411967c50ee9a1fc11365f8c585f863a22a9697c89239c452292c40ba79b0d"
-dependencies = [
- "bitflags 2.9.2",
- "block",
- "core-foundation 0.10.1",
- "core-graphics-types 0.2.0",
- "objc",
-]
-
[[package]]
name = "colorchoice"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
-[[package]]
-name = "combine"
-version = "4.6.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
-dependencies = [
- "bytes",
- "memchr",
-]
-
[[package]]
name = "comfy-table"
version = "7.1.4"
@@ -1854,16 +1530,6 @@ dependencies = [
"crossbeam-utils",
]
-[[package]]
-name = "console_error_panic_hook"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
-dependencies = [
- "cfg-if",
- "wasm-bindgen",
-]
-
[[package]]
name = "const-oid"
version = "0.9.6"
@@ -1896,27 +1562,6 @@ dependencies = [
"tiny-keccak",
]
-[[package]]
-name = "const-serialize"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08259976d62c715c4826cb4a3d64a3a9e5c5f68f964ff6087319857f569f93a6"
-dependencies = [
- "const-serialize-macro",
- "serde",
-]
-
-[[package]]
-name = "const-serialize-macro"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04382d0d9df7434af6b1b49ea1a026ef39df1b0738b1cc373368cf175354f6eb"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.106",
-]
-
[[package]]
name = "const-str"
version = "0.6.4"
@@ -1963,21 +1608,6 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6"
-[[package]]
-name = "convert_case"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
-
-[[package]]
-name = "convert_case"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
-dependencies = [
- "unicode-segmentation",
-]
-
[[package]]
name = "core-foundation"
version = "0.9.4"
@@ -2004,54 +1634,6 @@ 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 0.1.3",
- "foreign-types",
- "libc",
-]
-
-[[package]]
-name = "core-graphics"
-version = "0.24.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1"
-dependencies = [
- "bitflags 2.9.2",
- "core-foundation 0.10.1",
- "core-graphics-types 0.2.0",
- "foreign-types",
- "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 = "core-graphics-types"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
-dependencies = [
- "bitflags 2.9.2",
- "core-foundation 0.10.1",
- "libc",
-]
-
[[package]]
name = "cpufeatures"
version = "0.2.17"
@@ -2241,33 +1823,6 @@ dependencies = [
"hybrid-array",
]
-[[package]]
-name = "cssparser"
-version = "0.27.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a"
-dependencies = [
- "cssparser-macros",
- "dtoa-short",
- "itoa 0.4.8",
- "matches",
- "phf 0.8.0",
- "proc-macro2",
- "quote",
- "smallvec",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "cssparser-macros"
-version = "0.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
-dependencies = [
- "quote",
- "syn 2.0.106",
-]
-
[[package]]
name = "csv"
version = "1.3.1"
@@ -2275,7 +1830,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf"
dependencies = [
"csv-core",
- "itoa 1.0.15",
+ "itoa",
"ryu",
"serde",
]
@@ -2368,19 +1923,6 @@ dependencies = [
"syn 2.0.106",
]
-[[package]]
-name = "dashmap"
-version = "5.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
-dependencies = [
- "cfg-if",
- "hashbrown 0.14.5",
- "lock_api",
- "once_cell",
- "parking_lot_core",
-]
-
[[package]]
name = "dashmap"
version = "6.1.0"
@@ -2395,12 +1937,6 @@ dependencies = [
"parking_lot_core",
]
-[[package]]
-name = "data-encoding"
-version = "2.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
-
[[package]]
name = "datafusion"
version = "46.0.1"
@@ -2460,7 +1996,7 @@ checksum = "998a6549e6ee4ee3980e05590b2960446a56b343ea30199ef38acd0e0b9036e2"
dependencies = [
"arrow",
"async-trait",
- "dashmap 6.1.0",
+ "dashmap",
"datafusion-common",
"datafusion-execution",
"datafusion-expr",
@@ -2506,7 +2042,7 @@ dependencies = [
"base64 0.22.1",
"half",
"hashbrown 0.14.5",
- "indexmap 2.10.0",
+ "indexmap",
"libc",
"log",
"object_store",
@@ -2575,7 +2111,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0938f9e5b6bc5782be4111cdfb70c02b7b5451bf34fd57e4de062a7f7c4e31f1"
dependencies = [
"arrow",
- "dashmap 6.1.0",
+ "dashmap",
"datafusion-common",
"datafusion-expr",
"futures",
@@ -2601,7 +2137,7 @@ dependencies = [
"datafusion-functions-aggregate-common",
"datafusion-functions-window-common",
"datafusion-physical-expr-common",
- "indexmap 2.10.0",
+ "indexmap",
"paste",
"recursive",
"serde_json",
@@ -2616,7 +2152,7 @@ checksum = "18f0a851a436c5a2139189eb4617a54e6a9ccb9edc96c4b3c83b3bb7c58b950e"
dependencies = [
"arrow",
"datafusion-common",
- "indexmap 2.10.0",
+ "indexmap",
"itertools 0.14.0",
"paste",
]
@@ -2770,7 +2306,7 @@ dependencies = [
"datafusion-common",
"datafusion-expr",
"datafusion-physical-expr",
- "indexmap 2.10.0",
+ "indexmap",
"itertools 0.14.0",
"log",
"recursive",
@@ -2793,7 +2329,7 @@ dependencies = [
"datafusion-physical-expr-common",
"half",
"hashbrown 0.14.5",
- "indexmap 2.10.0",
+ "indexmap",
"itertools 0.14.0",
"log",
"paste",
@@ -2855,7 +2391,7 @@ dependencies = [
"futures",
"half",
"hashbrown 0.14.5",
- "indexmap 2.10.0",
+ "indexmap",
"itertools 0.14.0",
"log",
"parking_lot",
@@ -2873,37 +2409,13 @@ dependencies = [
"bigdecimal",
"datafusion-common",
"datafusion-expr",
- "indexmap 2.10.0",
+ "indexmap",
"log",
"recursive",
"regex",
"sqlparser",
]
-[[package]]
-name = "dbus"
-version = "0.9.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b"
-dependencies = [
- "libc",
- "libdbus-sys",
- "winapi",
-]
-
-[[package]]
-name = "dbus-secret-service"
-version = "4.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b42a16374481d92aed73ae45b1f120207d8e71d24fb89f357fadbd8f946fd84b"
-dependencies = [
- "dbus",
- "futures-util",
- "num",
- "once_cell",
- "rand 0.8.5",
-]
-
[[package]]
name = "deflate64"
version = "0.1.9"
@@ -2983,19 +2495,6 @@ dependencies = [
"syn 2.0.106",
]
-[[package]]
-name = "derive_more"
-version = "0.99.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f"
-dependencies = [
- "convert_case 0.4.0",
- "proc-macro2",
- "quote",
- "rustc_version",
- "syn 2.0.106",
-]
-
[[package]]
name = "diff"
version = "0.1.13"
@@ -3026,445 +2525,6 @@ dependencies = [
"subtle",
]
-[[package]]
-name = "dioxus"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "60a247114500f1a78e87022defa8173de847accfada8e8809dfae23a118a580c"
-dependencies = [
- "dioxus-cli-config",
- "dioxus-config-macro",
- "dioxus-core",
- "dioxus-core-macro",
- "dioxus-desktop",
- "dioxus-devtools",
- "dioxus-document",
- "dioxus-fullstack",
- "dioxus-history",
- "dioxus-hooks",
- "dioxus-html",
- "dioxus-logger",
- "dioxus-mobile",
- "dioxus-router",
- "dioxus-signals",
- "dioxus-web",
- "manganis",
- "warnings",
-]
-
-[[package]]
-name = "dioxus-cli-config"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cdd16948f1ffdb068dd9a64812158073a4250e2af4e98ea31fdac0312e6bce86"
-dependencies = [
- "wasm-bindgen",
-]
-
-[[package]]
-name = "dioxus-config-macro"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75cbf582fbb1c32d34a1042ea675469065574109c95154468710a4d73ee98b49"
-dependencies = [
- "proc-macro2",
- "quote",
-]
-
-[[package]]
-name = "dioxus-core"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c03f451a119e47433c16e2d8eb5b15bf7d6e6734eb1a4c47574e6711dadff8d"
-dependencies = [
- "const_format",
- "dioxus-core-types",
- "futures-channel",
- "futures-util",
- "generational-box",
- "longest-increasing-subsequence",
- "rustc-hash 1.1.0",
- "rustversion",
- "serde",
- "slab",
- "slotmap",
- "tracing",
- "warnings",
-]
-
-[[package]]
-name = "dioxus-core-macro"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "105c954caaaedf8cd10f3d1ba576b01e18aa8d33ad435182125eefe488cf0064"
-dependencies = [
- "convert_case 0.6.0",
- "dioxus-rsx",
- "proc-macro2",
- "quote",
- "syn 2.0.106",
-]
-
-[[package]]
-name = "dioxus-core-types"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91a82fccfa48574eb7aa183e297769540904694844598433a9eb55896ad9f93b"
-dependencies = [
- "once_cell",
-]
-
-[[package]]
-name = "dioxus-desktop"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5b0cca3e7a10a4a3df37ea52c4cc7a53e5c9233489e03ee3f2829471fc3099a"
-dependencies = [
- "async-trait",
- "base64 0.22.1",
- "cocoa 0.25.0",
- "core-foundation 0.9.4",
- "dioxus-cli-config",
- "dioxus-core",
- "dioxus-devtools",
- "dioxus-document",
- "dioxus-history",
- "dioxus-hooks",
- "dioxus-html",
- "dioxus-interpreter-js",
- "dioxus-signals",
- "dunce",
- "futures-channel",
- "futures-util",
- "generational-box",
- "global-hotkey",
- "infer",
- "jni",
- "lazy-js-bundle",
- "muda 0.11.5",
- "ndk",
- "ndk-context",
- "ndk-sys",
- "objc",
- "objc_id",
- "once_cell",
- "rfd 0.14.1",
- "rustc-hash 1.1.0",
- "serde",
- "serde_json",
- "signal-hook",
- "slab",
- "tao",
- "thiserror 1.0.69",
- "tokio",
- "tracing",
- "tray-icon",
- "urlencoding",
- "webbrowser",
- "wry",
-]
-
-[[package]]
-name = "dioxus-devtools"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "712a7300f1e8181218187b03502044157eef04e0a25b518117c5ef9ae1096880"
-dependencies = [
- "dioxus-core",
- "dioxus-devtools-types",
- "dioxus-signals",
- "serde",
- "serde_json",
- "tracing",
- "tungstenite",
- "warnings",
-]
-
-[[package]]
-name = "dioxus-devtools-types"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f62434973c0c9c5a3bc42e9cd5e7070401c2062a437fb5528f318c3e42ebf4ff"
-dependencies = [
- "dioxus-core",
- "serde",
-]
-
-[[package]]
-name = "dioxus-document"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "802a2014d1662b6615eec0a275745822ee4fc66aacd9d0f2fb33d6c8da79b8f2"
-dependencies = [
- "dioxus-core",
- "dioxus-core-macro",
- "dioxus-core-types",
- "dioxus-html",
- "futures-channel",
- "futures-util",
- "generational-box",
- "lazy-js-bundle",
- "serde",
- "serde_json",
- "tracing",
-]
-
-[[package]]
-name = "dioxus-fullstack"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe99b48a1348eec385b5c4bd3e80fd863b0d3b47257d34e2ddc58754dec5d128"
-dependencies = [
- "base64 0.22.1",
- "bytes",
- "ciborium",
- "dioxus-desktop",
- "dioxus-devtools",
- "dioxus-history",
- "dioxus-lib",
- "dioxus-mobile",
- "dioxus-web",
- "dioxus_server_macro",
- "futures-channel",
- "futures-util",
- "generational-box",
- "once_cell",
- "serde",
- "server_fn",
- "tracing",
- "web-sys",
-]
-
-[[package]]
-name = "dioxus-history"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ae4e22616c698f35b60727313134955d885de2d32e83689258e586ebc9b7909"
-dependencies = [
- "dioxus-core",
- "tracing",
-]
-
-[[package]]
-name = "dioxus-hooks"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "948e2b3f20d9d4b2c300aaa60281b1755f3298684448920b27106da5841896d0"
-dependencies = [
- "dioxus-core",
- "dioxus-signals",
- "futures-channel",
- "futures-util",
- "generational-box",
- "rustversion",
- "slab",
- "tracing",
- "warnings",
-]
-
-[[package]]
-name = "dioxus-html"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59c9a40e6fee20ce7990095492dedb6a753eebe05e67d28271a249de74dc796d"
-dependencies = [
- "async-trait",
- "dioxus-core",
- "dioxus-core-macro",
- "dioxus-core-types",
- "dioxus-hooks",
- "dioxus-html-internal-macro",
- "enumset",
- "euclid",
- "futures-channel",
- "generational-box",
- "keyboard-types",
- "lazy-js-bundle",
- "rustversion",
- "serde",
- "serde_json",
- "serde_repr",
- "tracing",
-]
-
-[[package]]
-name = "dioxus-html-internal-macro"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43ba87b53688a2c9f619ecdf4b3b955bc1f08bd0570a80a0d626c405f6d14a76"
-dependencies = [
- "convert_case 0.6.0",
- "proc-macro2",
- "quote",
- "syn 2.0.106",
-]
-
-[[package]]
-name = "dioxus-interpreter-js"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "330707b10ca75cb0eb05f9e5f8d80217cd0d7e62116a8277ae363c1a09b57a22"
-dependencies = [
- "dioxus-core",
- "dioxus-core-types",
- "dioxus-html",
- "js-sys",
- "lazy-js-bundle",
- "rustc-hash 1.1.0",
- "serde",
- "sledgehammer_bindgen",
- "sledgehammer_utils",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
-]
-
-[[package]]
-name = "dioxus-lib"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5405b71aa9b8b0c3e0d22728f12f34217ca5277792bd315878cc6ecab7301b72"
-dependencies = [
- "dioxus-config-macro",
- "dioxus-core",
- "dioxus-core-macro",
- "dioxus-document",
- "dioxus-history",
- "dioxus-hooks",
- "dioxus-html",
- "dioxus-rsx",
- "dioxus-signals",
- "warnings",
-]
-
-[[package]]
-name = "dioxus-logger"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "545961e752f6c8bf59c274951b3c8b18a106db6ad2f9e2035b29e1f2a3e899b1"
-dependencies = [
- "console_error_panic_hook",
- "dioxus-cli-config",
- "tracing",
- "tracing-subscriber",
- "tracing-wasm",
-]
-
-[[package]]
-name = "dioxus-mobile"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d1295388909f427758993f32a571e0f8698d6ce0f125fa0e81b8bfdec3fa952"
-dependencies = [
- "dioxus-cli-config",
- "dioxus-desktop",
- "dioxus-lib",
- "jni",
- "libc",
- "once_cell",
-]
-
-[[package]]
-name = "dioxus-router"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7266a76fc9e4a91f56499d1d1aecfff7168952b6627a6008b4e9748d6bf863e4"
-dependencies = [
- "dioxus-cli-config",
- "dioxus-history",
- "dioxus-lib",
- "dioxus-router-macro",
- "rustversion",
- "tracing",
- "url",
- "urlencoding",
-]
-
-[[package]]
-name = "dioxus-router-macro"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2743ffb79e9a7d33d779c87d6deea2a6c047d0736012f95d63b909b83f0a6fd2"
-dependencies = [
- "proc-macro2",
- "quote",
- "slab",
- "syn 2.0.106",
-]
-
-[[package]]
-name = "dioxus-rsx"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3eb588e05800b5a7eb90b2f40fca5bbd7626e823fb5e1ba21e011de649b45aa1"
-dependencies = [
- "proc-macro2",
- "proc-macro2-diagnostics",
- "quote",
- "syn 2.0.106",
-]
-
-[[package]]
-name = "dioxus-signals"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10e032dbb3a2c0386ec8b8ee59bc20b5aeb67038147c855801237b45b13d72ac"
-dependencies = [
- "dioxus-core",
- "futures-channel",
- "futures-util",
- "generational-box",
- "once_cell",
- "parking_lot",
- "rustc-hash 1.1.0",
- "tracing",
- "warnings",
-]
-
-[[package]]
-name = "dioxus-web"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e7c12475c3d360058b8afe1b68eb6dfc9cbb7dcd760aed37c5f85c561c83ed1"
-dependencies = [
- "async-trait",
- "ciborium",
- "dioxus-cli-config",
- "dioxus-core",
- "dioxus-core-types",
- "dioxus-devtools",
- "dioxus-document",
- "dioxus-history",
- "dioxus-html",
- "dioxus-interpreter-js",
- "dioxus-signals",
- "futures-channel",
- "futures-util",
- "generational-box",
- "js-sys",
- "lazy-js-bundle",
- "rustc-hash 1.1.0",
- "serde",
- "serde-wasm-bindgen",
- "serde_json",
- "tracing",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
-]
-
-[[package]]
-name = "dioxus_server_macro"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "371a5b21989a06b53c5092e977b3f75d0e60a65a4c15a2aa1d07014c3b2dda97"
-dependencies = [
- "proc-macro2",
- "quote",
- "server_fn_macro",
- "syn 2.0.106",
-]
-
[[package]]
name = "dirs"
version = "6.0.0"
@@ -3486,24 +2546,6 @@ dependencies = [
"windows-sys 0.60.2",
]
-[[package]]
-name = "dispatch"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
-
-[[package]]
-name = "dispatch2"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
-dependencies = [
- "bitflags 2.9.2",
- "block2 0.6.1",
- "libc",
- "objc2 0.6.2",
-]
-
[[package]]
name = "displaydoc"
version = "0.2.5"
@@ -3515,65 +2557,6 @@ dependencies = [
"syn 2.0.106",
]
-[[package]]
-name = "dlib"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
-dependencies = [
- "libloading 0.8.8",
-]
-
-[[package]]
-name = "dlopen2"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6"
-dependencies = [
- "dlopen2_derive",
- "libc",
- "once_cell",
- "winapi",
-]
-
-[[package]]
-name = "dlopen2_derive"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "788160fb30de9cdd857af31c6a2675904b16ece8fc2737b2c7127ba368c9d0f4"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.106",
-]
-
-[[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.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
-
-[[package]]
-name = "dtoa"
-version = "1.0.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04"
-
-[[package]]
-name = "dtoa-short"
-version = "0.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87"
-dependencies = [
- "dtoa",
-]
-
[[package]]
name = "dunce"
version = "1.0.5"
@@ -3657,40 +2640,13 @@ 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-as-inner"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc"
dependencies = [
- "heck 0.5.0",
- "proc-macro2",
- "quote",
- "syn 2.0.106",
-]
-
-[[package]]
-name = "enumflags2"
-version = "0.7.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef"
-dependencies = [
- "enumflags2_derive",
- "serde",
-]
-
-[[package]]
-name = "enumflags2_derive"
-version = "0.7.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827"
-dependencies = [
+ "heck",
"proc-macro2",
"quote",
"syn 2.0.106",
@@ -3743,16 +2699,6 @@ dependencies = [
"windows-sys 0.60.2",
]
-[[package]]
-name = "euclid"
-version = "0.22.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48"
-dependencies = [
- "num-traits",
- "serde",
-]
-
[[package]]
name = "event-listener"
version = "5.4.1"
@@ -3780,15 +2726,6 @@ version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
-[[package]]
-name = "fdeflate"
-version = "0.3.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
-dependencies = [
- "simd-adler32",
-]
-
[[package]]
name = "ff"
version = "0.12.1"
@@ -3799,16 +2736,6 @@ dependencies = [
"subtle",
]
-[[package]]
-name = "field-offset"
-version = "0.3.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f"
-dependencies = [
- "memoffset",
- "rustc_version",
-]
-
[[package]]
name = "figment"
version = "0.10.19"
@@ -3921,33 +2848,6 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
-[[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",
-]
-
-[[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 2.0.106",
-]
-
-[[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"
@@ -3972,16 +2872,6 @@ dependencies = [
"libc",
]
-[[package]]
-name = "futf"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
-dependencies = [
- "mac",
- "new_debug_unreachable",
-]
-
[[package]]
name = "futures"
version = "0.3.31"
@@ -4030,19 +2920,6 @@ version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
-[[package]]
-name = "futures-lite"
-version = "2.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad"
-dependencies = [
- "fastrand",
- "futures-core",
- "futures-io",
- "parking",
- "pin-project-lite",
-]
-
[[package]]
name = "futures-macro"
version = "0.3.31"
@@ -4084,124 +2961,6 @@ dependencies = [
"slab",
]
-[[package]]
-name = "fxhash"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
-dependencies = [
- "byteorder",
-]
-
-[[package]]
-name = "gdk"
-version = "0.18.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691"
-dependencies = [
- "cairo-rs",
- "gdk-pixbuf",
- "gdk-sys",
- "gio",
- "glib",
- "libc",
- "pango",
-]
-
-[[package]]
-name = "gdk-pixbuf"
-version = "0.18.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec"
-dependencies = [
- "gdk-pixbuf-sys",
- "gio",
- "glib",
- "libc",
- "once_cell",
-]
-
-[[package]]
-name = "gdk-pixbuf-sys"
-version = "0.18.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7"
-dependencies = [
- "gio-sys",
- "glib-sys",
- "gobject-sys",
- "libc",
- "system-deps",
-]
-
-[[package]]
-name = "gdk-sys"
-version = "0.18.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7"
-dependencies = [
- "cairo-sys-rs",
- "gdk-pixbuf-sys",
- "gio-sys",
- "glib-sys",
- "gobject-sys",
- "libc",
- "pango-sys",
- "pkg-config",
- "system-deps",
-]
-
-[[package]]
-name = "gdkwayland-sys"
-version = "0.18.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69"
-dependencies = [
- "gdk-sys",
- "glib-sys",
- "gobject-sys",
- "libc",
- "pkg-config",
- "system-deps",
-]
-
-[[package]]
-name = "gdkx11"
-version = "0.18.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe"
-dependencies = [
- "gdk",
- "gdkx11-sys",
- "gio",
- "glib",
- "libc",
- "x11",
-]
-
-[[package]]
-name = "gdkx11-sys"
-version = "0.18.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d"
-dependencies = [
- "gdk-sys",
- "glib-sys",
- "libc",
- "system-deps",
- "x11",
-]
-
-[[package]]
-name = "generational-box"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a673cf4fb0ea6a91aa86c08695756dfe875277a912cdbf33db9a9f62d47ed82b"
-dependencies = [
- "parking_lot",
- "tracing",
-]
-
[[package]]
name = "generic-array"
version = "0.14.7"
@@ -4212,17 +2971,6 @@ dependencies = [
"version_check",
]
-[[package]]
-name = "getrandom"
-version = "0.1.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
-dependencies = [
- "cfg-if",
- "libc",
- "wasi 0.9.0+wasi-snapshot-preview1",
-]
-
[[package]]
name = "getrandom"
version = "0.2.16"
@@ -4266,177 +3014,12 @@ version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
-[[package]]
-name = "gio"
-version = "0.18.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73"
-dependencies = [
- "futures-channel",
- "futures-core",
- "futures-io",
- "futures-util",
- "gio-sys",
- "glib",
- "libc",
- "once_cell",
- "pin-project-lite",
- "smallvec",
- "thiserror 1.0.69",
-]
-
-[[package]]
-name = "gio-sys"
-version = "0.18.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2"
-dependencies = [
- "glib-sys",
- "gobject-sys",
- "libc",
- "system-deps",
- "winapi",
-]
-
-[[package]]
-name = "glib"
-version = "0.18.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5"
-dependencies = [
- "bitflags 2.9.2",
- "futures-channel",
- "futures-core",
- "futures-executor",
- "futures-task",
- "futures-util",
- "gio-sys",
- "glib-macros",
- "glib-sys",
- "gobject-sys",
- "libc",
- "memchr",
- "once_cell",
- "smallvec",
- "thiserror 1.0.69",
-]
-
-[[package]]
-name = "glib-macros"
-version = "0.18.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc"
-dependencies = [
- "heck 0.4.1",
- "proc-macro-crate 2.0.0",
- "proc-macro-error",
- "proc-macro2",
- "quote",
- "syn 2.0.106",
-]
-
-[[package]]
-name = "glib-sys"
-version = "0.18.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898"
-dependencies = [
- "libc",
- "system-deps",
-]
-
[[package]]
name = "glob"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
-[[package]]
-name = "global-hotkey"
-version = "0.5.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b436093d1598b05e3b7fddc097b2bad32763f53a1beb25ab6f9718c6a60acd09"
-dependencies = [
- "bitflags 2.9.2",
- "cocoa 0.25.0",
- "crossbeam-channel",
- "keyboard-types",
- "objc",
- "once_cell",
- "thiserror 1.0.69",
- "windows-sys 0.52.0",
- "x11-dl",
-]
-
-[[package]]
-name = "globset"
-version = "0.4.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5"
-dependencies = [
- "aho-corasick",
- "bstr",
- "log",
- "regex-automata 0.4.9",
- "regex-syntax 0.8.5",
-]
-
-[[package]]
-name = "globwalk"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc"
-dependencies = [
- "bitflags 1.3.2",
- "ignore",
- "walkdir",
-]
-
-[[package]]
-name = "gloo-net"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580"
-dependencies = [
- "futures-channel",
- "futures-core",
- "futures-sink",
- "gloo-utils",
- "http 1.3.1",
- "js-sys",
- "pin-project",
- "serde",
- "serde_json",
- "thiserror 1.0.69",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
-]
-
-[[package]]
-name = "gloo-utils"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa"
-dependencies = [
- "js-sys",
- "serde",
- "serde_json",
- "wasm-bindgen",
- "web-sys",
-]
-
-[[package]]
-name = "gobject-sys"
-version = "0.18.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44"
-dependencies = [
- "glib-sys",
- "libc",
- "system-deps",
-]
-
[[package]]
name = "group"
version = "0.12.1"
@@ -4448,58 +3031,6 @@ dependencies = [
"subtle",
]
-[[package]]
-name = "gtk"
-version = "0.18.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a"
-dependencies = [
- "atk",
- "cairo-rs",
- "field-offset",
- "futures-channel",
- "gdk",
- "gdk-pixbuf",
- "gio",
- "glib",
- "gtk-sys",
- "gtk3-macros",
- "libc",
- "pango",
- "pkg-config",
-]
-
-[[package]]
-name = "gtk-sys"
-version = "0.18.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414"
-dependencies = [
- "atk-sys",
- "cairo-sys-rs",
- "gdk-pixbuf-sys",
- "gdk-sys",
- "gio-sys",
- "glib-sys",
- "gobject-sys",
- "libc",
- "pango-sys",
- "system-deps",
-]
-
-[[package]]
-name = "gtk3-macros"
-version = "0.18.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d"
-dependencies = [
- "proc-macro-crate 1.3.1",
- "proc-macro-error",
- "proc-macro2",
- "quote",
- "syn 2.0.106",
-]
-
[[package]]
name = "h2"
version = "0.3.27"
@@ -4512,7 +3043,7 @@ dependencies = [
"futures-sink",
"futures-util",
"http 0.2.12",
- "indexmap 2.10.0",
+ "indexmap",
"slab",
"tokio",
"tokio-util",
@@ -4531,7 +3062,7 @@ dependencies = [
"futures-core",
"futures-sink",
"http 1.3.1",
- "indexmap 2.10.0",
+ "indexmap",
"slab",
"tokio",
"tokio-util",
@@ -4549,12 +3080,6 @@ dependencies = [
"num-traits",
]
-[[package]]
-name = "hashbrown"
-version = "0.12.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
-
[[package]]
name = "hashbrown"
version = "0.14.5"
@@ -4576,12 +3101,6 @@ dependencies = [
"foldhash",
]
-[[package]]
-name = "heck"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
-
[[package]]
name = "heck"
version = "0.5.0"
@@ -4643,20 +3162,6 @@ dependencies = [
"windows-sys 0.59.0",
]
-[[package]]
-name = "html5ever"
-version = "0.26.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7"
-dependencies = [
- "log",
- "mac",
- "markup5ever",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
[[package]]
name = "http"
version = "0.2.12"
@@ -4665,7 +3170,7 @@ checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
dependencies = [
"bytes",
"fnv",
- "itoa 1.0.15",
+ "itoa",
]
[[package]]
@@ -4676,7 +3181,7 @@ checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
dependencies = [
"bytes",
"fnv",
- "itoa 1.0.15",
+ "itoa",
]
[[package]]
@@ -4755,7 +3260,7 @@ dependencies = [
"http-body 0.4.6",
"httparse",
"httpdate",
- "itoa 1.0.15",
+ "itoa",
"pin-project-lite",
"socket2 0.5.10",
"tokio",
@@ -4779,7 +3284,7 @@ dependencies = [
"http-body 1.0.1",
"httparse",
"httpdate",
- "itoa 1.0.15",
+ "itoa",
"pin-project-lite",
"pin-utils",
"smallvec",
@@ -4873,7 +3378,7 @@ dependencies = [
"js-sys",
"log",
"wasm-bindgen",
- "windows-core 0.61.2",
+ "windows-core",
]
[[package]]
@@ -4998,32 +3503,6 @@ dependencies = [
"icu_properties",
]
-[[package]]
-name = "ignore"
-version = "0.4.23"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b"
-dependencies = [
- "crossbeam-deque",
- "globset",
- "log",
- "memchr",
- "regex-automata 0.4.9",
- "same-file",
- "walkdir",
- "winapi-util",
-]
-
-[[package]]
-name = "indexmap"
-version = "1.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
-dependencies = [
- "autocfg",
- "hashbrown 0.12.3",
-]
-
[[package]]
name = "indexmap"
version = "2.10.0"
@@ -5034,15 +3513,6 @@ dependencies = [
"hashbrown 0.15.5",
]
-[[package]]
-name = "infer"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a6c16b11a665b26aeeb9b1d7f954cdeb034be38dd00adab4f2ae921a8fee804"
-dependencies = [
- "cfb",
-]
-
[[package]]
name = "inlinable_string"
version = "0.1.15"
@@ -5078,15 +3548,6 @@ dependencies = [
"generic-array",
]
-[[package]]
-name = "instant"
-version = "0.1.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
-dependencies = [
- "cfg-if",
-]
-
[[package]]
name = "integer-encoding"
version = "3.0.4"
@@ -5141,15 +3602,6 @@ version = "1.70.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
-[[package]]
-name = "itertools"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
-dependencies = [
- "either",
-]
-
[[package]]
name = "itertools"
version = "0.12.1"
@@ -5177,63 +3629,12 @@ dependencies = [
"either",
]
-[[package]]
-name = "itoa"
-version = "0.4.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
-
[[package]]
name = "itoa"
version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
-[[package]]
-name = "javascriptcore-rs"
-version = "1.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc"
-dependencies = [
- "bitflags 1.3.2",
- "glib",
- "javascriptcore-rs-sys",
-]
-
-[[package]]
-name = "javascriptcore-rs-sys"
-version = "1.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124"
-dependencies = [
- "glib-sys",
- "gobject-sys",
- "libc",
- "system-deps",
-]
-
-[[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.33"
@@ -5269,32 +3670,6 @@ dependencies = [
"simple_asn1",
]
-[[package]]
-name = "keyboard-types"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a"
-dependencies = [
- "bitflags 2.9.2",
- "serde",
- "unicode-segmentation",
-]
-
-[[package]]
-name = "keyring"
-version = "3.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eebcc3aff044e5944a8fbaf69eb277d11986064cba30c468730e8b9909fb551c"
-dependencies = [
- "byteorder",
- "dbus-secret-service",
- "log",
- "security-framework 2.11.1",
- "security-framework 3.3.0",
- "windows-sys 0.60.2",
- "zeroize",
-]
-
[[package]]
name = "kqueue"
version = "1.1.1"
@@ -5315,25 +3690,6 @@ dependencies = [
"libc",
]
-[[package]]
-name = "kuchikiki"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8"
-dependencies = [
- "cssparser",
- "html5ever",
- "indexmap 1.9.3",
- "matches",
- "selectors",
-]
-
-[[package]]
-name = "lazy-js-bundle"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e49596223b9d9d4947a14a25c142a6e7d8ab3f27eb3ade269d238bb8b5c267e2"
-
[[package]]
name = "lazy_static"
version = "1.5.0"
@@ -5413,55 +3769,12 @@ dependencies = [
"static_assertions",
]
-[[package]]
-name = "libappindicator"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a"
-dependencies = [
- "glib",
- "gtk",
- "gtk-sys",
- "libappindicator-sys",
- "log",
-]
-
-[[package]]
-name = "libappindicator-sys"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf"
-dependencies = [
- "gtk-sys",
- "libloading 0.7.4",
- "once_cell",
-]
-
[[package]]
name = "libc"
version = "0.2.175"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
-[[package]]
-name = "libdbus-sys"
-version = "0.2.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72"
-dependencies = [
- "pkg-config",
-]
-
-[[package]]
-name = "libloading"
-version = "0.7.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
-dependencies = [
- "cfg-if",
- "winapi",
-]
-
[[package]]
name = "libloading"
version = "0.8.8"
@@ -5507,25 +3820,6 @@ dependencies = [
"uuid",
]
-[[package]]
-name = "libxdo"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00333b8756a3d28e78def82067a377de7fa61b24909000aeaa2b446a948d14db"
-dependencies = [
- "libxdo-sys",
-]
-
-[[package]]
-name = "libxdo-sys"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "db23b9e7e2b7831bbd8aac0bbeeeb7b68cbebc162b227e7052e8e55829a09212"
-dependencies = [
- "libc",
- "x11",
-]
-
[[package]]
name = "libz-sys"
version = "1.1.22"
@@ -5588,12 +3882,6 @@ dependencies = [
"value-bag",
]
-[[package]]
-name = "longest-increasing-subsequence"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b3bd0dd2cd90571056fdb71f6275fada10131182f84899f4b2a916e565d81d86"
-
[[package]]
name = "lru"
version = "0.12.5"
@@ -5658,71 +3946,6 @@ dependencies = [
"pkg-config",
]
-[[package]]
-name = "mac"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
-
-[[package]]
-name = "malloc_buf"
-version = "0.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "manganis"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "317af44b15e7605b85f04525449a3bb631753040156c9b318e6cba8a3ea4ef73"
-dependencies = [
- "const-serialize",
- "manganis-core",
- "manganis-macro",
-]
-
-[[package]]
-name = "manganis-core"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c38bee65cc725b2bba23b5dbb290f57c8be8fadbe2043fb7e2ce73022ea06519"
-dependencies = [
- "const-serialize",
- "dioxus-cli-config",
- "dioxus-core-types",
- "serde",
-]
-
-[[package]]
-name = "manganis-macro"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9f4f71310913c40174d9f0cfcbcb127dad0329ecdb3945678a120db22d3d065"
-dependencies = [
- "dunce",
- "manganis-core",
- "proc-macro2",
- "quote",
- "syn 2.0.106",
-]
-
-[[package]]
-name = "markup5ever"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016"
-dependencies = [
- "log",
- "phf 0.10.1",
- "phf_codegen 0.10.0",
- "string_cache",
- "string_cache_codegen",
- "tendril",
-]
-
[[package]]
name = "matchers"
version = "0.1.0"
@@ -5732,12 +3955,6 @@ dependencies = [
"regex-automata 0.1.10",
]
-[[package]]
-name = "matches"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
-
[[package]]
name = "matchit"
version = "0.8.4"
@@ -5804,7 +4021,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
dependencies = [
"adler2",
- "simd-adler32",
]
[[package]]
@@ -5819,80 +4035,12 @@ dependencies = [
"windows-sys 0.59.0",
]
-[[package]]
-name = "muda"
-version = "0.11.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c47e7625990fc1af2226ea4f34fb2412b03c12639fcb91868581eb3a6893453"
-dependencies = [
- "cocoa 0.25.0",
- "crossbeam-channel",
- "gtk",
- "keyboard-types",
- "libxdo",
- "objc",
- "once_cell",
- "png",
- "thiserror 1.0.69",
- "windows-sys 0.52.0",
-]
-
-[[package]]
-name = "muda"
-version = "0.15.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fdae9c00e61cc0579bcac625e8ad22104c60548a025bfc972dc83868a28e1484"
-dependencies = [
- "crossbeam-channel",
- "dpi",
- "gtk",
- "keyboard-types",
- "libxdo",
- "objc2 0.5.2",
- "objc2-app-kit 0.2.2",
- "objc2-foundation 0.2.2",
- "once_cell",
- "png",
- "thiserror 1.0.69",
- "windows-sys 0.59.0",
-]
-
[[package]]
name = "multimap"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084"
-[[package]]
-name = "ndk"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
-dependencies = [
- "bitflags 2.9.2",
- "jni-sys",
- "log",
- "ndk-sys",
- "num_enum",
- "raw-window-handle 0.6.2",
- "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.6.0+11769913"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873"
-dependencies = [
- "jni-sys",
-]
-
[[package]]
name = "neli"
version = "0.6.5"
@@ -5928,12 +4076,6 @@ dependencies = [
"winapi",
]
-[[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"
@@ -5957,15 +4099,8 @@ dependencies = [
"cfg-if",
"cfg_aliases",
"libc",
- "memoffset",
]
-[[package]]
-name = "nodrop"
-version = "0.1.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
-
[[package]]
name = "nom"
version = "7.1.3"
@@ -5985,15 +4120,6 @@ dependencies = [
"memchr",
]
-[[package]]
-name = "normpath"
-version = "1.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8911957c4b1549ac0dc74e30db9c8b0e66ddcd6d7acc33098f4c63a64a6d7ed"
-dependencies = [
- "windows-sys 0.59.0",
-]
-
[[package]]
name = "notify"
version = "8.2.0"
@@ -6190,7 +4316,7 @@ version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d"
dependencies = [
- "proc-macro-crate 3.3.0",
+ "proc-macro-crate",
"proc-macro2",
"quote",
"syn 2.0.106",
@@ -6218,7 +4344,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d5c6c0ef9702176a570f06ad94f3198bc29c524c8b498f1b9346e1b1bdcbb3a"
dependencies = [
"bitflags 2.9.2",
- "libloading 0.8.8",
+ "libloading",
"nvml-wrapper-sys",
"static_assertions",
"thiserror 1.0.69",
@@ -6231,94 +4357,7 @@ version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd23dbe2eb8d8335d2bce0299e0a07d6a63c089243d626ca75b770a962ff49e6"
dependencies = [
- "libloading 0.8.8",
-]
-
-[[package]]
-name = "objc"
-version = "0.2.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
-dependencies = [
- "malloc_buf",
- "objc_exception",
-]
-
-[[package]]
-name = "objc-foundation"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
-dependencies = [
- "block",
- "objc",
- "objc_id",
-]
-
-[[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"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "561f357ba7f3a2a61563a186a163d0a3a5247e1089524a3981d49adb775078bc"
-dependencies = [
- "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.9.2",
- "block2 0.5.1",
- "libc",
- "objc2 0.5.2",
- "objc2-core-data",
- "objc2-core-image",
- "objc2-foundation 0.2.2",
- "objc2-quartz-core",
-]
-
-[[package]]
-name = "objc2-app-kit"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc"
-dependencies = [
- "bitflags 2.9.2",
- "block2 0.6.1",
- "objc2 0.6.2",
- "objc2-core-foundation",
- "objc2-foundation 0.3.1",
-]
-
-[[package]]
-name = "objc2-core-data"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef"
-dependencies = [
- "bitflags 2.9.2",
- "block2 0.5.1",
- "objc2 0.5.2",
- "objc2-foundation 0.2.2",
+ "libloading",
]
[[package]]
@@ -6328,60 +4367,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166"
dependencies = [
"bitflags 2.9.2",
- "dispatch2",
- "objc2 0.6.2",
-]
-
-[[package]]
-name = "objc2-core-graphics"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4"
-dependencies = [
- "bitflags 2.9.2",
- "objc2-core-foundation",
-]
-
-[[package]]
-name = "objc2-core-image"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80"
-dependencies = [
- "block2 0.5.1",
- "objc2 0.5.2",
- "objc2-foundation 0.2.2",
- "objc2-metal",
-]
-
-[[package]]
-name = "objc2-encode"
-version = "4.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"
-
-[[package]]
-name = "objc2-foundation"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
-dependencies = [
- "bitflags 2.9.2",
- "block2 0.5.1",
- "libc",
- "objc2 0.5.2",
-]
-
-[[package]]
-name = "objc2-foundation"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c"
-dependencies = [
- "bitflags 2.9.2",
- "block2 0.6.1",
- "objc2 0.6.2",
- "objc2-core-foundation",
]
[[package]]
@@ -6394,49 +4379,6 @@ dependencies = [
"objc2-core-foundation",
]
-[[package]]
-name = "objc2-metal"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
-dependencies = [
- "bitflags 2.9.2",
- "block2 0.5.1",
- "objc2 0.5.2",
- "objc2-foundation 0.2.2",
-]
-
-[[package]]
-name = "objc2-quartz-core"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
-dependencies = [
- "bitflags 2.9.2",
- "block2 0.5.1",
- "objc2 0.5.2",
- "objc2-foundation 0.2.2",
- "objc2-metal",
-]
-
-[[package]]
-name = "objc_exception"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
-dependencies = [
- "cc",
-]
-
-[[package]]
-name = "objc_id"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
-dependencies = [
- "objc",
-]
-
[[package]]
name = "object"
version = "0.36.7"
@@ -6604,16 +4546,6 @@ 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 = "outref"
version = "0.5.2"
@@ -6637,31 +4569,6 @@ dependencies = [
"sha2 0.10.9",
]
-[[package]]
-name = "pango"
-version = "0.18.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4"
-dependencies = [
- "gio",
- "glib",
- "libc",
- "once_cell",
- "pango-sys",
-]
-
-[[package]]
-name = "pango-sys"
-version = "0.18.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5"
-dependencies = [
- "glib-sys",
- "gobject-sys",
- "libc",
- "system-deps",
-]
-
[[package]]
name = "parking"
version = "2.2.1"
@@ -6833,27 +4740,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772"
dependencies = [
"fixedbitset 0.5.7",
- "indexmap 2.10.0",
-]
-
-[[package]]
-name = "phf"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
-dependencies = [
- "phf_macros",
- "phf_shared 0.8.0",
- "proc-macro-hack",
-]
-
-[[package]]
-name = "phf"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
-dependencies = [
- "phf_shared 0.10.0",
+ "indexmap",
]
[[package]]
@@ -6862,98 +4749,7 @@ version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7"
dependencies = [
- "phf_shared 0.12.1",
-]
-
-[[package]]
-name = "phf_codegen"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
-dependencies = [
- "phf_generator 0.8.0",
- "phf_shared 0.8.0",
-]
-
-[[package]]
-name = "phf_codegen"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
-dependencies = [
- "phf_generator 0.10.0",
- "phf_shared 0.10.0",
-]
-
-[[package]]
-name = "phf_generator"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
-dependencies = [
- "phf_shared 0.8.0",
- "rand 0.7.3",
-]
-
-[[package]]
-name = "phf_generator"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
-dependencies = [
- "phf_shared 0.10.0",
- "rand 0.8.5",
-]
-
-[[package]]
-name = "phf_generator"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
-dependencies = [
- "phf_shared 0.11.3",
- "rand 0.8.5",
-]
-
-[[package]]
-name = "phf_macros"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c"
-dependencies = [
- "phf_generator 0.8.0",
- "phf_shared 0.8.0",
- "proc-macro-hack",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "phf_shared"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
-dependencies = [
- "siphasher 0.3.11",
-]
-
-[[package]]
-name = "phf_shared"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
-dependencies = [
- "siphasher 0.3.11",
-]
-
-[[package]]
-name = "phf_shared"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
-dependencies = [
- "siphasher 1.0.1",
+ "phf_shared",
]
[[package]]
@@ -6962,7 +4758,7 @@ version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06005508882fb681fd97892ecff4b7fd0fee13ef1aa569f8695dae7ab9099981"
dependencies = [
- "siphasher 1.0.1",
+ "siphasher",
]
[[package]]
@@ -6997,17 +4793,6 @@ 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 = "pkcs1"
version = "0.7.5"
@@ -7073,45 +4858,6 @@ dependencies = [
"plotters-backend",
]
-[[package]]
-name = "png"
-version = "0.17.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526"
-dependencies = [
- "bitflags 1.3.2",
- "crc32fast",
- "fdeflate",
- "flate2",
- "miniz_oxide",
-]
-
-[[package]]
-name = "polling"
-version = "3.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5bd19146350fe804f7cb2669c851c03d69da628803dab0d98018142aaa5d829"
-dependencies = [
- "cfg-if",
- "concurrent-queue",
- "hermit-abi",
- "pin-project-lite",
- "rustix 1.0.8",
- "windows-sys 0.60.2",
-]
-
-[[package]]
-name = "pollster"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2"
-
-[[package]]
-name = "pollster"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3"
-
[[package]]
name = "poly1305"
version = "0.8.0"
@@ -7159,12 +4905,6 @@ dependencies = [
"zerocopy",
]
-[[package]]
-name = "precomputed-hash"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
-
[[package]]
name = "pretty_assertions"
version = "1.4.1"
@@ -7185,64 +4925,15 @@ dependencies = [
"syn 2.0.106",
]
-[[package]]
-name = "proc-macro-crate"
-version = "1.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
-dependencies = [
- "once_cell",
- "toml_edit 0.19.15",
-]
-
-[[package]]
-name = "proc-macro-crate"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8"
-dependencies = [
- "toml_edit 0.20.7",
-]
-
[[package]]
name = "proc-macro-crate"
version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35"
dependencies = [
- "toml_edit 0.22.27",
+ "toml_edit",
]
-[[package]]
-name = "proc-macro-error"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
-dependencies = [
- "proc-macro-error-attr",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
- "version_check",
-]
-
-[[package]]
-name = "proc-macro-error-attr"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
-dependencies = [
- "proc-macro2",
- "quote",
- "version_check",
-]
-
-[[package]]
-name = "proc-macro-hack"
-version = "0.5.20+deprecated"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
-
[[package]]
name = "proc-macro2"
version = "1.0.101"
@@ -7291,7 +4982,7 @@ version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac6c3320f9abac597dcbc668774ef006702672474aad53c6d596b62e487b40b1"
dependencies = [
- "heck 0.5.0",
+ "heck",
"itertools 0.14.0",
"log",
"multimap",
@@ -7462,20 +5153,6 @@ version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
-[[package]]
-name = "rand"
-version = "0.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
-dependencies = [
- "getrandom 0.1.16",
- "libc",
- "rand_chacha 0.2.2",
- "rand_core 0.5.1",
- "rand_hc",
- "rand_pcg",
-]
-
[[package]]
name = "rand"
version = "0.8.5"
@@ -7497,16 +5174,6 @@ dependencies = [
"rand_core 0.9.3",
]
-[[package]]
-name = "rand_chacha"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
-dependencies = [
- "ppv-lite86",
- "rand_core 0.5.1",
-]
-
[[package]]
name = "rand_chacha"
version = "0.3.1"
@@ -7527,15 +5194,6 @@ dependencies = [
"rand_core 0.9.3",
]
-[[package]]
-name = "rand_core"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
-dependencies = [
- "getrandom 0.1.16",
-]
-
[[package]]
name = "rand_core"
version = "0.6.4"
@@ -7554,36 +5212,6 @@ dependencies = [
"getrandom 0.3.3",
]
-[[package]]
-name = "rand_hc"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
-dependencies = [
- "rand_core 0.5.1",
-]
-
-[[package]]
-name = "rand_pcg"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
-dependencies = [
- "rand_core 0.5.1",
-]
-
-[[package]]
-name = "raw-window-handle"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
-
-[[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.11.0"
@@ -7791,7 +5419,6 @@ dependencies = [
"js-sys",
"log",
"mime",
- "mime_guess",
"percent-encoding",
"pin-project-lite",
"quinn",
@@ -7826,53 +5453,6 @@ dependencies = [
"zeroize",
]
-[[package]]
-name = "rfd"
-version = "0.14.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25a73a7337fc24366edfca76ec521f51877b114e42dab584008209cca6719251"
-dependencies = [
- "ashpd 0.8.1",
- "block",
- "dispatch",
- "js-sys",
- "log",
- "objc",
- "objc-foundation",
- "objc_id",
- "pollster 0.3.0",
- "raw-window-handle 0.6.2",
- "urlencoding",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "rfd"
-version = "0.15.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed"
-dependencies = [
- "ashpd 0.11.0",
- "block2 0.6.1",
- "dispatch2",
- "js-sys",
- "log",
- "objc2 0.6.2",
- "objc2-app-kit 0.3.1",
- "objc2-core-foundation",
- "objc2-foundation 0.3.1",
- "pollster 0.4.0",
- "raw-window-handle 0.6.2",
- "urlencoding",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
- "windows-sys 0.59.0",
-]
-
[[package]]
name = "ring"
version = "0.17.14"
@@ -8016,60 +5596,6 @@ dependencies = [
"walkdir",
]
-[[package]]
-name = "rust-i18n"
-version = "3.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fda2551fdfaf6cc5ee283adc15e157047b92ae6535cf80f6d4962d05717dc332"
-dependencies = [
- "globwalk",
- "once_cell",
- "regex",
- "rust-i18n-macro",
- "rust-i18n-support",
- "smallvec",
-]
-
-[[package]]
-name = "rust-i18n-macro"
-version = "3.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22baf7d7f56656d23ebe24f6bb57a5d40d2bce2a5f1c503e692b5b2fa450f965"
-dependencies = [
- "glob",
- "once_cell",
- "proc-macro2",
- "quote",
- "rust-i18n-support",
- "serde",
- "serde_json",
- "serde_yaml",
- "syn 2.0.106",
-]
-
-[[package]]
-name = "rust-i18n-support"
-version = "3.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "940ed4f52bba4c0152056d771e563b7133ad9607d4384af016a134b58d758f19"
-dependencies = [
- "arc-swap",
- "base62",
- "globwalk",
- "itertools 0.11.0",
- "lazy_static",
- "normpath",
- "once_cell",
- "proc-macro2",
- "regex",
- "serde",
- "serde_json",
- "serde_yaml",
- "siphasher 1.0.1",
- "toml",
- "triomphe",
-]
-
[[package]]
name = "rustc-demangle"
version = "0.1.26"
@@ -8381,26 +5907,6 @@ dependencies = [
"xxhash-rust",
]
-[[package]]
-name = "rustfs-gui"
-version = "0.0.5"
-dependencies = [
- "chrono",
- "dioxus",
- "dirs",
- "hex",
- "keyring",
- "rfd 0.15.4",
- "rust-embed",
- "rust-i18n",
- "serde",
- "serde_json",
- "sha2 0.10.9",
- "tokio",
- "tracing-appender",
- "tracing-subscriber",
-]
-
[[package]]
name = "rustfs-iam"
version = "0.0.5"
@@ -8479,7 +5985,7 @@ dependencies = [
"async-trait",
"axum",
"chrono",
- "dashmap 6.1.0",
+ "dashmap",
"form_urlencoded",
"futures",
"once_cell",
@@ -8716,7 +6222,7 @@ dependencies = [
"serde",
"sha1 0.10.6",
"sha2 0.10.9",
- "siphasher 1.0.1",
+ "siphasher",
"snap",
"sysinfo",
"tempfile",
@@ -8949,7 +6455,7 @@ dependencies = [
"http-body-util",
"httparse",
"hyper 1.7.0",
- "itoa 1.0.15",
+ "itoa",
"md-5",
"memchr",
"mime",
@@ -9028,12 +6534,6 @@ dependencies = [
"syn 2.0.106",
]
-[[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"
@@ -9106,26 +6606,6 @@ dependencies = [
"libc",
]
-[[package]]
-name = "selectors"
-version = "0.22.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe"
-dependencies = [
- "bitflags 1.3.2",
- "cssparser",
- "derive_more",
- "fxhash",
- "log",
- "matches",
- "phf 0.8.0",
- "phf_codegen 0.8.0",
- "precomputed-hash",
- "servo_arc",
- "smallvec",
- "thin-slice",
-]
-
[[package]]
name = "semver"
version = "1.0.26"
@@ -9135,15 +6615,6 @@ dependencies = [
"serde",
]
-[[package]]
-name = "send_wrapper"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73"
-dependencies = [
- "futures-core",
-]
-
[[package]]
name = "seq-macro"
version = "0.3.6"
@@ -9180,17 +6651,6 @@ dependencies = [
"serde",
]
-[[package]]
-name = "serde-wasm-bindgen"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e"
-dependencies = [
- "js-sys",
- "serde",
- "wasm-bindgen",
-]
-
[[package]]
name = "serde-xml-rs"
version = "0.6.0"
@@ -9240,7 +6700,7 @@ version = "1.0.143"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a"
dependencies = [
- "itoa 1.0.15",
+ "itoa",
"memchr",
"ryu",
"serde",
@@ -9252,32 +6712,10 @@ version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a"
dependencies = [
- "itoa 1.0.15",
+ "itoa",
"serde",
]
-[[package]]
-name = "serde_qs"
-version = "0.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0431a35568651e363364210c91983c1da5eb29404d9f0928b67d4ebcfa7d330c"
-dependencies = [
- "percent-encoding",
- "serde",
- "thiserror 1.0.69",
-]
-
-[[package]]
-name = "serde_repr"
-version = "0.1.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.106",
-]
-
[[package]]
name = "serde_spanned"
version = "0.6.9"
@@ -9294,24 +6732,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
dependencies = [
"form_urlencoded",
- "itoa 1.0.15",
+ "itoa",
"ryu",
"serde",
]
-[[package]]
-name = "serde_yaml"
-version = "0.9.34+deprecated"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
-dependencies = [
- "indexmap 2.10.0",
- "itoa 1.0.15",
- "ryu",
- "serde",
- "unsafe-libyaml",
-]
-
[[package]]
name = "serial_test"
version = "3.2.0"
@@ -9337,69 +6762,6 @@ dependencies = [
"syn 2.0.106",
]
-[[package]]
-name = "server_fn"
-version = "0.6.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fae7a3038a32e5a34ba32c6c45eb4852f8affaf8b794ebfcd4b1099e2d62ebe"
-dependencies = [
- "bytes",
- "const_format",
- "dashmap 5.5.3",
- "futures",
- "gloo-net",
- "http 1.3.1",
- "js-sys",
- "once_cell",
- "reqwest",
- "send_wrapper",
- "serde",
- "serde_json",
- "serde_qs",
- "server_fn_macro_default",
- "thiserror 1.0.69",
- "url",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "wasm-streams",
- "web-sys",
- "xxhash-rust",
-]
-
-[[package]]
-name = "server_fn_macro"
-version = "0.6.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "faaaf648c6967aef78177c0610478abb5a3455811f401f3c62d10ae9bd3901a1"
-dependencies = [
- "const_format",
- "convert_case 0.6.0",
- "proc-macro2",
- "quote",
- "syn 2.0.106",
- "xxhash-rust",
-]
-
-[[package]]
-name = "server_fn_macro_default"
-version = "0.6.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f2aa8119b558a17992e0ac1fd07f080099564f24532858811ce04f742542440"
-dependencies = [
- "server_fn_macro",
- "syn 2.0.106",
-]
-
-[[package]]
-name = "servo_arc"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432"
-dependencies = [
- "nodrop",
- "stable_deref_trait",
-]
-
[[package]]
name = "sha1"
version = "0.10.6"
@@ -9482,16 +6844,6 @@ version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
-[[package]]
-name = "signal-hook"
-version = "0.3.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2"
-dependencies = [
- "libc",
- "signal-hook-registry",
-]
-
[[package]]
name = "signal-hook-registry"
version = "1.4.6"
@@ -9545,12 +6897,6 @@ dependencies = [
"time",
]
-[[package]]
-name = "siphasher"
-version = "0.3.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
-
[[package]]
name = "siphasher"
version = "1.0.1"
@@ -9563,45 +6909,6 @@ version = "0.4.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
-[[package]]
-name = "sledgehammer_bindgen"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49e83e178d176459c92bc129cfd0958afac3ced925471b889b3a75546cfc4133"
-dependencies = [
- "sledgehammer_bindgen_macro",
- "wasm-bindgen",
-]
-
-[[package]]
-name = "sledgehammer_bindgen_macro"
-version = "0.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f62f06db0370222f7f498ef478fce9f8df5828848d1d3517e3331936d7074f55"
-dependencies = [
- "quote",
- "syn 2.0.106",
-]
-
-[[package]]
-name = "sledgehammer_utils"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "debdd4b83524961983cea3c55383b3910fd2f24fd13a188f5b091d2d504a61ae"
-dependencies = [
- "rustc-hash 1.1.0",
-]
-
-[[package]]
-name = "slotmap"
-version = "1.0.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a"
-dependencies = [
- "serde",
- "version_check",
-]
-
[[package]]
name = "smallvec"
version = "1.15.1"
@@ -9627,7 +6934,7 @@ version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1961e2ef424c1424204d3a5d6975f934f56b6d50ff5732382d84ebf460e147f7"
dependencies = [
- "heck 0.5.0",
+ "heck",
"proc-macro2",
"quote",
"syn 2.0.106",
@@ -9659,32 +6966,6 @@ dependencies = [
"windows-sys 0.59.0",
]
-[[package]]
-name = "soup3"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f"
-dependencies = [
- "futures-channel",
- "gio",
- "glib",
- "libc",
- "soup3-sys",
-]
-
-[[package]]
-name = "soup3-sys"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27"
-dependencies = [
- "gio-sys",
- "glib-sys",
- "gobject-sys",
- "libc",
- "system-deps",
-]
-
[[package]]
name = "spin"
version = "0.9.8"
@@ -9771,31 +7052,6 @@ dependencies = [
"thiserror 2.0.15",
]
-[[package]]
-name = "string_cache"
-version = "0.8.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f"
-dependencies = [
- "new_debug_unreachable",
- "parking_lot",
- "phf_shared 0.11.3",
- "precomputed-hash",
- "serde",
-]
-
-[[package]]
-name = "string_cache_codegen"
-version = "0.5.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0"
-dependencies = [
- "phf_generator 0.11.3",
- "phf_shared 0.11.3",
- "proc-macro2",
- "quote",
-]
-
[[package]]
name = "strsim"
version = "0.11.1"
@@ -9817,7 +7073,7 @@ version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7"
dependencies = [
- "heck 0.5.0",
+ "heck",
"proc-macro2",
"quote",
"syn 2.0.106",
@@ -9860,7 +7116,7 @@ version = "2.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f214f427ad94a553e5ca5514c95c6be84667cbc5568cce957f03f3477d03d5c"
dependencies = [
- "itoa 1.0.15",
+ "itoa",
"ryu",
"sval",
]
@@ -9871,7 +7127,7 @@ version = "2.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "389ed34b32e638dec9a99c8ac92d0aa1220d40041026b625474c2b6a4d6f4feb"
dependencies = [
- "itoa 1.0.15",
+ "itoa",
"ryu",
"sval",
]
@@ -9974,7 +7230,7 @@ dependencies = [
"ntapi",
"objc2-core-foundation",
"objc2-io-kit",
- "windows 0.61.3",
+ "windows",
]
[[package]]
@@ -9998,76 +7254,6 @@ dependencies = [
"libc",
]
-[[package]]
-name = "system-deps"
-version = "6.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349"
-dependencies = [
- "cfg-expr",
- "heck 0.5.0",
- "pkg-config",
- "toml",
- "version-compare",
-]
-
-[[package]]
-name = "tao"
-version = "0.30.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6682a07cf5bab0b8a2bd20d0a542917ab928b5edb75ebd4eda6b05cbaab872da"
-dependencies = [
- "bitflags 2.9.2",
- "cocoa 0.26.1",
- "core-foundation 0.10.1",
- "core-graphics 0.24.0",
- "crossbeam-channel",
- "dispatch",
- "dlopen2",
- "dpi",
- "gdkwayland-sys",
- "gdkx11-sys",
- "gtk",
- "instant",
- "jni",
- "lazy_static",
- "libc",
- "log",
- "ndk",
- "ndk-context",
- "ndk-sys",
- "objc",
- "once_cell",
- "parking_lot",
- "raw-window-handle 0.5.2",
- "raw-window-handle 0.6.2",
- "scopeguard",
- "tao-macros",
- "unicode-segmentation",
- "url",
- "windows 0.58.0",
- "windows-core 0.58.0",
- "windows-version",
- "x11-dl",
-]
-
-[[package]]
-name = "tao-macros"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.106",
-]
-
-[[package]]
-name = "target-lexicon"
-version = "0.12.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
-
[[package]]
name = "temp-env"
version = "0.3.6"
@@ -10090,17 +7276,6 @@ dependencies = [
"windows-sys 0.59.0",
]
-[[package]]
-name = "tendril"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
-dependencies = [
- "futf",
- "mac",
- "utf-8",
-]
-
[[package]]
name = "test-case"
version = "3.3.1"
@@ -10134,12 +7309,6 @@ dependencies = [
"test-case-core",
]
-[[package]]
-name = "thin-slice"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
-
[[package]]
name = "thiserror"
version = "1.0.69"
@@ -10227,7 +7396,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40"
dependencies = [
"deranged",
- "itoa 1.0.15",
+ "itoa",
"libc",
"num-conv",
"num_threads",
@@ -10314,7 +7483,6 @@ dependencies = [
"slab",
"socket2 0.6.0",
"tokio-macros",
- "tracing",
"windows-sys 0.59.0",
]
@@ -10422,7 +7590,7 @@ dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
- "toml_edit 0.22.27",
+ "toml_edit",
]
[[package]]
@@ -10434,40 +7602,18 @@ dependencies = [
"serde",
]
-[[package]]
-name = "toml_edit"
-version = "0.19.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
-dependencies = [
- "indexmap 2.10.0",
- "toml_datetime",
- "winnow 0.5.40",
-]
-
-[[package]]
-name = "toml_edit"
-version = "0.20.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
-dependencies = [
- "indexmap 2.10.0",
- "toml_datetime",
- "winnow 0.5.40",
-]
-
[[package]]
name = "toml_edit"
version = "0.22.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
dependencies = [
- "indexmap 2.10.0",
+ "indexmap",
"serde",
"serde_spanned",
"toml_datetime",
"toml_write",
- "winnow 0.7.12",
+ "winnow",
]
[[package]]
@@ -10580,7 +7726,7 @@ checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
dependencies = [
"futures-core",
"futures-util",
- "indexmap 2.10.0",
+ "indexmap",
"pin-project-lite",
"slab",
"sync_wrapper",
@@ -10639,18 +7785,6 @@ dependencies = [
"tracing-core",
]
-[[package]]
-name = "tracing-appender"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf"
-dependencies = [
- "crossbeam-channel",
- "thiserror 1.0.69",
- "time",
- "tracing-subscriber",
-]
-
[[package]]
name = "tracing-attributes"
version = "0.1.30"
@@ -10743,17 +7877,6 @@ dependencies = [
"tracing-serde",
]
-[[package]]
-name = "tracing-wasm"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07"
-dependencies = [
- "tracing",
- "tracing-subscriber",
- "wasm-bindgen",
-]
-
[[package]]
name = "transform-stream"
version = "0.3.1"
@@ -10763,62 +7886,12 @@ dependencies = [
"futures-core",
]
-[[package]]
-name = "tray-icon"
-version = "0.19.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eadd75f5002e2513eaa19b2365f533090cc3e93abd38788452d9ea85cff7b48a"
-dependencies = [
- "crossbeam-channel",
- "dirs",
- "libappindicator",
- "muda 0.15.3",
- "objc2 0.6.2",
- "objc2-app-kit 0.3.1",
- "objc2-core-foundation",
- "objc2-core-graphics",
- "objc2-foundation 0.3.1",
- "once_cell",
- "png",
- "thiserror 2.0.15",
- "windows-sys 0.59.0",
-]
-
-[[package]]
-name = "triomphe"
-version = "0.1.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef8f7726da4807b58ea5c96fdc122f80702030edc33b35aff9190a51148ccc85"
-dependencies = [
- "arc-swap",
- "serde",
- "stable_deref_trait",
-]
-
[[package]]
name = "try-lock"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
-[[package]]
-name = "tungstenite"
-version = "0.23.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8"
-dependencies = [
- "byteorder",
- "bytes",
- "data-encoding",
- "http 1.3.1",
- "httparse",
- "log",
- "rand 0.8.5",
- "sha1 0.10.6",
- "thiserror 1.0.69",
- "utf-8",
-]
-
[[package]]
name = "twox-hash"
version = "1.6.3"
@@ -10873,17 +7946,6 @@ dependencies = [
"tz-rs",
]
-[[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 = "uncased"
version = "0.9.10"
@@ -10933,12 +7995,6 @@ dependencies = [
"subtle",
]
-[[package]]
-name = "unsafe-libyaml"
-version = "0.2.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
-
[[package]]
name = "untrusted"
version = "0.9.0"
@@ -10954,7 +8010,6 @@ dependencies = [
"form_urlencoded",
"idna",
"percent-encoding",
- "serde",
]
[[package]]
@@ -10963,12 +8018,6 @@ version = "2.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
-[[package]]
-name = "utf-8"
-version = "0.7.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
-
[[package]]
name = "utf8_iter"
version = "1.0.4"
@@ -11054,12 +8103,6 @@ version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
-[[package]]
-name = "version-compare"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
-
[[package]]
name = "version_check"
version = "0.9.5"
@@ -11091,34 +8134,6 @@ dependencies = [
"try-lock",
]
-[[package]]
-name = "warnings"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64f68998838dab65727c9b30465595c6f7c953313559371ca8bf31759b3680ad"
-dependencies = [
- "pin-project",
- "tracing",
- "warnings-macro",
-]
-
-[[package]]
-name = "warnings-macro"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59195a1db0e95b920366d949ba5e0d3fc0e70b67c09be15ce5abb790106b0571"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.106",
-]
-
-[[package]]
-name = "wasi"
-version = "0.9.0+wasi-snapshot-preview1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
-
[[package]]
name = "wasi"
version = "0.11.1+wasi-snapshot-preview1"
@@ -11218,66 +8233,6 @@ dependencies = [
"web-sys",
]
-[[package]]
-name = "wayland-backend"
-version = "0.3.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35"
-dependencies = [
- "cc",
- "downcast-rs",
- "rustix 1.0.8",
- "scoped-tls",
- "smallvec",
- "wayland-sys",
-]
-
-[[package]]
-name = "wayland-client"
-version = "0.31.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d"
-dependencies = [
- "bitflags 2.9.2",
- "rustix 1.0.8",
- "wayland-backend",
- "wayland-scanner",
-]
-
-[[package]]
-name = "wayland-protocols"
-version = "0.32.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901"
-dependencies = [
- "bitflags 2.9.2",
- "wayland-backend",
- "wayland-client",
- "wayland-scanner",
-]
-
-[[package]]
-name = "wayland-scanner"
-version = "0.31.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3"
-dependencies = [
- "proc-macro2",
- "quick-xml 0.37.5",
- "quote",
-]
-
-[[package]]
-name = "wayland-sys"
-version = "0.31.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142"
-dependencies = [
- "dlib",
- "log",
- "pkg-config",
-]
-
[[package]]
name = "web-sys"
version = "0.3.77"
@@ -11298,67 +8253,6 @@ dependencies = [
"wasm-bindgen",
]
-[[package]]
-name = "webbrowser"
-version = "0.8.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "db67ae75a9405634f5882791678772c94ff5f16a66535aae186e26aa0841fc8b"
-dependencies = [
- "core-foundation 0.9.4",
- "home",
- "jni",
- "log",
- "ndk-context",
- "objc",
- "raw-window-handle 0.5.2",
- "url",
- "web-sys",
-]
-
-[[package]]
-name = "webkit2gtk"
-version = "2.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a"
-dependencies = [
- "bitflags 1.3.2",
- "cairo-rs",
- "gdk",
- "gdk-sys",
- "gio",
- "gio-sys",
- "glib",
- "glib-sys",
- "gobject-sys",
- "gtk",
- "gtk-sys",
- "javascriptcore-rs",
- "libc",
- "once_cell",
- "soup3",
- "webkit2gtk-sys",
-]
-
-[[package]]
-name = "webkit2gtk-sys"
-version = "2.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c"
-dependencies = [
- "bitflags 1.3.2",
- "cairo-sys-rs",
- "gdk-sys",
- "gio-sys",
- "glib-sys",
- "gobject-sys",
- "gtk-sys",
- "javascriptcore-rs-sys",
- "libc",
- "pkg-config",
- "soup3-sys",
- "system-deps",
-]
-
[[package]]
name = "webpki-roots"
version = "1.0.2"
@@ -11368,42 +8262,6 @@ dependencies = [
"rustls-pki-types",
]
-[[package]]
-name = "webview2-com"
-version = "0.33.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f61ff3d9d0ee4efcb461b14eb3acfda2702d10dc329f339303fc3e57215ae2c"
-dependencies = [
- "webview2-com-macros",
- "webview2-com-sys",
- "windows 0.58.0",
- "windows-core 0.58.0",
- "windows-implement 0.58.0",
- "windows-interface 0.58.0",
-]
-
-[[package]]
-name = "webview2-com-macros"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.106",
-]
-
-[[package]]
-name = "webview2-com-sys"
-version = "0.33.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3a3e2eeb58f82361c93f9777014668eb3d07e7d174ee4c819575a9208011886"
-dependencies = [
- "thiserror 1.0.69",
- "windows 0.58.0",
- "windows-core 0.58.0",
-]
-
[[package]]
name = "which"
version = "4.4.2"
@@ -11456,16 +8314,6 @@ 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 0.58.0",
- "windows-targets 0.52.6",
-]
-
[[package]]
name = "windows"
version = "0.61.3"
@@ -11473,7 +8321,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
dependencies = [
"windows-collections",
- "windows-core 0.61.2",
+ "windows-core",
"windows-future",
"windows-link",
"windows-numerics",
@@ -11485,20 +8333,7 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
dependencies = [
- "windows-core 0.61.2",
-]
-
-[[package]]
-name = "windows-core"
-version = "0.58.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99"
-dependencies = [
- "windows-implement 0.58.0",
- "windows-interface 0.58.0",
- "windows-result 0.2.0",
- "windows-strings 0.1.0",
- "windows-targets 0.52.6",
+ "windows-core",
]
[[package]]
@@ -11507,11 +8342,11 @@ version = "0.61.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
dependencies = [
- "windows-implement 0.60.0",
- "windows-interface 0.59.1",
+ "windows-implement",
+ "windows-interface",
"windows-link",
- "windows-result 0.3.4",
- "windows-strings 0.4.2",
+ "windows-result",
+ "windows-strings",
]
[[package]]
@@ -11520,22 +8355,11 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
dependencies = [
- "windows-core 0.61.2",
+ "windows-core",
"windows-link",
"windows-threading",
]
-[[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 2.0.106",
-]
-
[[package]]
name = "windows-implement"
version = "0.60.0"
@@ -11547,17 +8371,6 @@ dependencies = [
"syn 2.0.106",
]
-[[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 2.0.106",
-]
-
[[package]]
name = "windows-interface"
version = "0.59.1"
@@ -11581,7 +8394,7 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
dependencies = [
- "windows-core 0.61.2",
+ "windows-core",
"windows-link",
]
@@ -11592,17 +8405,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e"
dependencies = [
"windows-link",
- "windows-result 0.3.4",
- "windows-strings 0.4.2",
-]
-
-[[package]]
-name = "windows-result"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e"
-dependencies = [
- "windows-targets 0.52.6",
+ "windows-result",
+ "windows-strings",
]
[[package]]
@@ -11614,16 +8418,6 @@ dependencies = [
"windows-link",
]
-[[package]]
-name = "windows-strings"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10"
-dependencies = [
- "windows-result 0.2.0",
- "windows-targets 0.52.6",
-]
-
[[package]]
name = "windows-strings"
version = "0.4.2"
@@ -11633,24 +8427,6 @@ dependencies = [
"windows-link",
]
-[[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]]
name = "windows-sys"
version = "0.52.0"
@@ -11678,36 +8454,6 @@ dependencies = [
"windows-targets 0.53.3",
]
-[[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]]
name = "windows-targets"
version = "0.52.6"
@@ -11750,27 +8496,6 @@ dependencies = [
"windows-link",
]
-[[package]]
-name = "windows-version"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e04a5c6627e310a23ad2358483286c7df260c964eb2d003d8efd6d0f4e79265c"
-dependencies = [
- "windows-link",
-]
-
-[[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"
@@ -11783,18 +8508,6 @@ version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
-[[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"
@@ -11807,18 +8520,6 @@ version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
-[[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"
@@ -11843,18 +8544,6 @@ version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
-[[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"
@@ -11867,18 +8556,6 @@ version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
-[[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"
@@ -11891,18 +8568,6 @@ version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
-[[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"
@@ -11915,18 +8580,6 @@ version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
-[[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"
@@ -11939,15 +8592,6 @@ version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
-[[package]]
-name = "winnow"
-version = "0.5.40"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876"
-dependencies = [
- "memchr",
-]
-
[[package]]
name = "winnow"
version = "0.7.12"
@@ -11984,67 +8628,6 @@ version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
-[[package]]
-name = "wry"
-version = "0.45.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac0099a336829fbf54c26b5f620c68980ebbe37196772aeaf6118df4931b5cb0"
-dependencies = [
- "base64 0.22.1",
- "block",
- "cocoa 0.26.1",
- "core-graphics 0.24.0",
- "crossbeam-channel",
- "dpi",
- "dunce",
- "gdkx11",
- "gtk",
- "html5ever",
- "http 1.3.1",
- "javascriptcore-rs",
- "jni",
- "kuchikiki",
- "libc",
- "ndk",
- "objc",
- "objc_id",
- "once_cell",
- "percent-encoding",
- "raw-window-handle 0.6.2",
- "sha2 0.10.9",
- "soup3",
- "tao-macros",
- "thiserror 1.0.69",
- "webkit2gtk",
- "webkit2gtk-sys",
- "webview2-com",
- "windows 0.58.0",
- "windows-core 0.58.0",
- "windows-version",
- "x11-dl",
-]
-
-[[package]]
-name = "x11"
-version = "2.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e"
-dependencies = [
- "libc",
- "pkg-config",
-]
-
-[[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 = "xattr"
version = "1.5.1"
@@ -12055,16 +8638,6 @@ dependencies = [
"rustix 1.0.8",
]
-[[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 = "xml-rs"
version = "0.8.27"
@@ -12122,118 +8695,6 @@ dependencies = [
"synstructure",
]
-[[package]]
-name = "zbus"
-version = "4.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725"
-dependencies = [
- "async-broadcast",
- "async-process",
- "async-recursion",
- "async-trait",
- "enumflags2",
- "event-listener",
- "futures-core",
- "futures-sink",
- "futures-util",
- "hex",
- "nix 0.29.0",
- "ordered-stream",
- "rand 0.8.5",
- "serde",
- "serde_repr",
- "sha1 0.10.6",
- "static_assertions",
- "tokio",
- "tracing",
- "uds_windows",
- "windows-sys 0.52.0",
- "xdg-home",
- "zbus_macros 4.4.0",
- "zbus_names 3.0.0",
- "zvariant 4.2.0",
-]
-
-[[package]]
-name = "zbus"
-version = "5.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bb4f9a464286d42851d18a605f7193b8febaf5b0919d71c6399b7b26e5b0aad"
-dependencies = [
- "async-broadcast",
- "async-recursion",
- "async-trait",
- "enumflags2",
- "event-listener",
- "futures-core",
- "futures-lite",
- "hex",
- "nix 0.30.1",
- "ordered-stream",
- "serde",
- "serde_repr",
- "tokio",
- "tracing",
- "uds_windows",
- "windows-sys 0.59.0",
- "winnow 0.7.12",
- "zbus_macros 5.9.0",
- "zbus_names 4.2.0",
- "zvariant 5.6.0",
-]
-
-[[package]]
-name = "zbus_macros"
-version = "4.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e"
-dependencies = [
- "proc-macro-crate 3.3.0",
- "proc-macro2",
- "quote",
- "syn 2.0.106",
- "zvariant_utils 2.1.0",
-]
-
-[[package]]
-name = "zbus_macros"
-version = "5.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef9859f68ee0c4ee2e8cde84737c78e3f4c54f946f2a38645d0d4c7a95327659"
-dependencies = [
- "proc-macro-crate 3.3.0",
- "proc-macro2",
- "quote",
- "syn 2.0.106",
- "zbus_names 4.2.0",
- "zvariant 5.6.0",
- "zvariant_utils 3.2.0",
-]
-
-[[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 4.2.0",
-]
-
-[[package]]
-name = "zbus_names"
-version = "4.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97"
-dependencies = [
- "serde",
- "static_assertions",
- "winnow 0.7.12",
- "zvariant 5.6.0",
-]
-
[[package]]
name = "zerocopy"
version = "0.8.26"
@@ -12345,7 +8806,7 @@ dependencies = [
"flate2",
"getrandom 0.3.3",
"hmac 0.12.1",
- "indexmap 2.10.0",
+ "indexmap",
"lzma-rs",
"memchr",
"pbkdf2",
@@ -12397,83 +8858,3 @@ dependencies = [
"cc",
"pkg-config",
]
-
-[[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",
- "url",
- "zvariant_derive 4.2.0",
-]
-
-[[package]]
-name = "zvariant"
-version = "5.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f"
-dependencies = [
- "endi",
- "enumflags2",
- "serde",
- "url",
- "winnow 0.7.12",
- "zvariant_derive 5.6.0",
- "zvariant_utils 3.2.0",
-]
-
-[[package]]
-name = "zvariant_derive"
-version = "4.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449"
-dependencies = [
- "proc-macro-crate 3.3.0",
- "proc-macro2",
- "quote",
- "syn 2.0.106",
- "zvariant_utils 2.1.0",
-]
-
-[[package]]
-name = "zvariant_derive"
-version = "5.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208"
-dependencies = [
- "proc-macro-crate 3.3.0",
- "proc-macro2",
- "quote",
- "syn 2.0.106",
- "zvariant_utils 3.2.0",
-]
-
-[[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 2.0.106",
-]
-
-[[package]]
-name = "zvariant_utils"
-version = "3.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34"
-dependencies = [
- "proc-macro2",
- "quote",
- "serde",
- "static_assertions",
- "syn 2.0.106",
- "winnow 0.7.12",
-]
diff --git a/Cargo.toml b/Cargo.toml
index 63383960..f3a050ad 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -15,7 +15,6 @@
[workspace]
members = [
"rustfs", # Core file system implementation
- "cli/rustfs-gui", # Graphical user interface client
"crates/appauth", # Application authentication and authorization
"crates/audit-logger", # Audit logging system for file operations
"crates/common", # Shared utilities and data structures
@@ -118,8 +117,6 @@ criterion = { version = "0.7", features = ["html_reports"] }
dashmap = "6.1.0"
datafusion = "46.0.1"
derive_builder = "0.20.2"
-dioxus = { version = "0.6.3", features = ["router"] }
-dirs = "6.0.0"
enumset = "1.1.9"
flatbuffers = "25.2.10"
flate2 = "1.1.2"
@@ -145,11 +142,6 @@ http-body = "1.0.1"
humantime = "2.2.0"
ipnetwork = { version = "0.21.1", features = ["serde"] }
jsonwebtoken = "9.3.1"
-keyring = { version = "3.6.3", features = [
- "apple-native",
- "windows-native",
- "sync-secret-service",
-] }
lazy_static = "1.5.0"
libsystemd = { version = "0.7.2" }
local-ip-address = "0.6.5"
@@ -201,17 +193,12 @@ reqwest = { version = "0.12.23", default-features = false, features = [
"json",
"blocking",
] }
-rfd = { version = "0.15.4", default-features = false, features = [
- "xdg-portal",
- "tokio",
-] }
rmcp = { version = "0.5.0" }
rmp = "0.8.14"
rmp-serde = "1.3.0"
rsa = "0.9.8"
rumqttc = { version = "0.24" }
rust-embed = { version = "8.7.2" }
-rust-i18n = { version = "3.1.5" }
rustfs-rsc = "2025.506.1"
rustls = { version = "0.23.31" }
rustls-pki-types = "1.12.0"
@@ -256,7 +243,6 @@ tonic-prost-build = { version = "0.14.1" }
tower = { version = "0.5.2", features = ["timeout"] }
tower-http = { version = "0.6.6", features = ["cors"] }
tracing = "0.1.41"
-tracing-appender = "0.2.3"
tracing-core = "0.1.34"
tracing-error = "0.2.1"
tracing-opentelemetry = "0.31.0"
diff --git a/cli/rustfs-gui/Cargo.toml b/cli/rustfs-gui/Cargo.toml
deleted file mode 100644
index 168dd87a..00000000
--- a/cli/rustfs-gui/Cargo.toml
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright 2024 RustFS Team
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-[package]
-name = "rustfs-gui"
-edition.workspace = true
-license.workspace = true
-repository.workspace = true
-rust-version.workspace = true
-version.workspace = true
-
-[dependencies]
-chrono = { workspace = true }
-dioxus = { workspace = true, features = ["router"] }
-dirs = { workspace = true }
-hex = { workspace = true }
-keyring = { workspace = true }
-rfd = { workspace = true }
-rust-embed = { workspace = true, features = ["interpolate-folder-path"] }
-rust-i18n = { workspace = true }
-serde = { workspace = true }
-serde_json = { workspace = true }
-sha2 = { workspace = true }
-tokio = { workspace = true, features = ["io-util", "net", "process", "sync"] }
-tracing-subscriber = { workspace = true, features = ["fmt", "env-filter", "tracing-log", "time", "local-time", "json"] }
-tracing-appender = { workspace = true }
-
-[features]
-default = ["desktop"]
-web = ["dioxus/web"]
-desktop = ["dioxus/desktop"]
-mobile = ["dioxus/mobile"]
-
-[lints]
-workspace = true
diff --git a/cli/rustfs-gui/Dioxus.toml b/cli/rustfs-gui/Dioxus.toml
deleted file mode 100644
index 6f814c5e..00000000
--- a/cli/rustfs-gui/Dioxus.toml
+++ /dev/null
@@ -1,52 +0,0 @@
-[application]
-
-# App (Project) Name
-name = "rustfs-gui"
-
-# The static resource path
-asset_dir = "public"
-
-[web.app]
-
-# HTML title tag content
-title = "rustfs-gui"
-
-# include `assets` in web platform
-[web.resource]
-
-# Additional CSS style files
-style = []
-
-# Additional JavaScript files
-script = []
-
-[web.resource.dev]
-
-# Javascript code file
-# serve: [dev-server] only
-script = []
-
-[bundle]
-identifier = "com.rustfs.cli.gui"
-
-publisher = "RustFsGUI"
-
-category = "Utility"
-
-copyright = "Copyright 2025 rustfs.com"
-
-icon = [
- "assets/icons/icon.icns",
- "assets/icons/icon.ico",
- "assets/icons/icon.png",
- "assets/icons/rustfs-icon.png",
-]
-#[bundle.macos]
-#provider_short_name = "RustFs"
-[bundle.windows]
-tsp = true
-icon_path = "assets/icons/icon.ico"
-allow_downgrades = true
-[bundle.windows.webview_install_mode]
-[bundle.windows.webview_install_mode.EmbedBootstrapper]
-silent = true
\ No newline at end of file
diff --git a/cli/rustfs-gui/README.md b/cli/rustfs-gui/README.md
deleted file mode 100644
index c2ba8557..00000000
--- a/cli/rustfs-gui/README.md
+++ /dev/null
@@ -1,34 +0,0 @@
-## Rustfs GUI
-
-### Tailwind
-
-1. Install npm: https://docs.npmjs.com/downloading-and-installing-node-js-and-npm
-2. Install the Tailwind CSS CLI: https://tailwindcss.com/docs/installation
-3. Run the following command in the root of the project to start the Tailwind CSS compiler:
-
-```bash
-npx tailwindcss -i ./input.css -o ./assets/tailwind.css --watch
-```
-
-### Dioxus CLI
-
-#### Install the stable version (recommended)
-
-```shell
-cargo install dioxus-cli
-```
-
-### Serving Your App
-
-Run the following command in the root of your project to start developing with the default platform:
-
-```bash
-dx serve
-```
-
-To run for a different platform, use the `--platform platform` flag. E.g.
-
-```bash
-dx serve --platform desktop
-```
-
diff --git a/cli/rustfs-gui/assets/favicon.ico b/cli/rustfs-gui/assets/favicon.ico
deleted file mode 100644
index 61e6b239..00000000
Binary files a/cli/rustfs-gui/assets/favicon.ico and /dev/null differ
diff --git a/cli/rustfs-gui/assets/icon.png b/cli/rustfs-gui/assets/icon.png
deleted file mode 100644
index 68d8d939..00000000
Binary files a/cli/rustfs-gui/assets/icon.png and /dev/null differ
diff --git a/cli/rustfs-gui/assets/icons/icon-all.icns b/cli/rustfs-gui/assets/icons/icon-all.icns
deleted file mode 100644
index 50456d0e..00000000
Binary files a/cli/rustfs-gui/assets/icons/icon-all.icns and /dev/null differ
diff --git a/cli/rustfs-gui/assets/icons/icon-all.ico b/cli/rustfs-gui/assets/icons/icon-all.ico
deleted file mode 100644
index 45f9f164..00000000
Binary files a/cli/rustfs-gui/assets/icons/icon-all.ico and /dev/null differ
diff --git a/cli/rustfs-gui/assets/icons/icon.icns b/cli/rustfs-gui/assets/icons/icon.icns
deleted file mode 100644
index 8bcba4ae..00000000
Binary files a/cli/rustfs-gui/assets/icons/icon.icns and /dev/null differ
diff --git a/cli/rustfs-gui/assets/icons/icon.ico b/cli/rustfs-gui/assets/icons/icon.ico
deleted file mode 100644
index 61e6b239..00000000
Binary files a/cli/rustfs-gui/assets/icons/icon.ico and /dev/null differ
diff --git a/cli/rustfs-gui/assets/icons/icon.png b/cli/rustfs-gui/assets/icons/icon.png
deleted file mode 100644
index 68d8d939..00000000
Binary files a/cli/rustfs-gui/assets/icons/icon.png and /dev/null differ
diff --git a/cli/rustfs-gui/assets/icons/icon_128x128.png b/cli/rustfs-gui/assets/icons/icon_128x128.png
deleted file mode 100644
index d4cb9360..00000000
Binary files a/cli/rustfs-gui/assets/icons/icon_128x128.png and /dev/null differ
diff --git a/cli/rustfs-gui/assets/icons/icon_128x128@2x.png b/cli/rustfs-gui/assets/icons/icon_128x128@2x.png
deleted file mode 100644
index e94f3b33..00000000
Binary files a/cli/rustfs-gui/assets/icons/icon_128x128@2x.png and /dev/null differ
diff --git a/cli/rustfs-gui/assets/icons/icon_16x16.png b/cli/rustfs-gui/assets/icons/icon_16x16.png
deleted file mode 100644
index fc16558d..00000000
Binary files a/cli/rustfs-gui/assets/icons/icon_16x16.png and /dev/null differ
diff --git a/cli/rustfs-gui/assets/icons/icon_16x16@2x.png b/cli/rustfs-gui/assets/icons/icon_16x16@2x.png
deleted file mode 100644
index 6af80938..00000000
Binary files a/cli/rustfs-gui/assets/icons/icon_16x16@2x.png and /dev/null differ
diff --git a/cli/rustfs-gui/assets/icons/icon_256x256.png b/cli/rustfs-gui/assets/icons/icon_256x256.png
deleted file mode 100644
index e94f3b33..00000000
Binary files a/cli/rustfs-gui/assets/icons/icon_256x256.png and /dev/null differ
diff --git a/cli/rustfs-gui/assets/icons/icon_256x256@2x.png b/cli/rustfs-gui/assets/icons/icon_256x256@2x.png
deleted file mode 100644
index 68d8d939..00000000
Binary files a/cli/rustfs-gui/assets/icons/icon_256x256@2x.png and /dev/null differ
diff --git a/cli/rustfs-gui/assets/icons/icon_32x32.png b/cli/rustfs-gui/assets/icons/icon_32x32.png
deleted file mode 100644
index 6af80938..00000000
Binary files a/cli/rustfs-gui/assets/icons/icon_32x32.png and /dev/null differ
diff --git a/cli/rustfs-gui/assets/icons/icon_32x32@2x.png b/cli/rustfs-gui/assets/icons/icon_32x32@2x.png
deleted file mode 100644
index 9779204a..00000000
Binary files a/cli/rustfs-gui/assets/icons/icon_32x32@2x.png and /dev/null differ
diff --git a/cli/rustfs-gui/assets/icons/icon_512x512.png b/cli/rustfs-gui/assets/icons/icon_512x512.png
deleted file mode 100644
index 68d8d939..00000000
Binary files a/cli/rustfs-gui/assets/icons/icon_512x512.png and /dev/null differ
diff --git a/cli/rustfs-gui/assets/icons/icon_512x512@2x.png b/cli/rustfs-gui/assets/icons/icon_512x512@2x.png
deleted file mode 100644
index 272fb677..00000000
Binary files a/cli/rustfs-gui/assets/icons/icon_512x512@2x.png and /dev/null differ
diff --git a/cli/rustfs-gui/assets/icons/rustfs-icon.png b/cli/rustfs-gui/assets/icons/rustfs-icon.png
deleted file mode 100644
index 68d8d939..00000000
Binary files a/cli/rustfs-gui/assets/icons/rustfs-icon.png and /dev/null differ
diff --git a/cli/rustfs-gui/assets/js/sts.js b/cli/rustfs-gui/assets/js/sts.js
deleted file mode 100644
index 13d4ed90..00000000
--- a/cli/rustfs-gui/assets/js/sts.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Copyright 2024 RustFS Team
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-window.switchTab = function (tabId) {
- // Hide everything
- document.querySelectorAll('.tab-content').forEach(content => {
- content.classList.add('hidden');
- });
-
- // Reset all label styles
- document.querySelectorAll('.tab-btn').forEach(btn => {
- btn.classList.remove('border-b-2', 'border-black');
- btn.classList.add('text-gray-500');
- });
-
- // Displays the selected content
- const activeContent = document.getElementById(tabId);
- if (activeContent) {
- activeContent.classList.remove('hidden');
- }
-
- // Updates the selected label style
- const activeBtn = document.querySelector(`[data-tab="${tabId}"]`);
- if (activeBtn) {
- activeBtn.classList.add('border-b-2', 'border-black');
- activeBtn.classList.remove('text-gray-500');
- }
-};
-
-window.togglePassword = function (button) {
- const input = button.parentElement.querySelector('input[type="password"], input[type="text"]');
- if (input) {
- input.type = input.type === 'password' ? 'text' : 'password';
- }
-};
\ No newline at end of file
diff --git a/cli/rustfs-gui/assets/rustfs-icon.png b/cli/rustfs-gui/assets/rustfs-icon.png
deleted file mode 100644
index 68d8d939..00000000
Binary files a/cli/rustfs-gui/assets/rustfs-icon.png and /dev/null differ
diff --git a/cli/rustfs-gui/assets/rustfs-logo-square.png b/cli/rustfs-gui/assets/rustfs-logo-square.png
deleted file mode 100644
index f2136078..00000000
Binary files a/cli/rustfs-gui/assets/rustfs-logo-square.png and /dev/null differ
diff --git a/cli/rustfs-gui/assets/rustfs-logo.svg b/cli/rustfs-gui/assets/rustfs-logo.svg
deleted file mode 100644
index 93ca3c55..00000000
--- a/cli/rustfs-gui/assets/rustfs-logo.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
diff --git a/cli/rustfs-gui/assets/styling/navbar.css b/cli/rustfs-gui/assets/styling/navbar.css
deleted file mode 100644
index d5e63e64..00000000
--- a/cli/rustfs-gui/assets/styling/navbar.css
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Copyright 2024 RustFS Team
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#navbar {
- display: flex;
- flex-direction: row;
-}
-
-#navbar a {
- color: #ffffff;
- margin-right: 20px;
- text-decoration: none;
- transition: color 0.2s ease;
-}
-
-#navbar a:hover {
- cursor: pointer;
- color: #ffffff;
-/ / #91a4d2;
-}
\ No newline at end of file
diff --git a/cli/rustfs-gui/assets/tailwind.css b/cli/rustfs-gui/assets/tailwind.css
deleted file mode 100644
index ae7ca53b..00000000
--- a/cli/rustfs-gui/assets/tailwind.css
+++ /dev/null
@@ -1,972 +0,0 @@
-/**
- * Copyright 2024 RustFS Team
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-*, ::before, ::after {
- --tw-border-spacing-x: 0;
- --tw-border-spacing-y: 0;
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- --tw-pan-x: ;
- --tw-pan-y: ;
- --tw-pinch-zoom: ;
- --tw-scroll-snap-strictness: proximity;
- --tw-gradient-from-position: ;
- --tw-gradient-via-position: ;
- --tw-gradient-to-position: ;
- --tw-ordinal: ;
- --tw-slashed-zero: ;
- --tw-numeric-figure: ;
- --tw-numeric-spacing: ;
- --tw-numeric-fraction: ;
- --tw-ring-inset: ;
- --tw-ring-offset-width: 0px;
- --tw-ring-offset-color: #fff;
- --tw-ring-color: rgb(59 130 246 / 0.5);
- --tw-ring-offset-shadow: 0 0 #0000;
- --tw-ring-shadow: 0 0 #0000;
- --tw-shadow: 0 0 #0000;
- --tw-shadow-colored: 0 0 #0000;
- --tw-blur: ;
- --tw-brightness: ;
- --tw-contrast: ;
- --tw-grayscale: ;
- --tw-hue-rotate: ;
- --tw-invert: ;
- --tw-saturate: ;
- --tw-sepia: ;
- --tw-drop-shadow: ;
- --tw-backdrop-blur: ;
- --tw-backdrop-brightness: ;
- --tw-backdrop-contrast: ;
- --tw-backdrop-grayscale: ;
- --tw-backdrop-hue-rotate: ;
- --tw-backdrop-invert: ;
- --tw-backdrop-opacity: ;
- --tw-backdrop-saturate: ;
- --tw-backdrop-sepia: ;
- --tw-contain-size: ;
- --tw-contain-layout: ;
- --tw-contain-paint: ;
- --tw-contain-style: ;
-}
-
-::backdrop {
- --tw-border-spacing-x: 0;
- --tw-border-spacing-y: 0;
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- --tw-pan-x: ;
- --tw-pan-y: ;
- --tw-pinch-zoom: ;
- --tw-scroll-snap-strictness: proximity;
- --tw-gradient-from-position: ;
- --tw-gradient-via-position: ;
- --tw-gradient-to-position: ;
- --tw-ordinal: ;
- --tw-slashed-zero: ;
- --tw-numeric-figure: ;
- --tw-numeric-spacing: ;
- --tw-numeric-fraction: ;
- --tw-ring-inset: ;
- --tw-ring-offset-width: 0px;
- --tw-ring-offset-color: #fff;
- --tw-ring-color: rgb(59 130 246 / 0.5);
- --tw-ring-offset-shadow: 0 0 #0000;
- --tw-ring-shadow: 0 0 #0000;
- --tw-shadow: 0 0 #0000;
- --tw-shadow-colored: 0 0 #0000;
- --tw-blur: ;
- --tw-brightness: ;
- --tw-contrast: ;
- --tw-grayscale: ;
- --tw-hue-rotate: ;
- --tw-invert: ;
- --tw-saturate: ;
- --tw-sepia: ;
- --tw-drop-shadow: ;
- --tw-backdrop-blur: ;
- --tw-backdrop-brightness: ;
- --tw-backdrop-contrast: ;
- --tw-backdrop-grayscale: ;
- --tw-backdrop-hue-rotate: ;
- --tw-backdrop-invert: ;
- --tw-backdrop-opacity: ;
- --tw-backdrop-saturate: ;
- --tw-backdrop-sepia: ;
- --tw-contain-size: ;
- --tw-contain-layout: ;
- --tw-contain-paint: ;
- --tw-contain-style: ;
-}
-
-/*
-! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com
-*/
-
-/*
-1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
-2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
-*/
-
-*,
-::before,
-::after {
- box-sizing: border-box;
- /* 1 */
- border-width: 0;
- /* 2 */
- border-style: solid;
- /* 2 */
- border-color: #e5e7eb;
- /* 2 */
-}
-
-::before,
-::after {
- --tw-content: '';
-}
-
-/*
-1. Use a consistent sensible line-height in all browsers.
-2. Prevent adjustments of font size after orientation changes in iOS.
-3. Use a more readable tab size.
-4. Use the user's configured `sans` font-family by default.
-5. Use the user's configured `sans` font-feature-settings by default.
-6. Use the user's configured `sans` font-variation-settings by default.
-7. Disable tap highlights on iOS
-*/
-
-html,
-:host {
- line-height: 1.5;
- /* 1 */
- -webkit-text-size-adjust: 100%;
- /* 2 */
- -moz-tab-size: 4;
- /* 3 */
- -o-tab-size: 4;
- tab-size: 4;
- /* 3 */
- font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- /* 4 */
- font-feature-settings: normal;
- /* 5 */
- font-variation-settings: normal;
- /* 6 */
- -webkit-tap-highlight-color: transparent;
- /* 7 */
-}
-
-/*
-1. Remove the margin in all browsers.
-2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
-*/
-
-body {
- margin: 0;
- /* 1 */
- line-height: inherit;
- /* 2 */
-}
-
-/*
-1. Add the correct height in Firefox.
-2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
-3. Ensure horizontal rules are visible by default.
-*/
-
-hr {
- height: 0;
- /* 1 */
- color: inherit;
- /* 2 */
- border-top-width: 1px;
- /* 3 */
-}
-
-/*
-Add the correct text decoration in Chrome, Edge, and Safari.
-*/
-
-abbr:where([title]) {
- -webkit-text-decoration: underline dotted;
- text-decoration: underline dotted;
-}
-
-/*
-Remove the default font size and weight for headings.
-*/
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- font-size: inherit;
- font-weight: inherit;
-}
-
-/*
-Reset links to optimize for opt-in styling instead of opt-out.
-*/
-
-a {
- color: inherit;
- text-decoration: inherit;
-}
-
-/*
-Add the correct font weight in Edge and Safari.
-*/
-
-b,
-strong {
- font-weight: bolder;
-}
-
-/*
-1. Use the user's configured `mono` font-family by default.
-2. Use the user's configured `mono` font-feature-settings by default.
-3. Use the user's configured `mono` font-variation-settings by default.
-4. Correct the odd `em` font sizing in all browsers.
-*/
-
-code,
-kbd,
-samp,
-pre {
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
- /* 1 */
- font-feature-settings: normal;
- /* 2 */
- font-variation-settings: normal;
- /* 3 */
- font-size: 1em;
- /* 4 */
-}
-
-/*
-Add the correct font size in all browsers.
-*/
-
-small {
- font-size: 80%;
-}
-
-/*
-Prevent `sub` and `sup` elements from affecting the line height in all browsers.
-*/
-
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-sup {
- top: -0.5em;
-}
-
-/*
-1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
-2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
-3. Remove gaps between table borders by default.
-*/
-
-table {
- text-indent: 0;
- /* 1 */
- border-color: inherit;
- /* 2 */
- border-collapse: collapse;
- /* 3 */
-}
-
-/*
-1. Change the font styles in all browsers.
-2. Remove the margin in Firefox and Safari.
-3. Remove default padding in all browsers.
-*/
-
-button,
-input,
-optgroup,
-select,
-textarea {
- font-family: inherit;
- /* 1 */
- font-feature-settings: inherit;
- /* 1 */
- font-variation-settings: inherit;
- /* 1 */
- font-size: 100%;
- /* 1 */
- font-weight: inherit;
- /* 1 */
- line-height: inherit;
- /* 1 */
- letter-spacing: inherit;
- /* 1 */
- color: inherit;
- /* 1 */
- margin: 0;
- /* 2 */
- padding: 0;
- /* 3 */
-}
-
-/*
-Remove the inheritance of text transform in Edge and Firefox.
-*/
-
-button,
-select {
- text-transform: none;
-}
-
-/*
-1. Correct the inability to style clickable types in iOS and Safari.
-2. Remove default button styles.
-*/
-
-button,
-input:where([type='button']),
-input:where([type='reset']),
-input:where([type='submit']) {
- -webkit-appearance: button;
- /* 1 */
- background-color: transparent;
- /* 2 */
- background-image: none;
- /* 2 */
-}
-
-/*
-Use the modern Firefox focus style for all focusable elements.
-*/
-
-:-moz-focusring {
- outline: auto;
-}
-
-/*
-Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
-*/
-
-:-moz-ui-invalid {
- box-shadow: none;
-}
-
-/*
-Add the correct vertical alignment in Chrome and Firefox.
-*/
-
-progress {
- vertical-align: baseline;
-}
-
-/*
-Correct the cursor style of increment and decrement buttons in Safari.
-*/
-
-::-webkit-inner-spin-button,
-::-webkit-outer-spin-button {
- height: auto;
-}
-
-/*
-1. Correct the odd appearance in Chrome and Safari.
-2. Correct the outline style in Safari.
-*/
-
-[type='search'] {
- -webkit-appearance: textfield;
- /* 1 */
- outline-offset: -2px;
- /* 2 */
-}
-
-/*
-Remove the inner padding in Chrome and Safari on macOS.
-*/
-
-::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-/*
-1. Correct the inability to style clickable types in iOS and Safari.
-2. Change font properties to `inherit` in Safari.
-*/
-
-::-webkit-file-upload-button {
- -webkit-appearance: button;
- /* 1 */
- font: inherit;
- /* 2 */
-}
-
-/*
-Add the correct display in Chrome and Safari.
-*/
-
-summary {
- display: list-item;
-}
-
-/*
-Removes the default spacing and border for appropriate elements.
-*/
-
-blockquote,
-dl,
-dd,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-hr,
-figure,
-p,
-pre {
- margin: 0;
-}
-
-fieldset {
- margin: 0;
- padding: 0;
-}
-
-legend {
- padding: 0;
-}
-
-ol,
-ul,
-menu {
- list-style: none;
- margin: 0;
- padding: 0;
-}
-
-/*
-Reset default styling for dialogs.
-*/
-
-dialog {
- padding: 0;
-}
-
-/*
-Prevent resizing textareas horizontally by default.
-*/
-
-textarea {
- resize: vertical;
-}
-
-/*
-1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
-2. Set the default placeholder color to the user's configured gray 400 color.
-*/
-
-input::-moz-placeholder, textarea::-moz-placeholder {
- opacity: 1;
- /* 1 */
- color: #9ca3af;
- /* 2 */
-}
-
-input::placeholder,
-textarea::placeholder {
- opacity: 1;
- /* 1 */
- color: #9ca3af;
- /* 2 */
-}
-
-/*
-Set the default cursor for buttons.
-*/
-
-button,
-[role="button"] {
- cursor: pointer;
-}
-
-/*
-Make sure disabled buttons don't get the pointer cursor.
-*/
-
-:disabled {
- cursor: default;
-}
-
-/*
-1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
-2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
- This can trigger a poorly considered lint error in some tools but is included by design.
-*/
-
-img,
-svg,
-video,
-canvas,
-audio,
-iframe,
-embed,
-object {
- display: block;
- /* 1 */
- vertical-align: middle;
- /* 2 */
-}
-
-/*
-Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
-*/
-
-img,
-video {
- max-width: 100%;
- height: auto;
-}
-
-/* Make elements with the HTML hidden attribute stay hidden by default */
-
-[hidden]:where(:not([hidden="until-found"])) {
- display: none;
-}
-
-.static {
- position: static;
-}
-
-.absolute {
- position: absolute;
-}
-
-.relative {
- position: relative;
-}
-
-.right-2 {
- right: 0.5rem;
-}
-
-.right-6 {
- right: 1.5rem;
-}
-
-.top-1\/2 {
- top: 50%;
-}
-
-.top-4 {
- top: 1rem;
-}
-
-.z-10 {
- z-index: 10;
-}
-
-.mb-2 {
- margin-bottom: 0.5rem;
-}
-
-.mb-4 {
- margin-bottom: 1rem;
-}
-
-.mb-6 {
- margin-bottom: 1.5rem;
-}
-
-.mb-8 {
- margin-bottom: 2rem;
-}
-
-.ml-2 {
- margin-left: 0.5rem;
-}
-
-.flex {
- display: flex;
-}
-
-.hidden {
- display: none;
-}
-
-.h-16 {
- height: 4rem;
-}
-
-.h-24 {
- height: 6rem;
-}
-
-.h-4 {
- height: 1rem;
-}
-
-.h-5 {
- height: 1.25rem;
-}
-
-.h-6 {
- height: 1.5rem;
-}
-
-.min-h-screen {
- min-height: 100vh;
-}
-
-.w-16 {
- width: 4rem;
-}
-
-.w-20 {
- width: 5rem;
-}
-
-.w-24 {
- width: 6rem;
-}
-
-.w-4 {
- width: 1rem;
-}
-
-.w-48 {
- width: 12rem;
-}
-
-.w-5 {
- width: 1.25rem;
-}
-
-.w-6 {
- width: 1.5rem;
-}
-
-.w-full {
- width: 100%;
-}
-
-.flex-1 {
- flex: 1 1 0%;
-}
-
-.-translate-y-1\/2 {
- --tw-translate-y: -50%;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-
-.transform {
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
-}
-
-@keyframes spin {
- to {
- transform: rotate(360deg);
- }
-}
-
-.animate-spin {
- animation: spin 1s linear infinite;
-}
-
-.flex-col {
- flex-direction: column;
-}
-
-.items-center {
- align-items: center;
-}
-
-.justify-center {
- justify-content: center;
-}
-
-.space-x-2 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 0;
- margin-right: calc(0.5rem * var(--tw-space-x-reverse));
- margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
-}
-
-.space-x-4 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 0;
- margin-right: calc(1rem * var(--tw-space-x-reverse));
- margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
-}
-
-.space-x-8 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 0;
- margin-right: calc(2rem * var(--tw-space-x-reverse));
- margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse)));
-}
-
-.space-y-4 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(1rem * var(--tw-space-y-reverse));
-}
-
-.space-y-6 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
-}
-
-.rounded {
- border-radius: 0.25rem;
-}
-
-.rounded-full {
- border-radius: 9999px;
-}
-
-.rounded-lg {
- border-radius: 0.5rem;
-}
-
-.rounded-md {
- border-radius: 0.375rem;
-}
-
-.border {
- border-width: 1px;
-}
-
-.border-b {
- border-bottom-width: 1px;
-}
-
-.border-b-2 {
- border-bottom-width: 2px;
-}
-
-.border-black {
- --tw-border-opacity: 1;
- border-color: rgb(0 0 0 / var(--tw-border-opacity, 1));
-}
-
-.border-gray-200 {
- --tw-border-opacity: 1;
- border-color: rgb(229 231 235 / var(--tw-border-opacity, 1));
-}
-
-.bg-\[\#111827\] {
- --tw-bg-opacity: 1;
- background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));
-}
-
-.bg-gray-100 {
- --tw-bg-opacity: 1;
- background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
-}
-
-.bg-gray-900 {
- --tw-bg-opacity: 1;
- background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));
-}
-
-.bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));
-}
-
-.bg-white {
- --tw-bg-opacity: 1;
- background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
-}
-
-.p-2 {
- padding: 0.5rem;
-}
-
-.p-4 {
- padding: 1rem;
-}
-
-.p-8 {
- padding: 2rem;
-}
-
-.px-1 {
- padding-left: 0.25rem;
- padding-right: 0.25rem;
-}
-
-.px-3 {
- padding-left: 0.75rem;
- padding-right: 0.75rem;
-}
-
-.px-4 {
- padding-left: 1rem;
- padding-right: 1rem;
-}
-
-.py-0\.5 {
- padding-top: 0.125rem;
- padding-bottom: 0.125rem;
-}
-
-.py-2 {
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
-}
-
-.py-4 {
- padding-top: 1rem;
- padding-bottom: 1rem;
-}
-
-.py-6 {
- padding-top: 1.5rem;
- padding-bottom: 1.5rem;
-}
-
-.pr-10 {
- padding-right: 2.5rem;
-}
-
-.text-2xl {
- font-size: 1.5rem;
- line-height: 2rem;
-}
-
-.text-base {
- font-size: 1rem;
- line-height: 1.5rem;
-}
-
-.text-sm {
- font-size: 0.875rem;
- line-height: 1.25rem;
-}
-
-.font-medium {
- font-weight: 500;
-}
-
-.font-semibold {
- font-weight: 600;
-}
-
-.text-blue-500 {
- --tw-text-opacity: 1;
- color: rgb(59 130 246 / var(--tw-text-opacity, 1));
-}
-
-.text-blue-600 {
- --tw-text-opacity: 1;
- color: rgb(37 99 235 / var(--tw-text-opacity, 1));
-}
-
-.text-gray-400 {
- --tw-text-opacity: 1;
- color: rgb(156 163 175 / var(--tw-text-opacity, 1));
-}
-
-.text-gray-500 {
- --tw-text-opacity: 1;
- color: rgb(107 114 128 / var(--tw-text-opacity, 1));
-}
-
-.text-gray-600 {
- --tw-text-opacity: 1;
- color: rgb(75 85 99 / var(--tw-text-opacity, 1));
-}
-
-.text-white {
- --tw-text-opacity: 1;
- color: rgb(255 255 255 / var(--tw-text-opacity, 1));
-}
-
-.opacity-25 {
- opacity: 0.25;
-}
-
-.opacity-75 {
- opacity: 0.75;
-}
-
-.filter {
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-
-.hover\:bg-\[\#1f2937\]:hover {
- --tw-bg-opacity: 1;
- background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));
-}
-
-.hover\:bg-gray-100:hover {
- --tw-bg-opacity: 1;
- background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
-}
-
-.hover\:bg-red-600:hover {
- --tw-bg-opacity: 1;
- background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1));
-}
-
-.hover\:text-gray-700:hover {
- --tw-text-opacity: 1;
- color: rgb(55 65 81 / var(--tw-text-opacity, 1));
-}
-
-.hover\:text-gray-900:hover {
- --tw-text-opacity: 1;
- color: rgb(17 24 39 / var(--tw-text-opacity, 1));
-}
-
-.focus\:outline-none:focus {
- outline: 2px solid transparent;
- outline-offset: 2px;
-}
-
-.focus\:ring-2:focus {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-
-.focus\:ring-blue-500:focus {
- --tw-ring-opacity: 1;
- --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1));
-}
\ No newline at end of file
diff --git a/cli/rustfs-gui/embedded-rustfs/README.md b/cli/rustfs-gui/embedded-rustfs/README.md
deleted file mode 100644
index 190bfa36..00000000
--- a/cli/rustfs-gui/embedded-rustfs/README.md
+++ /dev/null
@@ -1 +0,0 @@
-rustfs bin path, do not delete
\ No newline at end of file
diff --git a/cli/rustfs-gui/input.css b/cli/rustfs-gui/input.css
deleted file mode 100644
index 06106e06..00000000
--- a/cli/rustfs-gui/input.css
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * Copyright 2024 RustFS Team
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
\ No newline at end of file
diff --git a/cli/rustfs-gui/src/components/home.rs b/cli/rustfs-gui/src/components/home.rs
deleted file mode 100644
index dafb687f..00000000
--- a/cli/rustfs-gui/src/components/home.rs
+++ /dev/null
@@ -1,330 +0,0 @@
-// Copyright 2024 RustFS Team
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-use crate::components::navbar::LoadingSpinner;
-use crate::route::Route;
-use crate::utils::{RustFSConfig, ServiceManager};
-use chrono::Datelike;
-use dioxus::logger::tracing::debug;
-use dioxus::prelude::*;
-use std::time::Duration;
-
-const HEADER_LOGO: Asset = asset!("/assets/rustfs-logo.svg");
-const TAILWIND_CSS: Asset = asset!("/assets/tailwind.css");
-
-/// Define the state of the service
-#[derive(PartialEq, Debug, Clone)]
-enum ServiceState {
- Start,
- Stop,
-}
-
-/// Define the Home component
-/// The Home component is the main component of the application
-/// It is responsible for starting and stopping the service
-/// It also displays the service status and provides a button to toggle the service
-/// The Home component also displays the footer of the application
-/// The footer contains links to the official site, documentation, GitHub, and license
-/// The footer also displays the version of the application
-/// The Home component also contains a button to change the theme of the application
-/// The Home component also contains a button to go to the settings page
-#[component]
-pub fn Home() -> Element {
- #[allow(clippy::redundant_closure)]
- let service = use_signal(|| ServiceManager::new());
- let conf = RustFSConfig::load().unwrap_or_else(|e| {
- ServiceManager::show_error(&format!("load config failed: {e}"));
- RustFSConfig::default()
- });
-
- debug!("loaded configurations: {:?}", conf);
- let config = use_signal(|| conf.clone());
-
- use dioxus_router::prelude::Link;
- use document::{Meta, Stylesheet, Title};
- let mut service_state = use_signal(|| ServiceState::Start);
- // Create a periodic check on the effect of the service status
- use_effect(move || {
- spawn(async move {
- loop {
- if let Some(pid) = ServiceManager::check_service_status().await {
- debug!("service_running true pid: {:?}", pid);
- service_state.set(ServiceState::Stop);
- } else {
- debug!("service_running true pid: 0");
- service_state.set(ServiceState::Start);
- }
- tokio::time::sleep(Duration::from_secs(2)).await;
- }
- });
- });
- debug!("project start service_state: {:?}", service_state.read());
- // Use 'use_signal' to manage service status
- let mut loading = use_signal(|| false);
- let mut start_service = move |_| {
- let service = service;
- let config = config.read().clone();
- let mut service_state = service_state;
- // set the loading status
- loading.set(true);
- debug!("stop loading_state: {:?}", loading.read());
- spawn(async move {
- match service.read().start(config).await {
- Ok(result) => {
- if result.success {
- let duration = result.end_time - result.start_time;
- debug!("The service starts successfully and takes a long time:{}ms", duration.num_milliseconds());
- service_state.set(ServiceState::Stop);
- } else {
- ServiceManager::show_error(&result.message);
- service_state.set(ServiceState::Start);
- }
- }
- Err(e) => {
- ServiceManager::show_error(&format!("start service failed: {e}"));
- }
- }
- // Only set loading to false when it's actually done
- loading.set(false);
- debug!("start loading_state: {:?}", loading.read());
- });
- };
-
- let mut stop_service = move |_| {
- let service = service;
- let mut service_state = service_state;
- // set the loading status
- loading.set(true);
- spawn(async move {
- match service.read().stop().await {
- Ok(result) => {
- if result.success {
- let duration = result.end_time - result.start_time;
- debug!("The service stops successfully and takes a long time:{}ms", duration.num_milliseconds());
- service_state.set(ServiceState::Start);
- } else {
- ServiceManager::show_error(&result.message);
- }
- }
- Err(e) => {
- ServiceManager::show_error(&format!("stop service failed: {e}"));
- }
- }
- debug!("service_state: {:?}", service_state.read());
- // Only set loading to false when it's actually done
- loading.set(false);
- debug!("stop loading_state: {:?}", loading.read());
- });
- };
-
- // Toggle the state when the button is clicked
- let toggle_service = {
- let mut service_state = service_state;
- debug!("toggle_service service_state: {:?}", service_state.read());
- move |_| {
- if service_state.read().eq(&ServiceState::Stop) {
- // If the service status is started, you need to run a command to stop the service
- stop_service(());
- service_state.set(ServiceState::Start);
- } else {
- start_service(());
- service_state.set(ServiceState::Stop);
- }
- }
- };
-
- // Define dynamic styles based on state
- let button_class = if service_state.read().eq(&ServiceState::Start) {
- "bg-[#111827] hover:bg-[#1f2937] text-white px-4 py-2 rounded-md flex items-center space-x-2"
- } else {
- "bg-red-500 hover:bg-red-600 text-white px-4 py-2 rounded-md flex items-center space-x-2"
- };
-
- rsx! {
- // The Stylesheet component inserts a style link into the head of the document
- Stylesheet {href: TAILWIND_CSS,}
- Title { "RustFS APP" }
- Meta {
- name: "description",
- // TODO: translate to english
- content: "RustFS is developed in the popular and secure Rust language, compatible with S3 protocol. Suitable for all scenarios including AI/ML and massive data storage, big data, internet, industrial and secure storage. Nearly free to use. Follows Apache 2 license, supports domestic security devices and systems.",
- }
- div { class: "min-h-screen flex flex-col items-center bg-white",
- div { class: "absolute top-4 right-6 flex space-x-2",
- // change theme
- button { class: "p-2 hover:bg-gray-100 rounded-lg", ChangeThemeButton {} }
- // setting button
- Link {
- class: "p-2 hover:bg-gray-100 rounded-lg",
- to: Route::SettingViews {},
- SettingButton {}
- }
- }
- main { class: "flex-1 flex flex-col items-center justify-center space-y-6 p-4",
- div { class: "w-24 h-24 bg-gray-900 rounded-full flex items-center justify-center",
- img { alt: "Logo", class: "w-16 h-16", src: HEADER_LOGO }
- }
- div { class: "text-gray-600",
- "Service is running on "
- span { class: "text-blue-600", " 127.0.0.1:9000 " }
- }
- LoadingSpinner {
- loading: loading.read().to_owned(),
- text: "processing...",
- }
- button { class: button_class, onclick: toggle_service,
- svg {
- class: "h-4 w-4",
- fill: "none",
- stroke: "currentColor",
- view_box: "0 0 24 24",
- xmlns: "http://www.w3.org/2000/svg",
- if service_state.read().eq(&ServiceState::Start) {
- path {
- d: "M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z",
- stroke_linecap: "round",
- stroke_linejoin: "round",
- stroke_width: "2",
- }
- path {
- d: "M21 12a9 9 0 11-18 0 9 9 0 0118 0z",
- stroke_linecap: "round",
- stroke_linejoin: "round",
- stroke_width: "2",
- }
- } else {
- path {
- stroke_linecap: "round",
- stroke_linejoin: "round",
- stroke_width: "2",
- d: "M21 12a9 9 0 11-18 0 9 9 0 0118 0z",
- }
- path {
- stroke_linecap: "round",
- stroke_linejoin: "round",
- stroke_width: "2",
- d: "M9 10h6v4H9z",
- }
- }
- }
- span { id: "serviceStatus",
- if service_state.read().eq(&ServiceState::Start) {
- "Start service"
- } else {
- "Stop service"
- }
- }
- }
- }
- Footer { version: "v1.0.0".to_string() }
- }
- }
-}
-
-#[component]
-pub fn Footer(version: String) -> Element {
- let now = chrono::Local::now();
- let year = now.naive_local().year();
- rsx! {
- footer { class: "w-full py-6 flex flex-col items-center space-y-4 mb-6",
- nav { class: "flex space-x-4 text-gray-600",
- a { class: "hover:text-gray-900", href: "https://rustfs.com", "Official Site" }
- a {
- class: "hover:text-gray-900",
- href: "https://rustfs.com/docs",
- "Documentation"
- }
- a {
- class: "hover:text-gray-900",
- href: "https://github.com/rustfs/rustfs",
- "GitHub"
- }
- a {
- class: "hover:text-gray-900",
- href: "https://rustfs.com/docs/license/",
- "License"
- }
- a { class: "hover:text-gray-900", href: "#", "Sponsors" }
- }
- div { class: "text-gray-500 text-sm", " © rustfs.com {year}, All rights reserved." }
- div { class: "text-gray-400 text-sm mb-8", " version {version} " }
- }
- }
-}
-
-#[component]
-pub fn GoBackButtons() -> Element {
- rsx! {
- button {
- class: "p-2 hover:bg-gray-100 rounded-lg",
- "onclick": "window.history.back()",
- "Back to the Past"
- }
- }
-}
-
-#[component]
-pub fn GoForwardButtons() -> Element {
- rsx! {
- button {
- class: "p-2 hover:bg-gray-100 rounded-lg",
- "onclick": "window.history.forward()",
- "Back to the Future"
- }
- }
-}
-
-#[component]
-pub fn ChangeThemeButton() -> Element {
- rsx! {
- svg {
- class: "h-6 w-6 text-gray-600",
- fill: "none",
- stroke: "currentColor",
- view_box: "0 0 24 24",
- xmlns: "http://www.w3.org/2000/svg",
- path {
- d: "M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z",
- stroke_linecap: "round",
- stroke_linejoin: "round",
- stroke_width: "2",
- }
- }
- }
-}
-
-#[component]
-pub fn SettingButton() -> Element {
- rsx! {
- svg {
- class: "h-6 w-6 text-gray-600",
- fill: "none",
- stroke: "currentColor",
- view_box: "0 0 24 24",
- xmlns: "http://www.w3.org/2000/svg",
- path {
- d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z",
- stroke_linecap: "round",
- stroke_linejoin: "round",
- stroke_width: "2",
- }
- path {
- d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z",
- stroke_linecap: "round",
- stroke_linejoin: "round",
- stroke_width: "2",
- }
- }
- }
-}
diff --git a/cli/rustfs-gui/src/components/mod.rs b/cli/rustfs-gui/src/components/mod.rs
deleted file mode 100644
index 69c026bc..00000000
--- a/cli/rustfs-gui/src/components/mod.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2024 RustFS Team
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-mod home;
-pub use home::Home;
-mod navbar;
-pub use navbar::Navbar;
-mod setting;
-pub use setting::Setting;
diff --git a/cli/rustfs-gui/src/components/navbar.rs b/cli/rustfs-gui/src/components/navbar.rs
deleted file mode 100644
index d22aada0..00000000
--- a/cli/rustfs-gui/src/components/navbar.rs
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2024 RustFS Team
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-use crate::route::Route;
-use dioxus::logger::tracing::debug;
-use dioxus::prelude::*;
-
-const NAVBAR_CSS: Asset = asset!("/assets/styling/navbar.css");
-
-#[component]
-pub fn Navbar() -> Element {
- rsx! {
- document::Link { rel: "stylesheet", href: NAVBAR_CSS }
-
- div { id: "navbar", class: "hidden", style: "display: none;",
- Link { to: Route::HomeViews {}, "Home" }
- Link { to: Route::SettingViews {}, "Setting" }
- }
-
- Outlet:: {}
- }
-}
-
-#[derive(Props, PartialEq, Debug, Clone)]
-pub struct LoadingSpinnerProps {
- #[props(default = true)]
- loading: bool,
- #[props(default = "Processing...")]
- text: &'static str,
-}
-
-#[component]
-pub fn LoadingSpinner(props: LoadingSpinnerProps) -> Element {
- debug!("loading: {}", props.loading);
- if !props.loading {
- debug!("LoadingSpinner false loading: {}", props.loading);
- return rsx! {};
- }
- rsx! {
- div { class: "flex items-center justify-center z-10",
- svg {
- class: "animate-spin h-5 w-5 text-blue-500",
- xmlns: "http://www.w3.org/2000/svg",
- fill: "none",
- view_box: "0 0 24 24",
- circle {
- class: "opacity-25",
- cx: "12",
- cy: "12",
- r: "10",
- stroke: "currentColor",
- stroke_width: "4",
- }
- path {
- class: "opacity-75",
- fill: "currentColor",
- d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",
- }
- }
- span { class: "ml-2 text-gray-600", "{props.text}" }
- }
- }
-}
diff --git a/cli/rustfs-gui/src/components/setting.rs b/cli/rustfs-gui/src/components/setting.rs
deleted file mode 100644
index 7e5270e3..00000000
--- a/cli/rustfs-gui/src/components/setting.rs
+++ /dev/null
@@ -1,216 +0,0 @@
-// Copyright 2024 RustFS Team
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-use crate::components::navbar::LoadingSpinner;
-use dioxus::logger::tracing::{debug, error};
-use dioxus::prelude::*;
-
-const SETTINGS_JS: Asset = asset!("/assets/js/sts.js");
-const TAILWIND_CSS: Asset = asset!("/assets/tailwind.css");
-#[component]
-pub fn Setting() -> Element {
- use crate::utils::{RustFSConfig, ServiceManager};
- use document::{Meta, Script, Stylesheet, Title};
-
- #[allow(clippy::redundant_closure)]
- let service = use_signal(|| ServiceManager::new());
- let conf = RustFSConfig::load().unwrap_or_else(|e| {
- error!("load config error: {}", e);
- RustFSConfig::default_config()
- });
- debug!("conf address: {:?}", conf.clone().address);
-
- let config = use_signal(|| conf.clone());
- let address_state = use_signal(|| conf.address.to_string());
- let mut host_state = use_signal(|| conf.host.to_string());
- let mut port_state = use_signal(|| conf.port.to_string());
- let mut access_key_state = use_signal(|| conf.access_key.to_string());
- let mut secret_key_state = use_signal(|| conf.secret_key.to_string());
- let mut volume_name_state = use_signal(|| conf.volume_name.to_string());
- let loading = use_signal(|| false);
-
- let save_and_restart = {
- let host_state = host_state;
- let port_state = port_state;
- let access_key_state = access_key_state;
- let secret_key_state = secret_key_state;
- let volume_name_state = volume_name_state;
- let mut loading = loading;
- debug!("save_and_restart access_key:{}", access_key_state.read());
- move |_| {
- // set the loading status
- loading.set(true);
- let mut config = config;
- config.write().address = format!("{}:{}", host_state.read(), port_state.read());
- config.write().host = host_state.read().to_string();
- config.write().port = port_state.read().to_string();
- config.write().access_key = access_key_state.read().to_string();
- config.write().secret_key = secret_key_state.read().to_string();
- config.write().volume_name = volume_name_state.read().to_string();
- // restart service
- let service = service;
- let config = config.read().clone();
- spawn(async move {
- if let Err(e) = service.read().restart(config).await {
- ServiceManager::show_error(&format!("Failed to send restart command: {e}"));
- }
- // reset the status when you're done
- loading.set(false);
- });
- }
- };
-
- rsx! {
- Title { "Settings - RustFS App" }
- Meta { name: "description", content: "Settings - RustFS App." }
- // The Stylesheet component inserts a style link into the head of the document
- Stylesheet { href: TAILWIND_CSS }
- Script { src: SETTINGS_JS }
- div { class: "bg-white p-8",
- h1 { class: "text-2xl font-semibold mb-6", "Settings" }
- div { class: "border-b border-gray-200 mb-6",
- nav { class: "flex space-x-8",
- button {
- class: "tab-btn px-1 py-4 text-sm font-medium border-b-2 border-black",
- "data-tab": "service",
- "onclick": "switchTab('service')",
- "Service "
- }
- button {
- class: "tab-btn px-1 py-4 text-sm font-medium text-gray-500 hover:text-gray-700",
- "data-tab": "user",
- "onclick": "switchTab('user')",
- "User "
- }
- button {
- class: "tab-btn px-1 py-4 text-sm font-medium text-gray-500 hover:text-gray-700 hidden",
- "data-tab": "logs",
- "onclick": "switchTab('logs')",
- "Logs "
- }
- }
- }
- div { id: "tabContent",
- div { class: "tab-content", id: "service",
- div { class: "mb-8",
- h2 { class: "text-base font-medium mb-2", "Service address" }
- p { class: "text-gray-600 mb-4",
- " The service address is the IP address and port number of the service. the default address is "
- code { class: "bg-gray-100 px-1 py-0.5 rounded", {address_state} }
- ". "
- }
- div { class: "flex space-x-2",
- input {
- class: "border rounded px-3 py-2 w-48 focus:outline-none focus:ring-2 focus:ring-blue-500",
- r#type: "text",
- value: host_state,
- oninput: move |evt| host_state.set(evt.value().clone()),
- }
- span { class: "flex items-center", ":" }
- input {
- class: "border rounded px-3 py-2 w-20 focus:outline-none focus:ring-2 focus:ring-blue-500",
- r#type: "text",
- value: port_state,
- oninput: move |evt| port_state.set(evt.value().clone()),
- }
- }
- }
- div { class: "mb-8",
- h2 { class: "text-base font-medium mb-2", "Storage path" }
- p { class: "text-gray-600 mb-4",
- "Update the storage path of the service. the default path is {volume_name_state}."
- }
- input {
- class: "border rounded px-3 py-2 w-full focus:outline-none focus:ring-2 focus:ring-blue-500",
- r#type: "text",
- value: volume_name_state,
- oninput: move |evt| volume_name_state.set(evt.value().clone()),
- }
- }
- }
- div { class: "tab-content hidden", id: "user",
- div { class: "mb-8",
- h2 { class: "text-base font-medium mb-2", "User" }
- p { class: "text-gray-600 mb-4",
- "The user is the owner of the service. the default user is "
- code { class: "bg-gray-100 px-1 py-0.5 rounded", {access_key_state} }
- }
- input {
- class: "border rounded px-3 py-2 w-full focus:outline-none focus:ring-2 focus:ring-blue-500",
- r#type: "text",
- value: access_key_state,
- oninput: move |evt| access_key_state.set(evt.value().clone()),
- }
- }
- div { class: "mb-8",
- h2 { class: "text-base font-medium mb-2", "Password" }
- p { class: "text-gray-600 mb-4",
- "The password is the password of the user. the default password is "
- code { class: "bg-gray-100 px-1 py-0.5 rounded", {secret_key_state} }
- }
- div { class: "relative",
- input {
- class: "border rounded px-3 py-2 w-full pr-10 focus:outline-none focus:ring-2 focus:ring-blue-500",
- r#type: "password",
- value: secret_key_state,
- oninput: move |evt| secret_key_state.set(evt.value().clone()),
- }
- button {
- class: "absolute right-2 top-1/2 transform -translate-y-1/2 text-gray-500 hover:text-gray-700",
- "onclick": "togglePassword(this)",
- svg {
- class: "h-5 w-5",
- fill: "currentColor",
- view_box: "0 0 20 20",
- xmlns: "http://www.w3.org/2000/svg",
- path { d: "M10 12a2 2 0 100-4 2 2 0 000 4z" }
- path {
- clip_rule: "evenodd",
- d: "M.458 10C1.732 5.943 5.522 3 10 3s8.268 2.943 9.542 7c-1.274 4.057-5.064 7-9.542 7S1.732 14.057.458 10zM14 10a4 4 0 11-8 0 4 4 0 018 0z",
- fill_rule: "evenodd",
- }
- }
- }
- }
- }
- }
- div { class: "tab-content hidden", id: "logs",
- div { class: "mb-8",
- h2 { class: "text-base font-medium mb-2", "Logs storage path" }
- p { class: "text-gray-600 mb-4",
- "The logs storage path is the path where the logs are stored. the default path is /var/log/rustfs. "
- }
- input {
- class: "border rounded px-3 py-2 w-full focus:outline-none focus:ring-2 focus:ring-blue-500",
- r#type: "text",
- value: "/var/logs/rustfs",
- }
- }
- }
- }
- div { class: "flex space-x-4",
- button {
- class: "bg-[#111827] text-white px-4 py-2 rounded hover:bg-[#1f2937]",
- onclick: save_and_restart,
- " Save and restart "
- }
- GoBackButton { "Back" }
- }
- LoadingSpinner {
- loading: loading.read().to_owned(),
- text: "Service processing...",
- }
- }
- }
-}
diff --git a/cli/rustfs-gui/src/main.rs b/cli/rustfs-gui/src/main.rs
deleted file mode 100644
index 7d1f373b..00000000
--- a/cli/rustfs-gui/src/main.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2024 RustFS Team
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-mod components;
-mod route;
-mod utils;
-mod views;
-
-fn main() {
- let _worker_guard = utils::init_logger();
- dioxus::launch(views::App);
-}
diff --git a/cli/rustfs-gui/src/route/mod.rs b/cli/rustfs-gui/src/route/mod.rs
deleted file mode 100644
index b9b1699d..00000000
--- a/cli/rustfs-gui/src/route/mod.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2024 RustFS Team
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-mod router;
-
-pub use router::Route;
diff --git a/cli/rustfs-gui/src/route/router.rs b/cli/rustfs-gui/src/route/router.rs
deleted file mode 100644
index 93a7be03..00000000
--- a/cli/rustfs-gui/src/route/router.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2024 RustFS Team
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-use crate::components::Navbar;
-use crate::views::{HomeViews, SettingViews};
-use dioxus::prelude::*;
-
-/// The router for the application
-#[derive(Debug, Clone, Routable, PartialEq)]
-#[rustfmt::skip]
-pub enum Route {
- #[layout(Navbar)]
- #[route("/")]
- HomeViews {},
- #[route("/settings")]
- SettingViews {},
-}
diff --git a/cli/rustfs-gui/src/utils/config.rs b/cli/rustfs-gui/src/utils/config.rs
deleted file mode 100644
index 46d65815..00000000
--- a/cli/rustfs-gui/src/utils/config.rs
+++ /dev/null
@@ -1,564 +0,0 @@
-// Copyright 2024 RustFS Team
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-use keyring::Entry;
-use serde::{Deserialize, Serialize};
-use std::error::Error;
-
-/// Configuration for the RustFS service
-///
-/// # Fields
-/// * `address` - The address of the RustFS service
-/// * `host` - The host of the RustFS service
-/// * `port` - The port of the RustFS service
-/// * `access_key` - The access key of the RustFS service
-/// * `secret_key` - The secret key of the RustFS service
-/// * `domain_name` - The domain name of the RustFS service
-/// * `volume_name` - The volume name of the RustFS service
-/// * `console_address` - The console address of the RustFS service
-///
-/// # Example
-/// ```
-/// let config = RustFSConfig {
-/// address: "127.0.0.1:9000".to_string(),
-/// host: "127.0.0.1".to_string(),
-/// port: "9000".to_string(),
-/// access_key: "rustfsadmin".to_string(),
-/// secret_key: "rustfsadmin".to_string(),
-/// domain_name: "demo.rustfs.com".to_string(),
-/// volume_name: "data".to_string(),
-/// console_address: "127.0.0.1:9001".to_string(),
-/// };
-/// println!("{:?}", config);
-/// assert_eq!(config.address, "127.0.0.1:9000");
-/// ```
-#[derive(Debug, Clone, Default, Deserialize, Serialize, Ord, PartialOrd, Eq, PartialEq)]
-pub struct RustFSConfig {
- pub address: String,
- pub host: String,
- pub port: String,
- pub access_key: String,
- pub secret_key: String,
- pub domain_name: String,
- pub volume_name: String,
- pub console_address: String,
-}
-
-impl RustFSConfig {
- /// keyring the name of the service
- const SERVICE_NAME: &'static str = "rustfs-service";
- /// keyring the key of the service
- const SERVICE_KEY: &'static str = "rustfs_key";
- /// default domain name
- const DEFAULT_DOMAIN_NAME_VALUE: &'static str = "demo.rustfs.com";
- /// default address value
- const DEFAULT_ADDRESS_VALUE: &'static str = "127.0.0.1:9000";
- /// default port value
- const DEFAULT_PORT_VALUE: &'static str = "9000";
- /// default host value
- const DEFAULT_HOST_VALUE: &'static str = "127.0.0.1";
- /// default access key value
- const DEFAULT_ACCESS_KEY_VALUE: &'static str = "rustfsadmin";
- /// default secret key value
- const DEFAULT_SECRET_KEY_VALUE: &'static str = "rustfsadmin";
- /// default console address value
- const DEFAULT_CONSOLE_ADDRESS_VALUE: &'static str = "127.0.0.1:9001";
-
- /// get the default volume_name
- ///
- /// # Returns
- /// * The default volume name
- ///
- /// # Example
- /// ```
- /// let volume_name = RustFSConfig::default_volume_name();
- /// ```
- pub fn default_volume_name() -> String {
- dirs::home_dir()
- .map(|home| home.join("rustfs").join("data"))
- .and_then(|path| path.to_str().map(String::from))
- .unwrap_or_else(|| "data".to_string())
- }
-
- /// create a default configuration
- ///
- /// # Returns
- /// * The default configuration
- ///
- /// # Example
- /// ```
- /// let config = RustFSConfig::default_config();
- /// println!("{:?}", config);
- /// assert_eq!(config.address, "127.0.0.1:9000");
- /// ```
- pub fn default_config() -> Self {
- Self {
- address: Self::DEFAULT_ADDRESS_VALUE.to_string(),
- host: Self::DEFAULT_HOST_VALUE.to_string(),
- port: Self::DEFAULT_PORT_VALUE.to_string(),
- access_key: Self::DEFAULT_ACCESS_KEY_VALUE.to_string(),
- secret_key: Self::DEFAULT_SECRET_KEY_VALUE.to_string(),
- domain_name: Self::DEFAULT_DOMAIN_NAME_VALUE.to_string(),
- volume_name: Self::default_volume_name(),
- console_address: Self::DEFAULT_CONSOLE_ADDRESS_VALUE.to_string(),
- }
- }
-
- /// Load the configuration from the keyring
- ///
- /// # Errors
- /// * If the configuration cannot be loaded from the keyring
- /// * If the configuration cannot be deserialized
- /// * If the address cannot be extracted from the configuration
- ///
- /// # Example
- /// ```
- /// let config = RustFSConfig::load().unwrap();
- /// println!("{:?}", config);
- /// assert_eq!(config.address, "127.0.0.1:9000");
- /// ```
- pub fn load() -> Result> {
- let mut config = Self::default_config();
-
- // Try to get the configuration of the storage from the keyring
- let entry = Entry::new(Self::SERVICE_NAME, Self::SERVICE_KEY)?;
- if let Ok(stored_json) = entry.get_password() {
- if let Ok(stored_config) = serde_json::from_str::(&stored_json) {
- // update fields that are not empty and non default
- if !stored_config.address.is_empty() && stored_config.address != Self::DEFAULT_ADDRESS_VALUE {
- config.address = stored_config.address;
- let (host, port) = Self::extract_host_port(config.address.as_str())
- .ok_or_else(|| format!("Unable to extract host and port from address '{}'", config.address))?;
- config.host = host.to_string();
- config.port = port.to_string();
- }
- if !stored_config.access_key.is_empty() && stored_config.access_key != Self::DEFAULT_ACCESS_KEY_VALUE {
- config.access_key = stored_config.access_key;
- }
- if !stored_config.secret_key.is_empty() && stored_config.secret_key != Self::DEFAULT_SECRET_KEY_VALUE {
- config.secret_key = stored_config.secret_key;
- }
- if !stored_config.domain_name.is_empty() && stored_config.domain_name != Self::DEFAULT_DOMAIN_NAME_VALUE {
- config.domain_name = stored_config.domain_name;
- }
- // The stored volume_name is updated only if it is not empty and different from the default
- if !stored_config.volume_name.is_empty() && stored_config.volume_name != Self::default_volume_name() {
- config.volume_name = stored_config.volume_name;
- }
- if !stored_config.console_address.is_empty()
- && stored_config.console_address != Self::DEFAULT_CONSOLE_ADDRESS_VALUE
- {
- config.console_address = stored_config.console_address;
- }
- }
- }
-
- Ok(config)
- }
-
- /// Auxiliary method: Extract the host and port from the address string
- /// # Arguments
- /// * `address` - The address string
- ///
- /// # Returns
- /// * `Some((host, port))` - The host and port
- ///
- /// # Errors
- /// * If the address is not in the form 'host:port'
- /// * If the port is not a valid u16
- ///
- /// # Example
- /// ```
- /// let (host, port) = RustFSConfig::extract_host_port("127.0.0.1:9000").unwrap();
- /// assert_eq!(host, "127.0.0.1");
- /// assert_eq!(port, 9000);
- /// ```
- pub fn extract_host_port(address: &str) -> Option<(&str, u16)> {
- let parts: Vec<&str> = address.split(':').collect();
- if parts.len() == 2 {
- if let Ok(port) = parts[1].parse::() {
- return Some((parts[0], port));
- }
- }
- None
- }
-
- /// save the configuration to keyring
- ///
- /// # Errors
- /// * If the configuration cannot be serialized
- /// * If the configuration cannot be saved to the keyring
- ///
- /// # Example
- /// ```
- /// let config = RustFSConfig::default_config();
- /// config.save().unwrap();
- /// ```
- pub fn save(&self) -> Result<(), Box> {
- let entry = Entry::new(Self::SERVICE_NAME, Self::SERVICE_KEY)?;
- let json = serde_json::to_string(self)?;
- entry.set_password(&json)?;
- Ok(())
- }
-
- /// Clear the stored configuration from the system keyring
- ///
- /// # Returns
- /// `Ok(())` if the configuration was successfully cleared, or an error if the operation failed.
- ///
- /// # Example
- /// ```
- /// RustFSConfig::clear().unwrap();
- /// ```
- #[allow(dead_code)]
- pub fn clear() -> Result<(), Box> {
- let entry = Entry::new(Self::SERVICE_NAME, Self::SERVICE_KEY)?;
- entry.delete_credential()?;
- Ok(())
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn test_rustfs_config_default() {
- let config = RustFSConfig::default();
- assert!(config.address.is_empty());
- assert!(config.host.is_empty());
- assert!(config.port.is_empty());
- assert!(config.access_key.is_empty());
- assert!(config.secret_key.is_empty());
- assert!(config.domain_name.is_empty());
- assert!(config.volume_name.is_empty());
- assert!(config.console_address.is_empty());
- }
-
- #[test]
- fn test_rustfs_config_creation() {
- let config = RustFSConfig {
- address: "192.168.1.100:9000".to_string(),
- host: "192.168.1.100".to_string(),
- port: "9000".to_string(),
- access_key: "testuser".to_string(),
- secret_key: "testpass".to_string(),
- domain_name: "test.rustfs.com".to_string(),
- volume_name: "/data/rustfs".to_string(),
- console_address: "192.168.1.100:9001".to_string(),
- };
-
- assert_eq!(config.address, "192.168.1.100:9000");
- assert_eq!(config.host, "192.168.1.100");
- assert_eq!(config.port, "9000");
- assert_eq!(config.access_key, "testuser");
- assert_eq!(config.secret_key, "testpass");
- assert_eq!(config.domain_name, "test.rustfs.com");
- assert_eq!(config.volume_name, "/data/rustfs");
- assert_eq!(config.console_address, "192.168.1.100:9001");
- }
-
- #[test]
- fn test_default_volume_name() {
- let volume_name = RustFSConfig::default_volume_name();
- assert!(!volume_name.is_empty());
- // Should either be the home directory path or fallback to "data"
- assert!(volume_name.contains("rustfs") || volume_name == "data");
- }
-
- #[test]
- fn test_default_config() {
- let config = RustFSConfig::default_config();
- assert_eq!(config.address, RustFSConfig::DEFAULT_ADDRESS_VALUE);
- assert_eq!(config.host, RustFSConfig::DEFAULT_HOST_VALUE);
- assert_eq!(config.port, RustFSConfig::DEFAULT_PORT_VALUE);
- assert_eq!(config.access_key, RustFSConfig::DEFAULT_ACCESS_KEY_VALUE);
- assert_eq!(config.secret_key, RustFSConfig::DEFAULT_SECRET_KEY_VALUE);
- assert_eq!(config.domain_name, RustFSConfig::DEFAULT_DOMAIN_NAME_VALUE);
- assert_eq!(config.console_address, RustFSConfig::DEFAULT_CONSOLE_ADDRESS_VALUE);
- assert!(!config.volume_name.is_empty());
- }
-
- #[test]
- fn test_extract_host_port_valid() {
- let test_cases = vec![
- ("127.0.0.1:9000", Some(("127.0.0.1", 9000))),
- ("localhost:8080", Some(("localhost", 8080))),
- ("192.168.1.100:3000", Some(("192.168.1.100", 3000))),
- ("0.0.0.0:80", Some(("0.0.0.0", 80))),
- ("example.com:443", Some(("example.com", 443))),
- ];
-
- for (input, expected) in test_cases {
- let result = RustFSConfig::extract_host_port(input);
- assert_eq!(result, expected, "Failed for input: {input}");
- }
- }
-
- #[test]
- fn test_extract_host_port_invalid() {
- let invalid_cases = vec![
- "127.0.0.1", // Missing port
- "127.0.0.1:", // Empty port
- "127.0.0.1:abc", // Invalid port
- "127.0.0.1:99999", // Port out of range
- "", // Empty string
- "127.0.0.1:9000:extra", // Too many parts
- "invalid", // No colon
- ];
-
- for input in invalid_cases {
- let result = RustFSConfig::extract_host_port(input);
- assert_eq!(result, None, "Should be None for input: {input}");
- }
-
- // Special case: empty host but valid port should still work
- let result = RustFSConfig::extract_host_port(":9000");
- assert_eq!(result, Some(("", 9000)));
- }
-
- #[test]
- fn test_extract_host_port_edge_cases() {
- // Test edge cases for port numbers
- assert_eq!(RustFSConfig::extract_host_port("host:0"), Some(("host", 0)));
- assert_eq!(RustFSConfig::extract_host_port("host:65535"), Some(("host", 65535)));
- assert_eq!(RustFSConfig::extract_host_port("host:65536"), None); // Out of range
- }
-
- #[test]
- fn test_serialization() {
- let config = RustFSConfig {
- address: "127.0.0.1:9000".to_string(),
- host: "127.0.0.1".to_string(),
- port: "9000".to_string(),
- access_key: "admin".to_string(),
- secret_key: "password".to_string(),
- domain_name: "test.com".to_string(),
- volume_name: "/data".to_string(),
- console_address: "127.0.0.1:9001".to_string(),
- };
-
- let json = serde_json::to_string(&config).unwrap();
- assert!(json.contains("127.0.0.1:9000"));
- assert!(json.contains("admin"));
- assert!(json.contains("test.com"));
- }
-
- #[test]
- fn test_deserialization() {
- let json = r#"{
- "address": "192.168.1.100:9000",
- "host": "192.168.1.100",
- "port": "9000",
- "access_key": "testuser",
- "secret_key": "testpass",
- "domain_name": "example.com",
- "volume_name": "/opt/data",
- "console_address": "192.168.1.100:9001"
- }"#;
-
- let config: RustFSConfig = serde_json::from_str(json).unwrap();
- assert_eq!(config.address, "192.168.1.100:9000");
- assert_eq!(config.host, "192.168.1.100");
- assert_eq!(config.port, "9000");
- assert_eq!(config.access_key, "testuser");
- assert_eq!(config.secret_key, "testpass");
- assert_eq!(config.domain_name, "example.com");
- assert_eq!(config.volume_name, "/opt/data");
- assert_eq!(config.console_address, "192.168.1.100:9001");
- }
-
- #[test]
- fn test_serialization_deserialization_roundtrip() {
- let original_config = RustFSConfig {
- address: "10.0.0.1:8080".to_string(),
- host: "10.0.0.1".to_string(),
- port: "8080".to_string(),
- access_key: "roundtrip_user".to_string(),
- secret_key: "roundtrip_pass".to_string(),
- domain_name: "roundtrip.test".to_string(),
- volume_name: "/tmp/roundtrip".to_string(),
- console_address: "10.0.0.1:8081".to_string(),
- };
-
- let json = serde_json::to_string(&original_config).unwrap();
- let deserialized_config: RustFSConfig = serde_json::from_str(&json).unwrap();
-
- assert_eq!(original_config, deserialized_config);
- }
-
- #[test]
- fn test_config_ordering() {
- let config1 = RustFSConfig {
- address: "127.0.0.1:9000".to_string(),
- host: "127.0.0.1".to_string(),
- port: "9000".to_string(),
- access_key: "admin".to_string(),
- secret_key: "password".to_string(),
- domain_name: "test.com".to_string(),
- volume_name: "/data".to_string(),
- console_address: "127.0.0.1:9001".to_string(),
- };
-
- let config2 = RustFSConfig {
- address: "127.0.0.1:9000".to_string(),
- host: "127.0.0.1".to_string(),
- port: "9000".to_string(),
- access_key: "admin".to_string(),
- secret_key: "password".to_string(),
- domain_name: "test.com".to_string(),
- volume_name: "/data".to_string(),
- console_address: "127.0.0.1:9001".to_string(),
- };
-
- let config3 = RustFSConfig {
- address: "127.0.0.1:9001".to_string(), // Different port
- host: "127.0.0.1".to_string(),
- port: "9001".to_string(),
- access_key: "admin".to_string(),
- secret_key: "password".to_string(),
- domain_name: "test.com".to_string(),
- volume_name: "/data".to_string(),
- console_address: "127.0.0.1:9002".to_string(),
- };
-
- assert_eq!(config1, config2);
- assert_ne!(config1, config3);
- assert!(config1 < config3); // Lexicographic ordering
- }
-
- #[test]
- fn test_clone() {
- let original = RustFSConfig::default_config();
- let cloned = original.clone();
-
- assert_eq!(original, cloned);
- assert_eq!(original.address, cloned.address);
- assert_eq!(original.access_key, cloned.access_key);
- }
-
- #[test]
- fn test_debug_format() {
- let config = RustFSConfig::default_config();
- let debug_str = format!("{config:?}");
-
- assert!(debug_str.contains("RustFSConfig"));
- assert!(debug_str.contains("address"));
- assert!(debug_str.contains("127.0.0.1:9000"));
- }
-
- #[test]
- fn test_constants() {
- assert_eq!(RustFSConfig::SERVICE_NAME, "rustfs-service");
- assert_eq!(RustFSConfig::SERVICE_KEY, "rustfs_key");
- assert_eq!(RustFSConfig::DEFAULT_DOMAIN_NAME_VALUE, "demo.rustfs.com");
- assert_eq!(RustFSConfig::DEFAULT_ADDRESS_VALUE, "127.0.0.1:9000");
- assert_eq!(RustFSConfig::DEFAULT_PORT_VALUE, "9000");
- assert_eq!(RustFSConfig::DEFAULT_HOST_VALUE, "127.0.0.1");
- assert_eq!(RustFSConfig::DEFAULT_ACCESS_KEY_VALUE, "rustfsadmin");
- assert_eq!(RustFSConfig::DEFAULT_SECRET_KEY_VALUE, "rustfsadmin");
- assert_eq!(RustFSConfig::DEFAULT_CONSOLE_ADDRESS_VALUE, "127.0.0.1:9001");
- }
-
- #[test]
- fn test_empty_strings() {
- let config = RustFSConfig {
- address: "".to_string(),
- host: "".to_string(),
- port: "".to_string(),
- access_key: "".to_string(),
- secret_key: "".to_string(),
- domain_name: "".to_string(),
- volume_name: "".to_string(),
- console_address: "".to_string(),
- };
-
- assert!(config.address.is_empty());
- assert!(config.host.is_empty());
- assert!(config.port.is_empty());
- assert!(config.access_key.is_empty());
- assert!(config.secret_key.is_empty());
- assert!(config.domain_name.is_empty());
- assert!(config.volume_name.is_empty());
- assert!(config.console_address.is_empty());
- }
-
- #[test]
- fn test_very_long_strings() {
- let long_string = "a".repeat(1000);
- let config = RustFSConfig {
- address: format!("{long_string}:9000"),
- host: long_string.clone(),
- port: "9000".to_string(),
- access_key: long_string.clone(),
- secret_key: long_string.clone(),
- domain_name: format!("{long_string}.com"),
- volume_name: format!("/data/{long_string}"),
- console_address: format!("{long_string}:9001"),
- };
-
- assert_eq!(config.host.len(), 1000);
- assert_eq!(config.access_key.len(), 1000);
- assert_eq!(config.secret_key.len(), 1000);
- }
-
- #[test]
- fn test_special_characters() {
- let config = RustFSConfig {
- address: "127.0.0.1:9000".to_string(),
- host: "127.0.0.1".to_string(),
- port: "9000".to_string(),
- access_key: "user@domain.com".to_string(),
- secret_key: "p@ssw0rd!#$%".to_string(),
- domain_name: "test-domain.example.com".to_string(),
- volume_name: "/data/rust-fs/storage".to_string(),
- console_address: "127.0.0.1:9001".to_string(),
- };
-
- assert!(config.access_key.contains("@"));
- assert!(config.secret_key.contains("!#$%"));
- assert!(config.domain_name.contains("-"));
- assert!(config.volume_name.contains("/"));
- }
-
- #[test]
- fn test_unicode_strings() {
- let config = RustFSConfig {
- address: "127.0.0.1:9000".to_string(),
- host: "127.0.0.1".to_string(),
- port: "9000".to_string(),
- access_key: "username".to_string(),
- secret_key: "password123".to_string(),
- domain_name: "test.com".to_string(),
- volume_name: "/data/storage".to_string(),
- console_address: "127.0.0.1:9001".to_string(),
- };
-
- assert_eq!(config.access_key, "username");
- assert_eq!(config.secret_key, "password123");
- assert_eq!(config.domain_name, "test.com");
- assert_eq!(config.volume_name, "/data/storage");
- }
-
- #[test]
- fn test_memory_efficiency() {
- // Test that the structure doesn't use excessive memory
- assert!(std::mem::size_of::() < 1000);
- }
-
- // Note: Keyring-related tests (load, save, clear) are not included here
- // because they require actual keyring access and would be integration tests
- // rather than unit tests. They should be tested separately in an integration
- // test environment where keyring access can be properly mocked or controlled.
-}
diff --git a/cli/rustfs-gui/src/utils/helper.rs b/cli/rustfs-gui/src/utils/helper.rs
deleted file mode 100644
index 2fda31ec..00000000
--- a/cli/rustfs-gui/src/utils/helper.rs
+++ /dev/null
@@ -1,899 +0,0 @@
-// Copyright 2024 RustFS Team
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-use crate::utils::RustFSConfig;
-use dioxus::logger::tracing::{debug, error, info};
-use rust_embed::RustEmbed;
-use sha2::{Digest, Sha256};
-use std::error::Error;
-use std::path::{Path, PathBuf};
-use std::process::Command as StdCommand;
-use std::sync::LazyLock;
-use std::time::Duration;
-use tokio::fs;
-use tokio::fs::File;
-use tokio::io::AsyncWriteExt;
-use tokio::net::TcpStream;
-use tokio::sync::{Mutex, mpsc};
-
-#[derive(RustEmbed)]
-#[folder = "$CARGO_MANIFEST_DIR/embedded-rustfs/"]
-struct Asset;
-
-// Use `LazyLock` to cache the checksum of embedded resources
-static RUSTFS_HASH: LazyLock> = LazyLock::new(|| {
- let rustfs_file = if cfg!(windows) { "rustfs.exe" } else { "rustfs" };
- let rustfs_data = Asset::get(rustfs_file).expect("RustFs binary not embedded");
- let hash = hex::encode(Sha256::digest(&rustfs_data.data));
- Mutex::new(hash)
-});
-
-/// Service command
-/// This enum represents the commands that can be sent to the service manager
-/// to start, stop, or restart the service
-/// The `Start` variant contains the configuration for the service
-/// The `Restart` variant contains the configuration for the service
-///
-/// # Example
-/// ```
-/// let config = RustFSConfig {
-/// address: "127.0.0.1:9000".to_string(),
-/// host: "127.0.0.1".to_string(),
-/// port: "9000".to_string(),
-/// access_key: "rustfsadmin".to_string(),
-/// secret_key: "rustfsadmin".to_string(),
-/// domain_name: "demo.rustfs.com".to_string(),
-/// volume_name: "data".to_string(),
-/// console_address: "127.0.0.1:9001".to_string(),
-/// };
-///
-/// let command = ServiceCommand::Start(config);
-/// println!("{:?}", command);
-///
-/// assert_eq!(command, ServiceCommand::Start(config));
-/// ```
-pub enum ServiceCommand {
- Start(RustFSConfig),
- Stop,
- Restart(RustFSConfig),
-}
-
-/// Service operation result
-/// This struct represents the result of a service operation
-/// It contains information about the success of the operation,
-///
-/// # Example
-/// ```
-/// use chrono::Local;
-///
-/// let result = ServiceOperationResult {
-/// success: true,
-/// start_time: chrono::Local::now(),
-/// end_time: chrono::Local::now(),
-/// message: "Service started successfully".to_string(),
-/// };
-///
-/// println!("{:?}", result);
-/// assert_eq!(result.success, true);
-/// ```
-#[derive(Debug)]
-pub struct ServiceOperationResult {
- pub success: bool,
- pub start_time: chrono::DateTime,
- pub end_time: chrono::DateTime,
- pub message: String,
-}
-
-/// Service manager
-/// This struct represents a service manager that can be used to start, stop, or restart a service
-/// It contains a command sender that can be used to send commands to the service manager
-///
-/// # Example
-/// ```
-/// let service_manager = ServiceManager::new();
-/// println!("{:?}", service_manager);
-/// ```
-#[derive(Debug, Clone)]
-pub struct ServiceManager {
- command_tx: mpsc::Sender,
- // process: Arc>>,
- // pid: Arc>>, // Add PID storage
- // current_config: Arc>>, // Add configuration storage
-}
-
-impl ServiceManager {
- /// check if the service is running and return a pid
- /// This function is platform dependent
- /// On Unix systems, it uses the `ps` command to check for the service
- /// On Windows systems, it uses the `wmic` command to check for the service
- ///
- /// # Example
- /// ```
- /// let pid = check_service_status().await;
- /// println!("{:?}", pid);
- /// ```
- pub async fn check_service_status() -> Option {
- #[cfg(unix)]
- {
- // use the ps command on a unix system
- if let Ok(output) = StdCommand::new("ps").arg("-ef").output() {
- let output_str = String::from_utf8_lossy(&output.stdout);
- for line in output_str.lines() {
- // match contains `rustfs/bin/rustfs` of the line
- if line.contains("rustfs/bin/rustfs") && !line.contains("grep") {
- if let Some(pid_str) = line.split_whitespace().nth(1) {
- if let Ok(pid) = pid_str.parse::() {
- return Some(pid);
- }
- }
- }
- }
- }
- }
-
- #[cfg(windows)]
- {
- if let Ok(output) = StdCommand::new("wmic")
- .arg("process")
- .arg("where")
- .arg("caption='rustfs.exe'")
- .arg("get")
- .arg("processid")
- .output()
- {
- let output_str = String::from_utf8_lossy(&output.stdout);
- for line in output_str.lines() {
- if let Ok(pid) = line.trim().parse::() {
- return Some(pid);
- }
- }
- }
- }
-
- None
- }
-
- /// Prepare the service
- /// This function downloads the service executable if it doesn't exist
- /// It also creates the necessary directories for the service
- ///
- /// # Example
- /// ```
- /// let executable_path = prepare_service().await;
- /// println!("{:?}", executable_path);
- /// ```
- async fn prepare_service() -> Result> {
- // get the user directory
- let home_dir = dirs::home_dir().ok_or("Unable to get user directory")?;
- let rustfs_dir = home_dir.join("rustfs");
- let bin_dir = rustfs_dir.join("bin");
- let data_dir = rustfs_dir.join("data");
- let logs_dir = rustfs_dir.join("logs");
-
- // create the necessary directories
- for dir in [&bin_dir, &data_dir, &logs_dir] {
- if !dir.exists() {
- tokio::fs::create_dir_all(dir).await?;
- }
- }
-
- let rustfs_file = if cfg!(windows) { "rustfs.exe" } else { "rustfs" };
- let executable_path = bin_dir.join(rustfs_file);
- let hash_path = bin_dir.join("embedded_rustfs.sha256");
-
- if executable_path.exists() && hash_path.exists() {
- let cached_hash = fs::read_to_string(&hash_path).await?;
- let expected_hash = RUSTFS_HASH.lock().await;
- if cached_hash == *expected_hash {
- println!("Use cached rustfs: {executable_path:?}");
- return Ok(executable_path);
- }
- }
-
- // Extract and write files
- let rustfs_data = Asset::get(rustfs_file).expect("RustFS binary not embedded");
- let mut file = File::create(&executable_path).await?;
- file.write_all(&rustfs_data.data).await?;
- let expected_hash = hex::encode(Sha256::digest(&rustfs_data.data));
- fs::write(&hash_path, expected_hash).await?;
-
- // set execution permissions on unix systems
- #[cfg(unix)]
- {
- use std::os::unix::fs::PermissionsExt;
- let mut perms = std::fs::metadata(&executable_path)?.permissions();
- perms.set_mode(0o755);
- std::fs::set_permissions(&executable_path, perms)?;
- }
-
- Ok(executable_path)
- }
-
- /// Helper function: Extracts the port from the address string
- ///
- /// # Example
- /// ```
- /// let address = "127.0.0.1:9000";
- /// let port = extract_port(address);
- /// println!("{:?}", port);
- /// ```
- fn extract_port(address: &str) -> Option {
- address.split(':').nth(1)?.parse().ok()
- }
-
- /// Create a new instance of the service manager
- ///
- /// # Example
- /// ```
- /// let service_manager = ServiceManager::new();
- /// println!("{:?}", service_manager);
- /// ```
- pub(crate) fn new() -> Self {
- let (command_tx, mut command_rx) = mpsc::channel(10);
- // Start the control loop
- tokio::spawn(async move {
- while let Some(cmd) = command_rx.recv().await {
- match cmd {
- ServiceCommand::Start(config) => {
- if let Err(e) = Self::start_service(&config).await {
- Self::show_error(&format!("Failed to start service: {e}"));
- }
- }
- ServiceCommand::Stop => {
- if let Err(e) = Self::stop_service().await {
- Self::show_error(&format!("Failed to stop service: {e}"));
- }
- }
- ServiceCommand::Restart(config) => {
- if Self::check_service_status().await.is_some() {
- if let Err(e) = Self::stop_service().await {
- Self::show_error(&format!("Failed to restart service: {e}"));
- continue;
- }
- }
- if let Err(e) = Self::start_service(&config).await {
- Self::show_error(&format!("Failed to restart service: {e}"));
- }
- }
- }
- }
- });
-
- ServiceManager { command_tx }
- }
-
- /// Start the service
- /// This function starts the service with the given configuration
- ///
- /// # Example
- /// ```
- /// let config = RustFSConfig {
- /// address: "127.0.0.1:9000".to_string(),
- /// host: "127.0.0.1".to_string(),
- /// port: "9000".to_string(),
- /// access_key: "rustfsadmin".to_string(),
- /// secret_key: "rustfsadmin".to_string(),
- /// domain_name: "demo.rustfs.com".to_string(),
- /// volume_name: "data".to_string(),
- /// console_address: "127.0.0.1:9001".to_string(),
- /// };
- ///
- /// let result = start_service(&config).await;
- /// println!("{:?}", result);
- /// ```
- async fn start_service(config: &RustFSConfig) -> Result<(), Box> {
- // Check if the service is already running
- if let Some(existing_pid) = Self::check_service_status().await {
- return Err(format!("Service is already running, PID: {existing_pid}").into());
- }
-
- // Prepare the service program
- let executable_path = Self::prepare_service().await?;
- // Check the data catalog
- let volume_name_path = Path::new(&config.volume_name);
- if !volume_name_path.exists() {
- tokio::fs::create_dir_all(&config.volume_name).await?;
- }
-
- // Extract the port from the configuration
- let main_port = Self::extract_port(&config.address).ok_or("Unable to parse main service port")?;
- let console_port = Self::extract_port(&config.console_address).ok_or("Unable to parse console port")?;
-
- let host = config.address.split(':').next().ok_or("Unable to parse host address")?;
-
- // Check the port
- let ports = vec![main_port, console_port];
- for port in ports {
- if Self::is_port_in_use(host, port).await {
- return Err(format!("Port {port} is already in use").into());
- }
- }
-
- // Start the service
- let mut child = tokio::process::Command::new(executable_path)
- .arg("--address")
- .arg(&config.address)
- .arg("--access-key")
- .arg(&config.access_key)
- .arg("--secret-key")
- .arg(&config.secret_key)
- .arg("--console-address")
- .arg(&config.console_address)
- .arg(config.volume_name.clone())
- .spawn()?;
-
- let process_pid = child.id().unwrap();
- // Wait for the service to start
- tokio::time::sleep(Duration::from_secs(2)).await;
-
- // Check if the service started successfully
- if Self::is_port_in_use(host, main_port).await {
- Self::show_info(&format!("Service started successfully! Process ID: {process_pid}"));
-
- Ok(())
- } else {
- child.kill().await?;
- Err("Service failed to start".into())
- }
- }
-
- /// Stop the service
- /// This function stops the service
- ///
- /// # Example
- /// ```
- /// let result = stop_service().await;
- /// println!("{:?}", result);
- /// ```
- async fn stop_service() -> Result<(), Box> {
- let existing_pid = Self::check_service_status().await;
- debug!("existing_pid: {:?}", existing_pid);
- if let Some(service_pid) = existing_pid {
- // An attempt was made to terminate the process
- #[cfg(unix)]
- {
- StdCommand::new("kill").arg("-9").arg(service_pid.to_string()).output()?;
- }
-
- #[cfg(windows)]
- {
- StdCommand::new("taskkill")
- .arg("/F")
- .arg("/PID")
- .arg(service_pid.to_string())
- .output()?;
- }
-
- // Verify that the service is indeed stopped
- tokio::time::sleep(Duration::from_secs(1)).await;
- if Self::check_service_status().await.is_some() {
- return Err("Service failed to stop".into());
- }
- Self::show_info("Service stopped successfully");
-
- Ok(())
- } else {
- Err("Service is not running".into())
- }
- }
-
- /// Check if the port is in use
- /// This function checks if the given port is in use on the given host
- ///
- /// # Example
- /// ```
- /// let host = "127.0.0.1";
- /// let port = 9000;
- /// let result = is_port_in_use(host, port).await;
- /// println!("{:?}", result);
- /// ```
- async fn is_port_in_use(host: &str, port: u16) -> bool {
- TcpStream::connect(format!("{host}:{port}")).await.is_ok()
- }
-
- /// Show an error message
- /// This function shows an error message dialog
- ///
- /// # Example
- /// ```
- /// show_error("This is an error message");
- /// ```
- pub(crate) fn show_error(message: &str) {
- rfd::MessageDialog::new()
- .set_title("Error")
- .set_description(message)
- .set_level(rfd::MessageLevel::Error)
- .show();
- }
-
- /// Show an information message
- /// This function shows an information message dialog
- ///
- /// # Example
- /// ```
- /// show_info("This is an information message");
- /// ```
- pub(crate) fn show_info(message: &str) {
- rfd::MessageDialog::new()
- .set_title("Success")
- .set_description(message)
- .set_level(rfd::MessageLevel::Info)
- .show();
- }
-
- /// Start the service
- /// This function sends a `Start` command to the service manager
- ///
- /// # Example
- /// ```
- /// let config = RustFSConfig {
- /// address: "127.0.0.1:9000".to_string(),
- /// host: "127.0.0.1".to_string(),
- /// port: "9000".to_string(),
- /// access_key: "rustfsadmin".to_string(),
- /// secret_key: "rustfsadmin".to_string(),
- /// domain_name: "demo.rustfs.com".to_string(),
- /// volume_name: "data".to_string(),
- /// console_address: "127.0.0.1:9001".to_string(),
- /// };
- ///
- /// let service_manager = ServiceManager::new();
- /// let result = service_manager.start(config).await;
- /// println!("{:?}", result);
- /// ```
- ///
- /// # Errors
- /// This function returns an error if the service fails to start
- ///
- /// # Panics
- /// This function panics if the port number is invalid
- ///
- /// # Safety
- /// This function is not marked as unsafe
- ///
- /// # Performance
- /// This function is not optimized for performance
- ///
- /// # Design
- /// This function is designed to be simple and easy to use
- ///
- /// # Security
- /// This function does not have any security implications
- pub async fn start(&self, config: RustFSConfig) -> Result> {
- let start_time = chrono::Local::now();
- self.command_tx.send(ServiceCommand::Start(config.clone())).await?;
-
- let host = &config.host;
- let port = config.port.parse::().expect("Invalid port number");
- // wait for the service to actually start
- let mut retries = 0;
- while retries < 30 {
- // wait up to 30 seconds
- if Self::check_service_status().await.is_some() && Self::is_port_in_use(host, port).await {
- let end_time = chrono::Local::now();
- return Ok(ServiceOperationResult {
- success: true,
- start_time,
- end_time,
- message: "Service started successfully".to_string(),
- });
- }
- tokio::time::sleep(Duration::from_secs(1)).await;
- retries += 1;
- }
-
- Err("Service start timeout".into())
- }
-
- /// Stop the service
- /// This function sends a `Stop` command to the service manager
- ///
- /// # Example
- /// ```
- /// let service_manager = ServiceManager::new();
- /// let result = service_manager.stop().await;
- /// println!("{:?}", result);
- /// ```
- ///
- /// # Errors
- /// This function returns an error if the service fails to stop
- ///
- /// # Panics
- /// This function panics if the port number is invalid
- ///
- /// # Safety
- /// This function is not marked as unsafe
- ///
- /// # Performance
- /// This function is not optimized for performance
- ///
- /// # Design
- /// This function is designed to be simple and easy to use
- ///
- /// # Security
- /// This function does not have any security implications
- pub async fn stop(&self) -> Result> {
- let start_time = chrono::Local::now();
- self.command_tx.send(ServiceCommand::Stop).await?;
-
- // Wait for the service to actually stop
- let mut retries = 0;
- while retries < 15 {
- // Wait up to 15 seconds
- if Self::check_service_status().await.is_none() {
- let end_time = chrono::Local::now();
- return Ok(ServiceOperationResult {
- success: true,
- start_time,
- end_time,
- message: "Service stopped successfully".to_string(),
- });
- }
- tokio::time::sleep(Duration::from_secs(1)).await;
- retries += 1;
- }
-
- Err("Service stop timeout".into())
- }
-
- /// Restart the service
- /// This function sends a `Restart` command to the service manager
- ///
- /// # Example
- /// ```
- /// let config = RustFSConfig {
- /// address: "127.0.0.1:9000".to_string(),
- /// host: "127.0.0.1".to_string(),
- /// port: "9000".to_string(),
- /// access_key: "rustfsadmin".to_string(),
- /// secret_key: "rustfsadmin".to_string(),
- /// domain_name: "demo.rustfs.com".to_string(),
- /// volume_name: "data".to_string(),
- /// console_address: "127.0.0.1:9001".to_string(),
- /// };
- ///
- /// let service_manager = ServiceManager::new();
- /// let result = service_manager.restart(config).await;
- /// println!("{:?}", result);
- /// ```
- ///
- /// # Errors
- /// This function returns an error if the service fails to restart
- ///
- /// # Panics
- /// This function panics if the port number is invalid
- ///
- /// # Safety
- /// This function is not marked as unsafe
- ///
- /// # Performance
- /// This function is not optimized for performance
- ///
- /// # Design
- /// This function is designed to be simple and easy to use
- ///
- /// # Security
- /// This function does not have any security implications
- pub async fn restart(&self, config: RustFSConfig) -> Result> {
- let start_time = chrono::Local::now();
- self.command_tx.send(ServiceCommand::Restart(config.clone())).await?;
-
- let host = &config.host;
- let port = config.port.parse::().expect("Invalid port number");
-
- // wait for the service to restart
- let mut retries = 0;
- while retries < 45 {
- // Longer waiting time is given as both the stop and start processes are involved
- if Self::check_service_status().await.is_some() && Self::is_port_in_use(host, port).await {
- match config.save() {
- Ok(_) => info!("save config success"),
- Err(e) => {
- error!("save config error: {}", e);
- self.command_tx.send(ServiceCommand::Stop).await?;
- Self::show_error("Failed to save configuration");
- return Err("Failed to save configuration".into());
- }
- }
- let end_time = chrono::Local::now();
- return Ok(ServiceOperationResult {
- success: true,
- start_time,
- end_time,
- message: "Service restarted successfully".to_string(),
- });
- }
- tokio::time::sleep(Duration::from_secs(1)).await;
- retries += 1;
- }
- Err("Service restart timeout".into())
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use std::time::Duration;
-
- #[test]
- fn test_service_command_creation() {
- let config = RustFSConfig::default_config();
-
- let start_cmd = ServiceCommand::Start(config.clone());
- let stop_cmd = ServiceCommand::Stop;
- let restart_cmd = ServiceCommand::Restart(config);
-
- // Test that commands can be created
- match start_cmd {
- ServiceCommand::Start(_) => {}
- _ => panic!("Expected Start command"),
- }
-
- match stop_cmd {
- ServiceCommand::Stop => {}
- _ => panic!("Expected Stop command"),
- }
-
- match restart_cmd {
- ServiceCommand::Restart(_) => {}
- _ => panic!("Expected Restart command"),
- }
- }
-
- #[test]
- fn test_service_operation_result_creation() {
- let start_time = chrono::Local::now();
- let end_time = chrono::Local::now();
-
- let success_result = ServiceOperationResult {
- success: true,
- start_time,
- end_time,
- message: "Operation successful".to_string(),
- };
-
- let failure_result = ServiceOperationResult {
- success: false,
- start_time,
- end_time,
- message: "Operation failed".to_string(),
- };
-
- assert!(success_result.success);
- assert_eq!(success_result.message, "Operation successful");
-
- assert!(!failure_result.success);
- assert_eq!(failure_result.message, "Operation failed");
- }
-
- #[test]
- fn test_service_operation_result_debug() {
- let result = ServiceOperationResult {
- success: true,
- start_time: chrono::Local::now(),
- end_time: chrono::Local::now(),
- message: "Test message".to_string(),
- };
-
- let debug_str = format!("{result:?}");
- assert!(debug_str.contains("ServiceOperationResult"));
- assert!(debug_str.contains("success: true"));
- assert!(debug_str.contains("Test message"));
- }
-
- #[test]
- fn test_service_manager_creation() {
- // Test ServiceManager creation in a tokio runtime
- let rt = tokio::runtime::Runtime::new().unwrap();
- rt.block_on(async {
- let service_manager = ServiceManager::new();
-
- // Test that ServiceManager can be created and cloned
- let cloned_manager = service_manager.clone();
-
- // Both should be valid (we can't test much more without async runtime)
- assert!(format!("{service_manager:?}").contains("ServiceManager"));
- assert!(format!("{cloned_manager:?}").contains("ServiceManager"));
- });
- }
-
- #[test]
- fn test_extract_port_valid() {
- let test_cases = vec![
- ("127.0.0.1:9000", Some(9000)),
- ("localhost:8080", Some(8080)),
- ("192.168.1.100:3000", Some(3000)),
- ("0.0.0.0:80", Some(80)),
- ("example.com:443", Some(443)),
- ("host:65535", Some(65535)),
- ("host:1", Some(1)),
- ];
-
- for (input, expected) in test_cases {
- let result = ServiceManager::extract_port(input);
- assert_eq!(result, expected, "Failed for input: {input}");
- }
- }
-
- #[test]
- fn test_extract_port_invalid() {
- let invalid_cases = vec![
- "127.0.0.1", // Missing port
- "127.0.0.1:", // Empty port
- "127.0.0.1:abc", // Invalid port
- "127.0.0.1:99999", // Port out of range
- "", // Empty string
- "invalid", // No colon
- "host:-1", // Negative port
- "host:0.5", // Decimal port
- ];
-
- for input in invalid_cases {
- let result = ServiceManager::extract_port(input);
- assert_eq!(result, None, "Should be None for input: {input}");
- }
-
- // Special case: empty host but valid port should still work
- assert_eq!(ServiceManager::extract_port(":9000"), Some(9000));
-
- // Special case: multiple colons - extract_port takes the second part
- // For "127.0.0.1:9000:extra", it takes "9000" which is valid
- assert_eq!(ServiceManager::extract_port("127.0.0.1:9000:extra"), Some(9000));
- }
-
- #[test]
- fn test_extract_port_edge_cases() {
- // Test edge cases for port numbers
- assert_eq!(ServiceManager::extract_port("host:0"), Some(0));
- assert_eq!(ServiceManager::extract_port("host:65535"), Some(65535));
- assert_eq!(ServiceManager::extract_port("host:65536"), None); // Out of range
- // IPv6-like address - extract_port takes the second part after split(':')
- // For "::1:8080", split(':') gives ["", "", "1", "8080"], nth(1) gives ""
- assert_eq!(ServiceManager::extract_port("::1:8080"), None); // Second part is empty
- // For "[::1]:8080", split(':') gives ["[", "", "1]", "8080"], nth(1) gives ""
- assert_eq!(ServiceManager::extract_port("[::1]:8080"), None); // Second part is empty
- }
-
- #[test]
- fn test_show_error() {
- // Test that show_error function exists and can be called
- // We can't actually test the dialog in a test environment
- // so we just verify the function signature
- }
-
- #[test]
- fn test_show_info() {
- // Test that show_info function exists and can be called
- // We can't actually test the dialog in a test environment
- // so we just verify the function signature
- }
-
- #[test]
- fn test_service_operation_result_timing() {
- let start_time = chrono::Local::now();
- std::thread::sleep(Duration::from_millis(10)); // Small delay
- let end_time = chrono::Local::now();
-
- let result = ServiceOperationResult {
- success: true,
- start_time,
- end_time,
- message: "Timing test".to_string(),
- };
-
- // End time should be after start time
- assert!(result.end_time >= result.start_time);
- }
-
- #[test]
- fn test_service_operation_result_with_unicode() {
- let result = ServiceOperationResult {
- success: true,
- start_time: chrono::Local::now(),
- end_time: chrono::Local::now(),
- message: "Operation successful 🎉".to_string(),
- };
-
- assert_eq!(result.message, "Operation successful 🎉");
- assert!(result.success);
- }
-
- #[test]
- fn test_service_operation_result_with_long_message() {
- let long_message = "A".repeat(10000);
- let result = ServiceOperationResult {
- success: false,
- start_time: chrono::Local::now(),
- end_time: chrono::Local::now(),
- message: long_message.clone(),
- };
-
- assert_eq!(result.message.len(), 10000);
- assert_eq!(result.message, long_message);
- assert!(!result.success);
- }
-
- #[test]
- fn test_service_command_with_different_configs() {
- let config1 = RustFSConfig {
- address: "127.0.0.1:9000".to_string(),
- host: "127.0.0.1".to_string(),
- port: "9000".to_string(),
- access_key: "admin1".to_string(),
- secret_key: "pass1".to_string(),
- domain_name: "test1.com".to_string(),
- volume_name: "/data1".to_string(),
- console_address: "127.0.0.1:9001".to_string(),
- };
-
- let config2 = RustFSConfig {
- address: "192.168.1.100:8080".to_string(),
- host: "192.168.1.100".to_string(),
- port: "8080".to_string(),
- access_key: "admin2".to_string(),
- secret_key: "pass2".to_string(),
- domain_name: "test2.com".to_string(),
- volume_name: "/data2".to_string(),
- console_address: "192.168.1.100:8081".to_string(),
- };
-
- let start_cmd1 = ServiceCommand::Start(config1);
- let restart_cmd2 = ServiceCommand::Restart(config2);
-
- // Test that different configs can be used
- match start_cmd1 {
- ServiceCommand::Start(config) => {
- assert_eq!(config.address, "127.0.0.1:9000");
- assert_eq!(config.access_key, "admin1");
- }
- _ => panic!("Expected Start command"),
- }
-
- match restart_cmd2 {
- ServiceCommand::Restart(config) => {
- assert_eq!(config.address, "192.168.1.100:8080");
- assert_eq!(config.access_key, "admin2");
- }
- _ => panic!("Expected Restart command"),
- }
- }
-
- #[test]
- fn test_memory_efficiency() {
- // Test that structures don't use excessive memory
- assert!(std::mem::size_of::() < 2000);
- assert!(std::mem::size_of::() < 1000);
- assert!(std::mem::size_of::() < 1000);
- }
-
- // Note: The following methods are not tested here because they require:
- // - Async runtime (tokio)
- // - File system access
- // - Network access
- // - Process management
- // - External dependencies (embedded assets)
- //
- // These should be tested in integration tests:
- // - check_service_status()
- // - prepare_service()
- // - start_service()
- // - stop_service()
- // - is_port_in_use()
- // - ServiceManager::start()
- // - ServiceManager::stop()
- // - ServiceManager::restart()
- //
- // The RUSTFS_HASH lazy_static is also not tested here as it depends
- // on embedded assets that may not be available in unit test environment.
-}
diff --git a/cli/rustfs-gui/src/utils/logger.rs b/cli/rustfs-gui/src/utils/logger.rs
deleted file mode 100644
index b51bbd65..00000000
--- a/cli/rustfs-gui/src/utils/logger.rs
+++ /dev/null
@@ -1,300 +0,0 @@
-// Copyright 2024 RustFS Team
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-use dioxus::logger::tracing::debug;
-use tracing_appender::non_blocking::WorkerGuard;
-use tracing_appender::rolling::{RollingFileAppender, Rotation};
-use tracing_subscriber::fmt;
-use tracing_subscriber::layer::SubscriberExt;
-use tracing_subscriber::util::SubscriberInitExt;
-
-/// Initialize the logger with a rolling file appender
-/// that rotates log files daily
-pub fn init_logger() -> WorkerGuard {
- // configuring rolling logs rolling by day
- let home_dir = dirs::home_dir().expect("Unable to get user directory");
- let rustfs_dir = home_dir.join("rustfs");
- let logs_dir = rustfs_dir.join("logs");
- let file_appender = RollingFileAppender::builder()
- .rotation(Rotation::DAILY) // rotate log files once every hour
- .filename_prefix("rustfs-cli") // log file names will be prefixed with `myapp.`
- .filename_suffix("log") // log file names will be suffixed with `.log`
- .build(logs_dir) // try to build an appender that stores log files in `/ var/ log`
- .expect("initializing rolling file appender failed");
- // non-blocking writer for improved performance
- let (non_blocking_file, worker_guard) = tracing_appender::non_blocking(file_appender);
-
- // console output layer
- let console_layer = fmt::layer()
- .with_writer(std::io::stdout)
- .with_ansi(true)
- .with_line_number(true); // enable colors in the console
-
- // file output layer
- let file_layer = fmt::layer()
- .with_writer(non_blocking_file)
- .with_ansi(false)
- .with_thread_names(true)
- .with_target(true)
- .with_thread_ids(true)
- .with_level(true)
- .with_line_number(true); // disable colors in the file
-
- // Combine all tiers and initialize global subscribers
- tracing_subscriber::registry()
- .with(console_layer)
- .with(file_layer)
- .with(tracing_subscriber::EnvFilter::new("info")) // filter the log level by environment variables
- .init();
- debug!("Logger initialized");
- worker_guard
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use std::sync::Once;
-
- static INIT: Once = Once::new();
-
- // Helper function to ensure logger is only initialized once in tests
- fn ensure_logger_init() {
- INIT.call_once(|| {
- // Initialize a simple test logger to avoid conflicts
- let _ = tracing_subscriber::fmt().with_test_writer().try_init();
- });
- }
-
- #[test]
- fn test_logger_initialization_components() {
- ensure_logger_init();
-
- // Test that we can create the components used in init_logger
- // without actually initializing the global logger again
-
- // Test home directory access
- let home_dir_result = dirs::home_dir();
- assert!(home_dir_result.is_some(), "Should be able to get home directory");
-
- let home_dir = home_dir_result.unwrap();
- let rustfs_dir = home_dir.join("rustfs");
- let logs_dir = rustfs_dir.join("logs");
-
- // Test path construction
- assert!(rustfs_dir.to_string_lossy().contains("rustfs"));
- assert!(logs_dir.to_string_lossy().contains("logs"));
- }
-
- #[test]
- fn test_rolling_file_appender_builder() {
- ensure_logger_init();
-
- // Test that we can create a RollingFileAppender builder
- let builder = RollingFileAppender::builder()
- .rotation(Rotation::DAILY)
- .filename_prefix("test-rustfs-cli")
- .filename_suffix("log");
-
- // We can't actually build it without creating directories,
- // but we can verify the builder pattern works
- let debug_str = format!("{builder:?}");
- // The actual debug format might be different, so just check it's not empty
- assert!(!debug_str.is_empty());
- // Check that it contains some expected parts
- assert!(debug_str.contains("Builder") || debug_str.contains("builder") || debug_str.contains("RollingFileAppender"));
- }
-
- #[test]
- fn test_rotation_types() {
- ensure_logger_init();
-
- // Test different rotation types
- let daily = Rotation::DAILY;
- let hourly = Rotation::HOURLY;
- let minutely = Rotation::MINUTELY;
- let never = Rotation::NEVER;
-
- // Test that rotation types can be created and formatted
- assert!(!format!("{daily:?}").is_empty());
- assert!(!format!("{hourly:?}").is_empty());
- assert!(!format!("{minutely:?}").is_empty());
- assert!(!format!("{never:?}").is_empty());
- }
-
- #[test]
- fn test_fmt_layer_configuration() {
- ensure_logger_init();
-
- // Test that we can create fmt layers with different configurations
- // We can't actually test the layers directly due to type complexity,
- // but we can test that the configuration values are correct
-
- // Test console layer settings
- let console_ansi = true;
- let console_line_number = true;
- assert!(console_ansi);
- assert!(console_line_number);
-
- // Test file layer settings
- let file_ansi = false;
- let file_thread_names = true;
- let file_target = true;
- let file_thread_ids = true;
- let file_level = true;
- let file_line_number = true;
-
- assert!(!file_ansi);
- assert!(file_thread_names);
- assert!(file_target);
- assert!(file_thread_ids);
- assert!(file_level);
- assert!(file_line_number);
- }
-
- #[test]
- fn test_env_filter_creation() {
- ensure_logger_init();
-
- // Test that EnvFilter can be created with different levels
- let info_filter = tracing_subscriber::EnvFilter::new("info");
- let debug_filter = tracing_subscriber::EnvFilter::new("debug");
- let warn_filter = tracing_subscriber::EnvFilter::new("warn");
- let error_filter = tracing_subscriber::EnvFilter::new("error");
-
- // Test that filters can be created
- assert!(!format!("{info_filter:?}").is_empty());
- assert!(!format!("{debug_filter:?}").is_empty());
- assert!(!format!("{warn_filter:?}").is_empty());
- assert!(!format!("{error_filter:?}").is_empty());
- }
-
- #[test]
- fn test_path_construction() {
- ensure_logger_init();
-
- // Test path construction logic used in init_logger
- if let Some(home_dir) = dirs::home_dir() {
- let rustfs_dir = home_dir.join("rustfs");
- let logs_dir = rustfs_dir.join("logs");
-
- // Test that paths are constructed correctly
- assert!(rustfs_dir.ends_with("rustfs"));
- assert!(logs_dir.ends_with("logs"));
- assert!(logs_dir.parent().unwrap().ends_with("rustfs"));
-
- // Test path string representation
- let rustfs_str = rustfs_dir.to_string_lossy();
- let logs_str = logs_dir.to_string_lossy();
-
- assert!(rustfs_str.contains("rustfs"));
- assert!(logs_str.contains("rustfs"));
- assert!(logs_str.contains("logs"));
- }
- }
-
- #[test]
- fn test_filename_patterns() {
- ensure_logger_init();
-
- // Test the filename patterns used in the logger
- let prefix = "rustfs-cli";
- let suffix = "log";
-
- assert_eq!(prefix, "rustfs-cli");
- assert_eq!(suffix, "log");
-
- // Test that these would create valid filenames
- let sample_filename = format!("{prefix}.2024-01-01.{suffix}");
- assert_eq!(sample_filename, "rustfs-cli.2024-01-01.log");
- }
-
- #[test]
- fn test_worker_guard_type() {
- ensure_logger_init();
-
- // Test that WorkerGuard type exists and can be referenced
- // We can't actually create one without the full setup, but we can test the type
- let guard_size = std::mem::size_of::();
- assert!(guard_size > 0, "WorkerGuard should have non-zero size");
- }
-
- #[test]
- fn test_logger_configuration_constants() {
- ensure_logger_init();
-
- // Test the configuration values used in the logger
- let default_log_level = "info";
- let filename_prefix = "rustfs-cli";
- let filename_suffix = "log";
- let rotation = Rotation::DAILY;
-
- assert_eq!(default_log_level, "info");
- assert_eq!(filename_prefix, "rustfs-cli");
- assert_eq!(filename_suffix, "log");
- assert!(matches!(rotation, Rotation::DAILY));
- }
-
- #[test]
- fn test_directory_names() {
- ensure_logger_init();
-
- // Test the directory names used in the logger setup
- let rustfs_dir_name = "rustfs";
- let logs_dir_name = "logs";
-
- assert_eq!(rustfs_dir_name, "rustfs");
- assert_eq!(logs_dir_name, "logs");
-
- // Test path joining
- let combined = format!("{rustfs_dir_name}/{logs_dir_name}");
- assert_eq!(combined, "rustfs/logs");
- }
-
- #[test]
- fn test_layer_settings() {
- ensure_logger_init();
-
- // Test the boolean settings used in layer configuration
- let console_ansi = true;
- let console_line_number = true;
- let file_ansi = false;
- let file_thread_names = true;
- let file_target = true;
- let file_thread_ids = true;
- let file_level = true;
- let file_line_number = true;
-
- // Verify the settings
- assert!(console_ansi);
- assert!(console_line_number);
- assert!(!file_ansi);
- assert!(file_thread_names);
- assert!(file_target);
- assert!(file_thread_ids);
- assert!(file_level);
- assert!(file_line_number);
- }
-
- // Note: The actual init_logger() function is not tested here because:
- // 1. It initializes a global tracing subscriber which can only be done once
- // 2. It requires file system access to create directories
- // 3. It has side effects that would interfere with other tests
- // 4. It returns a WorkerGuard that needs to be kept alive
- //
- // This function should be tested in integration tests where:
- // - File system access can be properly controlled
- // - The global state can be managed
- // - The actual logging behavior can be verified
- // - The WorkerGuard lifecycle can be properly managed
-}
diff --git a/cli/rustfs-gui/src/utils/mod.rs b/cli/rustfs-gui/src/utils/mod.rs
deleted file mode 100644
index b9c303bc..00000000
--- a/cli/rustfs-gui/src/utils/mod.rs
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2024 RustFS Team
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-mod config;
-mod helper;
-mod logger;
-
-pub use config::RustFSConfig;
-pub use helper::ServiceManager;
-pub use logger::init_logger;
diff --git a/cli/rustfs-gui/src/views/app.rs b/cli/rustfs-gui/src/views/app.rs
deleted file mode 100644
index 5fc3924b..00000000
--- a/cli/rustfs-gui/src/views/app.rs
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2024 RustFS Team
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-use crate::route::Route;
-use dioxus::logger::tracing::info;
-use dioxus::prelude::*;
-
-const FAVICON: Asset = asset!("/assets/favicon.ico");
-const TAILWIND_CSS: Asset = asset!("/assets/tailwind.css");
-
-/// The main application component
-/// This is the root component of the application
-/// It contains the global resources and the router
-/// for the application
-#[component]
-pub fn App() -> Element {
- // Build cool things ✌️
- use document::{Link, Title};
- info!("App rendered");
- rsx! {
- // Global app resources
- Link { rel: "icon", href: FAVICON }
- Link { rel: "stylesheet", href: TAILWIND_CSS }
- Title { "RustFS" }
- Router:: {}
- }
-}
diff --git a/cli/rustfs-gui/src/views/home.rs b/cli/rustfs-gui/src/views/home.rs
deleted file mode 100644
index 7096c8db..00000000
--- a/cli/rustfs-gui/src/views/home.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2024 RustFS Team
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-use crate::components::Home;
-use dioxus::prelude::*;
-
-#[component]
-pub fn HomeViews() -> Element {
- rsx! {
- Home {}
- }
-}
diff --git a/cli/rustfs-gui/src/views/mod.rs b/cli/rustfs-gui/src/views/mod.rs
deleted file mode 100644
index 3dadb94f..00000000
--- a/cli/rustfs-gui/src/views/mod.rs
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2024 RustFS Team
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-mod app;
-mod home;
-mod setting;
-
-pub use app::App;
-pub use home::HomeViews;
-pub use setting::SettingViews;
diff --git a/cli/rustfs-gui/src/views/setting.rs b/cli/rustfs-gui/src/views/setting.rs
deleted file mode 100644
index e646ae35..00000000
--- a/cli/rustfs-gui/src/views/setting.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2024 RustFS Team
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-use crate::components::Setting;
-use dioxus::prelude::*;
-
-#[component]
-pub fn SettingViews() -> Element {
- rsx! {
- Setting {}
- }
-}
diff --git a/cli/rustfs-gui/tailwind.config.js b/cli/rustfs-gui/tailwind.config.js
deleted file mode 100644
index 289dc04d..00000000
--- a/cli/rustfs-gui/tailwind.config.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Copyright 2024 RustFS Team
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-module.exports = {
- mode: "all",
- content: ["./src/**/*.{rs,html,css}", "./dist/**/*.html"],
- theme: {
- extend: {},
- },
- plugins: [],
-};
\ No newline at end of file