diff --git a/.github/workflows/cachix.yml b/.github/workflows/cachix.yml
index 1f86dc1..494c803 100644
--- a/.github/workflows/cachix.yml
+++ b/.github/workflows/cachix.yml
@@ -1,40 +1,46 @@
-name: Binary Cache
+name: Nix Binary Cache
+
+on:
+ push:
+ branches: ["main"]
+ pull_request:
+ branches: ["main"]
+ workflow_dispatch:
-on: [push, pull_request, workflow_dispatch]
jobs:
nix:
strategy:
matrix:
- os:
- - ubuntu-latest
- - macos-13
- - macos-14
+ os:
+ - ubuntu-latest
+ - macos-15-intel
+ - macos-latest
name: "Build"
- runs-on: ${{ matrix.os }}
+ runs-on: ${{ matrix.os }}
steps:
- - name: Checkout
- uses: actions/checkout@v4
- with:
- submodules: recursive
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ submodules: recursive
- - uses: DeterminateSystems/nix-installer-action@main
- with:
- logger: pretty
- - uses: DeterminateSystems/magic-nix-cache-action@main
- - uses: cachix/cachix-action@v14
- with:
- name: lan-mouse
- authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
+ # - uses: DeterminateSystems/nix-installer-action@main
+ # with:
+ # logger: pretty
+ # - uses: DeterminateSystems/magic-nix-cache-action@main
+ - uses: cachix/install-nix-action@v31
+ - uses: cachix/cachix-action@v16
+ with:
+ name: lan-mouse
+ authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
- - name: Build lan-mouse (x86_64-linux)
- if: matrix.os == 'ubuntu-latest'
- run: nix build --print-build-logs --show-trace .#packages.x86_64-linux.lan-mouse
+ - name: Build lan-mouse (x86_64-linux)
+ if: matrix.os == 'ubuntu-latest'
+ run: nix build --print-build-logs --show-trace .#packages.x86_64-linux.lan-mouse
- - name: Build lan-mouse (x86_64-darwin)
- if: matrix.os == 'macos-13'
- run: nix build --print-build-logs --show-trace .#packages.x86_64-darwin.lan-mouse
-
- - name: Build lan-mouse (aarch64-darwin)
- if: matrix.os == 'macos-14'
- run: nix build --print-build-logs --show-trace .#packages.aarch64-darwin.lan-mouse
+ - name: Build lan-mouse (x86_64-darwin)
+ if: matrix.os == 'macos-15-intel'
+ run: nix build --print-build-logs --show-trace .#packages.x86_64-darwin.lan-mouse
+ - name: Build lan-mouse (aarch64-darwin)
+ if: matrix.os == 'macos-latest'
+ run: nix build --print-build-logs --show-trace .#packages.aarch64-darwin.lan-mouse
diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml
index 311e46d..cf70278 100644
--- a/.github/workflows/pre-release.yml
+++ b/.github/workflows/pre-release.yml
@@ -11,7 +11,7 @@ env:
jobs:
linux-release-build:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: install dependencies
@@ -80,7 +80,7 @@ jobs:
path: lan-mouse-windows.zip
macos-release-build:
- runs-on: macos-13
+ runs-on: macos-15-intel
steps:
- uses: actions/checkout@v4
- name: install dependencies
@@ -94,7 +94,9 @@ jobs:
- name: Install cargo bundle
run: cargo install cargo-bundle
- name: Bundle
- run: cargo bundle --release
+ run: |
+ cargo bundle --release
+ scripts/copy-macos-dylib.sh "target/release/bundle/osx/Lan Mouse.app/Contents/MacOS/lan-mouse"
- name: Zip bundle
run: |
cd target/release/bundle/osx
@@ -120,7 +122,9 @@ jobs:
- name: Install cargo bundle
run: cargo install cargo-bundle
- name: Bundle
- run: cargo bundle --release
+ run: |
+ cargo bundle --release
+ scripts/copy-macos-dylib.sh "target/release/bundle/osx/Lan Mouse.app/Contents/MacOS/lan-mouse"
- name: Zip bundle
run: |
cd target/release/bundle/osx
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
index f5569e5..ecef06e 100644
--- a/.github/workflows/rust.yml
+++ b/.github/workflows/rust.yml
@@ -10,145 +10,87 @@ env:
CARGO_TERM_COLOR: always
jobs:
- build-linux:
-
+ fmt:
+ name: Formatting
runs-on: ubuntu-latest
-
steps:
- - uses: actions/checkout@v4
- - name: install dependencies
- run: |
- sudo apt-get update
- sudo apt-get install libx11-dev libxtst-dev
- sudo apt-get install libadwaita-1-dev libgtk-4-dev
- - name: Build
- run: cargo build --verbose
- - name: Run tests
- run: cargo test --verbose
- - name: Check Formatting
- run: cargo fmt --check
- - name: Clippy
- run: cargo clippy --all-features --all-targets -- --deny warnings
- - name: Upload build artifact
- uses: actions/upload-artifact@v4
- with:
- name: lan-mouse
- path: target/debug/lan-mouse
-
- build-windows:
-
- runs-on: windows-latest
+ - uses: actions/checkout@v4
+ - name: cargo fmt
+ run: cargo fmt --check
+ ci:
+ name: ${{ matrix.job }} ${{ matrix.os }}
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ os:
+ - ubuntu-latest
+ - windows-latest
+ - macos-latest
+ - macos-15-intel
+ job:
+ - build
+ - check
+ - clippy
+ - test
steps:
- - uses: actions/checkout@v4
- - uses: actions/setup-python@v5
- with:
- python-version: '3.11'
- # needed for cache restore
- - name: create gtk dir
- run: mkdir C:\gtk-build\gtk\x64\release
- - uses: actions/cache@v3
- id: cache
- with:
- path: c:/gtk-build/gtk/x64/release/**
- key: gtk-windows-build
- restore-keys: gtk-windows-build
- - name: Update path
- run: |
- echo "PKG_CONFIG=C:\gtk-build\gtk\x64\release\bin\pkgconf.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- echo "C:\pkg-config-lite-0.28-1\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- echo "C:\gtk-build\gtk\x64\release\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- echo $env:GITHUB_PATH
- echo $env:PATH
- - name: Install dependencies
- if: steps.cache.outputs.cache-hit != 'true'
- run: |
- # choco install msys2
- # choco install visualstudio2022-workload-vctools
- # choco install pkgconfiglite
- py -m venv .venv
- .venv\Scripts\activate.ps1
- py -m pip install gvsbuild
- # see https://github.com/wingtk/gvsbuild/pull/1004
- Move-Item "C:\Program Files\Git\usr\bin" "C:\Program Files\Git\usr\notbin"
- Move-Item "C:\Program Files\Git\bin" "C:\Program Files\Git\notbin"
- gvsbuild build --msys-dir=C:\msys64 gtk4 libadwaita librsvg
- Move-Item "C:\Program Files\Git\usr\notbin" "C:\Program Files\Git\usr\bin"
- Move-Item "C:\Program Files\Git\notbin" "C:\Program Files\Git\bin"
- - name: Build
- run: cargo build --verbose
- - name: Run tests
- run: cargo test --verbose
- - name: Check Formatting
- run: cargo fmt --check
- - name: Clippy
- run: cargo clippy --all-features --all-targets -- --deny warnings
- - name: Copy Gtk Dlls
- run: Get-Childitem -Path "C:\\gtk-build\\gtk\\x64\\release\\bin\\*.dll" -File -Recurse | Copy-Item -Destination "target\\debug"
- - name: Upload build artifact
- uses: actions/upload-artifact@v4
- with:
- name: lan-mouse-windows
- path: |
- target/debug/lan-mouse.exe
- target/debug/*.dll
+ - uses: actions/checkout@v4
+ - uses: Swatinem/rust-cache@v2
+ - name: Install Linux deps
+ if: runner.os == 'Linux'
+ run: |
+ sudo apt-get update
+ sudo apt-get install libx11-dev libxtst-dev libadwaita-1-dev libgtk-4-dev
+ - name: Install macOS dependencies
+ if: runner.os == 'macOS'
+ run: brew install gtk4 libadwaita imagemagick
+ - name: Install Windows Dependencies - create gtk dir
+ if: runner.os == 'Windows'
+ run: mkdir C:\gtk-build\gtk\x64\release
+ - name: Install Windows Dependencies - install gtk from cache
+ uses: actions/cache@v3
+ if: runner.os == 'Windows'
+ id: cache
+ with:
+ path: c:/gtk-build/gtk/x64/release/**
+ key: gtk-windows-build
+ restore-keys: gtk-windows-build
+ - name: Install Windows Dependencies - update PATH
+ if: runner.os == 'Windows'
+ run: |
+ echo "PKG_CONFIG=C:\gtk-build\gtk\x64\release\bin\pkgconf.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
+ echo "C:\pkg-config-lite-0.28-1\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
+ echo "C:\gtk-build\gtk\x64\release\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
+ echo $env:GITHUB_PATH
+ echo $env:PATH
+ - name: Install Windows dependencies - build gtk
+ if: runner.os == 'Windows' && steps.cache.outputs.cache-hit != 'true'
+ run: |
+ # choco install msys2
+ # choco install visualstudio2022-workload-vctools
+ # choco install pkgconfiglite
+ py -m venv .venv
+ .venv\Scripts\activate.ps1
+ py -m pip install gvsbuild
+ gvsbuild build --msys-dir=C:\msys64 gtk4 libadwaita librsvg
+ - name: cargo build
+ if: matrix.job == 'build'
+ run: cargo build
- build-macos:
- runs-on: macos-13
- steps:
- - uses: actions/checkout@v4
- - name: install dependencies
- run: brew install gtk4 libadwaita imagemagick
- - name: Build
- run: cargo build --verbose
- - name: Run tests
- run: cargo test --verbose
- - name: Check Formatting
- run: cargo fmt --check
- - name: Clippy
- run: cargo clippy --all-features --all-targets -- --deny warnings
- - name: Make icns
- run: scripts/makeicns.sh
- - name: Install cargo bundle
- run: cargo install cargo-bundle
- - name: Bundle
- run: cargo bundle
- - name: Zip bundle
- run: |
- cd target/debug/bundle/osx
- zip -r "Lan Mouse macOS (Intel).zip" "Lan Mouse.app"
- - name: Upload build artifact
- uses: actions/upload-artifact@v4
- with:
- name: Lan Mouse macOS (Intel)
- path: target/debug/bundle/osx/Lan Mouse macOS (Intel).zip
+ - name: cargo check
+ if: matrix.job == 'check'
+ run: cargo check --workspace --all-targets --all-features
- build-macos-aarch64:
- runs-on: macos-14
- steps:
- - uses: actions/checkout@v4
- - name: install dependencies
- run: brew install gtk4 libadwaita imagemagick
- - name: Build
- run: cargo build --verbose
- - name: Run tests
- run: cargo test --verbose
- - name: Check Formatting
- run: cargo fmt --check
- - name: Clippy
- run: cargo clippy --all-features --all-targets -- --deny warnings
- - name: Make icns
- run: scripts/makeicns.sh
- - name: Install cargo bundle
- run: cargo install cargo-bundle
- - name: Bundle
- run: cargo bundle
- - name: Zip bundle
- run: |
- cd target/debug/bundle/osx
- zip -r "Lan Mouse macOS (ARM).zip" "Lan Mouse.app"
- - name: Upload build artifact
- uses: actions/upload-artifact@v4
- with:
- name: Lan Mouse macOS (ARM)
- path: target/debug/bundle/osx/Lan Mouse macOS (ARM).zip
+ - name: cargo test
+ if: matrix.job == 'test'
+ run: cargo test --workspace --all-features
+
+ - name: cargo clippy
+ if: matrix.job == 'clippy'
+ run: cargo clippy --workspace --all-targets --all-features -- -D warnings
+
+ - uses: clechasseur/rs-clippy-check@v4
+ if: matrix.job == 'clippy'
+ with:
+ args: --workspace --all-targets --all-features
diff --git a/.github/workflows/tagged-release.yml b/.github/workflows/tagged-release.yml
index d047bb6..73075a8 100644
--- a/.github/workflows/tagged-release.yml
+++ b/.github/workflows/tagged-release.yml
@@ -7,7 +7,7 @@ on:
jobs:
linux-release-build:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: install dependencies
@@ -76,7 +76,7 @@ jobs:
path: lan-mouse-windows.zip
macos-release-build:
- runs-on: macos-13
+ runs-on: macos-15-intel
steps:
- uses: actions/checkout@v4
- name: install dependencies
@@ -90,7 +90,9 @@ jobs:
- name: Install cargo bundle
run: cargo install cargo-bundle
- name: Bundle
- run: cargo bundle --release
+ run: |
+ cargo bundle --release
+ scripts/copy-macos-dylib.sh "target/release/bundle/osx/Lan Mouse.app/Contents/MacOS/lan-mouse"
- name: Zip bundle
run: |
cd target/release/bundle/osx
@@ -116,7 +118,9 @@ jobs:
- name: Install cargo bundle
run: cargo install cargo-bundle
- name: Bundle
- run: cargo bundle --release
+ run: |
+ cargo bundle --release
+ scripts/copy-macos-dylib.sh "target/release/bundle/osx/Lan Mouse.app/Contents/MacOS/lan-mouse"
- name: Zip bundle
run: |
cd target/release/bundle/osx
diff --git a/.gitignore b/.gitignore
index 2a2cafc..b3fbd05 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,7 @@ result
*.pem
*.csr
extfile.conf
+
+# flatpak files
+.flatpak-builder
+repo
diff --git a/.rustfmt.toml b/.rustfmt.toml
new file mode 100644
index 0000000..ad33508
--- /dev/null
+++ b/.rustfmt.toml
@@ -0,0 +1,4 @@
+style_edition = "2024"
+
+max_width = 100
+tab_spaces = 4
diff --git a/Cargo.lock b/Cargo.lock
index 9d297ab..b5fcf02 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -13,9 +13,9 @@ dependencies = [
[[package]]
name = "adler2"
-version = "2.0.0"
+version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
+checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
[[package]]
name = "aead"
@@ -72,9 +72,9 @@ dependencies = [
[[package]]
name = "anstream"
-version = "0.6.18"
+version = "0.6.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b"
+checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933"
dependencies = [
"anstyle",
"anstyle-parse",
@@ -87,69 +87,67 @@ dependencies = [
[[package]]
name = "anstyle"
-version = "1.0.10"
+version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9"
+checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd"
[[package]]
name = "anstyle-parse"
-version = "0.2.6"
+version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9"
+checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
dependencies = [
"utf8parse",
]
[[package]]
name = "anstyle-query"
-version = "1.1.2"
+version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c"
+checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9"
dependencies = [
"windows-sys 0.59.0",
]
[[package]]
name = "anstyle-wincon"
-version = "3.0.6"
+version = "3.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125"
+checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882"
dependencies = [
"anstyle",
+ "once_cell_polyfill",
"windows-sys 0.59.0",
]
[[package]]
name = "anyhow"
-version = "1.0.93"
+version = "1.0.98"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775"
+checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
[[package]]
name = "arraydeque"
-version = "0.4.5"
+version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0ffd3d69bd89910509a5d31d1f1353f38ccffdd116dd0099bbd6627f7bd8ad8"
+checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236"
[[package]]
name = "arrayvec"
-version = "0.4.12"
+version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9"
-dependencies = [
- "nodrop",
-]
+checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
[[package]]
name = "ashpd"
-version = "0.10.2"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e9c39d707614dbcc6bed00015539f488d8e3fe3e66ed60961efc0c90f4b380b3"
+checksum = "6cbdf310d77fd3aaee6ea2093db7011dc2d35d2eb3481e5607f1f8d942ed99df"
dependencies = [
"enumflags2",
"futures-channel",
"futures-util",
- "rand",
+ "rand 0.9.2",
"serde",
"serde_repr",
"tokio",
@@ -157,49 +155,22 @@ dependencies = [
"zbus",
]
-[[package]]
-name = "asn1-rs"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0"
-dependencies = [
- "asn1-rs-derive 0.4.0",
- "asn1-rs-impl 0.1.0",
- "displaydoc",
- "nom",
- "num-traits",
- "rusticata-macros",
- "thiserror 1.0.68",
-]
-
[[package]]
name = "asn1-rs"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048"
dependencies = [
- "asn1-rs-derive 0.5.1",
- "asn1-rs-impl 0.2.0",
+ "asn1-rs-derive",
+ "asn1-rs-impl",
"displaydoc",
"nom",
"num-traits",
"rusticata-macros",
- "thiserror 1.0.68",
+ "thiserror 1.0.69",
"time",
]
-[[package]]
-name = "asn1-rs-derive"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
- "synstructure 0.12.6",
-]
-
[[package]]
name = "asn1-rs-derive"
version = "0.5.1"
@@ -208,19 +179,8 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
- "synstructure 0.13.1",
-]
-
-[[package]]
-name = "asn1-rs-impl"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
+ "syn",
+ "synstructure",
]
[[package]]
@@ -231,14 +191,14 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
name = "async-broadcast"
-version = "0.7.1"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e"
+checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532"
dependencies = [
"event-listener",
"event-listener-strategy",
@@ -248,9 +208,9 @@ dependencies = [
[[package]]
name = "async-channel"
-version = "2.3.1"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a"
+checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2"
dependencies = [
"concurrent-queue",
"event-listener-strategy",
@@ -258,55 +218,6 @@ dependencies = [
"pin-project-lite",
]
-[[package]]
-name = "async-io"
-version = "2.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8"
-dependencies = [
- "async-lock",
- "cfg-if",
- "concurrent-queue",
- "futures-io",
- "futures-lite",
- "parking",
- "polling",
- "rustix",
- "slab",
- "tracing",
- "windows-sys 0.59.0",
-]
-
-[[package]]
-name = "async-lock"
-version = "3.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18"
-dependencies = [
- "event-listener",
- "event-listener-strategy",
- "pin-project-lite",
-]
-
-[[package]]
-name = "async-process"
-version = "2.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb"
-dependencies = [
- "async-channel",
- "async-io",
- "async-lock",
- "async-signal",
- "async-task",
- "blocking",
- "cfg-if",
- "event-listener",
- "futures-lite",
- "rustix",
- "tracing",
-]
-
[[package]]
name = "async-recursion"
version = "1.1.1"
@@ -315,61 +226,31 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
-[[package]]
-name = "async-signal"
-version = "0.2.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3"
-dependencies = [
- "async-io",
- "async-lock",
- "atomic-waker",
- "cfg-if",
- "futures-core",
- "futures-io",
- "rustix",
- "signal-hook-registry",
- "slab",
- "windows-sys 0.59.0",
-]
-
-[[package]]
-name = "async-task"
-version = "4.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
-
[[package]]
name = "async-trait"
-version = "0.1.83"
+version = "0.1.88"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd"
+checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
-[[package]]
-name = "atomic-waker"
-version = "1.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
-
[[package]]
name = "autocfg"
-version = "1.4.0"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
+checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[package]]
name = "backtrace"
-version = "0.3.74"
+version = "0.3.75"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a"
+checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
dependencies = [
"addr2line",
"cfg-if",
@@ -394,9 +275,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "base64ct"
-version = "1.6.0"
+version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba"
[[package]]
name = "bincode"
@@ -415,9 +296,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
-version = "2.6.0"
+version = "2.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
+checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
[[package]]
name = "block-buffer"
@@ -437,24 +318,11 @@ dependencies = [
"generic-array",
]
-[[package]]
-name = "blocking"
-version = "1.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea"
-dependencies = [
- "async-channel",
- "async-task",
- "futures-io",
- "futures-lite",
- "piper",
-]
-
[[package]]
name = "bumpalo"
-version = "3.16.0"
+version = "3.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
+checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
[[package]]
name = "byteorder"
@@ -464,17 +332,17 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "bytes"
-version = "1.8.0"
+version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da"
+checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
[[package]]
name = "cairo-rs"
-version = "0.20.5"
+version = "0.20.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7fa699e1d7ae691001a811dda5ef0e3e42e1d4119b26426352989df9e94e3e6"
+checksum = "91e3bd0f4e25afa9cabc157908d14eeef9067d6448c49414d17b3fb55f0eadd0"
dependencies = [
- "bitflags 2.6.0",
+ "bitflags 2.9.1",
"cairo-sys-rs",
"glib",
"libc",
@@ -482,9 +350,9 @@ dependencies = [
[[package]]
name = "cairo-sys-rs"
-version = "0.20.0"
+version = "0.20.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "428290f914b9b86089f60f5d8a9f6e440508e1bcff23b25afd51502b0a2da88f"
+checksum = "059cc746549898cbfd9a47754288e5a958756650ef4652bbb6c5f71a6bda4f8b"
dependencies = [
"glib-sys",
"libc",
@@ -493,34 +361,51 @@ dependencies = [
[[package]]
name = "camino"
-version = "1.1.9"
+version = "1.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3"
+checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab"
dependencies = [
"serde",
]
[[package]]
name = "cargo-platform"
-version = "0.1.9"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea"
+checksum = "84982c6c0ae343635a3a4ee6dedef965513735c8b183caa7289fa6e27399ebd4"
dependencies = [
"serde",
]
[[package]]
-name = "cargo_metadata"
-version = "0.18.1"
+name = "cargo-util-schemas"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037"
+checksum = "e63d2780ac94487eb9f1fea7b0d56300abc9eb488800854ca217f102f5caccca"
+dependencies = [
+ "semver",
+ "serde",
+ "serde-untagged",
+ "serde-value",
+ "thiserror 1.0.69",
+ "toml",
+ "unicode-xid",
+ "url",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f7835cfc6135093070e95eb2b53e5d9b5c403dc3a6be6040ee026270aa82502"
dependencies = [
"camino",
"cargo-platform",
+ "cargo-util-schemas",
"semver",
"serde",
"serde_json",
- "thiserror 1.0.68",
+ "thiserror 2.0.12",
]
[[package]]
@@ -534,9 +419,9 @@ dependencies = [
[[package]]
name = "cc"
-version = "1.1.36"
+version = "1.2.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baee610e9452a8f6f0a1b6194ec09ff9e2d85dea54432acdae41aa0761c95d70"
+checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7"
dependencies = [
"jobserver",
"libc",
@@ -557,9 +442,9 @@ dependencies = [
[[package]]
name = "cfg-expr"
-version = "0.17.0"
+version = "0.20.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0890061c4d3223e7267f3bad2ec40b997d64faac1c2815a4a9d95018e2b9e9c"
+checksum = "0d0390889d58f934f01cd49736275b4c2da15bcfc328c78ff2349907e6cabf22"
dependencies = [
"smallvec",
"target-lexicon",
@@ -567,9 +452,9 @@ dependencies = [
[[package]]
name = "cfg-if"
-version = "1.0.0"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
[[package]]
name = "cfg_aliases"
@@ -589,9 +474,9 @@ dependencies = [
[[package]]
name = "clap"
-version = "4.5.20"
+version = "4.5.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8"
+checksum = "ed87a9d530bb41a67537289bafcac159cb3ee28460e0a4571123d2a778a6a882"
dependencies = [
"clap_builder",
"clap_derive",
@@ -599,9 +484,9 @@ dependencies = [
[[package]]
name = "clap_builder"
-version = "4.5.20"
+version = "4.5.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54"
+checksum = "64f4f3f3c77c94aff3c7e9aac9a2ca1974a5adf392a8bb751e827d6d127ab966"
dependencies = [
"anstream",
"anstyle",
@@ -611,27 +496,27 @@ dependencies = [
[[package]]
name = "clap_derive"
-version = "4.5.18"
+version = "4.5.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab"
+checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491"
dependencies = [
- "heck 0.5.0",
+ "heck",
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
name = "clap_lex"
-version = "0.7.2"
+version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97"
+checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675"
[[package]]
name = "colorchoice"
-version = "1.0.3"
+version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990"
+checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
[[package]]
name = "concurrent-queue"
@@ -648,12 +533,6 @@ version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
-[[package]]
-name = "const_fn"
-version = "0.4.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f8a2ca5ac02d09563609681103aada9e1777d54fc57a5acd7a41404f9c93b6e"
-
[[package]]
name = "const_format"
version = "0.2.34"
@@ -676,9 +555,9 @@ dependencies = [
[[package]]
name = "core-foundation"
-version = "0.10.0"
+version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63"
+checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
dependencies = [
"core-foundation-sys",
"libc",
@@ -692,11 +571,11 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
[[package]]
name = "core-graphics"
-version = "0.24.0"
+version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1"
+checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97"
dependencies = [
- "bitflags 2.6.0",
+ "bitflags 2.9.1",
"core-foundation",
"core-graphics-types",
"foreign-types",
@@ -709,25 +588,49 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
dependencies = [
- "bitflags 2.6.0",
+ "bitflags 2.9.1",
"core-foundation",
"libc",
]
[[package]]
name = "cpufeatures"
-version = "0.2.14"
+version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
dependencies = [
"libc",
]
[[package]]
-name = "crossbeam-utils"
-version = "0.8.20"
+name = "critical-section"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
+checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "crypto-bigint"
@@ -736,7 +639,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
dependencies = [
"generic-array",
- "rand_core",
+ "rand_core 0.6.4",
"subtle",
"zeroize",
]
@@ -748,7 +651,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
dependencies = [
"generic-array",
- "rand_core",
+ "rand_core 0.6.4",
"typenum",
]
@@ -784,46 +687,33 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
name = "data-encoding"
-version = "2.6.0"
+version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2"
+checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
[[package]]
name = "der"
-version = "0.7.9"
+version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0"
+checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
dependencies = [
"const-oid",
"pem-rfc7468",
"zeroize",
]
-[[package]]
-name = "der-parser"
-version = "8.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e"
-dependencies = [
- "asn1-rs 0.5.2",
- "displaydoc",
- "nom",
- "num-traits",
- "rusticata-macros",
-]
-
[[package]]
name = "der-parser"
version = "9.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553"
dependencies = [
- "asn1-rs 0.6.2",
+ "asn1-rs",
"displaydoc",
"nom",
"num-bigint",
@@ -833,9 +723,9 @@ dependencies = [
[[package]]
name = "deranged"
-version = "0.3.11"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e"
dependencies = [
"powerfmt",
]
@@ -860,16 +750,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
-]
-
-[[package]]
-name = "dlib"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
-dependencies = [
- "libloading",
+ "syn",
]
[[package]]
@@ -907,7 +788,7 @@ dependencies = [
"hkdf",
"pem-rfc7468",
"pkcs8",
- "rand_core",
+ "rand_core 0.6.4",
"sec1",
"subtle",
"zeroize",
@@ -925,17 +806,17 @@ version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc"
dependencies = [
- "heck 0.5.0",
+ "heck",
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
name = "enumflags2"
-version = "0.7.10"
+version = "0.7.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d"
+checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef"
dependencies = [
"enumflags2_derive",
"serde",
@@ -943,20 +824,20 @@ dependencies = [
[[package]]
name = "enumflags2_derive"
-version = "0.7.10"
+version = "0.7.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8"
+checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
name = "env_filter"
-version = "0.1.2"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab"
+checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0"
dependencies = [
"log",
"regex",
@@ -964,38 +845,48 @@ dependencies = [
[[package]]
name = "env_logger"
-version = "0.11.5"
+version = "0.11.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d"
+checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f"
dependencies = [
"anstream",
"anstyle",
"env_filter",
- "humantime",
+ "jiff",
"log",
]
[[package]]
name = "equivalent"
-version = "1.0.1"
+version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+
+[[package]]
+name = "erased-serde"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7"
+dependencies = [
+ "serde",
+ "typeid",
+]
[[package]]
name = "errno"
-version = "0.3.9"
+version = "0.3.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
+checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad"
dependencies = [
"libc",
- "windows-sys 0.52.0",
+ "windows-sys 0.60.2",
]
[[package]]
name = "event-listener"
-version = "5.3.1"
+version = "5.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba"
+checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae"
dependencies = [
"concurrent-queue",
"parking",
@@ -1004,9 +895,9 @@ dependencies = [
[[package]]
name = "event-listener-strategy"
-version = "0.5.2"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1"
+checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
dependencies = [
"event-listener",
"pin-project-lite",
@@ -1014,17 +905,17 @@ dependencies = [
[[package]]
name = "fastrand"
-version = "2.1.1"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6"
+checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
[[package]]
name = "ff"
-version = "0.13.0"
+version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
+checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393"
dependencies = [
- "rand_core",
+ "rand_core 0.6.4",
"subtle",
]
@@ -1062,7 +953,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
@@ -1130,9 +1021,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
[[package]]
name = "futures-lite"
-version = "2.4.0"
+version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f1fa2f9765705486b33fd2acf1577f8ec449c2ba1f318ae5447697b7c08d210"
+checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532"
dependencies = [
"fastrand",
"futures-core",
@@ -1149,7 +1040,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
@@ -1184,9 +1075,9 @@ dependencies = [
[[package]]
name = "gdk-pixbuf"
-version = "0.20.4"
+version = "0.20.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4c29071a9e92337d8270a85cb0510cda4ac478be26d09ad027cc1d081911b19"
+checksum = "2fd242894c084f4beed508a56952750bce3e96e85eb68fdc153637daa163e10c"
dependencies = [
"gdk-pixbuf-sys",
"gio",
@@ -1196,9 +1087,9 @@ dependencies = [
[[package]]
name = "gdk-pixbuf-sys"
-version = "0.20.4"
+version = "0.20.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "687343b059b91df5f3fbd87b4307038fa9e647fcc0461d0d3f93e94fee20bf3d"
+checksum = "5b34f3b580c988bd217e9543a2de59823fafae369d1a055555e5f95a8b130b96"
dependencies = [
"gio-sys",
"glib-sys",
@@ -1209,9 +1100,9 @@ dependencies = [
[[package]]
name = "gdk4"
-version = "0.9.3"
+version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3fb4af2d606b0ac4e81f982f0d064bcb71ca73859ce5f30475f7eb2e2be4bc3"
+checksum = "4850c9d9c1aecd1a3eb14fadc1cdb0ac0a2298037e116264c7473e1740a32d60"
dependencies = [
"cairo-rs",
"gdk-pixbuf",
@@ -1224,9 +1115,9 @@ dependencies = [
[[package]]
name = "gdk4-sys"
-version = "0.9.3"
+version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3642625b384ad43c006871462e6c498488b503dbf219542591f4ddf0f5f2032b"
+checksum = "6f6eb95798e2b46f279cf59005daf297d5b69555428f185650d71974a910473a"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
@@ -1239,6 +1130,20 @@ dependencies = [
"system-deps",
]
+[[package]]
+name = "generator"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827"
+dependencies = [
+ "cc",
+ "cfg-if",
+ "libc",
+ "log",
+ "rustversion",
+ "windows",
+]
+
[[package]]
name = "generic-array"
version = "0.14.7"
@@ -1252,13 +1157,25 @@ dependencies = [
[[package]]
name = "getrandom"
-version = "0.2.15"
+version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
+checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
dependencies = [
"cfg-if",
"libc",
- "wasi",
+ "wasi 0.11.1+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "r-efi",
+ "wasi 0.14.2+wasi-0.2.4",
]
[[package]]
@@ -1279,9 +1196,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
[[package]]
name = "gio"
-version = "0.20.5"
+version = "0.20.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8569975884fdfdbed536b682448fbd8c70bafbd69cac2d45eb1a7a372702241"
+checksum = "8e27e276e7b6b8d50f6376ee7769a71133e80d093bdc363bd0af71664228b831"
dependencies = [
"futures-channel",
"futures-core",
@@ -1296,24 +1213,24 @@ dependencies = [
[[package]]
name = "gio-sys"
-version = "0.20.5"
+version = "0.20.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "217f464cad5946ae4369c355155e2d16b488c08920601083cb4891e352ae777b"
+checksum = "521e93a7e56fc89e84aea9a52cfc9436816a4b363b030260b699950ff1336c83"
dependencies = [
"glib-sys",
"gobject-sys",
"libc",
"system-deps",
- "windows-sys 0.52.0",
+ "windows-sys 0.59.0",
]
[[package]]
name = "git2"
-version = "0.20.0"
+version = "0.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fda788993cc341f69012feba8bf45c0ba4f3291fcc08e214b4d5a7332d88aff"
+checksum = "2deb07a133b1520dc1a5690e9bd08950108873d7ed5de38dcc74d3b5ebffa110"
dependencies = [
- "bitflags 2.6.0",
+ "bitflags 2.9.1",
"libc",
"libgit2-sys",
"log",
@@ -1322,11 +1239,11 @@ dependencies = [
[[package]]
name = "glib"
-version = "0.20.5"
+version = "0.20.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "358431b0e0eb15b9d02db52e1f19c805b953c5c168099deb3de88beab761768c"
+checksum = "ffc4b6e352d4716d84d7dde562dd9aee2a7d48beb872dd9ece7f2d1515b2d683"
dependencies = [
- "bitflags 2.6.0",
+ "bitflags 2.9.1",
"futures-channel",
"futures-core",
"futures-executor",
@@ -1352,22 +1269,22 @@ dependencies = [
[[package]]
name = "glib-macros"
-version = "0.20.5"
+version = "0.20.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7d21ca27acfc3e91da70456edde144b4ac7c36f78ee77b10189b3eb4901c156"
+checksum = "e8084af62f09475a3f529b1629c10c429d7600ee1398ae12dd3bf175d74e7145"
dependencies = [
- "heck 0.5.0",
+ "heck",
"proc-macro-crate",
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
name = "glib-sys"
-version = "0.20.5"
+version = "0.20.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a5911863ab7ecd4a6f8d5976f12eeba076b23669c49b066d877e742544aa389"
+checksum = "8ab79e1ed126803a8fb827e3de0e2ff95191912b8db65cee467edb56fc4cc215"
dependencies = [
"libc",
"system-deps",
@@ -1375,9 +1292,9 @@ dependencies = [
[[package]]
name = "gobject-sys"
-version = "0.20.4"
+version = "0.20.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4c674d2ff8478cf0ec29d2be730ed779fef54415a2fb4b565c52def62696462"
+checksum = "ec9aca94bb73989e3cfdbf8f2e0f1f6da04db4d291c431f444838925c4c63eda"
dependencies = [
"glib-sys",
"libc",
@@ -1386,9 +1303,9 @@ dependencies = [
[[package]]
name = "graphene-rs"
-version = "0.20.4"
+version = "0.20.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f53144c7fe78292705ff23935f1477d511366fb2f73c43d63b37be89076d2fe"
+checksum = "6b86dfad7d14251c9acaf1de63bc8754b7e3b4e5b16777b6f5a748208fe9519b"
dependencies = [
"glib",
"graphene-sys",
@@ -1397,9 +1314,9 @@ dependencies = [
[[package]]
name = "graphene-sys"
-version = "0.20.4"
+version = "0.20.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e741797dc5081e59877a4d72c442c72d61efdd99161a0b1c1b29b6b988934b99"
+checksum = "df583a85ba2d5e15e1797e40d666057b28bc2f60a67c9c24145e6db2cc3861ea"
dependencies = [
"glib-sys",
"libc",
@@ -1414,15 +1331,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
dependencies = [
"ff",
- "rand_core",
+ "rand_core 0.6.4",
"subtle",
]
[[package]]
name = "gsk4"
-version = "0.9.3"
+version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3deb9ae5a7fb759b2405e248d52850d9ef733079b90af2d6b01638f5b9eeafe1"
+checksum = "61f5e72f931c8c9f65fbfc89fe0ddc7746f147f822f127a53a9854666ac1f855"
dependencies = [
"cairo-rs",
"gdk4",
@@ -1435,9 +1352,9 @@ dependencies = [
[[package]]
name = "gsk4-sys"
-version = "0.9.3"
+version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2226662e97948f3f241c9a6c432cd95eeca662daf4a327e201458bb540ad9590"
+checksum = "755059de55fa6f85a46bde8caf03e2184c96bfda1f6206163c72fb0ea12436dc"
dependencies = [
"cairo-sys-rs",
"gdk4-sys",
@@ -1451,9 +1368,9 @@ dependencies = [
[[package]]
name = "gtk4"
-version = "0.9.3"
+version = "0.9.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d34465497f5a4c182c9c94a582a187db7d6af0863f28e87ccf4379f21f0e2a22"
+checksum = "f274dd0102c21c47bbfa8ebcb92d0464fab794a22fad6c3f3d5f165139a326d6"
dependencies = [
"cairo-rs",
"field-offset",
@@ -1472,21 +1389,21 @@ dependencies = [
[[package]]
name = "gtk4-macros"
-version = "0.9.3"
+version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a7c518d5dd41c57385c7cd30af52e261820c897fc1144e558bb88c303d048ae2"
+checksum = "0ed1786c4703dd196baf7e103525ce0cf579b3a63a0570fe653b7ee6bac33999"
dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
name = "gtk4-sys"
-version = "0.9.3"
+version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f11c7812e28542edb4d0495a2fde1f4588899e2accfcebaa80115f27dc7358a3"
+checksum = "41e03b01e54d77c310e1d98647d73f996d04b2f29b9121fe493ea525a7ec03d6"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
@@ -1503,18 +1420,9 @@ dependencies = [
[[package]]
name = "hashbrown"
-version = "0.15.1"
+version = "0.15.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3"
-
-[[package]]
-name = "heck"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
-dependencies = [
- "unicode-segmentation",
-]
+checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
[[package]]
name = "heck"
@@ -1522,18 +1430,6 @@ version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
-[[package]]
-name = "hermit-abi"
-version = "0.3.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
-
-[[package]]
-name = "hermit-abi"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc"
-
[[package]]
name = "hex"
version = "0.4.3"
@@ -1542,9 +1438,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
[[package]]
name = "hickory-proto"
-version = "0.24.1"
+version = "0.25.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07698b8420e2f0d6447a436ba999ec85d8fbf2a398bbd737b82cac4a2e96e512"
+checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502"
dependencies = [
"async-trait",
"cfg-if",
@@ -1553,11 +1449,12 @@ dependencies = [
"futures-channel",
"futures-io",
"futures-util",
- "idna 0.4.0",
+ "idna",
"ipnet",
"once_cell",
- "rand",
- "thiserror 1.0.68",
+ "rand 0.9.2",
+ "ring",
+ "thiserror 2.0.12",
"tinyvec",
"tokio",
"tracing",
@@ -1566,21 +1463,21 @@ dependencies = [
[[package]]
name = "hickory-resolver"
-version = "0.24.1"
+version = "0.25.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28757f23aa75c98f254cf0405e6d8c25b831b32921b050a66692427679b1f243"
+checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a"
dependencies = [
"cfg-if",
"futures-util",
"hickory-proto",
"ipconfig",
- "lru-cache",
+ "moka",
"once_cell",
"parking_lot",
- "rand",
+ "rand 0.9.2",
"resolv-conf",
"smallvec",
- "thiserror 1.0.68",
+ "thiserror 2.0.12",
"tokio",
"tracing",
]
@@ -1605,44 +1502,28 @@ dependencies = [
[[package]]
name = "hostname"
-version = "0.3.1"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
-dependencies = [
- "libc",
- "match_cfg",
- "winapi",
-]
-
-[[package]]
-name = "hostname"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9c7c7c8ac16c798734b8a24560c1362120597c40d5e1459f09498f8f6c8f2ba"
+checksum = "a56f203cd1c76362b69e3863fd987520ac36cf70a8c92627449b2f64a8cf7d65"
dependencies = [
"cfg-if",
"libc",
- "windows 0.52.0",
+ "windows-link",
]
-[[package]]
-name = "humantime"
-version = "2.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
-
[[package]]
name = "iana-time-zone"
-version = "0.1.61"
+version = "0.1.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"
+checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
+ "log",
"wasm-bindgen",
- "windows-core 0.52.0",
+ "windows-core",
]
[[package]]
@@ -1656,21 +1537,22 @@ dependencies = [
[[package]]
name = "icu_collections"
-version = "1.5.0"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
+checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
dependencies = [
"displaydoc",
+ "potential_utf",
"yoke",
"zerofrom",
"zerovec",
]
[[package]]
-name = "icu_locid"
-version = "1.5.0"
+name = "icu_locale_core"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
+checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
dependencies = [
"displaydoc",
"litemap",
@@ -1679,31 +1561,11 @@ dependencies = [
"zerovec",
]
-[[package]]
-name = "icu_locid_transform"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
-dependencies = [
- "displaydoc",
- "icu_locid",
- "icu_locid_transform_data",
- "icu_provider",
- "tinystr",
- "zerovec",
-]
-
-[[package]]
-name = "icu_locid_transform_data"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"
-
[[package]]
name = "icu_normalizer"
-version = "1.5.0"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
+checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
dependencies = [
"displaydoc",
"icu_collections",
@@ -1711,77 +1573,54 @@ dependencies = [
"icu_properties",
"icu_provider",
"smallvec",
- "utf16_iter",
- "utf8_iter",
- "write16",
"zerovec",
]
[[package]]
name = "icu_normalizer_data"
-version = "1.5.0"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516"
+checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
[[package]]
name = "icu_properties"
-version = "1.5.1"
+version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5"
+checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
dependencies = [
"displaydoc",
"icu_collections",
- "icu_locid_transform",
+ "icu_locale_core",
"icu_properties_data",
"icu_provider",
- "tinystr",
+ "potential_utf",
+ "zerotrie",
"zerovec",
]
[[package]]
name = "icu_properties_data"
-version = "1.5.0"
+version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"
+checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
[[package]]
name = "icu_provider"
-version = "1.5.0"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
+checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
dependencies = [
"displaydoc",
- "icu_locid",
- "icu_provider_macros",
+ "icu_locale_core",
"stable_deref_trait",
"tinystr",
"writeable",
"yoke",
"zerofrom",
+ "zerotrie",
"zerovec",
]
-[[package]]
-name = "icu_provider_macros"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.87",
-]
-
-[[package]]
-name = "idna"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
-dependencies = [
- "unicode-bidi",
- "unicode-normalization",
-]
-
[[package]]
name = "idna"
version = "1.0.3"
@@ -1795,9 +1634,9 @@ dependencies = [
[[package]]
name = "idna_adapter"
-version = "1.2.0"
+version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71"
+checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
dependencies = [
"icu_normalizer",
"icu_properties",
@@ -1805,9 +1644,9 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "2.6.0"
+version = "2.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da"
+checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
dependencies = [
"equivalent",
"hashbrown",
@@ -1815,9 +1654,9 @@ dependencies = [
[[package]]
name = "inout"
-version = "0.1.3"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01"
dependencies = [
"block-padding",
"generic-array",
@@ -1829,7 +1668,7 @@ version = "0.3.0"
dependencies = [
"ashpd",
"async-trait",
- "bitflags 2.6.0",
+ "bitflags 2.9.1",
"core-foundation",
"core-foundation-sys",
"core-graphics",
@@ -1843,13 +1682,13 @@ dependencies = [
"once_cell",
"reis",
"tempfile",
- "thiserror 2.0.0",
+ "thiserror 2.0.12",
"tokio",
"tokio-util",
"wayland-client",
"wayland-protocols",
"wayland-protocols-wlr",
- "windows 0.58.0",
+ "windows",
"x11",
]
@@ -1859,7 +1698,7 @@ version = "0.3.0"
dependencies = [
"ashpd",
"async-trait",
- "bitflags 2.6.0",
+ "bitflags 2.9.1",
"core-graphics",
"futures",
"input-event",
@@ -1867,13 +1706,13 @@ dependencies = [
"log",
"once_cell",
"reis",
- "thiserror 2.0.0",
+ "thiserror 2.0.12",
"tokio",
"wayland-client",
"wayland-protocols",
"wayland-protocols-misc",
"wayland-protocols-wlr",
- "windows 0.58.0",
+ "windows",
"x11",
]
@@ -1886,7 +1725,18 @@ dependencies = [
"num_enum",
"reis",
"serde",
- "thiserror 2.0.0",
+ "thiserror 2.0.12",
+]
+
+[[package]]
+name = "io-uring"
+version = "0.7.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4"
+dependencies = [
+ "bitflags 2.9.1",
+ "cfg-if",
+ "libc",
]
[[package]]
@@ -1895,7 +1745,7 @@ version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f"
dependencies = [
- "socket2",
+ "socket2 0.5.10",
"widestring",
"windows-sys 0.48.0",
"winreg",
@@ -1903,15 +1753,15 @@ dependencies = [
[[package]]
name = "ipnet"
-version = "2.10.1"
+version = "2.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708"
+checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
[[package]]
name = "is_debug"
-version = "1.0.2"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8ea828c9d6638a5bd3d8b14e37502b4d56cae910ccf8a5b7f51c7a0eb1d0508"
+checksum = "1fe266d2e243c931d8190177f20bf7f24eed45e96f39e87dc49a27b32d12d407"
[[package]]
name = "is_terminal_polyfill"
@@ -1921,16 +1771,41 @@ checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
[[package]]
name = "itoa"
-version = "1.0.11"
+version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
+checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
+
+[[package]]
+name = "jiff"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49"
+dependencies = [
+ "jiff-static",
+ "log",
+ "portable-atomic",
+ "portable-atomic-util",
+ "serde",
+]
+
+[[package]]
+name = "jiff-static"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
[[package]]
name = "jobserver"
-version = "0.1.32"
+version = "0.1.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0"
+checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a"
dependencies = [
+ "getrandom 0.3.3",
"libc",
]
@@ -1946,24 +1821,24 @@ dependencies = [
[[package]]
name = "keycode"
-version = "0.4.0"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b07873c3182aec8a0eb1a5a4e7b197d42e9d167ba78497a6ee932a82d94673ed"
+checksum = "29541831d33940ea1c68a1b8980382c1a507c95a528a98c0e335b361b9726975"
dependencies = [
"arraydeque",
"arrayvec",
- "bitflags 1.3.2",
+ "bitflags 2.9.1",
"keycode_macro",
]
[[package]]
name = "keycode_macro"
-version = "0.4.0"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e521ea802f5b3c7194e169d75cab431b0ff08d022f2b6047b08754b4988b89df"
+checksum = "4facccc788054d521c263b66648eee8caf470f59cf8340d8cd0cce4a74ebcab2"
dependencies = [
"anyhow",
- "heck 0.3.3",
+ "heck",
"proc-macro2",
"quote",
]
@@ -1993,10 +1868,11 @@ dependencies = [
"sha2",
"shadow-rs",
"slab",
- "thiserror 2.0.0",
+ "thiserror 2.0.12",
"tokio",
"tokio-util",
"toml",
+ "toml_edit",
"webrtc-dtls",
"webrtc-util",
]
@@ -2008,7 +1884,7 @@ dependencies = [
"clap",
"futures",
"lan-mouse-ipc",
- "thiserror 2.0.0",
+ "thiserror 2.0.12",
"tokio",
]
@@ -2019,11 +1895,11 @@ dependencies = [
"async-channel",
"glib-build-tools",
"gtk4",
- "hostname 0.4.0",
+ "hostname",
"lan-mouse-ipc",
"libadwaita",
"log",
- "thiserror 2.0.0",
+ "thiserror 2.0.12",
]
[[package]]
@@ -2034,7 +1910,7 @@ dependencies = [
"log",
"serde",
"serde_json",
- "thiserror 2.0.0",
+ "thiserror 2.0.12",
"tokio",
"tokio-stream",
]
@@ -2046,7 +1922,7 @@ dependencies = [
"input-event",
"num_enum",
"paste",
- "thiserror 2.0.0",
+ "thiserror 2.0.12",
]
[[package]]
@@ -2057,9 +1933,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]]
name = "libadwaita"
-version = "0.7.1"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8611ee9fb85e7606c362b513afcaf5b59853f79e4d98caaaf581d99465014247"
+checksum = "500135d29c16aabf67baafd3e7741d48e8b8978ca98bac39e589165c8dc78191"
dependencies = [
"gdk4",
"gio",
@@ -2072,9 +1948,9 @@ dependencies = [
[[package]]
name = "libadwaita-sys"
-version = "0.7.1"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b099a223560118d4d4fa04b6d23f3ea5b7171fe1d83dfb7e6b45b54cdfc83af9"
+checksum = "6680988058c2558baf3f548a370e4e78da3bf7f08469daa822ac414842c912db"
dependencies = [
"gdk4-sys",
"gio-sys",
@@ -2088,15 +1964,15 @@ dependencies = [
[[package]]
name = "libc"
-version = "0.2.161"
+version = "0.2.174"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1"
+checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
[[package]]
name = "libgit2-sys"
-version = "0.18.0+1.9.0"
+version = "0.18.2+1.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1a117465e7e1597e8febea8bb0c410f1c7fb93b1e1cddf34363f8390367ffec"
+checksum = "1c42fe03df2bd3c53a3a9c7317ad91d80c81cd1fb0caec8d7cc4cd2bfa10c222"
dependencies = [
"cc",
"libc",
@@ -2104,21 +1980,11 @@ dependencies = [
"pkg-config",
]
-[[package]]
-name = "libloading"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4"
-dependencies = [
- "cfg-if",
- "windows-targets 0.52.6",
-]
-
[[package]]
name = "libz-sys"
-version = "1.1.21"
+version = "1.1.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df9b68e50e6e0b26f672573834882eb57759f6db9b3be2ea3c35c91188bb4eaa"
+checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d"
dependencies = [
"cc",
"libc",
@@ -2127,22 +1993,22 @@ dependencies = [
]
[[package]]
-name = "linked-hash-map"
-version = "0.5.6"
+name = "linux-raw-sys"
+version = "0.4.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
[[package]]
name = "linux-raw-sys"
-version = "0.4.14"
+version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
+checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
[[package]]
name = "litemap"
-version = "0.7.3"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704"
+checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
[[package]]
name = "local-channel"
@@ -2163,9 +2029,9 @@ checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487"
[[package]]
name = "lock_api"
-version = "0.4.12"
+version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
+checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
dependencies = [
"autocfg",
"scopeguard",
@@ -2173,30 +2039,37 @@ dependencies = [
[[package]]
name = "log"
-version = "0.4.22"
+version = "0.4.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
+checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
[[package]]
-name = "lru-cache"
-version = "0.1.2"
+name = "loom"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca"
dependencies = [
- "linked-hash-map",
+ "cfg-if",
+ "generator",
+ "scoped-tls",
+ "tracing",
+ "tracing-subscriber",
]
[[package]]
-name = "match_cfg"
+name = "matchers"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata 0.1.10",
+]
[[package]]
name = "memchr"
-version = "2.7.4"
+version = "2.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
+checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
[[package]]
name = "memmap"
@@ -2234,23 +2107,41 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "miniz_oxide"
-version = "0.8.0"
+version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1"
+checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
dependencies = [
"adler2",
]
[[package]]
name = "mio"
-version = "1.0.2"
+version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec"
+checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
dependencies = [
- "hermit-abi 0.3.9",
"libc",
- "wasi",
- "windows-sys 0.52.0",
+ "wasi 0.11.1+wasi-snapshot-preview1",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "moka"
+version = "0.12.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+ "loom",
+ "parking_lot",
+ "portable-atomic",
+ "rustc_version",
+ "smallvec",
+ "tagptr",
+ "thiserror 1.0.69",
+ "uuid",
]
[[package]]
@@ -2268,23 +2159,17 @@ dependencies = [
[[package]]
name = "nix"
-version = "0.29.0"
+version = "0.30.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
+checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
dependencies = [
- "bitflags 2.6.0",
+ "bitflags 2.9.1",
"cfg-if",
"cfg_aliases",
"libc",
"memoffset 0.9.1",
]
-[[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"
@@ -2295,6 +2180,16 @@ dependencies = [
"minimal-lexical",
]
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
[[package]]
name = "num-bigint"
version = "0.4.6"
@@ -2331,23 +2226,24 @@ dependencies = [
[[package]]
name = "num_enum"
-version = "0.7.3"
+version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179"
+checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a"
dependencies = [
"num_enum_derive",
+ "rustversion",
]
[[package]]
name = "num_enum_derive"
-version = "0.7.3"
+version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56"
+checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d"
dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
@@ -2361,9 +2257,9 @@ dependencies = [
[[package]]
name = "object"
-version = "0.36.5"
+version = "0.36.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e"
+checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
dependencies = [
"memchr",
]
@@ -2374,14 +2270,24 @@ version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9"
dependencies = [
- "asn1-rs 0.6.2",
+ "asn1-rs",
]
[[package]]
name = "once_cell"
-version = "1.20.2"
+version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
+dependencies = [
+ "critical-section",
+ "portable-atomic",
+]
+
+[[package]]
+name = "once_cell_polyfill"
+version = "1.70.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad"
[[package]]
name = "opaque-debug"
@@ -2389,6 +2295,15 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"
+[[package]]
+name = "ordered-float"
+version = "2.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c"
+dependencies = [
+ "num-traits",
+]
+
[[package]]
name = "ordered-stream"
version = "0.2.0"
@@ -2399,6 +2314,12 @@ dependencies = [
"pin-project-lite",
]
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
[[package]]
name = "p256"
version = "0.13.2"
@@ -2413,9 +2334,9 @@ dependencies = [
[[package]]
name = "p384"
-version = "0.13.0"
+version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209"
+checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6"
dependencies = [
"ecdsa",
"elliptic-curve",
@@ -2425,9 +2346,9 @@ dependencies = [
[[package]]
name = "pango"
-version = "0.20.4"
+version = "0.20.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa26aa54b11094d72141a754901cd71d9356432bb8147f9cace8d9c7ba95f356"
+checksum = "6576b311f6df659397043a5fa8a021da8f72e34af180b44f7d57348de691ab5c"
dependencies = [
"gio",
"glib",
@@ -2437,9 +2358,9 @@ dependencies = [
[[package]]
name = "pango-sys"
-version = "0.20.4"
+version = "0.20.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "84fd65917bf12f06544ae2bbc200abf9fc0a513a5a88a0fa81013893aef2b838"
+checksum = "186909673fc09be354555c302c0b3dcf753cd9fa08dcb8077fa663c80fb243fa"
dependencies = [
"glib-sys",
"gobject-sys",
@@ -2455,9 +2376,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
[[package]]
name = "parking_lot"
-version = "0.12.3"
+version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
+checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13"
dependencies = [
"lock_api",
"parking_lot_core",
@@ -2465,9 +2386,9 @@ dependencies = [
[[package]]
name = "parking_lot_core"
-version = "0.9.10"
+version = "0.9.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
+checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5"
dependencies = [
"cfg-if",
"libc",
@@ -2484,9 +2405,9 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
[[package]]
name = "pem"
-version = "3.0.4"
+version = "3.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae"
+checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3"
dependencies = [
"base64",
"serde",
@@ -2509,9 +2430,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "pin-project-lite"
-version = "0.2.15"
+version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff"
+checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
[[package]]
name = "pin-utils"
@@ -2519,17 +2440,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 = "pkcs8"
version = "0.10.2"
@@ -2542,24 +2452,9 @@ dependencies = [
[[package]]
name = "pkg-config"
-version = "0.3.31"
+version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
-
-[[package]]
-name = "polling"
-version = "3.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511"
-dependencies = [
- "cfg-if",
- "concurrent-queue",
- "hermit-abi 0.4.0",
- "pin-project-lite",
- "rustix",
- "tracing",
- "windows-sys 0.59.0",
-]
+checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
[[package]]
name = "polyval"
@@ -2575,9 +2470,27 @@ dependencies = [
[[package]]
name = "portable-atomic"
-version = "1.9.0"
+version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2"
+checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
+
+[[package]]
+name = "portable-atomic-util"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
+dependencies = [
+ "portable-atomic",
+]
+
+[[package]]
+name = "potential_utf"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
+dependencies = [
+ "zerovec",
+]
[[package]]
name = "powerfmt"
@@ -2587,9 +2500,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
[[package]]
name = "ppv-lite86"
-version = "0.2.20"
+version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
dependencies = [
"zerocopy",
]
@@ -2605,46 +2518,46 @@ dependencies = [
[[package]]
name = "proc-macro-crate"
-version = "3.2.0"
+version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b"
+checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35"
dependencies = [
"toml_edit",
]
[[package]]
name = "proc-macro2"
-version = "1.0.89"
+version = "1.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e"
+checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
dependencies = [
"unicode-ident",
]
-[[package]]
-name = "quick-error"
-version = "1.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
-
[[package]]
name = "quick-xml"
-version = "0.36.2"
+version = "0.37.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe"
+checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb"
dependencies = [
"memchr",
]
[[package]]
name = "quote"
-version = "1.0.37"
+version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
+checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
dependencies = [
"proc-macro2",
]
+[[package]]
+name = "r-efi"
+version = "5.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
+
[[package]]
name = "rand"
version = "0.8.5"
@@ -2652,8 +2565,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
"libc",
- "rand_chacha",
- "rand_core",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
+dependencies = [
+ "rand_chacha 0.9.0",
+ "rand_core 0.9.3",
]
[[package]]
@@ -2663,7 +2586,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
dependencies = [
"ppv-lite86",
- "rand_core",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.9.3",
]
[[package]]
@@ -2672,14 +2605,23 @@ version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
- "getrandom",
+ "getrandom 0.2.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
+dependencies = [
+ "getrandom 0.3.3",
]
[[package]]
name = "rcgen"
-version = "0.13.1"
+version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54077e1872c46788540de1ea3d7f4ccb1983d12f9aa909b234468676c1a36779"
+checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2"
dependencies = [
"pem",
"ring",
@@ -2690,11 +2632,11 @@ dependencies = [
[[package]]
name = "redox_syscall"
-version = "0.5.7"
+version = "0.5.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f"
+checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77"
dependencies = [
- "bitflags 2.6.0",
+ "bitflags 2.9.1",
]
[[package]]
@@ -2705,21 +2647,36 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
dependencies = [
"aho-corasick",
"memchr",
- "regex-automata",
- "regex-syntax",
+ "regex-automata 0.4.9",
+ "regex-syntax 0.8.5",
]
[[package]]
name = "regex-automata"
-version = "0.4.8"
+version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
dependencies = [
"aho-corasick",
"memchr",
- "regex-syntax",
+ "regex-syntax 0.8.5",
]
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
[[package]]
name = "regex-syntax"
version = "0.8.5"
@@ -2728,24 +2685,20 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
[[package]]
name = "reis"
-version = "0.4.0"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "827073dbe443c57fd72ae05491c6b94213218627ac6ac169850673b0cb7034f1"
+checksum = "00939c5c526a1b4054ef8d9d96b3f92227f08ca355965e986741b556eda6d289"
dependencies = [
"futures",
- "rustix",
+ "rustix 0.38.44",
"tokio",
]
[[package]]
name = "resolv-conf"
-version = "0.7.0"
+version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00"
-dependencies = [
- "hostname 0.3.1",
- "quick-error",
-]
+checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3"
[[package]]
name = "rfc6979"
@@ -2759,24 +2712,23 @@ dependencies = [
[[package]]
name = "ring"
-version = "0.17.8"
+version = "0.17.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"
+checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
dependencies = [
"cc",
"cfg-if",
- "getrandom",
+ "getrandom 0.2.16",
"libc",
- "spin",
"untrusted",
"windows-sys 0.52.0",
]
[[package]]
name = "rustc-demangle"
-version = "0.1.24"
+version = "0.1.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
+checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
[[package]]
name = "rustc_version"
@@ -2798,22 +2750,35 @@ dependencies = [
[[package]]
name = "rustix"
-version = "0.38.39"
+version = "0.38.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "375116bee2be9ed569afe2154ea6a99dfdffd257f533f187498c2a8f5feaf4ee"
+checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
dependencies = [
- "bitflags 2.6.0",
+ "bitflags 2.9.1",
"errno",
"libc",
- "linux-raw-sys",
- "windows-sys 0.52.0",
+ "linux-raw-sys 0.4.15",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "rustix"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8"
+dependencies = [
+ "bitflags 2.9.1",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.9.4",
+ "windows-sys 0.60.2",
]
[[package]]
name = "rustls"
-version = "0.23.16"
+version = "0.23.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eee87ff5d9b36712a58574e12e9f0ea80f915a5b0ac518d322b24a465617925e"
+checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc"
dependencies = [
"once_cell",
"ring",
@@ -2825,15 +2790,18 @@ dependencies = [
[[package]]
name = "rustls-pki-types"
-version = "1.10.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b"
+checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79"
+dependencies = [
+ "zeroize",
+]
[[package]]
name = "rustls-webpki"
-version = "0.102.8"
+version = "0.103.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9"
+checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc"
dependencies = [
"ring",
"rustls-pki-types",
@@ -2842,15 +2810,15 @@ dependencies = [
[[package]]
name = "rustversion"
-version = "1.0.19"
+version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4"
+checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d"
[[package]]
name = "ryu"
-version = "1.0.18"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
+checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
[[package]]
name = "scoped-tls"
@@ -2880,38 +2848,59 @@ dependencies = [
[[package]]
name = "semver"
-version = "1.0.23"
+version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
+checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
dependencies = [
"serde",
]
[[package]]
name = "serde"
-version = "1.0.214"
+version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5"
+checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
dependencies = [
"serde_derive",
]
[[package]]
-name = "serde_derive"
-version = "1.0.214"
+name = "serde-untagged"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766"
+checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e"
+dependencies = [
+ "erased-serde",
+ "serde",
+ "typeid",
+]
+
+[[package]]
+name = "serde-value"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"
+dependencies = [
+ "ordered-float",
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.219"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
name = "serde_json"
-version = "1.0.132"
+version = "1.0.141"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03"
+checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3"
dependencies = [
"itoa",
"memchr",
@@ -2921,20 +2910,20 @@ dependencies = [
[[package]]
name = "serde_repr"
-version = "0.1.19"
+version = "0.1.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9"
+checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
name = "serde_spanned"
-version = "0.6.8"
+version = "0.6.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1"
+checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
dependencies = [
"serde",
]
@@ -2952,9 +2941,9 @@ dependencies = [
[[package]]
name = "sha2"
-version = "0.10.8"
+version = "0.10.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
dependencies = [
"cfg-if",
"cpufeatures",
@@ -2963,9 +2952,9 @@ dependencies = [
[[package]]
name = "shadow-rs"
-version = "0.38.0"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69d433b5df1e1958a668457ebe4a9c5b7bcfe844f4eb2276ac43cf273baddd54"
+checksum = "3f6fd27df794ced2ef39872879c93a9f87c012607318af8621cd56d2c3a8b3a2"
dependencies = [
"cargo_metadata",
"const_format",
@@ -2976,6 +2965,15 @@ dependencies = [
"tzdb",
]
+[[package]]
+name = "sharded-slab"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+dependencies = [
+ "lazy_static",
+]
+
[[package]]
name = "shlex"
version = "1.3.0"
@@ -2984,9 +2982,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]]
name = "signal-hook-registry"
-version = "1.4.2"
+version = "1.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
+checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410"
dependencies = [
"libc",
]
@@ -2998,39 +2996,40 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
dependencies = [
"digest",
- "rand_core",
+ "rand_core 0.6.4",
]
[[package]]
name = "slab"
-version = "0.4.9"
+version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
-dependencies = [
- "autocfg",
-]
+checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d"
[[package]]
name = "smallvec"
-version = "1.13.2"
+version = "1.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
+checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
[[package]]
name = "socket2"
-version = "0.5.7"
+version = "0.5.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c"
+checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678"
dependencies = [
"libc",
"windows-sys 0.52.0",
]
[[package]]
-name = "spin"
-version = "0.9.8"
+name = "socket2"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
+dependencies = [
+ "libc",
+ "windows-sys 0.59.0",
+]
[[package]]
name = "spki"
@@ -3068,20 +3067,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "syn"
-version = "1.0.109"
+version = "2.0.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
-[[package]]
-name = "syn"
-version = "2.0.87"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d"
+checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40"
dependencies = [
"proc-macro2",
"quote",
@@ -3090,104 +3078,107 @@ dependencies = [
[[package]]
name = "synstructure"
-version = "0.12.6"
+version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.109",
- "unicode-xid",
-]
-
-[[package]]
-name = "synstructure"
-version = "0.13.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
name = "system-deps"
-version = "7.0.3"
+version = "7.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "66d23aaf9f331227789a99e8de4c91bf46703add012bdfd45fdecdfb2975a005"
+checksum = "e4be53aa0cba896d2dc615bd42bbc130acdcffa239e0a2d965ea5b3b2a86ffdb"
dependencies = [
"cfg-expr",
- "heck 0.5.0",
+ "heck",
"pkg-config",
"toml",
"version-compare",
]
[[package]]
-name = "target-lexicon"
-version = "0.12.16"
+name = "tagptr"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
+checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417"
+
+[[package]]
+name = "target-lexicon"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e502f78cdbb8ba4718f566c418c52bc729126ffd16baee5baa718cf25dd5a69a"
[[package]]
name = "tempfile"
-version = "3.13.0"
+version = "3.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b"
+checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1"
dependencies = [
- "cfg-if",
"fastrand",
+ "getrandom 0.3.3",
"once_cell",
- "rustix",
+ "rustix 1.0.8",
"windows-sys 0.59.0",
]
[[package]]
name = "thiserror"
-version = "1.0.68"
+version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02dd99dc800bbb97186339685293e1cc5d9df1f8fae2d0aecd9ff1c77efea892"
+checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
dependencies = [
- "thiserror-impl 1.0.68",
+ "thiserror-impl 1.0.69",
]
[[package]]
name = "thiserror"
-version = "2.0.0"
+version = "2.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "15291287e9bff1bc6f9ff3409ed9af665bec7a5fc8ac079ea96be07bca0e2668"
+checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
dependencies = [
- "thiserror-impl 2.0.0",
+ "thiserror-impl 2.0.12",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.68"
+version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a7c61ec9a6f64d2793d8a45faba21efbe3ced62a886d44c36a009b2b519b4c7e"
+checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
name = "thiserror-impl"
-version = "2.0.0"
+version = "2.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22efd00f33f93fa62848a7cab956c3d38c8d43095efda1decfc2b3a5dc0b8972"
+checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185"
+dependencies = [
+ "cfg-if",
]
[[package]]
name = "time"
-version = "0.3.36"
+version = "0.3.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
+checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40"
dependencies = [
"deranged",
"itoa",
@@ -3202,15 +3193,15 @@ dependencies = [
[[package]]
name = "time-core"
-version = "0.1.2"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c"
[[package]]
name = "time-macros"
-version = "0.2.18"
+version = "0.2.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
+checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49"
dependencies = [
"num-conv",
"time-core",
@@ -3218,9 +3209,9 @@ dependencies = [
[[package]]
name = "tinystr"
-version = "0.7.6"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
+checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
dependencies = [
"displaydoc",
"zerovec",
@@ -3228,9 +3219,9 @@ dependencies = [
[[package]]
name = "tinyvec"
-version = "1.8.0"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938"
+checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71"
dependencies = [
"tinyvec_macros",
]
@@ -3243,39 +3234,41 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
-version = "1.41.0"
+version = "1.47.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb"
+checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35"
dependencies = [
"backtrace",
"bytes",
+ "io-uring",
"libc",
"mio",
"parking_lot",
"pin-project-lite",
"signal-hook-registry",
- "socket2",
+ "slab",
+ "socket2 0.6.0",
"tokio-macros",
"tracing",
- "windows-sys 0.52.0",
+ "windows-sys 0.59.0",
]
[[package]]
name = "tokio-macros"
-version = "2.4.0"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
+checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
name = "tokio-stream"
-version = "0.1.16"
+version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1"
+checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047"
dependencies = [
"futures-core",
"pin-project-lite",
@@ -3284,9 +3277,9 @@ dependencies = [
[[package]]
name = "tokio-util"
-version = "0.7.12"
+version = "0.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a"
+checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df"
dependencies = [
"bytes",
"futures-core",
@@ -3297,9 +3290,9 @@ dependencies = [
[[package]]
name = "toml"
-version = "0.8.19"
+version = "0.8.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e"
+checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
dependencies = [
"serde",
"serde_spanned",
@@ -3309,31 +3302,38 @@ dependencies = [
[[package]]
name = "toml_datetime"
-version = "0.6.8"
+version = "0.6.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41"
+checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
dependencies = [
"serde",
]
[[package]]
name = "toml_edit"
-version = "0.22.22"
+version = "0.22.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5"
+checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
dependencies = [
"indexmap",
"serde",
"serde_spanned",
"toml_datetime",
+ "toml_write",
"winnow",
]
[[package]]
-name = "tracing"
-version = "0.1.40"
+name = "toml_write"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
+
+[[package]]
+name = "tracing"
+version = "0.1.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
dependencies = [
"pin-project-lite",
"tracing-attributes",
@@ -3342,44 +3342,77 @@ dependencies = [
[[package]]
name = "tracing-attributes"
-version = "0.1.27"
+version = "0.1.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
name = "tracing-core"
-version = "0.1.32"
+version = "0.1.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678"
dependencies = [
"once_cell",
+ "valuable",
]
+[[package]]
+name = "tracing-log"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+dependencies = [
+ "log",
+ "once_cell",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "typeid"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
+
[[package]]
name = "typenum"
-version = "1.17.0"
+version = "1.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
[[package]]
name = "tz-rs"
-version = "0.6.14"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33851b15c848fad2cf4b105c6bb66eb9512b6f6c44a4b13f57c53c73c707e2b4"
-dependencies = [
- "const_fn",
-]
+checksum = "e1450bf2b99397e72070e7935c89facaa80092ac812502200375f1f7d33c71a1"
[[package]]
name = "tzdb"
-version = "0.6.1"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b580f6b365fa89f5767cdb619a55d534d04a4e14c2d7e5b9a31e94598687fb1"
+checksum = "0be2ea5956f295449f47c0b825c5e109022ff1a6a53bb4f77682a87c2341fbf5"
dependencies = [
"iana-time-zone",
"tz-rs",
@@ -3388,9 +3421,9 @@ dependencies = [
[[package]]
name = "tzdb_data"
-version = "0.1.4"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4471adcfcbd3052e8c5b5890a04a559837444b3be26b9cbbd622063171cec9d"
+checksum = "9c4c81d75033770e40fbd3643ce7472a1a9fd301f90b7139038228daf8af03ec"
dependencies = [
"tz-rs",
]
@@ -3406,32 +3439,11 @@ dependencies = [
"winapi",
]
-[[package]]
-name = "unicode-bidi"
-version = "0.3.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893"
-
[[package]]
name = "unicode-ident"
-version = "1.0.13"
+version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe"
-
-[[package]]
-name = "unicode-normalization"
-version = "0.1.24"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956"
-dependencies = [
- "tinyvec",
-]
-
-[[package]]
-name = "unicode-segmentation"
-version = "1.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
+checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
[[package]]
name = "unicode-xid"
@@ -3457,22 +3469,16 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
[[package]]
name = "url"
-version = "2.5.3"
+version = "2.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada"
+checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
dependencies = [
"form_urlencoded",
- "idna 1.0.3",
+ "idna",
"percent-encoding",
"serde",
]
-[[package]]
-name = "utf16_iter"
-version = "1.0.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246"
-
[[package]]
name = "utf8_iter"
version = "1.0.4"
@@ -3485,6 +3491,23 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
+[[package]]
+name = "uuid"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d"
+dependencies = [
+ "getrandom 0.3.3",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
+
[[package]]
name = "vcpkg"
version = "0.2.15"
@@ -3505,9 +3528,18 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
[[package]]
name = "wasi"
-version = "0.11.0+wasi-snapshot-preview1"
+version = "0.11.1+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
+
+[[package]]
+name = "wasi"
+version = "0.14.2+wasi-0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
+dependencies = [
+ "wit-bindgen-rt",
+]
[[package]]
name = "wasm-bindgen"
@@ -3531,7 +3563,7 @@ dependencies = [
"log",
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
"wasm-bindgen-shared",
]
@@ -3553,7 +3585,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -3569,37 +3601,36 @@ dependencies = [
[[package]]
name = "wayland-backend"
-version = "0.3.7"
+version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "056535ced7a150d45159d3a8dc30f91a2e2d588ca0b23f70e56033622b8016f6"
+checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35"
dependencies = [
"cc",
"downcast-rs",
- "rustix",
- "scoped-tls",
+ "rustix 1.0.8",
"smallvec",
"wayland-sys",
]
[[package]]
name = "wayland-client"
-version = "0.31.7"
+version = "0.31.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b66249d3fc69f76fd74c82cc319300faa554e9d865dab1f7cd66cc20db10b280"
+checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d"
dependencies = [
- "bitflags 2.6.0",
- "rustix",
+ "bitflags 2.9.1",
+ "rustix 1.0.8",
"wayland-backend",
"wayland-scanner",
]
[[package]]
name = "wayland-protocols"
-version = "0.32.5"
+version = "0.32.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7cd0ade57c4e6e9a8952741325c30bf82f4246885dca8bf561898b86d0c1f58e"
+checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901"
dependencies = [
- "bitflags 2.6.0",
+ "bitflags 2.9.1",
"wayland-backend",
"wayland-client",
"wayland-scanner",
@@ -3607,11 +3638,11 @@ dependencies = [
[[package]]
name = "wayland-protocols-misc"
-version = "0.3.5"
+version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da2e42969764e469a115d4bb1c16e9588ef8b75b127ba7a2c9ddf1e140b25ca7"
+checksum = "2dfe33d551eb8bffd03ff067a8b44bb963919157841a99957151299a6307d19c"
dependencies = [
- "bitflags 2.6.0",
+ "bitflags 2.9.1",
"wayland-backend",
"wayland-client",
"wayland-protocols",
@@ -3620,11 +3651,11 @@ dependencies = [
[[package]]
name = "wayland-protocols-wlr"
-version = "0.3.5"
+version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "782e12f6cd923c3c316130d56205ebab53f55d6666b7faddfad36cecaeeb4022"
+checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec"
dependencies = [
- "bitflags 2.6.0",
+ "bitflags 2.9.1",
"wayland-backend",
"wayland-client",
"wayland-protocols",
@@ -3633,9 +3664,9 @@ dependencies = [
[[package]]
name = "wayland-scanner"
-version = "0.31.5"
+version = "0.31.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "597f2001b2e5fc1121e3d5b9791d3e78f05ba6bfa4641053846248e3a13661c3"
+checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3"
dependencies = [
"proc-macro2",
"quick-xml",
@@ -3644,20 +3675,18 @@ dependencies = [
[[package]]
name = "wayland-sys"
-version = "0.31.5"
+version = "0.31.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "efa8ac0d8e8ed3e3b5c9fc92c7881406a268e11555abe36493efabe649a29e09"
+checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142"
dependencies = [
- "dlib",
- "log",
"pkg-config",
]
[[package]]
name = "webrtc-dtls"
-version = "0.10.0"
+version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86e5eedbb0375aa04da93fc3a189b49ed3ed9ee844b6997d5aade14fc3e2c26e"
+checksum = "5ccbe4d9049390ab52695c3646c1395c877e16c15fb05d3bda8eee0c7351711c"
dependencies = [
"aes",
"aes-gcm",
@@ -3666,7 +3695,7 @@ dependencies = [
"byteorder",
"cbc",
"ccm",
- "der-parser 8.2.0",
+ "der-parser",
"hkdf",
"hmac",
"log",
@@ -3674,8 +3703,8 @@ dependencies = [
"p384",
"pem",
"portable-atomic",
- "rand",
- "rand_core",
+ "rand 0.8.5",
+ "rand_core 0.6.4",
"rcgen",
"ring",
"rustls",
@@ -3684,7 +3713,7 @@ dependencies = [
"sha1",
"sha2",
"subtle",
- "thiserror 1.0.68",
+ "thiserror 1.0.69",
"tokio",
"webrtc-util",
"x25519-dalek",
@@ -3693,9 +3722,9 @@ dependencies = [
[[package]]
name = "webrtc-util"
-version = "0.9.0"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc8d9bc631768958ed97b8d68b5d301e63054ae90b09083d43e2fefb939fd77e"
+checksum = "64bfb10dbe6d762f80169ae07cf252bafa1f764b9594d140008a0231c0cdce58"
dependencies = [
"async-trait",
"bitflags 1.3.2",
@@ -3706,17 +3735,17 @@ dependencies = [
"log",
"nix 0.26.4",
"portable-atomic",
- "rand",
- "thiserror 1.0.68",
+ "rand 0.8.5",
+ "thiserror 1.0.69",
"tokio",
"winapi",
]
[[package]]
name = "widestring"
-version = "1.1.0"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311"
+checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d"
[[package]]
name = "winapi"
@@ -3742,85 +3771,104 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows"
-version = "0.52.0"
+version = "0.61.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
+checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
dependencies = [
- "windows-core 0.52.0",
- "windows-targets 0.52.6",
+ "windows-collections",
+ "windows-core",
+ "windows-future",
+ "windows-link",
+ "windows-numerics",
]
[[package]]
-name = "windows"
-version = "0.58.0"
+name = "windows-collections"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6"
+checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
dependencies = [
- "windows-core 0.58.0",
- "windows-targets 0.52.6",
+ "windows-core",
]
[[package]]
name = "windows-core"
-version = "0.52.0"
+version = "0.61.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
-dependencies = [
- "windows-targets 0.52.6",
-]
-
-[[package]]
-name = "windows-core"
-version = "0.58.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99"
+checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
dependencies = [
"windows-implement",
"windows-interface",
+ "windows-link",
"windows-result",
"windows-strings",
- "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-future"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
+dependencies = [
+ "windows-core",
+ "windows-link",
+ "windows-threading",
]
[[package]]
name = "windows-implement"
-version = "0.58.0"
+version = "0.60.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
+checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
name = "windows-interface"
-version = "0.58.0"
+version = "0.59.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
+checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
+]
+
+[[package]]
+name = "windows-link"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
+
+[[package]]
+name = "windows-numerics"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
+dependencies = [
+ "windows-core",
+ "windows-link",
]
[[package]]
name = "windows-result"
-version = "0.2.0"
+version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e"
+checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
dependencies = [
- "windows-targets 0.52.6",
+ "windows-link",
]
[[package]]
name = "windows-strings"
-version = "0.1.0"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10"
+checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
dependencies = [
- "windows-result",
- "windows-targets 0.52.6",
+ "windows-link",
]
[[package]]
@@ -3850,6 +3898,15 @@ dependencies = [
"windows-targets 0.52.6",
]
+[[package]]
+name = "windows-sys"
+version = "0.60.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
+dependencies = [
+ "windows-targets 0.53.3",
+]
+
[[package]]
name = "windows-targets"
version = "0.48.5"
@@ -3874,13 +3931,39 @@ dependencies = [
"windows_aarch64_gnullvm 0.52.6",
"windows_aarch64_msvc 0.52.6",
"windows_i686_gnu 0.52.6",
- "windows_i686_gnullvm",
+ "windows_i686_gnullvm 0.52.6",
"windows_i686_msvc 0.52.6",
"windows_x86_64_gnu 0.52.6",
"windows_x86_64_gnullvm 0.52.6",
"windows_x86_64_msvc 0.52.6",
]
+[[package]]
+name = "windows-targets"
+version = "0.53.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91"
+dependencies = [
+ "windows-link",
+ "windows_aarch64_gnullvm 0.53.0",
+ "windows_aarch64_msvc 0.53.0",
+ "windows_i686_gnu 0.53.0",
+ "windows_i686_gnullvm 0.53.0",
+ "windows_i686_msvc 0.53.0",
+ "windows_x86_64_gnu 0.53.0",
+ "windows_x86_64_gnullvm 0.53.0",
+ "windows_x86_64_msvc 0.53.0",
+]
+
+[[package]]
+name = "windows-threading"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
+dependencies = [
+ "windows-link",
+]
+
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.48.5"
@@ -3893,6 +3976,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
+
[[package]]
name = "windows_aarch64_msvc"
version = "0.48.5"
@@ -3905,6 +3994,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
+
[[package]]
name = "windows_i686_gnu"
version = "0.48.5"
@@ -3917,12 +4012,24 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+[[package]]
+name = "windows_i686_gnu"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
+
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
+
[[package]]
name = "windows_i686_msvc"
version = "0.48.5"
@@ -3935,6 +4042,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+[[package]]
+name = "windows_i686_msvc"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
+
[[package]]
name = "windows_x86_64_gnu"
version = "0.48.5"
@@ -3947,6 +4060,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
+
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.48.5"
@@ -3959,6 +4078,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
+
[[package]]
name = "windows_x86_64_msvc"
version = "0.48.5"
@@ -3972,10 +4097,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
-name = "winnow"
-version = "0.6.20"
+name = "windows_x86_64_msvc"
+version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b"
+checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
+
+[[package]]
+name = "winnow"
+version = "0.7.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95"
dependencies = [
"memchr",
]
@@ -3991,16 +4122,19 @@ dependencies = [
]
[[package]]
-name = "write16"
-version = "1.0.0"
+name = "wit-bindgen-rt"
+version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936"
+checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
+dependencies = [
+ "bitflags 2.9.1",
+]
[[package]]
name = "writeable"
-version = "0.5.5"
+version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
+checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
[[package]]
name = "x11"
@@ -4019,7 +4153,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277"
dependencies = [
"curve25519-dalek",
- "rand_core",
+ "rand_core 0.6.4",
"serde",
"zeroize",
]
@@ -4030,27 +4164,17 @@ version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69"
dependencies = [
- "asn1-rs 0.6.2",
+ "asn1-rs",
"data-encoding",
- "der-parser 9.0.0",
+ "der-parser",
"lazy_static",
"nom",
"oid-registry",
"rusticata-macros",
- "thiserror 1.0.68",
+ "thiserror 1.0.69",
"time",
]
-[[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 = "yasna"
version = "0.5.2"
@@ -4062,9 +4186,9 @@ dependencies = [
[[package]]
name = "yoke"
-version = "0.7.4"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5"
+checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
dependencies = [
"serde",
"stable_deref_trait",
@@ -4074,42 +4198,39 @@ dependencies = [
[[package]]
name = "yoke-derive"
-version = "0.7.4"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95"
+checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
- "synstructure 0.13.1",
+ "syn",
+ "synstructure",
]
[[package]]
name = "zbus"
-version = "5.1.0"
+version = "5.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e0c8d6fdd4c4ac401fd298fd169d538a386e9df3c32ff136e8745dfa443dbd8"
+checksum = "4bb4f9a464286d42851d18a605f7193b8febaf5b0919d71c6399b7b26e5b0aad"
dependencies = [
"async-broadcast",
- "async-process",
"async-recursion",
"async-trait",
"enumflags2",
"event-listener",
"futures-core",
- "futures-util",
+ "futures-lite",
"hex",
- "nix 0.29.0",
+ "nix 0.30.1",
"ordered-stream",
"serde",
"serde_repr",
- "static_assertions",
"tokio",
"tracing",
"uds_windows",
"windows-sys 0.59.0",
"winnow",
- "xdg-home",
"zbus_macros",
"zbus_names",
"zvariant",
@@ -4117,14 +4238,14 @@ dependencies = [
[[package]]
name = "zbus_macros"
-version = "5.1.0"
+version = "5.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed1f3cc6313cbefd539b4eee6de36a990897ab6cc2c30a82b3ac29ef9099e6c0"
+checksum = "ef9859f68ee0c4ee2e8cde84737c78e3f4c54f946f2a38645d0d4c7a95327659"
dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
"zbus_names",
"zvariant",
"zvariant_utils",
@@ -4132,9 +4253,9 @@ dependencies = [
[[package]]
name = "zbus_names"
-version = "4.1.0"
+version = "4.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "856b7a38811f71846fd47856ceee8bccaec8399ff53fb370247e66081ace647b"
+checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97"
dependencies = [
"serde",
"static_assertions",
@@ -4144,44 +4265,43 @@ dependencies = [
[[package]]
name = "zerocopy"
-version = "0.7.35"
+version = "0.8.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
+checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f"
dependencies = [
- "byteorder",
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
-version = "0.7.35"
+version = "0.8.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
+checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
name = "zerofrom"
-version = "0.1.4"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55"
+checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
dependencies = [
"zerofrom-derive",
]
[[package]]
name = "zerofrom-derive"
-version = "0.1.4"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5"
+checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
- "synstructure 0.13.1",
+ "syn",
+ "synstructure",
]
[[package]]
@@ -4201,14 +4321,25 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
+]
+
+[[package]]
+name = "zerotrie"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
+dependencies = [
+ "displaydoc",
+ "yoke",
+ "zerofrom",
]
[[package]]
name = "zerovec"
-version = "0.10.4"
+version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079"
+checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428"
dependencies = [
"yoke",
"zerofrom",
@@ -4217,25 +4348,24 @@ dependencies = [
[[package]]
name = "zerovec-derive"
-version = "0.10.3"
+version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
+checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
]
[[package]]
name = "zvariant"
-version = "5.1.0"
+version = "5.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1200ee6ac32f1e5a312e455a949a4794855515d34f9909f4a3e082d14e1a56f"
+checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f"
dependencies = [
"endi",
"enumflags2",
"serde",
- "static_assertions",
"url",
"winnow",
"zvariant_derive",
@@ -4244,27 +4374,27 @@ dependencies = [
[[package]]
name = "zvariant_derive"
-version = "5.1.0"
+version = "5.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "687e3b97fae6c9104fbbd36c73d27d149abf04fb874e2efbd84838763daa8916"
+checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208"
dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
- "syn 2.0.87",
+ "syn",
"zvariant_utils",
]
[[package]]
name = "zvariant_utils"
-version = "3.0.2"
+version = "3.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20d1d011a38f12360e5fcccceeff5e2c42a8eb7f27f0dcba97a0862ede05c9c6"
+checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34"
dependencies = [
"proc-macro2",
"quote",
"serde",
"static_assertions",
- "syn 2.0.87",
+ "syn",
"winnow",
]
diff --git a/Cargo.toml b/Cargo.toml
index 9763eb8..29c0097 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -24,7 +24,7 @@ strip = true
panic = "abort"
[build-dependencies]
-shadow-rs = "0.38.0"
+shadow-rs = "1.2.0"
[dependencies]
input-event = { path = "input-event", version = "0.3.0" }
@@ -34,10 +34,11 @@ lan-mouse-cli = { path = "lan-mouse-cli", version = "0.2.0" }
lan-mouse-gtk = { path = "lan-mouse-gtk", version = "0.2.0", optional = true }
lan-mouse-ipc = { path = "lan-mouse-ipc", version = "0.2.0" }
lan-mouse-proto = { path = "lan-mouse-proto", version = "0.2.0" }
-shadow-rs = { version = "0.38.0", features = ["metadata"] }
+shadow-rs = { version = "1.2.0", features = ["metadata"] }
-hickory-resolver = "0.24.1"
+hickory-resolver = "0.25.2"
toml = "0.8"
+toml_edit = { version = "0.22", features = ["serde"] }
serde = { version = "1.0", features = ["derive"] }
log = "0.4.20"
env_logger = "0.11.3"
@@ -58,8 +59,8 @@ slab = "0.4.9"
thiserror = "2.0.0"
tokio-util = "0.7.11"
local-channel = "0.1.5"
-webrtc-dtls = { version = "0.10.0", features = ["pem"] }
-webrtc-util = "0.9.0"
+webrtc-dtls = { version = "0.12.0", features = ["pem"] }
+webrtc-util = "0.11.0"
rustls = { version = "0.23.12", default-features = false, features = [
"std",
"ring",
diff --git a/README.md b/README.md
index abc5f8c..00e9674 100644
--- a/README.md
+++ b/README.md
@@ -81,15 +81,37 @@ paru -S lan-mouse-git
- flake: [README.md](./nix/README.md)
+
+ Fedora
+You can install Lan Mouse from the [Terra Repository](https://terra.fyralabs.com).
+
+
+After enabling Terra:
+
+```sh
+dnf install lan-mouse
+```
+
+
+
+ MacOS
+
+- Download the package for your Mac (Intel or ARM) from the releases page
+- Unzip it
+- Remove the quarantine with `xattr -rd com.apple.quarantine "Lan Mouse.app"`
+- Launch the app
+- Grant accessibility permissions in System Preferences
+
+
Manual Installation
-First make sure to [install the necessary dependencies](#installing-dependencies).
+First make sure to [install the necessary dependencies](#installing-dependencies-for-development--compiling-from-source).
Precompiled release binaries for Windows, MacOS and Linux are available in the [releases section](https://github.com/feschber/lan-mouse/releases).
-For Windows, the depenedencies are included in the .zip file, for other operating systems see [Installing Dependencies](#installing-dependencies).
+For Windows, the depenedencies are included in the .zip file, for other operating systems see [Installing Dependencies](#installing-dependencies-for-development--compiling-from-source).
Alternatively, the `lan-mouse` binary can be compiled from source (see below).
@@ -161,7 +183,15 @@ For a detailed list of available features, checkout the [Cargo.toml](./Cargo.tom
MacOS
```sh
-brew install libadwaita pkg-config
+# Install dependencies
+brew install libadwaita pkg-config imagemagick
+cargo install cargo-bundle
+# Create the macOS icon file
+scripts/makeicns.sh
+# Create the .app bundle
+cargo bundle
+# Copy all dynamic libraries into the bundle, and update the bundle to find them there
+scripts/copy-macos-dylib.sh
```
@@ -291,6 +321,9 @@ To do so, use the `daemon` subcommand:
```sh
lan-mouse daemon
```
+
+
+## Systemd Service
In order to start lan-mouse with a graphical session automatically,
the [systemd-service](service/lan-mouse.service) can be used:
@@ -302,7 +335,9 @@ cp service/lan-mouse.service ~/.config/systemd/user
systemctl --user daemon-reload
systemctl --user enable --now lan-mouse.service
```
-
+> [!Important]
+> Make sure to point `ExecStart=/usr/bin/lan-mouse daemon` to the actual `lan-mouse` binary (in case it is not under `/usr/bin`, e.g. when installed manually.
+
## Configuration
To automatically load clients on startup, the file `$XDG_CONFIG_HOME/lan-mouse/config.toml` is parsed.
diff --git a/build-aux/de.feschber.LanMouse.yml b/build-aux/de.feschber.LanMouse.yml
new file mode 100644
index 0000000..e331158
--- /dev/null
+++ b/build-aux/de.feschber.LanMouse.yml
@@ -0,0 +1,50 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/flatpak/flatpak-builder/refs/heads/main/data/flatpak-manifest.schema.json
+app-id: de.feschber.LanMouse
+runtime: org.gnome.Platform
+runtime-version: "48"
+sdk: org.gnome.Sdk
+sdk-extensions:
+ - org.freedesktop.Sdk.Extension.rust-stable
+ - org.freedesktop.Sdk.Extension.llvm20
+command: /app/bin/lan-mouse
+build-options:
+ append-path: "/usr/lib/sdk/rust-stable/bin:/usr/lib/sdk/llvm20/bin"
+ env:
+ "CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER": "clang"
+ "CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS": "-C link-arg=-fuse-ld=/usr/lib/sdk/rust-stable/bin/mold"
+ "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER": "clang"
+ "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS": "-C link-arg=-fuse-ld=/usr/lib/sdk/rust-stable/bin/mold"
+ build-args:
+ "--share=network"
+ prepend-ld-library-path:
+ "/usr/lib/sdk/llvm19/lib"
+
+finish-args:
+ - "--socket=wayland"
+ - "--socket=fallback-x11"
+ - "--device=dri"
+ - "--socket=session-bus"
+ - "--share=network"
+ - "--filesystem=xdg-config"
+ - "--env=RUST_BACKTRACE=1"
+ - "--env=RUST_LOG=lan-mouse=debug"
+ - "--env=GTK_PATH=/app/lib/gtk-4.0"
+
+modules:
+ - name: lan-mouse
+ buildsystem: simple
+ build-options:
+ build-args:
+ - "--share=network"
+ append-path: /usr/lib/sdk/rust-stable/bin
+ env:
+ CARGO_HOME: /run/build/lan-mouse/cargo
+ build-commands:
+ - cargo fetch --manifest-path Cargo.toml --verbose
+ - cargo build
+ - install -Dm0755 target/debug/lan-mouse /app/bin/lan-mouse
+ - install -Dm0644 lan-mouse-gtk/resources/de.feschber.LanMouse.svg ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/${FLATPAK_ID}.svg
+ - install -Dm0644 de.feschber.LanMouse.desktop ${FLATPAK_DEST}/share/applications/${FLATPAK_ID}.desktop
+ sources:
+ - type: dir
+ path: ..
diff --git a/de.feschber.LanMouse.yml b/de.feschber.LanMouse.yml
deleted file mode 100644
index 0778107..0000000
--- a/de.feschber.LanMouse.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-app-id: de.feschber.LanMouse
-runtime: org.freedesktop.Platform
-runtime-version: '22.08'
-sdk: org.freedesktop.Sdk
-command: target/release/lan-mouse
-modules:
- - name: hello
- buildsystem: simple
- build-commands:
- - cargo build --release
- - install -D lan-mouse /app/bin/lan-mouse
- sources:
- - type: file
- path: target/release/lan-mouse
diff --git a/dylibs/.gitignore b/dylibs/.gitignore
new file mode 100644
index 0000000..72e8ffc
--- /dev/null
+++ b/dylibs/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/flake.lock b/flake.lock
index 6490b76..bd6f5ff 100644
--- a/flake.lock
+++ b/flake.lock
@@ -2,11 +2,11 @@
"nodes": {
"nixpkgs": {
"locked": {
- "lastModified": 1740560979,
- "narHash": "sha256-Vr3Qi346M+8CjedtbyUevIGDZW8LcA1fTG0ugPY/Hic=",
+ "lastModified": 1772963539,
+ "narHash": "sha256-9jVDGZnvCckTGdYT53d/EfznygLskyLQXYwJLKMPsZs=",
"owner": "nixos",
"repo": "nixpkgs",
- "rev": "5135c59491985879812717f4c9fea69604e7f26f",
+ "rev": "9dcb002ca1690658be4a04645215baea8b95f31d",
"type": "github"
},
"original": {
@@ -29,11 +29,11 @@
]
},
"locked": {
- "lastModified": 1740623427,
- "narHash": "sha256-3SdPQrZoa4odlScFDUHd4CUPQ/R1gtH4Mq9u8CBiK8M=",
+ "lastModified": 1773025773,
+ "narHash": "sha256-Wik8+xApNfldpUFjPmJkPdg0RrvUPSWGIZis+A/0N1w=",
"owner": "oxalica",
"repo": "rust-overlay",
- "rev": "d342e8b5fd88421ff982f383c853f0fc78a847ab",
+ "rev": "3c06fdbbd36ff60386a1e590ee0cd52dcd1892bf",
"type": "github"
},
"original": {
diff --git a/flake.nix b/flake.nix
index 2ad40b5..5cf260f 100644
--- a/flake.nix
+++ b/flake.nix
@@ -7,60 +7,87 @@
inputs.nixpkgs.follows = "nixpkgs";
};
};
- outputs = {
- self,
- nixpkgs,
- rust-overlay,
- ...
- }: let
- inherit (nixpkgs) lib;
- genSystems = lib.genAttrs [
- "aarch64-darwin"
- "aarch64-linux"
- "x86_64-darwin"
- "x86_64-linux"
- ];
- pkgsFor = system:
- import nixpkgs {
- inherit system;
-
- overlays = [
- rust-overlay.overlays.default
- ];
- };
- mkRustToolchain = pkgs:
- pkgs.rust-bin.stable.latest.default.override {
- extensions = ["rust-src"];
- };
- pkgs = genSystems (system: import nixpkgs {inherit system;});
- in {
- packages = genSystems (system: rec {
- default = pkgs.${system}.callPackage ./nix {};
- lan-mouse = default;
- });
- homeManagerModules.default = import ./nix/hm-module.nix self;
- devShells = genSystems (system: let
- pkgs = pkgsFor system;
- rust = mkRustToolchain pkgs;
- in {
- default = pkgs.mkShell {
- packages = with pkgs; [
- rust
- rust-analyzer-unwrapped
- pkg-config
- xorg.libX11
- gtk4
- libadwaita
- librsvg
- xorg.libXtst
- ] ++ lib.optionals stdenv.isDarwin
- (with darwin.apple_sdk_11_0.frameworks; [
- CoreGraphics
- ApplicationServices
- ]);
-
- RUST_SRC_PATH = "${rust}/lib/rustlib/src/rust/library";
- };
- });
- };
+ outputs =
+ {
+ nixpkgs,
+ rust-overlay,
+ self,
+ ...
+ }:
+ let
+ inherit (nixpkgs) lib;
+ forEachPkgs =
+ f:
+ lib.genAttrs
+ [
+ "aarch64-darwin"
+ "aarch64-linux"
+ "x86_64-darwin"
+ "x86_64-linux"
+ ]
+ (
+ system:
+ let
+ pkgs = import nixpkgs {
+ inherit system;
+ overlays = [ rust-overlay.overlays.default ];
+ };
+ # Default toolchain for devshell
+ rustToolchain = pkgs.rust-bin.stable.latest.default.override {
+ extensions = [
+ # includes already:
+ # rustc
+ # cargo
+ # rust-std
+ # rust-docs
+ # rustfmt-preview
+ # clippy-preview
+ "rust-analyzer"
+ "rust-src"
+ ];
+ };
+ # Minimal toolchain for builds (rustc + cargo + rust-std only)
+ rustToolchainForBuild = pkgs.rust-bin.stable.latest.minimal;
+ in
+ f { inherit pkgs rustToolchain rustToolchainForBuild; }
+ );
+ in
+ {
+ packages = forEachPkgs (
+ { pkgs, rustToolchainForBuild, ... }:
+ let
+ customRustPlatform = pkgs.makeRustPlatform {
+ cargo = rustToolchainForBuild;
+ rustc = rustToolchainForBuild;
+ };
+ lan-mouse = pkgs.callPackage ./nix { rustPlatform = customRustPlatform; };
+ in
+ {
+ default = lan-mouse;
+ inherit lan-mouse;
+ }
+ );
+ devShells = forEachPkgs (
+ { pkgs, rustToolchain, ... }:
+ {
+ default = pkgs.mkShell {
+ packages =
+ with pkgs;
+ [
+ rustToolchain
+ pkg-config
+ gtk4
+ libadwaita
+ librsvg
+ ]
+ ++ lib.optionals pkgs.stdenv.isLinux [
+ libX11
+ libXtst
+ ];
+ env.RUST_SRC_PATH = "${rustToolchain}/lib/rustlib/src/rust/library";
+ };
+ }
+ );
+ homeManagerModules.default = import ./nix/hm-module.nix self;
+ };
}
diff --git a/input-capture/Cargo.toml b/input-capture/Cargo.toml
index 98dde22..0f77eb2 100644
--- a/input-capture/Cargo.toml
+++ b/input-capture/Cargo.toml
@@ -23,6 +23,7 @@ tokio = { version = "1.32.0", features = [
"rt",
"sync",
"signal",
+ "time",
] }
once_cell = "1.19.0"
async-trait = "0.1.81"
@@ -40,21 +41,21 @@ wayland-protocols-wlr = { version = "0.3.1", features = [
"client",
], optional = true }
x11 = { version = "2.21.0", features = ["xlib", "xtest"], optional = true }
-ashpd = { version = "0.10", default-features = false, features = [
+ashpd = { version = "0.11.0", default-features = false, features = [
"tokio",
], optional = true }
-reis = { version = "0.4", features = ["tokio"], optional = true }
+reis = { version = "0.5.0", features = ["tokio"], optional = true }
[target.'cfg(target_os="macos")'.dependencies]
-core-graphics = { version = "0.24.0", features = ["highsierra"] }
+core-graphics = { version = "0.25.0", features = ["highsierra"] }
core-foundation = "0.10.0"
core-foundation-sys = "0.8.6"
libc = "0.2.155"
-keycode = "0.4.0"
+keycode = "1.0.0"
bitflags = "2.6.0"
[target.'cfg(windows)'.dependencies]
-windows = { version = "0.58.0", features = [
+windows = { version = "0.61.2", features = [
"Win32_System_LibraryLoader",
"Win32_System_Threading",
"Win32_Foundation",
diff --git a/input-capture/src/dummy.rs b/input-capture/src/dummy.rs
index 24da6d9..3a2a734 100644
--- a/input-capture/src/dummy.rs
+++ b/input-capture/src/dummy.rs
@@ -1,6 +1,6 @@
use std::f64::consts::PI;
use std::pin::Pin;
-use std::task::{ready, Context, Poll};
+use std::task::{Context, Poll, ready};
use std::time::Duration;
use async_trait::async_trait;
diff --git a/input-capture/src/error.rs b/input-capture/src/error.rs
index 7e7a0e6..469234a 100644
--- a/input-capture/src/error.rs
+++ b/input-capture/src/error.rs
@@ -12,9 +12,9 @@ pub enum InputCaptureError {
use std::io;
#[cfg(all(unix, feature = "layer_shell", not(target_os = "macos")))]
use wayland_client::{
+ ConnectError, DispatchError,
backend::WaylandError,
globals::{BindError, GlobalError},
- ConnectError, DispatchError,
};
#[cfg(all(unix, feature = "libei", not(target_os = "macos")))]
diff --git a/input-capture/src/layer_shell.rs b/input-capture/src/layer_shell.rs
index 17cea5f..698c584 100644
--- a/input-capture/src/layer_shell.rs
+++ b/input-capture/src/layer_shell.rs
@@ -7,7 +7,7 @@ use std::{
io::{self, ErrorKind},
os::fd::{AsFd, RawFd},
pin::Pin,
- task::{ready, Context, Poll},
+ task::{Context, Poll, ready},
};
use tokio::io::unix::AsyncFd;
@@ -45,9 +45,10 @@ use wayland_protocols_wlr::layer_shell::v1::client::{
};
use wayland_client::{
+ Connection, Dispatch, DispatchError, EventQueue, QueueHandle, WEnum,
backend::{ReadEventsGuard, WaylandError},
delegate_noop,
- globals::{registry_queue_init, Global, GlobalList, GlobalListContents},
+ globals::{Global, GlobalList, GlobalListContents, registry_queue_init},
protocol::{
wl_buffer, wl_compositor,
wl_keyboard::{self, WlKeyboard},
@@ -58,7 +59,6 @@ use wayland_client::{
wl_seat, wl_shm, wl_shm_pool,
wl_surface::WlSurface,
},
- Connection, Dispatch, DispatchError, EventQueue, QueueHandle, WEnum,
};
use input_event::{Event, KeyboardEvent, PointerEvent};
@@ -66,8 +66,8 @@ use input_event::{Event, KeyboardEvent, PointerEvent};
use crate::{CaptureError, CaptureEvent};
use super::{
- error::{LayerShellCaptureCreationError, WaylandBindError},
Capture, Position,
+ error::{LayerShellCaptureCreationError, WaylandBindError},
};
struct Globals {
@@ -535,7 +535,7 @@ impl State {
fn update_windows(&mut self) {
log::info!("active outputs: ");
for output in self.outputs.iter().filter(|o| o.info.is_some()) {
- log::info!(" * {}", output);
+ log::info!(" * {output}");
}
self.active_windows.clear();
@@ -582,17 +582,17 @@ impl Inner {
match self.queue.dispatch_pending(&mut self.state) {
Ok(_) => {}
Err(DispatchError::Backend(WaylandError::Io(e))) => {
- log::error!("Wayland Error: {}", e);
+ log::error!("Wayland Error: {e}");
}
Err(DispatchError::Backend(e)) => {
- panic!("backend error: {}", e);
+ panic!("backend error: {e}");
}
Err(DispatchError::BadMessage {
sender_id,
interface,
opcode,
}) => {
- panic!("bad message {}, {} , {}", sender_id, interface, opcode);
+ panic!("bad message {sender_id}, {interface} , {opcode}");
}
}
}
@@ -813,7 +813,7 @@ impl Dispatch for State {
})),
));
}
- wl_pointer::Event::Frame {} => {
+ wl_pointer::Event::Frame => {
// TODO properly handle frame events
// we simply insert a frame event on the client side
// after each event for now
@@ -974,7 +974,7 @@ impl Dispatch for State {
.find(|o| o.global.name == *name)
.expect("output");
- log::debug!("xdg_output {name} - {:?}", event);
+ log::debug!("xdg_output {name} - {event:?}");
match event {
zxdg_output_v1::Event::LogicalPosition { x, y } => {
output.pending_info.position = (x, y);
@@ -1010,7 +1010,7 @@ impl Dispatch for State {
_conn: &Connection,
_qhandle: &QueueHandle,
) {
- log::debug!("wl_output {name} - {:?}", event);
+ log::debug!("wl_output {name} - {event:?}");
if let wl_output::Event::Done = event {
state.update_output_info(*name);
}
diff --git a/input-capture/src/lib.rs b/input-capture/src/lib.rs
index debfd6d..4767503 100644
--- a/input-capture/src/lib.rs
+++ b/input-capture/src/lib.rs
@@ -2,14 +2,14 @@ use std::{
collections::{HashMap, HashSet, VecDeque},
fmt::Display,
mem::swap,
- task::{ready, Poll},
+ task::{Poll, ready},
};
use async_trait::async_trait;
use futures::StreamExt;
use futures_core::Stream;
-use input_event::{scancode, Event, KeyboardEvent};
+use input_event::{Event, KeyboardEvent, scancode};
pub use error::{CaptureCreationError, CaptureError, InputCaptureError};
@@ -79,7 +79,7 @@ impl Display for Position {
Position::Top => "top",
Position::Bottom => "bottom",
};
- write!(f, "{}", pos)
+ write!(f, "{pos}")
}
}
diff --git a/input-capture/src/libei.rs b/input-capture/src/libei.rs
index 9edf764..697b782 100644
--- a/input-capture/src/libei.rs
+++ b/input-capture/src/libei.rs
@@ -1,10 +1,10 @@
use ashpd::{
desktop::{
+ Session,
input_capture::{
Activated, ActivatedBarrier, Barrier, BarrierID, Capabilities, InputCapture, Region,
Zones,
},
- Session,
},
enumflags2::BitFlags,
};
@@ -28,8 +28,8 @@ use std::{
};
use tokio::{
sync::{
- mpsc::{self, Receiver, Sender},
Notify,
+ mpsc::{self, Receiver, Sender},
},
task::JoinHandle,
};
@@ -42,8 +42,8 @@ use input_event::Event;
use crate::CaptureEvent;
use super::{
- error::{CaptureError, LibeiCaptureCreationError},
Capture as LanMouseInputCapture, Position,
+ error::{CaptureError, LibeiCaptureCreationError},
};
/* there is a bug in xdg-remote-desktop-portal-gnome / mutter that
@@ -587,9 +587,13 @@ impl LanMouseInputCapture for LibeiInputCapture<'_> {
self.cancellation_token.cancel();
let task = &mut self.capture_task;
log::debug!("waiting for capture to terminate...");
- let res = task.await.expect("libei task panic");
- log::debug!("done!");
+ let res = if !task.is_finished() {
+ task.await.expect("libei task panic")
+ } else {
+ Ok(())
+ };
self.terminated = true;
+ log::debug!("done!");
res
}
}
diff --git a/input-capture/src/macos.rs b/input-capture/src/macos.rs
index 701f473..2abb15e 100644
--- a/input-capture/src/macos.rs
+++ b/input-capture/src/macos.rs
@@ -1,31 +1,42 @@
-use super::{error::MacosCaptureCreationError, Capture, CaptureError, CaptureEvent, Position};
+use super::{Capture, CaptureError, CaptureEvent, Position, error::MacosCaptureCreationError};
use async_trait::async_trait;
use bitflags::bitflags;
-use core_foundation::base::{kCFAllocatorDefault, CFRelease};
-use core_foundation::date::CFTimeInterval;
-use core_foundation::number::{kCFBooleanTrue, CFBooleanRef};
-use core_foundation::runloop::{kCFRunLoopCommonModes, CFRunLoop, CFRunLoopSource};
-use core_foundation::string::{kCFStringEncodingUTF8, CFStringCreateWithCString, CFStringRef};
-use core_graphics::base::{kCGErrorSuccess, CGError};
-use core_graphics::display::{CGDisplay, CGPoint};
-use core_graphics::event::{
- CGEvent, CGEventFlags, CGEventTap, CGEventTapLocation, CGEventTapOptions, CGEventTapPlacement,
- CGEventTapProxy, CGEventType, EventField,
+use core_foundation::{
+ base::{CFRelease, kCFAllocatorDefault},
+ date::CFTimeInterval,
+ number::{CFBooleanRef, kCFBooleanTrue},
+ runloop::{CFRunLoop, CFRunLoopSource, kCFRunLoopCommonModes},
+ string::{CFStringCreateWithCString, CFStringRef, kCFStringEncodingUTF8},
+};
+use core_graphics::{
+ base::{CGError, kCGErrorSuccess},
+ display::{CGDisplay, CGPoint},
+ event::{
+ CGEvent, CGEventFlags, CGEventTap, CGEventTapLocation, CGEventTapOptions,
+ CGEventTapPlacement, CGEventTapProxy, CGEventType, CallbackResult, EventField,
+ },
+ event_source::{CGEventSource, CGEventSourceStateID},
};
-use core_graphics::event_source::{CGEventSource, CGEventSourceStateID};
use futures_core::Stream;
-use input_event::{Event, KeyboardEvent, PointerEvent, BTN_LEFT, BTN_MIDDLE, BTN_RIGHT};
+use input_event::{
+ BTN_BACK, BTN_FORWARD, BTN_LEFT, BTN_MIDDLE, BTN_RIGHT, Event, KeyboardEvent, PointerEvent,
+};
use keycode::{KeyMap, KeyMapping};
use libc::c_void;
use once_cell::unsync::Lazy;
-use std::collections::HashSet;
-use std::ffi::{c_char, CString};
-use std::pin::Pin;
-use std::sync::Arc;
-use std::task::{ready, Context, Poll};
-use std::thread::{self};
-use tokio::sync::mpsc::{self, Receiver, Sender};
-use tokio::sync::{oneshot, Mutex};
+use std::{
+ collections::HashSet,
+ ffi::{CString, c_char},
+ pin::Pin,
+ sync::Arc,
+ task::{Context, Poll, ready},
+ thread::{self},
+};
+use tokio::sync::{
+ Mutex,
+ mpsc::{self, Receiver, Sender},
+ oneshot,
+};
#[derive(Debug, Default)]
struct Bounds {
@@ -37,9 +48,16 @@ struct Bounds {
#[derive(Debug)]
struct InputCaptureState {
+ /// active capture positions
active_clients: Lazy>,
+ /// the currently entered capture position, if any
current_pos: Option,
+ /// position where the cursor was captured
+ enter_position: Option,
+ /// bounds of the input capture area
bounds: Bounds,
+ /// current state of modifier keys
+ modifier_state: XMods,
}
#[derive(Debug)]
@@ -56,7 +74,9 @@ impl InputCaptureState {
let mut res = Self {
active_clients: Lazy::new(HashSet::new),
current_pos: None,
+ enter_position: None,
bounds: Bounds::default(),
+ modifier_state: Default::default(),
};
res.update_bounds()?;
Ok(res)
@@ -96,45 +116,34 @@ impl InputCaptureState {
Ok(())
}
- // We can't disable mouse movement when in a client so we need to reset the cursor position
- // to the edge of the screen, the cursor will be hidden but we dont want it to appear in a
- // random location when we exit the client
- fn reset_mouse_position(&self, event: &CGEvent) -> Result<(), CaptureError> {
- if let Some(pos) = self.current_pos {
- let location = event.location();
- let edge_offset = 1.0;
+ /// start the input capture by
+ fn start_capture(&mut self, event: &CGEvent, position: Position) -> Result<(), CaptureError> {
+ let mut location = event.location();
+ let edge_offset = 1.0;
+ // move cursor location to display bounds
+ match position {
+ Position::Left => location.x = self.bounds.xmin + edge_offset,
+ Position::Right => location.x = self.bounds.xmax - edge_offset,
+ Position::Top => location.y = self.bounds.ymin + edge_offset,
+ Position::Bottom => location.y = self.bounds.ymax - edge_offset,
+ };
+ self.enter_position = Some(location);
+ self.reset_cursor()
+ }
- // After the cursor is warped no event is produced but the next event
- // will carry the delta from the warp so only half the delta is needed to move the cursor
- let delta_y = event.get_double_value_field(EventField::MOUSE_EVENT_DELTA_Y) / 2.0;
- let delta_x = event.get_double_value_field(EventField::MOUSE_EVENT_DELTA_X) / 2.0;
+ /// resets the cursor to the position, where the capture started
+ fn reset_cursor(&mut self) -> Result<(), CaptureError> {
+ let pos = self.enter_position.expect("capture active");
+ log::trace!("Resetting cursor position to: {}, {}", pos.x, pos.y);
+ CGDisplay::warp_mouse_cursor_position(pos).map_err(CaptureError::WarpCursor)
+ }
- let mut new_x = location.x + delta_x;
- let mut new_y = location.y + delta_y;
+ fn hide_cursor(&self) -> Result<(), CaptureError> {
+ CGDisplay::hide_cursor(&CGDisplay::main()).map_err(CaptureError::CoreGraphics)
+ }
- match pos {
- Position::Left => {
- new_x = self.bounds.xmin + edge_offset;
- }
- Position::Right => {
- new_x = self.bounds.xmax - edge_offset;
- }
- Position::Top => {
- new_y = self.bounds.ymin + edge_offset;
- }
- Position::Bottom => {
- new_y = self.bounds.ymax - edge_offset;
- }
- }
- let new_pos = CGPoint::new(new_x, new_y);
-
- log::trace!("Resetting cursor position to: {new_x}, {new_y}");
-
- return CGDisplay::warp_mouse_cursor_position(new_pos)
- .map_err(CaptureError::WarpCursor);
- }
-
- Err(CaptureError::ResetMouseWithoutClient)
+ fn show_cursor(&self) -> Result<(), CaptureError> {
+ CGDisplay::show_cursor(&CGDisplay::main()).map_err(CaptureError::CoreGraphics)
}
async fn handle_producer_event(
@@ -145,15 +154,13 @@ impl InputCaptureState {
match producer_event {
ProducerEvent::Release => {
if self.current_pos.is_some() {
- CGDisplay::show_cursor(&CGDisplay::main())
- .map_err(CaptureError::CoreGraphics)?;
+ self.show_cursor()?;
self.current_pos = None;
}
}
ProducerEvent::Grab(pos) => {
if self.current_pos.is_none() {
- CGDisplay::hide_cursor(&CGDisplay::main())
- .map_err(CaptureError::CoreGraphics)?;
+ self.hide_cursor()?;
self.current_pos = Some(pos);
}
}
@@ -163,8 +170,7 @@ impl InputCaptureState {
ProducerEvent::Destroy(p) => {
if let Some(current) = self.current_pos {
if current == p {
- CGDisplay::show_cursor(&CGDisplay::main())
- .map_err(CaptureError::CoreGraphics)?;
+ self.show_cursor()?;
self.current_pos = None;
};
}
@@ -180,6 +186,7 @@ fn get_events(
ev_type: &CGEventType,
ev: &CGEvent,
result: &mut Vec,
+ modifier_state: &mut XMods,
) -> Result<(), CaptureError> {
fn map_pointer_event(ev: &CGEvent) -> PointerEvent {
PointerEvent::Motion {
@@ -215,29 +222,42 @@ fn get_events(
})));
}
CGEventType::FlagsChanged => {
- let mut mods = XMods::empty();
+ let mut depressed = XMods::empty();
let mut mods_locked = XMods::empty();
let cg_flags = ev.get_flags();
if cg_flags.contains(CGEventFlags::CGEventFlagShift) {
- mods |= XMods::ShiftMask;
+ depressed |= XMods::ShiftMask;
}
if cg_flags.contains(CGEventFlags::CGEventFlagControl) {
- mods |= XMods::ControlMask;
+ depressed |= XMods::ControlMask;
}
if cg_flags.contains(CGEventFlags::CGEventFlagAlternate) {
- mods |= XMods::Mod1Mask;
+ depressed |= XMods::Mod1Mask;
}
if cg_flags.contains(CGEventFlags::CGEventFlagCommand) {
- mods |= XMods::Mod4Mask;
+ depressed |= XMods::Mod4Mask;
}
if cg_flags.contains(CGEventFlags::CGEventFlagAlphaShift) {
- mods |= XMods::LockMask;
+ depressed |= XMods::LockMask;
mods_locked |= XMods::LockMask;
}
+ // check if pressed or released
+ let state = if depressed > *modifier_state { 1 } else { 0 };
+ *modifier_state = depressed;
+
+ if let Ok(key) = map_key(ev) {
+ let key_event = CaptureEvent::Input(Event::Keyboard(KeyboardEvent::Key {
+ time: 0,
+ key,
+ state,
+ }));
+ result.push(key_event);
+ }
+
let modifier_event = KeyboardEvent::Modifiers {
- depressed: mods.bits(),
+ depressed: depressed.bits(),
latched: 0,
locked: mods_locked.bits(),
group: 0,
@@ -286,35 +306,73 @@ fn get_events(
})))
}
CGEventType::OtherMouseDown => {
+ let btn_num = ev.get_integer_value_field(EventField::MOUSE_EVENT_BUTTON_NUMBER);
+ let button = match btn_num {
+ 3 => BTN_BACK,
+ 4 => BTN_FORWARD,
+ _ => BTN_MIDDLE,
+ };
result.push(CaptureEvent::Input(Event::Pointer(PointerEvent::Button {
time: 0,
- button: BTN_MIDDLE,
+ button,
state: 1,
})))
}
CGEventType::OtherMouseUp => {
+ let btn_num = ev.get_integer_value_field(EventField::MOUSE_EVENT_BUTTON_NUMBER);
+ let button = match btn_num {
+ 3 => BTN_BACK,
+ 4 => BTN_FORWARD,
+ _ => BTN_MIDDLE,
+ };
result.push(CaptureEvent::Input(Event::Pointer(PointerEvent::Button {
time: 0,
- button: BTN_MIDDLE,
+ button,
state: 0,
})))
}
CGEventType::ScrollWheel => {
- let v = ev.get_integer_value_field(EventField::SCROLL_WHEEL_EVENT_POINT_DELTA_AXIS_1);
- let h = ev.get_integer_value_field(EventField::SCROLL_WHEEL_EVENT_POINT_DELTA_AXIS_2);
- if v != 0 {
- result.push(CaptureEvent::Input(Event::Pointer(PointerEvent::Axis {
- time: 0,
- axis: 0, // Vertical
- value: v as f64,
- })));
- }
- if h != 0 {
- result.push(CaptureEvent::Input(Event::Pointer(PointerEvent::Axis {
- time: 0,
- axis: 1, // Horizontal
- value: h as f64,
- })));
+ if ev.get_integer_value_field(EventField::SCROLL_WHEEL_EVENT_IS_CONTINUOUS) != 0 {
+ let v =
+ ev.get_integer_value_field(EventField::SCROLL_WHEEL_EVENT_POINT_DELTA_AXIS_1);
+ let h =
+ ev.get_integer_value_field(EventField::SCROLL_WHEEL_EVENT_POINT_DELTA_AXIS_2);
+ if v != 0 {
+ result.push(CaptureEvent::Input(Event::Pointer(PointerEvent::Axis {
+ time: 0,
+ axis: 0, // Vertical
+ value: v as f64,
+ })));
+ }
+ if h != 0 {
+ result.push(CaptureEvent::Input(Event::Pointer(PointerEvent::Axis {
+ time: 0,
+ axis: 1, // Horizontal
+ value: h as f64,
+ })));
+ }
+ } else {
+ // line based scrolling
+ const LINES_PER_STEP: i32 = 3;
+ const V120_STEPS_PER_LINE: i32 = 120 / LINES_PER_STEP;
+ let v = ev.get_integer_value_field(EventField::SCROLL_WHEEL_EVENT_DELTA_AXIS_1);
+ let h = ev.get_integer_value_field(EventField::SCROLL_WHEEL_EVENT_DELTA_AXIS_2);
+ if v != 0 {
+ result.push(CaptureEvent::Input(Event::Pointer(
+ PointerEvent::AxisDiscrete120 {
+ axis: 0, // Vertical
+ value: V120_STEPS_PER_LINE * v as i32,
+ },
+ )));
+ }
+ if h != 0 {
+ result.push(CaptureEvent::Input(Event::Pointer(
+ PointerEvent::AxisDiscrete120 {
+ axis: 1, // Horizontal
+ value: V120_STEPS_PER_LINE * h as i32,
+ },
+ )));
+ }
}
}
_ => (),
@@ -348,7 +406,7 @@ fn create_event_tap<'a>(
move |_proxy: CGEventTapProxy, event_type: CGEventType, cg_ev: &CGEvent| {
log::trace!("Got event from tap: {event_type:?}");
let mut state = client_state.blocking_lock();
- let mut pos = None;
+ let mut capture_position = None;
let mut res_events = vec![];
if matches!(
@@ -365,22 +423,34 @@ fn create_event_tap<'a>(
// Are we in a client?
if let Some(current_pos) = state.current_pos {
- pos = Some(current_pos);
- get_events(&event_type, cg_ev, &mut res_events).unwrap_or_else(|e| {
+ capture_position = Some(current_pos);
+ get_events(
+ &event_type,
+ cg_ev,
+ &mut res_events,
+ &mut state.modifier_state,
+ )
+ .unwrap_or_else(|e| {
log::error!("Failed to get events: {e}");
});
// Keep (hidden) cursor at the edge of the screen
- if matches!(event_type, CGEventType::MouseMoved) {
- state.reset_mouse_position(cg_ev).unwrap_or_else(|e| {
- log::error!("Failed to reset mouse position: {e}");
- })
+ if matches!(
+ event_type,
+ CGEventType::MouseMoved
+ | CGEventType::LeftMouseDragged
+ | CGEventType::RightMouseDragged
+ | CGEventType::OtherMouseDragged
+ ) {
+ state.reset_cursor().unwrap_or_else(|e| log::warn!("{e}"));
}
- }
- // Did we cross a barrier?
- else if matches!(event_type, CGEventType::MouseMoved) {
+ } else if matches!(event_type, CGEventType::MouseMoved) {
+ // Did we cross a barrier?
if let Some(new_pos) = state.crossed(cg_ev) {
- pos = Some(new_pos);
+ capture_position = Some(new_pos);
+ state
+ .start_capture(cg_ev, new_pos)
+ .unwrap_or_else(|e| log::warn!("{e}"));
res_events.push(CaptureEvent::Begin);
notify_tx
.blocking_send(ProducerEvent::Grab(new_pos))
@@ -388,17 +458,19 @@ fn create_event_tap<'a>(
}
}
- if let Some(pos) = pos {
+ if let Some(pos) = capture_position {
res_events.iter().for_each(|e| {
- event_tx
- .blocking_send((pos, *e))
- .expect("Failed to send event");
+ // error must be ignored, since the event channel
+ // may already be closed when the InputCapture instance is dropped.
+ let _ = event_tx.blocking_send((pos, *e));
});
- // Returning None should stop the event from being processed
+ // Returning Drop should stop the event from being processed
// but core fundation still returns the event
cg_ev.set_type(CGEventType::Null);
+ CallbackResult::Drop
+ } else {
+ CallbackResult::Keep
}
- Some(cg_ev.to_owned())
};
let tap = CGEventTap::new(
@@ -411,7 +483,7 @@ fn create_event_tap<'a>(
.map_err(|_| MacosCaptureCreationError::EventTapCreation)?;
let tap_source: CFRunLoopSource = tap
- .mach_port
+ .mach_port()
.create_runloop_source(0)
.expect("Failed creating loop source");
@@ -426,8 +498,8 @@ fn event_tap_thread(
client_state: Arc>,
event_tx: Sender<(Position, CaptureEvent)>,
notify_tx: Sender,
- ready: std::sync::mpsc::Sender>,
- exit: oneshot::Sender>,
+ ready: std::sync::mpsc::Sender>,
+ exit: oneshot::Sender<()>,
) {
let _tap = match create_event_tap(client_state, notify_tx, event_tx) {
Err(e) => {
@@ -435,18 +507,22 @@ fn event_tap_thread(
return;
}
Ok(tap) => {
- ready.send(Ok(())).expect("channel closed");
+ let run_loop = CFRunLoop::get_current();
+ ready.send(Ok(run_loop)).expect("channel closed");
tap
}
};
+ log::debug!("running CFRunLoop...");
CFRunLoop::run_current();
+ log::debug!("event tap thread exiting!...");
- let _ = exit.send(Err("tap thread exited"));
+ let _ = exit.send(());
}
pub struct MacOSInputCapture {
event_rx: Receiver<(Position, CaptureEvent)>,
notify_tx: Sender,
+ run_loop: CFRunLoop,
}
impl MacOSInputCapture {
@@ -475,36 +551,41 @@ impl MacOSInputCapture {
});
// wait for event tap creation result
- ready_rx.recv().expect("channel closed")?;
+ let run_loop = ready_rx.recv().expect("channel closed")?;
let _tap_task: tokio::task::JoinHandle<()> = tokio::task::spawn_local(async move {
loop {
tokio::select! {
producer_event = notify_rx.recv() => {
- let producer_event = producer_event.expect("channel closed");
+ let Some(producer_event) = producer_event else {
+ break;
+ };
let mut state = state.lock().await;
state.handle_producer_event(producer_event).await.unwrap_or_else(|e| {
log::error!("Failed to handle producer event: {e}");
})
}
-
- res = &mut tap_exit_rx => {
- if let Err(e) = res.expect("channel closed") {
- log::error!("Tap thread failed: {:?}", e);
- break;
- }
- }
+ _ = &mut tap_exit_rx => break,
}
}
+ // show cursor
+ let _ = CGDisplay::show_cursor(&CGDisplay::main());
});
Ok(Self {
event_rx,
notify_tx,
+ run_loop,
})
}
}
+impl Drop for MacOSInputCapture {
+ fn drop(&mut self) {
+ self.run_loop.stop();
+ }
+}
+
#[async_trait]
impl Capture for MacOSInputCapture {
async fn create(&mut self, pos: Position) -> Result<(), CaptureError> {
@@ -579,6 +660,7 @@ unsafe fn configure_cf_settings() -> Result<(), MacosCaptureCreationError> {
let event_source = CGEventSource::new(CGEventSourceStateID::CombinedSessionState)
.map_err(|_| MacosCaptureCreationError::EventSourceCreation)?;
CGEventSourceSetLocalEventsSuppressionInterval(event_source, 0.05);
+ // FIXME Memory Leak
// This is a private settings that allows the cursor to be hidden while in the background.
// It is used by Barrier and other apps.
diff --git a/input-capture/src/windows.rs b/input-capture/src/windows.rs
index aaf5076..0d0ed7c 100644
--- a/input-capture/src/windows.rs
+++ b/input-capture/src/windows.rs
@@ -5,7 +5,7 @@ use futures::Stream;
use std::pin::Pin;
use std::task::ready;
-use tokio::sync::mpsc::{channel, Receiver};
+use tokio::sync::mpsc::{Receiver, channel};
use super::{Capture, CaptureError, CaptureEvent, Position};
diff --git a/input-capture/src/windows/event_thread.rs b/input-capture/src/windows/event_thread.rs
index 9d28d61..2a44c0f 100644
--- a/input-capture/src/windows/event_thread.rs
+++ b/input-capture/src/windows/event_thread.rs
@@ -6,33 +6,32 @@ use std::default::Default;
use std::sync::atomic::{AtomicBool, AtomicI32, Ordering};
use std::sync::{Arc, Condvar, Mutex};
use std::thread;
-use tokio::sync::mpsc::error::TrySendError;
use tokio::sync::mpsc::Sender;
-use windows::core::{w, PCWSTR};
-use windows::Win32::Foundation::{FALSE, HINSTANCE, HWND, LPARAM, LRESULT, RECT, WPARAM};
+use tokio::sync::mpsc::error::TrySendError;
+use windows::Win32::Foundation::{FALSE, HWND, LPARAM, LRESULT, RECT, WPARAM};
use windows::Win32::Graphics::Gdi::{
- EnumDisplayDevicesW, EnumDisplaySettingsW, DEVMODEW, DISPLAY_DEVICEW,
- DISPLAY_DEVICE_ATTACHED_TO_DESKTOP, ENUM_CURRENT_SETTINGS,
+ DEVMODEW, DISPLAY_DEVICE_ATTACHED_TO_DESKTOP, DISPLAY_DEVICEW, ENUM_CURRENT_SETTINGS,
+ EnumDisplayDevicesW, EnumDisplaySettingsW,
};
use windows::Win32::System::LibraryLoader::GetModuleHandleW;
use windows::Win32::System::Threading::GetCurrentThreadId;
+use windows::core::{PCWSTR, w};
use windows::Win32::UI::WindowsAndMessaging::{
- CallNextHookEx, CreateWindowExW, DispatchMessageW, GetMessageW, PostThreadMessageW,
- RegisterClassW, SetWindowsHookExW, TranslateMessage, EDD_GET_DEVICE_INTERFACE_NAME, HHOOK,
- HMENU, HOOKPROC, KBDLLHOOKSTRUCT, LLKHF_EXTENDED, MSG, MSLLHOOKSTRUCT, WH_KEYBOARD_LL,
- WH_MOUSE_LL, WINDOW_STYLE, WM_DISPLAYCHANGE, WM_KEYDOWN, WM_KEYUP, WM_LBUTTONDOWN,
- WM_LBUTTONUP, WM_MBUTTONDOWN, WM_MBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN,
- WM_RBUTTONUP, WM_SYSKEYDOWN, WM_SYSKEYUP, WM_USER, WM_XBUTTONDOWN, WM_XBUTTONUP, WNDCLASSW,
- WNDPROC,
+ CallNextHookEx, CreateWindowExW, DispatchMessageW, EDD_GET_DEVICE_INTERFACE_NAME, GetMessageW,
+ HOOKPROC, KBDLLHOOKSTRUCT, LLKHF_EXTENDED, MSG, MSLLHOOKSTRUCT, PostThreadMessageW,
+ RegisterClassW, SetWindowsHookExW, TranslateMessage, WH_KEYBOARD_LL, WH_MOUSE_LL, WINDOW_STYLE,
+ WM_DISPLAYCHANGE, WM_KEYDOWN, WM_KEYUP, WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MBUTTONDOWN,
+ WM_MBUTTONUP, WM_MOUSEHWHEEL, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN, WM_RBUTTONUP,
+ WM_SYSKEYDOWN, WM_SYSKEYUP, WM_USER, WM_XBUTTONDOWN, WM_XBUTTONUP, WNDCLASSW, WNDPROC,
};
use input_event::{
+ BTN_BACK, BTN_FORWARD, BTN_LEFT, BTN_MIDDLE, BTN_RIGHT, Event, KeyboardEvent, PointerEvent,
scancode::{self, Linux},
- Event, KeyboardEvent, PointerEvent, BTN_BACK, BTN_FORWARD, BTN_LEFT, BTN_MIDDLE, BTN_RIGHT,
};
-use super::{display_util, CaptureEvent, Position};
+use super::{CaptureEvent, Position, display_util};
pub(crate) struct EventThread {
request_buffer: Arc>>,
@@ -128,7 +127,7 @@ thread_local! {
fn get_msg() -> Option {
unsafe {
let mut msg = std::mem::zeroed();
- let ret = GetMessageW(addr_of_mut!(msg), HWND::default(), 0, 0);
+ let ret = GetMessageW(addr_of_mut!(msg), None, 0, 0);
match ret.0 {
0 => None,
x if x > 0 => Some(msg),
@@ -176,14 +175,15 @@ fn start_routine(
/* register hooks */
unsafe {
- let _ = SetWindowsHookExW(WH_MOUSE_LL, mouse_proc, HINSTANCE::default(), 0).unwrap();
- let _ = SetWindowsHookExW(WH_KEYBOARD_LL, kybrd_proc, HINSTANCE::default(), 0).unwrap();
+ let _ = SetWindowsHookExW(WH_MOUSE_LL, mouse_proc, None, 0).unwrap();
+ let _ = SetWindowsHookExW(WH_KEYBOARD_LL, kybrd_proc, None, 0).unwrap();
}
let instance = unsafe { GetModuleHandleW(None).unwrap() };
+ let instance = instance.into();
let window_class: WNDCLASSW = WNDCLASSW {
lpfnWndProc: window_proc,
- hInstance: instance.into(),
+ hInstance: instance,
lpszClassName: w!("lan-mouse-message-window-class"),
..Default::default()
};
@@ -213,9 +213,9 @@ fn start_routine(
0,
0,
0,
- HWND::default(),
- HMENU::default(),
- instance,
+ None,
+ None,
+ Some(instance),
None,
)
.expect("CreateWindowExW");
@@ -312,7 +312,7 @@ unsafe extern "system" fn mouse_proc(ncode: i32, wparam: WPARAM, lparam: LPARAM)
/* no client was active */
if !active {
- return CallNextHookEx(HHOOK::default(), ncode, wparam, lparam);
+ return CallNextHookEx(None, ncode, wparam, lparam);
}
/* get active client if any */
@@ -337,7 +337,7 @@ unsafe extern "system" fn mouse_proc(ncode: i32, wparam: WPARAM, lparam: LPARAM)
unsafe extern "system" fn kybrd_proc(ncode: i32, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
/* get active client if any */
let Some(client) = ACTIVE_CLIENT.get() else {
- return CallNextHookEx(HHOOK::default(), ncode, wparam, lparam);
+ return CallNextHookEx(None, ncode, wparam, lparam);
};
/* convert to key event */
@@ -388,7 +388,10 @@ fn enumerate_displays(display_rects: &mut Vec) {
if ret == FALSE {
break;
}
- if device.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP != 0 {
+ if device
+ .StateFlags
+ .contains(DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)
+ {
devices.push(device.DeviceName);
}
}
@@ -537,6 +540,10 @@ fn to_mouse_event(wparam: WPARAM, lparam: LPARAM) -> Option {
state: if p == WM_XBUTTONDOWN as usize { 1 } else { 0 },
})
}
+ WPARAM(p) if p == WM_MOUSEHWHEEL as usize => Some(PointerEvent::AxisDiscrete120 {
+ axis: 1, // Horizontal
+ value: mouse_low_level.mouseData as i32 >> 16,
+ }),
w => {
log::warn!("unknown mouse event: {w:?}");
None
diff --git a/input-capture/src/x11.rs b/input-capture/src/x11.rs
index 7cf5b58..6fc917e 100644
--- a/input-capture/src/x11.rs
+++ b/input-capture/src/x11.rs
@@ -3,7 +3,7 @@ use std::task::Poll;
use async_trait::async_trait;
use futures_core::Stream;
-use super::{error::X11InputCaptureCreationError, Capture, CaptureError, CaptureEvent, Position};
+use super::{Capture, CaptureError, CaptureEvent, Position, error::X11InputCaptureCreationError};
pub struct X11InputCapture {}
diff --git a/input-emulation/Cargo.toml b/input-emulation/Cargo.toml
index 0093489..e2c98b1 100644
--- a/input-emulation/Cargo.toml
+++ b/input-emulation/Cargo.toml
@@ -21,6 +21,7 @@ tokio = { version = "1.32.0", features = [
"rt",
"sync",
"signal",
+ "time"
] }
once_cell = "1.19.0"
@@ -39,18 +40,18 @@ wayland-protocols-misc = { version = "0.3.1", features = [
"client",
], optional = true }
x11 = { version = "2.21.0", features = ["xlib", "xtest"], optional = true }
-ashpd = { version = "0.10", default-features = false, features = [
+ashpd = { version = "0.11.0", default-features = false, features = [
"tokio",
], optional = true }
-reis = { version = "0.4", features = ["tokio"], optional = true }
+reis = { version = "0.5.0", features = ["tokio"], optional = true }
[target.'cfg(target_os="macos")'.dependencies]
bitflags = "2.6.0"
-core-graphics = { version = "0.24.0", features = ["highsierra"] }
-keycode = "0.4.0"
+core-graphics = { version = "0.25.0", features = ["highsierra"] }
+keycode = "1.0.0"
[target.'cfg(windows)'.dependencies]
-windows = { version = "0.58.0", features = [
+windows = { version = "0.61.2", features = [
"Win32_System_LibraryLoader",
"Win32_System_Threading",
"Win32_Foundation",
diff --git a/input-emulation/src/error.rs b/input-emulation/src/error.rs
index ae77426..078e851 100644
--- a/input-emulation/src/error.rs
+++ b/input-emulation/src/error.rs
@@ -11,15 +11,15 @@ pub enum InputEmulationError {
any(feature = "remote_desktop_portal", feature = "libei"),
not(target_os = "macos")
))]
-use ashpd::{desktop::ResponseError, Error::Response};
+use ashpd::{Error::Response, desktop::ResponseError};
use std::io;
use thiserror::Error;
#[cfg(all(unix, feature = "wlroots", not(target_os = "macos")))]
use wayland_client::{
+ ConnectError, DispatchError,
backend::WaylandError,
globals::{BindError, GlobalError},
- ConnectError, DispatchError,
};
#[derive(Debug, Error)]
diff --git a/input-emulation/src/libei.rs b/input-emulation/src/libei.rs
index 0ba0e5a..4e60c98 100644
--- a/input-emulation/src/libei.rs
+++ b/input-emulation/src/libei.rs
@@ -1,25 +1,26 @@
-use futures::{future, StreamExt};
+use futures::{StreamExt, future};
use std::{
- io,
+ env, fs, io,
os::{fd::OwnedFd, unix::net::UnixStream},
+ path::PathBuf,
sync::{
- atomic::{AtomicBool, Ordering},
Arc, Mutex, RwLock,
+ atomic::{AtomicBool, Ordering},
},
time::{SystemTime, UNIX_EPOCH},
};
use tokio::task::JoinHandle;
use ashpd::desktop::{
- remote_desktop::{DeviceType, RemoteDesktop},
PersistMode, Session,
+ remote_desktop::{DeviceType, RemoteDesktop},
};
use async_trait::async_trait;
use reis::{
ei::{
- self, button::ButtonState, handshake::ContextType, keyboard::KeyState, Button, Keyboard,
- Pointer, Scroll,
+ self, Button, Keyboard, Pointer, Scroll, button::ButtonState, handshake::ContextType,
+ keyboard::KeyState,
},
event::{self, Connection, DeviceCapability, DeviceEvent, EiEvent, SeatEvent},
tokio::EiConvertEventStream,
@@ -29,7 +30,7 @@ use input_event::{Event, KeyboardEvent, PointerEvent};
use crate::error::EmulationError;
-use super::{error::LibeiEmulationCreationError, Emulation, EmulationHandle};
+use super::{Emulation, EmulationHandle, error::LibeiEmulationCreationError};
#[derive(Clone, Default)]
struct Devices {
@@ -50,10 +51,45 @@ pub(crate) struct LibeiEmulation<'a> {
session: Session<'a, RemoteDesktop<'a>>,
}
-async fn get_ei_fd<'a>(
-) -> Result<(RemoteDesktop<'a>, Session<'a, RemoteDesktop<'a>>, OwnedFd), ashpd::Error> {
+/// Get the path to the RemoteDesktop token file
+fn get_token_file_path() -> PathBuf {
+ let cache_dir = env::var("XDG_CACHE_HOME")
+ .ok()
+ .map(PathBuf::from)
+ .unwrap_or_else(|| {
+ let home = env::var("HOME").expect("HOME not set");
+ PathBuf::from(home).join(".cache")
+ });
+
+ cache_dir.join("lan-mouse").join("remote-desktop.token")
+}
+
+/// Read the RemoteDesktop token from file
+fn read_token() -> Option {
+ let token_path = get_token_file_path();
+ match fs::read_to_string(&token_path) {
+ Ok(token) => Some(token.trim().to_string()),
+ Err(_) => None,
+ }
+}
+
+/// Write the RemoteDesktop token to file
+fn write_token(token: &str) -> io::Result<()> {
+ let token_path = get_token_file_path();
+ if let Some(parent) = token_path.parent() {
+ fs::create_dir_all(parent)?;
+ }
+
+ fs::write(&token_path, token)?;
+ Ok(())
+}
+
+async fn get_ei_fd<'a>()
+-> Result<(RemoteDesktop<'a>, Session<'a, RemoteDesktop<'a>>, OwnedFd), ashpd::Error> {
let remote_desktop = RemoteDesktop::new().await?;
+ let restore_token = read_token();
+
log::debug!("creating session ...");
let session = remote_desktop.create_session().await?;
@@ -62,13 +98,20 @@ async fn get_ei_fd<'a>(
.select_devices(
&session,
DeviceType::Keyboard | DeviceType::Pointer,
- None,
+ restore_token.as_deref(),
PersistMode::ExplicitlyRevoked,
)
.await?;
log::info!("requesting permission for input emulation");
- let _devices = remote_desktop.start(&session, None).await?.response()?;
+ let start_response = remote_desktop.start(&session, None).await?.response()?;
+
+ // The restore token is only valid once, we need to re-save it each time
+ if let Some(token_str) = start_response.restore_token() {
+ if let Err(e) = write_token(token_str) {
+ log::warn!("failed to save RemoteDesktop token: {}", e);
+ }
+ }
let fd = remote_desktop.connect_to_eis(&session).await?;
Ok((remote_desktop, session, fd))
diff --git a/input-emulation/src/macos.rs b/input-emulation/src/macos.rs
index 5ad6c53..ae5f307 100644
--- a/input-emulation/src/macos.rs
+++ b/input-emulation/src/macos.rs
@@ -1,4 +1,4 @@
-use super::{error::EmulationError, Emulation, EmulationHandle};
+use super::{Emulation, EmulationHandle, error::EmulationError};
use async_trait::async_trait;
use bitflags::bitflags;
use core_graphics::base::CGFloat;
@@ -10,53 +10,50 @@ use core_graphics::event::{
ScrollEventUnit,
};
use core_graphics::event_source::{CGEventSource, CGEventSourceStateID};
-use input_event::{scancode, Event, KeyboardEvent, PointerEvent};
+use input_event::{
+ BTN_BACK, BTN_FORWARD, BTN_LEFT, BTN_MIDDLE, BTN_RIGHT, Event, KeyboardEvent, PointerEvent,
+ scancode,
+};
use keycode::{KeyMap, KeyMapping};
use std::cell::Cell;
-use std::ops::{Index, IndexMut};
+use std::collections::HashSet;
use std::rc::Rc;
use std::sync::Arc;
-use std::time::Duration;
+use std::time::{Duration, Instant};
use tokio::{sync::Notify, task::JoinHandle};
use super::error::MacOSEmulationCreationError;
const DEFAULT_REPEAT_DELAY: Duration = Duration::from_millis(500);
const DEFAULT_REPEAT_INTERVAL: Duration = Duration::from_millis(32);
+const DOUBLE_CLICK_INTERVAL: Duration = Duration::from_millis(500);
pub(crate) struct MacOSEmulation {
+ /// global event source for all events
event_source: CGEventSource,
+ /// task handle for key repeats
repeat_task: Option>,
- button_state: ButtonState,
+ /// current state of the mouse buttons (tracked by evdev button code)
+ pressed_buttons: HashSet,
+ /// button previously pressed (evdev button code)
+ previous_button: Option,
+ /// timestamp of previous click (button down)
+ previous_button_click: Option,
+ /// click state, i.e. number of clicks in quick succession
+ button_click_state: i64,
+ /// current modifier state
modifier_state: Rc>,
+ /// notify to cancel key repeats
notify_repeat_task: Arc,
}
-struct ButtonState {
- left: bool,
- right: bool,
- center: bool,
-}
-
-impl Index for ButtonState {
- type Output = bool;
-
- fn index(&self, index: CGMouseButton) -> &Self::Output {
- match index {
- CGMouseButton::Left => &self.left,
- CGMouseButton::Right => &self.right,
- CGMouseButton::Center => &self.center,
- }
- }
-}
-
-impl IndexMut for ButtonState {
- fn index_mut(&mut self, index: CGMouseButton) -> &mut Self::Output {
- match index {
- CGMouseButton::Left => &mut self.left,
- CGMouseButton::Right => &mut self.right,
- CGMouseButton::Center => &mut self.center,
- }
+/// Maps an evdev button code to the CGEventType used for drag events.
+fn drag_event_type(button: u32) -> CGEventType {
+ match button {
+ BTN_LEFT => CGEventType::LeftMouseDragged,
+ BTN_RIGHT => CGEventType::RightMouseDragged,
+ // middle, back, forward, and any other button all use OtherMouseDragged
+ _ => CGEventType::OtherMouseDragged,
}
}
@@ -66,14 +63,12 @@ impl MacOSEmulation {
pub(crate) fn new() -> Result {
let event_source = CGEventSource::new(CGEventSourceStateID::CombinedSessionState)
.map_err(|_| MacOSEmulationCreationError::EventSourceCreation)?;
- let button_state = ButtonState {
- left: false,
- right: false,
- center: false,
- };
Ok(Self {
event_source,
- button_state,
+ pressed_buttons: HashSet::new(),
+ previous_button: None,
+ previous_button_click: None,
+ button_click_state: 0,
repeat_task: None,
notify_repeat_task: Arc::new(Notify::new()),
modifier_state: Rc::new(Cell::new(XMods::empty())),
@@ -89,6 +84,9 @@ impl MacOSEmulation {
// there can only be one repeating key and it's
// always the last to be pressed
self.cancel_repeat_task().await;
+ // initial key event
+ key_event(self.event_source.clone(), key, 1, self.modifier_state.get());
+ // repeat task
let event_source = self.event_source.clone();
let notify = self.notify_repeat_task.clone();
let modifiers = self.modifier_state.clone();
@@ -161,12 +159,12 @@ fn get_display_at_point(x: CGFloat, y: CGFloat) -> Option {
};
if error != 0 {
- log::warn!("error getting displays at point ({}, {}): {}", x, y, error);
+ log::warn!("error getting displays at point ({x}, {y}): {error}");
return Option::None;
}
if display_count == 0 {
- log::debug!("no displays found at point ({}, {})", x, y);
+ log::debug!("no displays found at point ({x}, {y})");
return Option::None;
}
@@ -224,150 +222,192 @@ impl Emulation for MacOSEmulation {
event: Event,
_handle: EmulationHandle,
) -> Result<(), EmulationError> {
+ log::trace!("{event:?}");
match event {
- Event::Pointer(pointer_event) => match pointer_event {
- PointerEvent::Motion { time: _, dx, dy } => {
- let mut mouse_location = match self.get_mouse_location() {
- Some(l) => l,
- None => {
- log::warn!("could not get mouse location!");
- return Ok(());
- }
- };
+ Event::Pointer(pointer_event) => {
+ match pointer_event {
+ PointerEvent::Motion { time: _, dx, dy } => {
+ let mut mouse_location = match self.get_mouse_location() {
+ Some(l) => l,
+ None => {
+ log::warn!("could not get mouse location!");
+ return Ok(());
+ }
+ };
- let (new_mouse_x, new_mouse_y) =
- clamp_to_screen_space(mouse_location.x, mouse_location.y, dx, dy);
+ let (new_mouse_x, new_mouse_y) =
+ clamp_to_screen_space(mouse_location.x, mouse_location.y, dx, dy);
- mouse_location.x = new_mouse_x;
- mouse_location.y = new_mouse_y;
+ mouse_location.x = new_mouse_x;
+ mouse_location.y = new_mouse_y;
- let mut event_type = CGEventType::MouseMoved;
- if self.button_state.left {
- event_type = CGEventType::LeftMouseDragged
- } else if self.button_state.right {
- event_type = CGEventType::RightMouseDragged
- } else if self.button_state.center {
- event_type = CGEventType::OtherMouseDragged
- };
- let event = match CGEvent::new_mouse_event(
- self.event_source.clone(),
- event_type,
- mouse_location,
- CGMouseButton::Left,
- ) {
- Ok(e) => e,
- Err(_) => {
- log::warn!("mouse event creation failed!");
- return Ok(());
+ // If any button is held, emit a drag event for it;
+ // otherwise emit a normal mouse-moved event.
+ let event_type = self
+ .pressed_buttons
+ .iter()
+ .next()
+ .map(|&btn| drag_event_type(btn))
+ .unwrap_or(CGEventType::MouseMoved);
+ let event = match CGEvent::new_mouse_event(
+ self.event_source.clone(),
+ event_type,
+ mouse_location,
+ CGMouseButton::Left,
+ ) {
+ Ok(e) => e,
+ Err(_) => {
+ log::warn!("mouse event creation failed!");
+ return Ok(());
+ }
+ };
+ event.set_integer_value_field(EventField::MOUSE_EVENT_DELTA_X, dx as i64);
+ event.set_integer_value_field(EventField::MOUSE_EVENT_DELTA_Y, dy as i64);
+ event.post(CGEventTapLocation::HID);
+ }
+ PointerEvent::Button {
+ time: _,
+ button,
+ state,
+ } => {
+ // button number for OtherMouse events (3 = back, 4 = forward, etc.)
+ let cg_button_number: Option = match button {
+ BTN_BACK => Some(3),
+ BTN_FORWARD => Some(4),
+ _ => None,
+ };
+ let (event_type, mouse_button) = match (button, state) {
+ (BTN_LEFT, 1) => (CGEventType::LeftMouseDown, CGMouseButton::Left),
+ (BTN_LEFT, 0) => (CGEventType::LeftMouseUp, CGMouseButton::Left),
+ (BTN_RIGHT, 1) => (CGEventType::RightMouseDown, CGMouseButton::Right),
+ (BTN_RIGHT, 0) => (CGEventType::RightMouseUp, CGMouseButton::Right),
+ (BTN_MIDDLE, 1) => (CGEventType::OtherMouseDown, CGMouseButton::Center),
+ (BTN_MIDDLE, 0) => (CGEventType::OtherMouseUp, CGMouseButton::Center),
+ (BTN_BACK, 1) | (BTN_FORWARD, 1) => {
+ (CGEventType::OtherMouseDown, CGMouseButton::Center)
+ }
+ (BTN_BACK, 0) | (BTN_FORWARD, 0) => {
+ (CGEventType::OtherMouseUp, CGMouseButton::Center)
+ }
+ _ => {
+ log::warn!("invalid button event: {button},{state}");
+ return Ok(());
+ }
+ };
+ // store button state using the evdev button code so
+ // back, forward, and middle are tracked independently
+ if state == 1 {
+ self.pressed_buttons.insert(button);
+ } else {
+ self.pressed_buttons.remove(&button);
}
- };
- event.set_integer_value_field(EventField::MOUSE_EVENT_DELTA_X, dx as i64);
- event.set_integer_value_field(EventField::MOUSE_EVENT_DELTA_Y, dy as i64);
- event.post(CGEventTapLocation::HID);
- }
- PointerEvent::Button {
- time: _,
- button,
- state,
- } => {
- let (event_type, mouse_button) = match (button, state) {
- (b, 1) if b == input_event::BTN_LEFT => {
- (CGEventType::LeftMouseDown, CGMouseButton::Left)
- }
- (b, 0) if b == input_event::BTN_LEFT => {
- (CGEventType::LeftMouseUp, CGMouseButton::Left)
- }
- (b, 1) if b == input_event::BTN_RIGHT => {
- (CGEventType::RightMouseDown, CGMouseButton::Right)
- }
- (b, 0) if b == input_event::BTN_RIGHT => {
- (CGEventType::RightMouseUp, CGMouseButton::Right)
- }
- (b, 1) if b == input_event::BTN_MIDDLE => {
- (CGEventType::OtherMouseDown, CGMouseButton::Center)
- }
- (b, 0) if b == input_event::BTN_MIDDLE => {
- (CGEventType::OtherMouseUp, CGMouseButton::Center)
- }
- _ => {
- log::warn!("invalid button event: {button},{state}");
- return Ok(());
- }
- };
- // store button state
- self.button_state[mouse_button] = state == 1;
- let location = self.get_mouse_location().unwrap();
- let event = match CGEvent::new_mouse_event(
- self.event_source.clone(),
- event_type,
- location,
- mouse_button,
- ) {
- Ok(e) => e,
- Err(()) => {
- log::warn!("mouse event creation failed!");
- return Ok(());
+ // update double-click tracking using the evdev button
+ // code so that back/forward don't alias with middle
+ if state == 1 {
+ if self.previous_button == Some(button)
+ && self
+ .previous_button_click
+ .is_some_and(|i| i.elapsed() < DOUBLE_CLICK_INTERVAL)
+ {
+ self.button_click_state += 1;
+ } else {
+ self.button_click_state = 1;
+ }
+ self.previous_button = Some(button);
+ self.previous_button_click = Some(Instant::now());
}
- };
- event.post(CGEventTapLocation::HID);
+
+ log::debug!("click_state: {}", self.button_click_state);
+ let location = self.get_mouse_location().unwrap();
+ let event = match CGEvent::new_mouse_event(
+ self.event_source.clone(),
+ event_type,
+ location,
+ mouse_button,
+ ) {
+ Ok(e) => e,
+ Err(()) => {
+ log::warn!("mouse event creation failed!");
+ return Ok(());
+ }
+ };
+ event.set_integer_value_field(
+ EventField::MOUSE_EVENT_CLICK_STATE,
+ self.button_click_state,
+ );
+ // Set the button number for extra buttons (back=3, forward=4)
+ if let Some(btn_num) = cg_button_number {
+ event.set_integer_value_field(
+ EventField::MOUSE_EVENT_BUTTON_NUMBER,
+ btn_num,
+ );
+ }
+ event.post(CGEventTapLocation::HID);
+ }
+ PointerEvent::Axis {
+ time: _,
+ axis,
+ value,
+ } => {
+ let value = value as i32;
+ let (count, wheel1, wheel2, wheel3) = match axis {
+ 0 => (1, value, 0, 0), // 0 = vertical => 1 scroll wheel device (y axis)
+ 1 => (2, 0, value, 0), // 1 = horizontal => 2 scroll wheel devices (y, x) -> (0, x)
+ _ => {
+ log::warn!("invalid scroll event: {axis}, {value}");
+ return Ok(());
+ }
+ };
+ let event = match CGEvent::new_scroll_event(
+ self.event_source.clone(),
+ ScrollEventUnit::PIXEL,
+ count,
+ wheel1,
+ wheel2,
+ wheel3,
+ ) {
+ Ok(e) => e,
+ Err(()) => {
+ log::warn!("scroll event creation failed!");
+ return Ok(());
+ }
+ };
+ event.post(CGEventTapLocation::HID);
+ }
+ PointerEvent::AxisDiscrete120 { axis, value } => {
+ const LINES_PER_STEP: i32 = 3;
+ let (count, wheel1, wheel2, wheel3) = match axis {
+ 0 => (1, value / (120 / LINES_PER_STEP), 0, 0), // 0 = vertical => 1 scroll wheel device (y axis)
+ 1 => (2, 0, value / (120 / LINES_PER_STEP), 0), // 1 = horizontal => 2 scroll wheel devices (y, x) -> (0, x)
+ _ => {
+ log::warn!("invalid scroll event: {axis}, {value}");
+ return Ok(());
+ }
+ };
+ let event = match CGEvent::new_scroll_event(
+ self.event_source.clone(),
+ ScrollEventUnit::LINE,
+ count,
+ wheel1,
+ wheel2,
+ wheel3,
+ ) {
+ Ok(e) => e,
+ Err(()) => {
+ log::warn!("scroll event creation failed!");
+ return Ok(());
+ }
+ };
+ event.post(CGEventTapLocation::HID);
+ }
}
- PointerEvent::Axis {
- time: _,
- axis,
- value,
- } => {
- let value = value as i32;
- let (count, wheel1, wheel2, wheel3) = match axis {
- 0 => (1, value, 0, 0), // 0 = vertical => 1 scroll wheel device (y axis)
- 1 => (2, 0, value, 0), // 1 = horizontal => 2 scroll wheel devices (y, x) -> (0, x)
- _ => {
- log::warn!("invalid scroll event: {axis}, {value}");
- return Ok(());
- }
- };
- let event = match CGEvent::new_scroll_event(
- self.event_source.clone(),
- ScrollEventUnit::PIXEL,
- count,
- wheel1,
- wheel2,
- wheel3,
- ) {
- Ok(e) => e,
- Err(()) => {
- log::warn!("scroll event creation failed!");
- return Ok(());
- }
- };
- event.post(CGEventTapLocation::HID);
+
+ // reset button click state in case it's not a button event
+ if !matches!(pointer_event, PointerEvent::Button { .. }) {
+ self.button_click_state = 0;
}
- PointerEvent::AxisDiscrete120 { axis, value } => {
- let (count, wheel1, wheel2, wheel3) = match axis {
- 0 => (1, value, 0, 0), // 0 = vertical => 1 scroll wheel device (y axis)
- 1 => (2, 0, value, 0), // 1 = horizontal => 2 scroll wheel devices (y, x) -> (0, x)
- _ => {
- log::warn!("invalid scroll event: {axis}, {value}");
- return Ok(());
- }
- };
- let event = match CGEvent::new_scroll_event(
- self.event_source.clone(),
- ScrollEventUnit::PIXEL,
- count,
- wheel1,
- wheel2,
- wheel3,
- ) {
- Ok(e) => e,
- Err(()) => {
- log::warn!("scroll event creation failed!");
- return Ok(());
- }
- };
- event.post(CGEventTapLocation::HID);
- }
- },
+ }
Event::Keyboard(keyboard_event) => match keyboard_event {
KeyboardEvent::Key {
time: _,
@@ -381,18 +421,15 @@ impl Emulation for MacOSEmulation {
return Ok(());
}
};
+ let is_modifier = update_modifiers(&self.modifier_state, key, state);
+ if is_modifier {
+ modifier_event(self.event_source.clone(), self.modifier_state.get());
+ }
match state {
// pressed
1 => self.spawn_repeat_task(code).await,
_ => self.cancel_repeat_task().await,
}
- update_modifiers(&self.modifier_state, key, state);
- key_event(
- self.event_source.clone(),
- code,
- state,
- self.modifier_state.get(),
- );
}
KeyboardEvent::Modifiers {
depressed,
diff --git a/input-emulation/src/windows.rs b/input-emulation/src/windows.rs
index 3d0eacd..6610ec2 100644
--- a/input-emulation/src/windows.rs
+++ b/input-emulation/src/windows.rs
@@ -1,22 +1,22 @@
use super::error::{EmulationError, WindowsEmulationCreationError};
use input_event::{
- scancode, Event, KeyboardEvent, PointerEvent, BTN_BACK, BTN_FORWARD, BTN_LEFT, BTN_MIDDLE,
- BTN_RIGHT,
+ BTN_BACK, BTN_FORWARD, BTN_LEFT, BTN_MIDDLE, BTN_RIGHT, Event, KeyboardEvent, PointerEvent,
+ scancode,
};
use async_trait::async_trait;
use std::ops::BitOrAssign;
use std::time::Duration;
use tokio::task::AbortHandle;
-use windows::Win32::UI::Input::KeyboardAndMouse::{
- SendInput, INPUT_0, KEYEVENTF_EXTENDEDKEY, MOUSEEVENTF_XDOWN, MOUSEEVENTF_XUP,
-};
use windows::Win32::UI::Input::KeyboardAndMouse::{
INPUT, INPUT_KEYBOARD, INPUT_MOUSE, KEYBDINPUT, KEYEVENTF_KEYUP, KEYEVENTF_SCANCODE,
MOUSEEVENTF_HWHEEL, MOUSEEVENTF_LEFTDOWN, MOUSEEVENTF_LEFTUP, MOUSEEVENTF_MIDDLEDOWN,
MOUSEEVENTF_MIDDLEUP, MOUSEEVENTF_MOVE, MOUSEEVENTF_RIGHTDOWN, MOUSEEVENTF_RIGHTUP,
MOUSEEVENTF_WHEEL, MOUSEINPUT,
};
+use windows::Win32::UI::Input::KeyboardAndMouse::{
+ INPUT_0, KEYEVENTF_EXTENDEDKEY, MOUSEEVENTF_XDOWN, MOUSEEVENTF_XUP, SendInput,
+};
use windows::Win32::UI::WindowsAndMessaging::{XBUTTON1, XBUTTON2};
use super::{Emulation, EmulationHandle};
diff --git a/input-emulation/src/wlroots.rs b/input-emulation/src/wlroots.rs
index a36c7a1..f79f8d9 100644
--- a/input-emulation/src/wlroots.rs
+++ b/input-emulation/src/wlroots.rs
@@ -1,6 +1,6 @@
use crate::error::EmulationError;
-use super::{error::WlrootsEmulationCreationError, Emulation};
+use super::{Emulation, error::WlrootsEmulationCreationError};
use async_trait::async_trait;
use bitflags::bitflags;
use std::collections::HashMap;
@@ -8,11 +8,11 @@ use std::io;
use std::os::fd::{AsFd, OwnedFd};
use std::sync::{Arc, Mutex};
use std::time::{SystemTime, UNIX_EPOCH};
-use wayland_client::backend::WaylandError;
use wayland_client::WEnum;
+use wayland_client::backend::WaylandError;
use wayland_client::protocol::wl_keyboard::{self, WlKeyboard};
-use wayland_client::protocol::wl_pointer::{Axis, ButtonState};
+use wayland_client::protocol::wl_pointer::{Axis, AxisSource, ButtonState};
use wayland_client::protocol::wl_seat::WlSeat;
use wayland_protocols_wlr::virtual_pointer::v1::client::{
zwlr_virtual_pointer_manager_v1::ZwlrVirtualPointerManagerV1 as VpManager,
@@ -25,16 +25,15 @@ use wayland_protocols_misc::zwp_virtual_keyboard_v1::client::{
};
use wayland_client::{
- delegate_noop,
- globals::{registry_queue_init, GlobalListContents},
+ Connection, Dispatch, EventQueue, QueueHandle, delegate_noop,
+ globals::{GlobalListContents, registry_queue_init},
protocol::{wl_registry, wl_seat},
- Connection, Dispatch, EventQueue, QueueHandle,
};
-use input_event::{scancode, Event, KeyboardEvent, PointerEvent};
+use input_event::{Event, KeyboardEvent, PointerEvent, scancode};
-use super::error::WaylandBindError;
use super::EmulationHandle;
+use super::error::WaylandBindError;
struct State {
keymap: Option<(u32, OwnedFd, u32)>,
@@ -163,13 +162,13 @@ impl Emulation for WlrootsEmulation {
async fn create(&mut self, handle: EmulationHandle) {
self.state.add_client(handle);
if let Err(e) = self.queue.flush() {
- log::error!("{}", e);
+ log::error!("{e}");
}
}
async fn destroy(&mut self, handle: EmulationHandle) {
self.state.destroy_client(handle);
if let Err(e) = self.queue.flush() {
- log::error!("{}", e);
+ log::error!("{e}");
}
}
async fn terminate(&mut self) {
@@ -210,7 +209,8 @@ impl VirtualInput {
PointerEvent::AxisDiscrete120 { axis, value } => {
let axis: Axis = (axis as u32).try_into()?;
self.pointer
- .axis_discrete(now, axis, value as f64 / 6., value / 120);
+ .axis_discrete(now, axis, value as f64 / 8., value / 120);
+ self.pointer.axis_source(AxisSource::Wheel);
self.pointer.frame();
}
}
@@ -221,7 +221,7 @@ impl VirtualInput {
self.keyboard.key(time, key, state as u32);
if let Ok(mut mods) = self.modifiers.lock() {
if mods.update_by_key_event(key, state) {
- log::trace!("Key triggers modifier change: {:?}", mods);
+ log::trace!("Key triggers modifier change: {mods:?}");
self.keyboard.modifiers(
mods.mask_pressed().bits(),
0,
@@ -330,7 +330,7 @@ impl XMods {
fn update_by_key_event(&mut self, key: u32, state: u8) -> bool {
if let Ok(key) = scancode::Linux::try_from(key) {
- log::trace!("Attempting to process modifier from: {:#?}", key);
+ log::trace!("Attempting to process modifier from: {key:#?}");
let pressed_mask = match key {
scancode::Linux::KeyLeftShift | scancode::Linux::KeyRightShift => XMods::ShiftMask,
scancode::Linux::KeyLeftCtrl | scancode::Linux::KeyRightCtrl => XMods::ControlMask,
@@ -348,7 +348,7 @@ impl XMods {
// unchanged
if pressed_mask.is_empty() && locked_mask.is_empty() {
- log::trace!("{:#?} is not a modifier key", key);
+ log::trace!("{key:#?} is not a modifier key");
return false;
}
match state {
diff --git a/input-emulation/src/x11.rs b/input-emulation/src/x11.rs
index b7e1c73..aadca29 100644
--- a/input-emulation/src/x11.rs
+++ b/input-emulation/src/x11.rs
@@ -6,12 +6,12 @@ use x11::{
};
use input_event::{
- Event, KeyboardEvent, PointerEvent, BTN_BACK, BTN_FORWARD, BTN_LEFT, BTN_MIDDLE, BTN_RIGHT,
+ BTN_BACK, BTN_FORWARD, BTN_LEFT, BTN_MIDDLE, BTN_RIGHT, Event, KeyboardEvent, PointerEvent,
};
use crate::error::EmulationError;
-use super::{error::X11EmulationCreationError, Emulation, EmulationHandle};
+use super::{Emulation, EmulationHandle, error::X11EmulationCreationError};
pub(crate) struct X11Emulation {
display: *mut xlib::Display,
@@ -23,7 +23,7 @@ impl X11Emulation {
pub(crate) fn new() -> Result {
let display = unsafe {
match xlib::XOpenDisplay(ptr::null()) {
- d if d == ptr::null::() as *mut xlib::Display => {
+ d if std::ptr::eq(d, ptr::null_mut::()) => {
Err(X11EmulationCreationError::OpenDisplay)
}
display => Ok(display),
diff --git a/input-emulation/src/xdg_desktop_portal.rs b/input-emulation/src/xdg_desktop_portal.rs
index 4bf379b..37d2974 100644
--- a/input-emulation/src/xdg_desktop_portal.rs
+++ b/input-emulation/src/xdg_desktop_portal.rs
@@ -1,7 +1,7 @@
use ashpd::{
desktop::{
- remote_desktop::{Axis, DeviceType, KeyState, RemoteDesktop},
PersistMode, Session,
+ remote_desktop::{Axis, DeviceType, KeyState, RemoteDesktop},
},
zbus::AsyncDrop,
};
@@ -15,7 +15,7 @@ use input_event::{
use crate::error::EmulationError;
-use super::{error::XdpEmulationCreationError, Emulation, EmulationHandle};
+use super::{Emulation, EmulationHandle, error::XdpEmulationCreationError};
pub(crate) struct DesktopPortalEmulation<'a> {
proxy: RemoteDesktop<'a>,
@@ -143,7 +143,6 @@ impl Emulation for DesktopPortalEmulation<'_> {
impl AsyncDrop for DesktopPortalEmulation<'_> {
#[doc = r" Perform the async cleanup."]
- #[must_use]
#[allow(clippy::type_complexity, clippy::type_repetition_in_bounds)]
fn async_drop<'async_trait>(
self,
diff --git a/input-event/Cargo.toml b/input-event/Cargo.toml
index 7c903b6..9611bff 100644
--- a/input-event/Cargo.toml
+++ b/input-event/Cargo.toml
@@ -14,7 +14,7 @@ serde = { version = "1.0", features = ["derive"] }
thiserror = "2.0.0"
[target.'cfg(all(unix, not(target_os="macos")))'.dependencies]
-reis = { version = "0.4", optional = true }
+reis = { version = "0.5.0", optional = true }
[features]
default = ["libei"]
diff --git a/input-event/src/lib.rs b/input-event/src/lib.rs
index 713c840..1d8c9ff 100644
--- a/input-event/src/lib.rs
+++ b/input-event/src/lib.rs
@@ -112,8 +112,8 @@ impl Display for KeyboardEvent {
impl Display for Event {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
- Event::Pointer(p) => write!(f, "{}", p),
- Event::Keyboard(k) => write!(f, "{}", k),
+ Event::Pointer(p) => write!(f, "{p}"),
+ Event::Keyboard(k) => write!(f, "{k}"),
}
}
}
diff --git a/lan-mouse-cli/src/lib.rs b/lan-mouse-cli/src/lib.rs
index dda74a8..884e928 100644
--- a/lan-mouse-cli/src/lib.rs
+++ b/lan-mouse-cli/src/lib.rs
@@ -5,8 +5,8 @@ use std::{net::IpAddr, time::Duration};
use thiserror::Error;
use lan_mouse_ipc::{
- connect_async, ClientHandle, ConnectionError, FrontendEvent, FrontendRequest, IpcError,
- Position,
+ ClientHandle, ConnectionError, FrontendEvent, FrontendRequest, IpcError, Position,
+ connect_async,
};
#[derive(Debug, Error)]
@@ -71,6 +71,8 @@ enum CliSubcommand {
},
/// deauthorize a public key
RemoveAuthorizedKey { sha256_fingerprint: String },
+ /// save configuration to file
+ SaveConfig,
}
pub async fn run(args: CliArgs) -> Result<(), CliError> {
@@ -162,6 +164,7 @@ async fn execute(cmd: CliSubcommand) -> Result<(), CliError> {
tx.request(FrontendRequest::RemoveAuthorizedKey(sha256_fingerprint))
.await?
}
+ CliSubcommand::SaveConfig => tx.request(FrontendRequest::SaveConfiguration).await?,
}
Ok(())
}
diff --git a/lan-mouse-gtk/resources/authorization_window.ui b/lan-mouse-gtk/resources/authorization_window.ui
new file mode 100644
index 0000000..49f0c26
--- /dev/null
+++ b/lan-mouse-gtk/resources/authorization_window.ui
@@ -0,0 +1,102 @@
+
+
+
+
+
+ True
+ 180
+ 180
+ 180
+ 180
+ Unauthorized Device
+
+
+
+
+
diff --git a/lan-mouse-gtk/resources/resources.gresource.xml b/lan-mouse-gtk/resources/resources.gresource.xml
index 2a6812f..c94be6b 100644
--- a/lan-mouse-gtk/resources/resources.gresource.xml
+++ b/lan-mouse-gtk/resources/resources.gresource.xml
@@ -2,6 +2,7 @@
window.ui
+ authorization_window.ui
fingerprint_window.ui
client_row.ui
key_row.ui
diff --git a/lan-mouse-gtk/src/authorization_window.rs b/lan-mouse-gtk/src/authorization_window.rs
new file mode 100644
index 0000000..1e1a026
--- /dev/null
+++ b/lan-mouse-gtk/src/authorization_window.rs
@@ -0,0 +1,19 @@
+mod imp;
+
+use glib::Object;
+use gtk::{gio, glib, subclass::prelude::ObjectSubclassIsExt};
+
+glib::wrapper! {
+ pub struct AuthorizationWindow(ObjectSubclass)
+ @extends adw::Window, gtk::Window, gtk::Widget,
+ @implements gio::ActionGroup, gio::ActionMap, gtk::Accessible, gtk::Buildable,
+ gtk::ConstraintTarget, gtk::Native, gtk::Root, gtk::ShortcutManager;
+}
+
+impl AuthorizationWindow {
+ pub(crate) fn new(fingerprint: &str) -> Self {
+ let window: Self = Object::builder().build();
+ window.imp().set_fingerprint(fingerprint);
+ window
+ }
+}
diff --git a/lan-mouse-gtk/src/authorization_window/imp.rs b/lan-mouse-gtk/src/authorization_window/imp.rs
new file mode 100644
index 0000000..69b1504
--- /dev/null
+++ b/lan-mouse-gtk/src/authorization_window/imp.rs
@@ -0,0 +1,76 @@
+use std::sync::OnceLock;
+
+use adw::prelude::*;
+use adw::subclass::prelude::*;
+use glib::subclass::InitializingObject;
+use gtk::{
+ Button, CompositeTemplate, Label,
+ glib::{self, subclass::Signal},
+ template_callbacks,
+};
+
+#[derive(CompositeTemplate, Default)]
+#[template(resource = "/de/feschber/LanMouse/authorization_window.ui")]
+pub struct AuthorizationWindow {
+ #[template_child]
+ pub fingerprint: TemplateChild |