├── .editorconfig
├── .eslintrc.cjs
├── .gitattributes
├── .github
└── workflows
│ └── main.yml
├── .gitignore
├── .vscode
└── extensions.json
├── README.md
├── index.html
├── package-lock.json
├── package.json
├── preview.png
├── public
└── favicon.svg
├── src-tauri
├── .gitignore
├── Cargo.lock
├── Cargo.toml
├── build.rs
├── checker-library
│ ├── Cargo.toml
│ └── src
│ │ ├── error.rs
│ │ └── lib.rs
├── icons
│ ├── 128x128.png
│ ├── 128x128@2x.png
│ ├── 32x32.png
│ ├── Square107x107Logo.png
│ ├── Square142x142Logo.png
│ ├── Square150x150Logo.png
│ ├── Square284x284Logo.png
│ ├── Square30x30Logo.png
│ ├── Square310x310Logo.png
│ ├── Square44x44Logo.png
│ ├── Square71x71Logo.png
│ ├── Square89x89Logo.png
│ ├── StoreLogo.png
│ ├── icon.icns
│ ├── icon.ico
│ └── icon.png
├── src
│ └── main.rs
└── tauri.conf.json
├── src
├── App.tsx
├── assets
│ ├── dark-bg.jpg
│ └── light-bg.jpg
├── components
│ ├── CheckButton.tsx
│ ├── DefaultProtocolSelect.tsx
│ ├── DownloadButton.tsx
│ ├── FileSelect.tsx
│ ├── Log.tsx
│ ├── Logs.tsx
│ ├── PatternInput.tsx
│ ├── ProxiesCard.tsx
│ ├── SettingsModal.tsx
│ ├── Shell.tsx
│ ├── Stats.tsx
│ ├── ThreadsInput.tsx
│ ├── TimeoutInput.tsx
│ ├── UrlInput.tsx
│ └── Wrapper.tsx
├── context
│ └── ProxiesContext.tsx
├── hooks
│ ├── useFileSelect.ts
│ └── useLogs.ts
├── main.tsx
├── store
│ └── settings.ts
└── vite-env.d.ts
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | end_of_line = lf
5 | insert_final_newline = true
6 | trim_trailing_whitespace = true
7 |
8 | [*.{js,ts,json,yml}]
9 | charset = utf-8
10 | indent_style = space
11 | indent_size = 2
12 |
13 | [*.md]
14 | trim_trailing_whitespace = false
15 |
--------------------------------------------------------------------------------
/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | plugins: ['@typescript-eslint'],
4 | extends: [
5 | 'airbnb',
6 | 'airbnb-typescript',
7 | 'airbnb/hooks',
8 | 'plugin:@typescript-eslint/recommended',
9 | 'plugin:@typescript-eslint/recommended-requiring-type-checking',
10 | ],
11 | env: {
12 | node: true,
13 | browser: true,
14 | },
15 | parser: '@typescript-eslint/parser',
16 | parserOptions: {
17 | project: './tsconfig.json',
18 | },
19 | rules: {
20 | 'no-console': 'warn',
21 | 'arrow-parens': ['error', 'as-needed'],
22 | 'react/react-in-jsx-scope': 'off',
23 | 'import/no-extraneous-dependencies': ['error', { devDependencies: true }],
24 | 'max-len': 'off',
25 | '@typescript-eslint/no-misused-promises': ['error', {
26 | checksVoidReturn: {
27 | attributes: false,
28 | },
29 | }],
30 | 'object-curly-newline': ['error', {
31 | ObjectExpression: { consistent: true, multiline: true },
32 | ObjectPattern: { consistent: true, multiline: true },
33 | ImportDeclaration: 'never',
34 | ExportDeclaration: { multiline: true, minProperties: 3 },
35 | }],
36 | },
37 | };
38 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
2 |
--------------------------------------------------------------------------------
/.github/workflows/main.yml:
--------------------------------------------------------------------------------
1 | name: Release
2 | on:
3 | push:
4 | tags:
5 | - 'v*'
6 | workflow_dispatch:
7 |
8 | jobs:
9 | release:
10 | permissions:
11 | contents: write
12 | strategy:
13 | fail-fast: false
14 | matrix:
15 | platform: [macos-latest, ubuntu-20.04, windows-latest]
16 | runs-on: ${{ matrix.platform }}
17 | steps:
18 | - name: Checkout repository
19 | uses: actions/checkout@v3
20 |
21 | - name: Install dependencies (ubuntu only)
22 | if: matrix.platform == 'ubuntu-20.04'
23 | run: |
24 | sudo apt-get update
25 | sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev librsvg2-dev
26 |
27 | - name: Rust setup
28 | uses: dtolnay/rust-toolchain@stable
29 |
30 | - name: Rust cache
31 | uses: swatinem/rust-cache@v2
32 | with:
33 | workspaces: './src-tauri -> target'
34 |
35 | - name: Sync node version and setup cache
36 | uses: actions/setup-node@v3
37 | with:
38 | node-version: 'lts/*'
39 | cache: 'npm'
40 |
41 | - name: Install app dependencies and build web
42 | run: npm i
43 |
44 | - name: Build the app
45 | uses: tauri-apps/tauri-action@v0
46 |
47 | env:
48 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
49 | with:
50 | tagName: ${{ github.ref_name }}
51 | releaseName: 'v__VERSION__'
52 | releaseBody: 'See the assets to download and install this version.'
53 | releaseDraft: true
54 | prerelease: false
55 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"]
3 | }
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ProxyChecker
2 |
3 | 
4 |
5 | A lightweight, customizable and user-friendly proxy checker built with [Tauri](https://tauri.app/) + [React](https://reactjs.org/) + [TypeScript](https://www.typescriptlang.org/). And just as importantly, you'll find an anime girl in the background, which adds a touch of personality to the app and makes your work less boring.
6 |
7 | ## Features
8 |
9 | - Supports any proxy patterns with any separators (e.g. `ip:port`, `ip:port@login:password`, etc.)
10 | - Customizable settings for proxy pattern (described above), default protocol, request url, timeout and threads
11 | - Beautiful logs, saving settings to a file, themes, and more (actually, that's all for now)
12 |
13 | ## Usage
14 |
15 | 1. Select a file containing your proxies
16 | 2. Utilize the settings to change the pattern, default protocol, request url, timeout and threads
17 | 3. Check your proxies with ease!
18 |
19 | ## Release
20 |
21 | You can download the latest version of the application on Windows, MacOS, or Ubuntu 20.04 in the [**releases**](https://github.com/quertc/ProxyChecker/releases) section of this repository.
22 |
23 | ## Note
24 |
25 | Very rarely, for some unknown reason, Windows Defender may block an application by seeing a virus in it. This is obviously a false positive (there are several [issues](https://github.com/tauri-apps/tauri/issues) in the tauri repository from other people on this random problem). If this happens, just ignore it and add it to Windows Defender exceptions, or run the application in an isolated environment if you want.
26 |
27 | If anyone knows how to get rid of this, create a new issue. Thanks!
28 |
29 | ## TODO
30 |
31 | - Improve error handling on the frontend
32 | - Handle errors when unwrapping mutexes
33 | - Improve performance and optimize the app
34 | - Add a selection of different delimiters in the file (not just \n)
35 | - Add the ability to drag and drop a file
36 | - Add wallpaper saving to cache
37 | - Refactor small things (comments)
38 |
39 | ## Recommended IDE Setup for development
40 |
41 | - [VS Code](https://code.visualstudio.com/) + [Tauri](https://marketplace.visualstudio.com/items?itemName=tauri-apps.tauri-vscode) + [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer)
42 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Proxy Checker
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "proxy-checker",
3 | "private": true,
4 | "version": "0.1.1",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "tsc && vite build",
9 | "preview": "vite preview",
10 | "tauri": "tauri"
11 | },
12 | "dependencies": {
13 | "@emotion/react": "^11.10.5",
14 | "@mantine/core": "^5.10.2",
15 | "@mantine/hooks": "^5.10.2",
16 | "@tabler/icons-react": "^2.1.2",
17 | "@tauri-apps/api": "^1.2.0",
18 | "react": "^18.2.0",
19 | "react-dom": "^18.2.0",
20 | "tauri-plugin-store-api": "github:tauri-apps/tauri-plugin-store"
21 | },
22 | "devDependencies": {
23 | "@tauri-apps/cli": "^1.2.2",
24 | "@types/node": "^18.7.10",
25 | "@types/react": "^18.0.15",
26 | "@types/react-dom": "^18.0.6",
27 | "@typescript-eslint/eslint-plugin": "^5.49.0",
28 | "@typescript-eslint/parser": "^5.49.0",
29 | "@vitejs/plugin-react": "^3.0.0",
30 | "eslint": "^8.33.0",
31 | "eslint-config-airbnb": "^19.0.4",
32 | "eslint-config-airbnb-typescript": "^17.0.0",
33 | "eslint-plugin-import": "^2.27.5",
34 | "eslint-plugin-jsx-a11y": "^6.7.1",
35 | "eslint-plugin-react": "^7.32.2",
36 | "eslint-plugin-react-hooks": "^4.6.0",
37 | "typescript": "^4.6.4",
38 | "vite": "^4.0.0"
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/preview.png
--------------------------------------------------------------------------------
/public/favicon.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src-tauri/.gitignore:
--------------------------------------------------------------------------------
1 | # Generated by Cargo
2 | # will have compiled files and executables
3 | /target/
4 |
--------------------------------------------------------------------------------
/src-tauri/Cargo.lock:
--------------------------------------------------------------------------------
1 | # This file is automatically @generated by Cargo.
2 | # It is not intended for manual editing.
3 | version = 3
4 |
5 | [[package]]
6 | name = "adler"
7 | version = "1.0.2"
8 | source = "registry+https://github.com/rust-lang/crates.io-index"
9 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
10 |
11 | [[package]]
12 | name = "aho-corasick"
13 | version = "0.7.20"
14 | source = "registry+https://github.com/rust-lang/crates.io-index"
15 | checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
16 | dependencies = [
17 | "memchr",
18 | ]
19 |
20 | [[package]]
21 | name = "alloc-no-stdlib"
22 | version = "2.0.4"
23 | source = "registry+https://github.com/rust-lang/crates.io-index"
24 | checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
25 |
26 | [[package]]
27 | name = "alloc-stdlib"
28 | version = "0.2.2"
29 | source = "registry+https://github.com/rust-lang/crates.io-index"
30 | checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
31 | dependencies = [
32 | "alloc-no-stdlib",
33 | ]
34 |
35 | [[package]]
36 | name = "anyhow"
37 | version = "1.0.68"
38 | source = "registry+https://github.com/rust-lang/crates.io-index"
39 | checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61"
40 |
41 | [[package]]
42 | name = "atk"
43 | version = "0.15.1"
44 | source = "registry+https://github.com/rust-lang/crates.io-index"
45 | checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd"
46 | dependencies = [
47 | "atk-sys",
48 | "bitflags 1.3.2",
49 | "glib",
50 | "libc",
51 | ]
52 |
53 | [[package]]
54 | name = "atk-sys"
55 | version = "0.15.1"
56 | source = "registry+https://github.com/rust-lang/crates.io-index"
57 | checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6"
58 | dependencies = [
59 | "glib-sys",
60 | "gobject-sys",
61 | "libc",
62 | "system-deps 6.0.3",
63 | ]
64 |
65 | [[package]]
66 | name = "autocfg"
67 | version = "1.1.0"
68 | source = "registry+https://github.com/rust-lang/crates.io-index"
69 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
70 |
71 | [[package]]
72 | name = "base64"
73 | version = "0.13.1"
74 | source = "registry+https://github.com/rust-lang/crates.io-index"
75 | checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
76 |
77 | [[package]]
78 | name = "base64"
79 | version = "0.21.0"
80 | source = "registry+https://github.com/rust-lang/crates.io-index"
81 | checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
82 |
83 | [[package]]
84 | name = "bitflags"
85 | version = "1.3.2"
86 | source = "registry+https://github.com/rust-lang/crates.io-index"
87 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
88 |
89 | [[package]]
90 | name = "bitflags"
91 | version = "2.6.0"
92 | source = "registry+https://github.com/rust-lang/crates.io-index"
93 | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
94 |
95 | [[package]]
96 | name = "block"
97 | version = "0.1.6"
98 | source = "registry+https://github.com/rust-lang/crates.io-index"
99 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
100 |
101 | [[package]]
102 | name = "block-buffer"
103 | version = "0.10.3"
104 | source = "registry+https://github.com/rust-lang/crates.io-index"
105 | checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
106 | dependencies = [
107 | "generic-array",
108 | ]
109 |
110 | [[package]]
111 | name = "brotli"
112 | version = "3.3.4"
113 | source = "registry+https://github.com/rust-lang/crates.io-index"
114 | checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
115 | dependencies = [
116 | "alloc-no-stdlib",
117 | "alloc-stdlib",
118 | "brotli-decompressor",
119 | ]
120 |
121 | [[package]]
122 | name = "brotli-decompressor"
123 | version = "2.3.4"
124 | source = "registry+https://github.com/rust-lang/crates.io-index"
125 | checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744"
126 | dependencies = [
127 | "alloc-no-stdlib",
128 | "alloc-stdlib",
129 | ]
130 |
131 | [[package]]
132 | name = "bstr"
133 | version = "1.1.0"
134 | source = "registry+https://github.com/rust-lang/crates.io-index"
135 | checksum = "b45ea9b00a7b3f2988e9a65ad3917e62123c38dba709b666506207be96d1790b"
136 | dependencies = [
137 | "memchr",
138 | "serde",
139 | ]
140 |
141 | [[package]]
142 | name = "bumpalo"
143 | version = "3.12.0"
144 | source = "registry+https://github.com/rust-lang/crates.io-index"
145 | checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
146 |
147 | [[package]]
148 | name = "bytemuck"
149 | version = "1.13.0"
150 | source = "registry+https://github.com/rust-lang/crates.io-index"
151 | checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393"
152 |
153 | [[package]]
154 | name = "byteorder"
155 | version = "1.4.3"
156 | source = "registry+https://github.com/rust-lang/crates.io-index"
157 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
158 |
159 | [[package]]
160 | name = "bytes"
161 | version = "1.3.0"
162 | source = "registry+https://github.com/rust-lang/crates.io-index"
163 | checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c"
164 |
165 | [[package]]
166 | name = "cairo-rs"
167 | version = "0.15.12"
168 | source = "registry+https://github.com/rust-lang/crates.io-index"
169 | checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc"
170 | dependencies = [
171 | "bitflags 1.3.2",
172 | "cairo-sys-rs",
173 | "glib",
174 | "libc",
175 | "thiserror",
176 | ]
177 |
178 | [[package]]
179 | name = "cairo-sys-rs"
180 | version = "0.15.1"
181 | source = "registry+https://github.com/rust-lang/crates.io-index"
182 | checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8"
183 | dependencies = [
184 | "glib-sys",
185 | "libc",
186 | "system-deps 6.0.3",
187 | ]
188 |
189 | [[package]]
190 | name = "cargo_toml"
191 | version = "0.13.3"
192 | source = "registry+https://github.com/rust-lang/crates.io-index"
193 | checksum = "497049e9477329f8f6a559972ee42e117487d01d1e8c2cc9f836ea6fa23a9e1a"
194 | dependencies = [
195 | "serde",
196 | "toml",
197 | ]
198 |
199 | [[package]]
200 | name = "cc"
201 | version = "1.0.79"
202 | source = "registry+https://github.com/rust-lang/crates.io-index"
203 | checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
204 |
205 | [[package]]
206 | name = "cesu8"
207 | version = "1.1.0"
208 | source = "registry+https://github.com/rust-lang/crates.io-index"
209 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
210 |
211 | [[package]]
212 | name = "cfb"
213 | version = "0.6.1"
214 | source = "registry+https://github.com/rust-lang/crates.io-index"
215 | checksum = "74f89d248799e3f15f91b70917f65381062a01bb8e222700ea0e5a7ff9785f9c"
216 | dependencies = [
217 | "byteorder",
218 | "uuid 0.8.2",
219 | ]
220 |
221 | [[package]]
222 | name = "cfg-expr"
223 | version = "0.9.1"
224 | source = "registry+https://github.com/rust-lang/crates.io-index"
225 | checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7"
226 | dependencies = [
227 | "smallvec",
228 | ]
229 |
230 | [[package]]
231 | name = "cfg-expr"
232 | version = "0.11.0"
233 | source = "registry+https://github.com/rust-lang/crates.io-index"
234 | checksum = "b0357a6402b295ca3a86bc148e84df46c02e41f41fef186bda662557ef6328aa"
235 | dependencies = [
236 | "smallvec",
237 | ]
238 |
239 | [[package]]
240 | name = "cfg-if"
241 | version = "1.0.0"
242 | source = "registry+https://github.com/rust-lang/crates.io-index"
243 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
244 |
245 | [[package]]
246 | name = "checker-library"
247 | version = "0.1.1"
248 | dependencies = [
249 | "futures",
250 | "itertools",
251 | "rayon",
252 | "regex",
253 | "reqwest",
254 | "serde",
255 | "serde_json",
256 | "thiserror",
257 | "tokio",
258 | ]
259 |
260 | [[package]]
261 | name = "cocoa"
262 | version = "0.24.1"
263 | source = "registry+https://github.com/rust-lang/crates.io-index"
264 | checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a"
265 | dependencies = [
266 | "bitflags 1.3.2",
267 | "block",
268 | "cocoa-foundation",
269 | "core-foundation",
270 | "core-graphics",
271 | "foreign-types",
272 | "libc",
273 | "objc",
274 | ]
275 |
276 | [[package]]
277 | name = "cocoa-foundation"
278 | version = "0.1.0"
279 | source = "registry+https://github.com/rust-lang/crates.io-index"
280 | checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318"
281 | dependencies = [
282 | "bitflags 1.3.2",
283 | "block",
284 | "core-foundation",
285 | "core-graphics-types",
286 | "foreign-types",
287 | "libc",
288 | "objc",
289 | ]
290 |
291 | [[package]]
292 | name = "color_quant"
293 | version = "1.1.0"
294 | source = "registry+https://github.com/rust-lang/crates.io-index"
295 | checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
296 |
297 | [[package]]
298 | name = "combine"
299 | version = "4.6.6"
300 | source = "registry+https://github.com/rust-lang/crates.io-index"
301 | checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
302 | dependencies = [
303 | "bytes",
304 | "memchr",
305 | ]
306 |
307 | [[package]]
308 | name = "convert_case"
309 | version = "0.4.0"
310 | source = "registry+https://github.com/rust-lang/crates.io-index"
311 | checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
312 |
313 | [[package]]
314 | name = "core-foundation"
315 | version = "0.9.3"
316 | source = "registry+https://github.com/rust-lang/crates.io-index"
317 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
318 | dependencies = [
319 | "core-foundation-sys",
320 | "libc",
321 | ]
322 |
323 | [[package]]
324 | name = "core-foundation-sys"
325 | version = "0.8.3"
326 | source = "registry+https://github.com/rust-lang/crates.io-index"
327 | checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
328 |
329 | [[package]]
330 | name = "core-graphics"
331 | version = "0.22.3"
332 | source = "registry+https://github.com/rust-lang/crates.io-index"
333 | checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
334 | dependencies = [
335 | "bitflags 1.3.2",
336 | "core-foundation",
337 | "core-graphics-types",
338 | "foreign-types",
339 | "libc",
340 | ]
341 |
342 | [[package]]
343 | name = "core-graphics-types"
344 | version = "0.1.1"
345 | source = "registry+https://github.com/rust-lang/crates.io-index"
346 | checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b"
347 | dependencies = [
348 | "bitflags 1.3.2",
349 | "core-foundation",
350 | "foreign-types",
351 | "libc",
352 | ]
353 |
354 | [[package]]
355 | name = "cpufeatures"
356 | version = "0.2.5"
357 | source = "registry+https://github.com/rust-lang/crates.io-index"
358 | checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
359 | dependencies = [
360 | "libc",
361 | ]
362 |
363 | [[package]]
364 | name = "crc32fast"
365 | version = "1.3.2"
366 | source = "registry+https://github.com/rust-lang/crates.io-index"
367 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
368 | dependencies = [
369 | "cfg-if",
370 | ]
371 |
372 | [[package]]
373 | name = "crossbeam-channel"
374 | version = "0.5.6"
375 | source = "registry+https://github.com/rust-lang/crates.io-index"
376 | checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
377 | dependencies = [
378 | "cfg-if",
379 | "crossbeam-utils",
380 | ]
381 |
382 | [[package]]
383 | name = "crossbeam-deque"
384 | version = "0.8.2"
385 | source = "registry+https://github.com/rust-lang/crates.io-index"
386 | checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc"
387 | dependencies = [
388 | "cfg-if",
389 | "crossbeam-epoch",
390 | "crossbeam-utils",
391 | ]
392 |
393 | [[package]]
394 | name = "crossbeam-epoch"
395 | version = "0.9.13"
396 | source = "registry+https://github.com/rust-lang/crates.io-index"
397 | checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a"
398 | dependencies = [
399 | "autocfg",
400 | "cfg-if",
401 | "crossbeam-utils",
402 | "memoffset 0.7.1",
403 | "scopeguard",
404 | ]
405 |
406 | [[package]]
407 | name = "crossbeam-utils"
408 | version = "0.8.14"
409 | source = "registry+https://github.com/rust-lang/crates.io-index"
410 | checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
411 | dependencies = [
412 | "cfg-if",
413 | ]
414 |
415 | [[package]]
416 | name = "crypto-common"
417 | version = "0.1.6"
418 | source = "registry+https://github.com/rust-lang/crates.io-index"
419 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
420 | dependencies = [
421 | "generic-array",
422 | "typenum",
423 | ]
424 |
425 | [[package]]
426 | name = "cssparser"
427 | version = "0.27.2"
428 | source = "registry+https://github.com/rust-lang/crates.io-index"
429 | checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a"
430 | dependencies = [
431 | "cssparser-macros",
432 | "dtoa-short",
433 | "itoa 0.4.8",
434 | "matches",
435 | "phf 0.8.0",
436 | "proc-macro2",
437 | "quote",
438 | "smallvec",
439 | "syn",
440 | ]
441 |
442 | [[package]]
443 | name = "cssparser-macros"
444 | version = "0.6.0"
445 | source = "registry+https://github.com/rust-lang/crates.io-index"
446 | checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e"
447 | dependencies = [
448 | "quote",
449 | "syn",
450 | ]
451 |
452 | [[package]]
453 | name = "ctor"
454 | version = "0.1.26"
455 | source = "registry+https://github.com/rust-lang/crates.io-index"
456 | checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
457 | dependencies = [
458 | "quote",
459 | "syn",
460 | ]
461 |
462 | [[package]]
463 | name = "cty"
464 | version = "0.2.2"
465 | source = "registry+https://github.com/rust-lang/crates.io-index"
466 | checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
467 |
468 | [[package]]
469 | name = "darling"
470 | version = "0.13.4"
471 | source = "registry+https://github.com/rust-lang/crates.io-index"
472 | checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
473 | dependencies = [
474 | "darling_core",
475 | "darling_macro",
476 | ]
477 |
478 | [[package]]
479 | name = "darling_core"
480 | version = "0.13.4"
481 | source = "registry+https://github.com/rust-lang/crates.io-index"
482 | checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
483 | dependencies = [
484 | "fnv",
485 | "ident_case",
486 | "proc-macro2",
487 | "quote",
488 | "strsim",
489 | "syn",
490 | ]
491 |
492 | [[package]]
493 | name = "darling_macro"
494 | version = "0.13.4"
495 | source = "registry+https://github.com/rust-lang/crates.io-index"
496 | checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
497 | dependencies = [
498 | "darling_core",
499 | "quote",
500 | "syn",
501 | ]
502 |
503 | [[package]]
504 | name = "derive_more"
505 | version = "0.99.17"
506 | source = "registry+https://github.com/rust-lang/crates.io-index"
507 | checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
508 | dependencies = [
509 | "convert_case",
510 | "proc-macro2",
511 | "quote",
512 | "rustc_version 0.4.0",
513 | "syn",
514 | ]
515 |
516 | [[package]]
517 | name = "digest"
518 | version = "0.10.6"
519 | source = "registry+https://github.com/rust-lang/crates.io-index"
520 | checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
521 | dependencies = [
522 | "block-buffer",
523 | "crypto-common",
524 | ]
525 |
526 | [[package]]
527 | name = "dirs-next"
528 | version = "2.0.0"
529 | source = "registry+https://github.com/rust-lang/crates.io-index"
530 | checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
531 | dependencies = [
532 | "cfg-if",
533 | "dirs-sys-next",
534 | ]
535 |
536 | [[package]]
537 | name = "dirs-sys-next"
538 | version = "0.1.2"
539 | source = "registry+https://github.com/rust-lang/crates.io-index"
540 | checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
541 | dependencies = [
542 | "libc",
543 | "redox_users",
544 | "winapi",
545 | ]
546 |
547 | [[package]]
548 | name = "dispatch"
549 | version = "0.2.0"
550 | source = "registry+https://github.com/rust-lang/crates.io-index"
551 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
552 |
553 | [[package]]
554 | name = "dtoa"
555 | version = "0.4.8"
556 | source = "registry+https://github.com/rust-lang/crates.io-index"
557 | checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
558 |
559 | [[package]]
560 | name = "dtoa-short"
561 | version = "0.3.3"
562 | source = "registry+https://github.com/rust-lang/crates.io-index"
563 | checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6"
564 | dependencies = [
565 | "dtoa",
566 | ]
567 |
568 | [[package]]
569 | name = "dunce"
570 | version = "1.0.3"
571 | source = "registry+https://github.com/rust-lang/crates.io-index"
572 | checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c"
573 |
574 | [[package]]
575 | name = "either"
576 | version = "1.8.1"
577 | source = "registry+https://github.com/rust-lang/crates.io-index"
578 | checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
579 |
580 | [[package]]
581 | name = "embed_plist"
582 | version = "1.2.2"
583 | source = "registry+https://github.com/rust-lang/crates.io-index"
584 | checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7"
585 |
586 | [[package]]
587 | name = "encoding_rs"
588 | version = "0.8.31"
589 | source = "registry+https://github.com/rust-lang/crates.io-index"
590 | checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b"
591 | dependencies = [
592 | "cfg-if",
593 | ]
594 |
595 | [[package]]
596 | name = "env_logger"
597 | version = "0.10.0"
598 | source = "registry+https://github.com/rust-lang/crates.io-index"
599 | checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
600 | dependencies = [
601 | "humantime",
602 | "is-terminal",
603 | "log",
604 | "regex",
605 | "termcolor",
606 | ]
607 |
608 | [[package]]
609 | name = "equivalent"
610 | version = "1.0.1"
611 | source = "registry+https://github.com/rust-lang/crates.io-index"
612 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
613 |
614 | [[package]]
615 | name = "errno"
616 | version = "0.3.9"
617 | source = "registry+https://github.com/rust-lang/crates.io-index"
618 | checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
619 | dependencies = [
620 | "libc",
621 | "windows-sys 0.52.0",
622 | ]
623 |
624 | [[package]]
625 | name = "fastrand"
626 | version = "1.8.0"
627 | source = "registry+https://github.com/rust-lang/crates.io-index"
628 | checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
629 | dependencies = [
630 | "instant",
631 | ]
632 |
633 | [[package]]
634 | name = "field-offset"
635 | version = "0.3.4"
636 | source = "registry+https://github.com/rust-lang/crates.io-index"
637 | checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92"
638 | dependencies = [
639 | "memoffset 0.6.5",
640 | "rustc_version 0.3.3",
641 | ]
642 |
643 | [[package]]
644 | name = "filetime"
645 | version = "0.2.19"
646 | source = "registry+https://github.com/rust-lang/crates.io-index"
647 | checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9"
648 | dependencies = [
649 | "cfg-if",
650 | "libc",
651 | "redox_syscall",
652 | "windows-sys 0.42.0",
653 | ]
654 |
655 | [[package]]
656 | name = "flate2"
657 | version = "1.0.25"
658 | source = "registry+https://github.com/rust-lang/crates.io-index"
659 | checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
660 | dependencies = [
661 | "crc32fast",
662 | "miniz_oxide",
663 | ]
664 |
665 | [[package]]
666 | name = "fnv"
667 | version = "1.0.7"
668 | source = "registry+https://github.com/rust-lang/crates.io-index"
669 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
670 |
671 | [[package]]
672 | name = "foreign-types"
673 | version = "0.3.2"
674 | source = "registry+https://github.com/rust-lang/crates.io-index"
675 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
676 | dependencies = [
677 | "foreign-types-shared",
678 | ]
679 |
680 | [[package]]
681 | name = "foreign-types-shared"
682 | version = "0.1.1"
683 | source = "registry+https://github.com/rust-lang/crates.io-index"
684 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
685 |
686 | [[package]]
687 | name = "form_urlencoded"
688 | version = "1.1.0"
689 | source = "registry+https://github.com/rust-lang/crates.io-index"
690 | checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
691 | dependencies = [
692 | "percent-encoding",
693 | ]
694 |
695 | [[package]]
696 | name = "futf"
697 | version = "0.1.5"
698 | source = "registry+https://github.com/rust-lang/crates.io-index"
699 | checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
700 | dependencies = [
701 | "mac",
702 | "new_debug_unreachable",
703 | ]
704 |
705 | [[package]]
706 | name = "futures"
707 | version = "0.3.25"
708 | source = "registry+https://github.com/rust-lang/crates.io-index"
709 | checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0"
710 | dependencies = [
711 | "futures-channel",
712 | "futures-core",
713 | "futures-executor",
714 | "futures-io",
715 | "futures-sink",
716 | "futures-task",
717 | "futures-util",
718 | ]
719 |
720 | [[package]]
721 | name = "futures-channel"
722 | version = "0.3.25"
723 | source = "registry+https://github.com/rust-lang/crates.io-index"
724 | checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed"
725 | dependencies = [
726 | "futures-core",
727 | "futures-sink",
728 | ]
729 |
730 | [[package]]
731 | name = "futures-core"
732 | version = "0.3.25"
733 | source = "registry+https://github.com/rust-lang/crates.io-index"
734 | checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
735 |
736 | [[package]]
737 | name = "futures-executor"
738 | version = "0.3.25"
739 | source = "registry+https://github.com/rust-lang/crates.io-index"
740 | checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2"
741 | dependencies = [
742 | "futures-core",
743 | "futures-task",
744 | "futures-util",
745 | ]
746 |
747 | [[package]]
748 | name = "futures-io"
749 | version = "0.3.25"
750 | source = "registry+https://github.com/rust-lang/crates.io-index"
751 | checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb"
752 |
753 | [[package]]
754 | name = "futures-macro"
755 | version = "0.3.25"
756 | source = "registry+https://github.com/rust-lang/crates.io-index"
757 | checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d"
758 | dependencies = [
759 | "proc-macro2",
760 | "quote",
761 | "syn",
762 | ]
763 |
764 | [[package]]
765 | name = "futures-sink"
766 | version = "0.3.25"
767 | source = "registry+https://github.com/rust-lang/crates.io-index"
768 | checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9"
769 |
770 | [[package]]
771 | name = "futures-task"
772 | version = "0.3.25"
773 | source = "registry+https://github.com/rust-lang/crates.io-index"
774 | checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea"
775 |
776 | [[package]]
777 | name = "futures-util"
778 | version = "0.3.25"
779 | source = "registry+https://github.com/rust-lang/crates.io-index"
780 | checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6"
781 | dependencies = [
782 | "futures-channel",
783 | "futures-core",
784 | "futures-io",
785 | "futures-macro",
786 | "futures-sink",
787 | "futures-task",
788 | "memchr",
789 | "pin-project-lite",
790 | "pin-utils",
791 | "slab",
792 | ]
793 |
794 | [[package]]
795 | name = "fxhash"
796 | version = "0.2.1"
797 | source = "registry+https://github.com/rust-lang/crates.io-index"
798 | checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
799 | dependencies = [
800 | "byteorder",
801 | ]
802 |
803 | [[package]]
804 | name = "gdk"
805 | version = "0.15.4"
806 | source = "registry+https://github.com/rust-lang/crates.io-index"
807 | checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8"
808 | dependencies = [
809 | "bitflags 1.3.2",
810 | "cairo-rs",
811 | "gdk-pixbuf",
812 | "gdk-sys",
813 | "gio",
814 | "glib",
815 | "libc",
816 | "pango",
817 | ]
818 |
819 | [[package]]
820 | name = "gdk-pixbuf"
821 | version = "0.15.11"
822 | source = "registry+https://github.com/rust-lang/crates.io-index"
823 | checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a"
824 | dependencies = [
825 | "bitflags 1.3.2",
826 | "gdk-pixbuf-sys",
827 | "gio",
828 | "glib",
829 | "libc",
830 | ]
831 |
832 | [[package]]
833 | name = "gdk-pixbuf-sys"
834 | version = "0.15.10"
835 | source = "registry+https://github.com/rust-lang/crates.io-index"
836 | checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7"
837 | dependencies = [
838 | "gio-sys",
839 | "glib-sys",
840 | "gobject-sys",
841 | "libc",
842 | "system-deps 6.0.3",
843 | ]
844 |
845 | [[package]]
846 | name = "gdk-sys"
847 | version = "0.15.1"
848 | source = "registry+https://github.com/rust-lang/crates.io-index"
849 | checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88"
850 | dependencies = [
851 | "cairo-sys-rs",
852 | "gdk-pixbuf-sys",
853 | "gio-sys",
854 | "glib-sys",
855 | "gobject-sys",
856 | "libc",
857 | "pango-sys",
858 | "pkg-config",
859 | "system-deps 6.0.3",
860 | ]
861 |
862 | [[package]]
863 | name = "gdkx11-sys"
864 | version = "0.15.1"
865 | source = "registry+https://github.com/rust-lang/crates.io-index"
866 | checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178"
867 | dependencies = [
868 | "gdk-sys",
869 | "glib-sys",
870 | "libc",
871 | "system-deps 6.0.3",
872 | "x11",
873 | ]
874 |
875 | [[package]]
876 | name = "generator"
877 | version = "0.7.2"
878 | source = "registry+https://github.com/rust-lang/crates.io-index"
879 | checksum = "d266041a359dfa931b370ef684cceb84b166beb14f7f0421f4a6a3d0c446d12e"
880 | dependencies = [
881 | "cc",
882 | "libc",
883 | "log",
884 | "rustversion",
885 | "windows 0.39.0",
886 | ]
887 |
888 | [[package]]
889 | name = "generic-array"
890 | version = "0.14.6"
891 | source = "registry+https://github.com/rust-lang/crates.io-index"
892 | checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
893 | dependencies = [
894 | "typenum",
895 | "version_check",
896 | ]
897 |
898 | [[package]]
899 | name = "getrandom"
900 | version = "0.1.16"
901 | source = "registry+https://github.com/rust-lang/crates.io-index"
902 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
903 | dependencies = [
904 | "cfg-if",
905 | "libc",
906 | "wasi 0.9.0+wasi-snapshot-preview1",
907 | ]
908 |
909 | [[package]]
910 | name = "getrandom"
911 | version = "0.2.8"
912 | source = "registry+https://github.com/rust-lang/crates.io-index"
913 | checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
914 | dependencies = [
915 | "cfg-if",
916 | "libc",
917 | "wasi 0.11.0+wasi-snapshot-preview1",
918 | ]
919 |
920 | [[package]]
921 | name = "gio"
922 | version = "0.15.12"
923 | source = "registry+https://github.com/rust-lang/crates.io-index"
924 | checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b"
925 | dependencies = [
926 | "bitflags 1.3.2",
927 | "futures-channel",
928 | "futures-core",
929 | "futures-io",
930 | "gio-sys",
931 | "glib",
932 | "libc",
933 | "once_cell",
934 | "thiserror",
935 | ]
936 |
937 | [[package]]
938 | name = "gio-sys"
939 | version = "0.15.10"
940 | source = "registry+https://github.com/rust-lang/crates.io-index"
941 | checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d"
942 | dependencies = [
943 | "glib-sys",
944 | "gobject-sys",
945 | "libc",
946 | "system-deps 6.0.3",
947 | "winapi",
948 | ]
949 |
950 | [[package]]
951 | name = "glib"
952 | version = "0.15.12"
953 | source = "registry+https://github.com/rust-lang/crates.io-index"
954 | checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d"
955 | dependencies = [
956 | "bitflags 1.3.2",
957 | "futures-channel",
958 | "futures-core",
959 | "futures-executor",
960 | "futures-task",
961 | "glib-macros",
962 | "glib-sys",
963 | "gobject-sys",
964 | "libc",
965 | "once_cell",
966 | "smallvec",
967 | "thiserror",
968 | ]
969 |
970 | [[package]]
971 | name = "glib-macros"
972 | version = "0.15.11"
973 | source = "registry+https://github.com/rust-lang/crates.io-index"
974 | checksum = "25a68131a662b04931e71891fb14aaf65ee4b44d08e8abc10f49e77418c86c64"
975 | dependencies = [
976 | "anyhow",
977 | "heck 0.4.0",
978 | "proc-macro-crate",
979 | "proc-macro-error",
980 | "proc-macro2",
981 | "quote",
982 | "syn",
983 | ]
984 |
985 | [[package]]
986 | name = "glib-sys"
987 | version = "0.15.10"
988 | source = "registry+https://github.com/rust-lang/crates.io-index"
989 | checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4"
990 | dependencies = [
991 | "libc",
992 | "system-deps 6.0.3",
993 | ]
994 |
995 | [[package]]
996 | name = "glob"
997 | version = "0.3.1"
998 | source = "registry+https://github.com/rust-lang/crates.io-index"
999 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
1000 |
1001 | [[package]]
1002 | name = "globset"
1003 | version = "0.4.10"
1004 | source = "registry+https://github.com/rust-lang/crates.io-index"
1005 | checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc"
1006 | dependencies = [
1007 | "aho-corasick",
1008 | "bstr",
1009 | "fnv",
1010 | "log",
1011 | "regex",
1012 | ]
1013 |
1014 | [[package]]
1015 | name = "gobject-sys"
1016 | version = "0.15.10"
1017 | source = "registry+https://github.com/rust-lang/crates.io-index"
1018 | checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a"
1019 | dependencies = [
1020 | "glib-sys",
1021 | "libc",
1022 | "system-deps 6.0.3",
1023 | ]
1024 |
1025 | [[package]]
1026 | name = "gtk"
1027 | version = "0.15.5"
1028 | source = "registry+https://github.com/rust-lang/crates.io-index"
1029 | checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0"
1030 | dependencies = [
1031 | "atk",
1032 | "bitflags 1.3.2",
1033 | "cairo-rs",
1034 | "field-offset",
1035 | "futures-channel",
1036 | "gdk",
1037 | "gdk-pixbuf",
1038 | "gio",
1039 | "glib",
1040 | "gtk-sys",
1041 | "gtk3-macros",
1042 | "libc",
1043 | "once_cell",
1044 | "pango",
1045 | "pkg-config",
1046 | ]
1047 |
1048 | [[package]]
1049 | name = "gtk-sys"
1050 | version = "0.15.3"
1051 | source = "registry+https://github.com/rust-lang/crates.io-index"
1052 | checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84"
1053 | dependencies = [
1054 | "atk-sys",
1055 | "cairo-sys-rs",
1056 | "gdk-pixbuf-sys",
1057 | "gdk-sys",
1058 | "gio-sys",
1059 | "glib-sys",
1060 | "gobject-sys",
1061 | "libc",
1062 | "pango-sys",
1063 | "system-deps 6.0.3",
1064 | ]
1065 |
1066 | [[package]]
1067 | name = "gtk3-macros"
1068 | version = "0.15.4"
1069 | source = "registry+https://github.com/rust-lang/crates.io-index"
1070 | checksum = "24f518afe90c23fba585b2d7697856f9e6a7bbc62f65588035e66f6afb01a2e9"
1071 | dependencies = [
1072 | "anyhow",
1073 | "proc-macro-crate",
1074 | "proc-macro-error",
1075 | "proc-macro2",
1076 | "quote",
1077 | "syn",
1078 | ]
1079 |
1080 | [[package]]
1081 | name = "h2"
1082 | version = "0.3.26"
1083 | source = "registry+https://github.com/rust-lang/crates.io-index"
1084 | checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8"
1085 | dependencies = [
1086 | "bytes",
1087 | "fnv",
1088 | "futures-core",
1089 | "futures-sink",
1090 | "futures-util",
1091 | "http",
1092 | "indexmap 2.2.6",
1093 | "slab",
1094 | "tokio",
1095 | "tokio-util",
1096 | "tracing",
1097 | ]
1098 |
1099 | [[package]]
1100 | name = "hashbrown"
1101 | version = "0.12.3"
1102 | source = "registry+https://github.com/rust-lang/crates.io-index"
1103 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
1104 |
1105 | [[package]]
1106 | name = "hashbrown"
1107 | version = "0.14.5"
1108 | source = "registry+https://github.com/rust-lang/crates.io-index"
1109 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
1110 |
1111 | [[package]]
1112 | name = "heck"
1113 | version = "0.3.3"
1114 | source = "registry+https://github.com/rust-lang/crates.io-index"
1115 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
1116 | dependencies = [
1117 | "unicode-segmentation",
1118 | ]
1119 |
1120 | [[package]]
1121 | name = "heck"
1122 | version = "0.4.0"
1123 | source = "registry+https://github.com/rust-lang/crates.io-index"
1124 | checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
1125 |
1126 | [[package]]
1127 | name = "hermit-abi"
1128 | version = "0.2.6"
1129 | source = "registry+https://github.com/rust-lang/crates.io-index"
1130 | checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
1131 | dependencies = [
1132 | "libc",
1133 | ]
1134 |
1135 | [[package]]
1136 | name = "html5ever"
1137 | version = "0.25.2"
1138 | source = "registry+https://github.com/rust-lang/crates.io-index"
1139 | checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148"
1140 | dependencies = [
1141 | "log",
1142 | "mac",
1143 | "markup5ever",
1144 | "proc-macro2",
1145 | "quote",
1146 | "syn",
1147 | ]
1148 |
1149 | [[package]]
1150 | name = "http"
1151 | version = "0.2.8"
1152 | source = "registry+https://github.com/rust-lang/crates.io-index"
1153 | checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
1154 | dependencies = [
1155 | "bytes",
1156 | "fnv",
1157 | "itoa 1.0.5",
1158 | ]
1159 |
1160 | [[package]]
1161 | name = "http-body"
1162 | version = "0.4.5"
1163 | source = "registry+https://github.com/rust-lang/crates.io-index"
1164 | checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
1165 | dependencies = [
1166 | "bytes",
1167 | "http",
1168 | "pin-project-lite",
1169 | ]
1170 |
1171 | [[package]]
1172 | name = "http-range"
1173 | version = "0.1.5"
1174 | source = "registry+https://github.com/rust-lang/crates.io-index"
1175 | checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
1176 |
1177 | [[package]]
1178 | name = "httparse"
1179 | version = "1.8.0"
1180 | source = "registry+https://github.com/rust-lang/crates.io-index"
1181 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
1182 |
1183 | [[package]]
1184 | name = "httpdate"
1185 | version = "1.0.2"
1186 | source = "registry+https://github.com/rust-lang/crates.io-index"
1187 | checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
1188 |
1189 | [[package]]
1190 | name = "humantime"
1191 | version = "2.1.0"
1192 | source = "registry+https://github.com/rust-lang/crates.io-index"
1193 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
1194 |
1195 | [[package]]
1196 | name = "hyper"
1197 | version = "0.14.23"
1198 | source = "registry+https://github.com/rust-lang/crates.io-index"
1199 | checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c"
1200 | dependencies = [
1201 | "bytes",
1202 | "futures-channel",
1203 | "futures-core",
1204 | "futures-util",
1205 | "h2",
1206 | "http",
1207 | "http-body",
1208 | "httparse",
1209 | "httpdate",
1210 | "itoa 1.0.5",
1211 | "pin-project-lite",
1212 | "socket2",
1213 | "tokio",
1214 | "tower-service",
1215 | "tracing",
1216 | "want",
1217 | ]
1218 |
1219 | [[package]]
1220 | name = "hyper-tls"
1221 | version = "0.5.0"
1222 | source = "registry+https://github.com/rust-lang/crates.io-index"
1223 | checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
1224 | dependencies = [
1225 | "bytes",
1226 | "hyper",
1227 | "native-tls",
1228 | "tokio",
1229 | "tokio-native-tls",
1230 | ]
1231 |
1232 | [[package]]
1233 | name = "ico"
1234 | version = "0.2.0"
1235 | source = "registry+https://github.com/rust-lang/crates.io-index"
1236 | checksum = "031530fe562d8c8d71c0635013d6d155bbfe8ba0aa4b4d2d24ce8af6b71047bd"
1237 | dependencies = [
1238 | "byteorder",
1239 | "png",
1240 | ]
1241 |
1242 | [[package]]
1243 | name = "ident_case"
1244 | version = "1.0.1"
1245 | source = "registry+https://github.com/rust-lang/crates.io-index"
1246 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
1247 |
1248 | [[package]]
1249 | name = "idna"
1250 | version = "0.3.0"
1251 | source = "registry+https://github.com/rust-lang/crates.io-index"
1252 | checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
1253 | dependencies = [
1254 | "unicode-bidi",
1255 | "unicode-normalization",
1256 | ]
1257 |
1258 | [[package]]
1259 | name = "ignore"
1260 | version = "0.4.18"
1261 | source = "registry+https://github.com/rust-lang/crates.io-index"
1262 | checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d"
1263 | dependencies = [
1264 | "crossbeam-utils",
1265 | "globset",
1266 | "lazy_static",
1267 | "log",
1268 | "memchr",
1269 | "regex",
1270 | "same-file",
1271 | "thread_local",
1272 | "walkdir",
1273 | "winapi-util",
1274 | ]
1275 |
1276 | [[package]]
1277 | name = "image"
1278 | version = "0.24.5"
1279 | source = "registry+https://github.com/rust-lang/crates.io-index"
1280 | checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945"
1281 | dependencies = [
1282 | "bytemuck",
1283 | "byteorder",
1284 | "color_quant",
1285 | "num-rational",
1286 | "num-traits",
1287 | ]
1288 |
1289 | [[package]]
1290 | name = "indexmap"
1291 | version = "1.9.2"
1292 | source = "registry+https://github.com/rust-lang/crates.io-index"
1293 | checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
1294 | dependencies = [
1295 | "autocfg",
1296 | "hashbrown 0.12.3",
1297 | ]
1298 |
1299 | [[package]]
1300 | name = "indexmap"
1301 | version = "2.2.6"
1302 | source = "registry+https://github.com/rust-lang/crates.io-index"
1303 | checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26"
1304 | dependencies = [
1305 | "equivalent",
1306 | "hashbrown 0.14.5",
1307 | ]
1308 |
1309 | [[package]]
1310 | name = "infer"
1311 | version = "0.7.0"
1312 | source = "registry+https://github.com/rust-lang/crates.io-index"
1313 | checksum = "20b2b533137b9cad970793453d4f921c2e91312a6d88b1085c07bc15fc51bb3b"
1314 | dependencies = [
1315 | "cfb",
1316 | ]
1317 |
1318 | [[package]]
1319 | name = "instant"
1320 | version = "0.1.12"
1321 | source = "registry+https://github.com/rust-lang/crates.io-index"
1322 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
1323 | dependencies = [
1324 | "cfg-if",
1325 | ]
1326 |
1327 | [[package]]
1328 | name = "io-lifetimes"
1329 | version = "1.0.4"
1330 | source = "registry+https://github.com/rust-lang/crates.io-index"
1331 | checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e"
1332 | dependencies = [
1333 | "libc",
1334 | "windows-sys 0.42.0",
1335 | ]
1336 |
1337 | [[package]]
1338 | name = "ipnet"
1339 | version = "2.7.1"
1340 | source = "registry+https://github.com/rust-lang/crates.io-index"
1341 | checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146"
1342 |
1343 | [[package]]
1344 | name = "is-terminal"
1345 | version = "0.4.2"
1346 | source = "registry+https://github.com/rust-lang/crates.io-index"
1347 | checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189"
1348 | dependencies = [
1349 | "hermit-abi",
1350 | "io-lifetimes",
1351 | "rustix",
1352 | "windows-sys 0.42.0",
1353 | ]
1354 |
1355 | [[package]]
1356 | name = "itertools"
1357 | version = "0.10.5"
1358 | source = "registry+https://github.com/rust-lang/crates.io-index"
1359 | checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
1360 | dependencies = [
1361 | "either",
1362 | ]
1363 |
1364 | [[package]]
1365 | name = "itoa"
1366 | version = "0.4.8"
1367 | source = "registry+https://github.com/rust-lang/crates.io-index"
1368 | checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
1369 |
1370 | [[package]]
1371 | name = "itoa"
1372 | version = "1.0.5"
1373 | source = "registry+https://github.com/rust-lang/crates.io-index"
1374 | checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
1375 |
1376 | [[package]]
1377 | name = "javascriptcore-rs"
1378 | version = "0.16.0"
1379 | source = "registry+https://github.com/rust-lang/crates.io-index"
1380 | checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c"
1381 | dependencies = [
1382 | "bitflags 1.3.2",
1383 | "glib",
1384 | "javascriptcore-rs-sys",
1385 | ]
1386 |
1387 | [[package]]
1388 | name = "javascriptcore-rs-sys"
1389 | version = "0.4.0"
1390 | source = "registry+https://github.com/rust-lang/crates.io-index"
1391 | checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c"
1392 | dependencies = [
1393 | "glib-sys",
1394 | "gobject-sys",
1395 | "libc",
1396 | "system-deps 5.0.0",
1397 | ]
1398 |
1399 | [[package]]
1400 | name = "jni"
1401 | version = "0.20.0"
1402 | source = "registry+https://github.com/rust-lang/crates.io-index"
1403 | checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c"
1404 | dependencies = [
1405 | "cesu8",
1406 | "combine",
1407 | "jni-sys",
1408 | "log",
1409 | "thiserror",
1410 | "walkdir",
1411 | ]
1412 |
1413 | [[package]]
1414 | name = "jni-sys"
1415 | version = "0.3.0"
1416 | source = "registry+https://github.com/rust-lang/crates.io-index"
1417 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
1418 |
1419 | [[package]]
1420 | name = "js-sys"
1421 | version = "0.3.60"
1422 | source = "registry+https://github.com/rust-lang/crates.io-index"
1423 | checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
1424 | dependencies = [
1425 | "wasm-bindgen",
1426 | ]
1427 |
1428 | [[package]]
1429 | name = "json-patch"
1430 | version = "0.2.7"
1431 | source = "registry+https://github.com/rust-lang/crates.io-index"
1432 | checksum = "eb3fa5a61630976fc4c353c70297f2e93f1930e3ccee574d59d618ccbd5154ce"
1433 | dependencies = [
1434 | "serde",
1435 | "serde_json",
1436 | "treediff",
1437 | ]
1438 |
1439 | [[package]]
1440 | name = "kuchiki"
1441 | version = "0.8.1"
1442 | source = "registry+https://github.com/rust-lang/crates.io-index"
1443 | checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358"
1444 | dependencies = [
1445 | "cssparser",
1446 | "html5ever",
1447 | "matches",
1448 | "selectors",
1449 | ]
1450 |
1451 | [[package]]
1452 | name = "lazy_static"
1453 | version = "1.4.0"
1454 | source = "registry+https://github.com/rust-lang/crates.io-index"
1455 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
1456 |
1457 | [[package]]
1458 | name = "libc"
1459 | version = "0.2.155"
1460 | source = "registry+https://github.com/rust-lang/crates.io-index"
1461 | checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
1462 |
1463 | [[package]]
1464 | name = "line-wrap"
1465 | version = "0.1.1"
1466 | source = "registry+https://github.com/rust-lang/crates.io-index"
1467 | checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
1468 | dependencies = [
1469 | "safemem",
1470 | ]
1471 |
1472 | [[package]]
1473 | name = "linux-raw-sys"
1474 | version = "0.1.4"
1475 | source = "registry+https://github.com/rust-lang/crates.io-index"
1476 | checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
1477 |
1478 | [[package]]
1479 | name = "lock_api"
1480 | version = "0.4.9"
1481 | source = "registry+https://github.com/rust-lang/crates.io-index"
1482 | checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
1483 | dependencies = [
1484 | "autocfg",
1485 | "scopeguard",
1486 | ]
1487 |
1488 | [[package]]
1489 | name = "log"
1490 | version = "0.4.17"
1491 | source = "registry+https://github.com/rust-lang/crates.io-index"
1492 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
1493 | dependencies = [
1494 | "cfg-if",
1495 | ]
1496 |
1497 | [[package]]
1498 | name = "loom"
1499 | version = "0.5.6"
1500 | source = "registry+https://github.com/rust-lang/crates.io-index"
1501 | checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5"
1502 | dependencies = [
1503 | "cfg-if",
1504 | "generator",
1505 | "scoped-tls",
1506 | "serde",
1507 | "serde_json",
1508 | "tracing",
1509 | "tracing-subscriber",
1510 | ]
1511 |
1512 | [[package]]
1513 | name = "mac"
1514 | version = "0.1.1"
1515 | source = "registry+https://github.com/rust-lang/crates.io-index"
1516 | checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
1517 |
1518 | [[package]]
1519 | name = "malloc_buf"
1520 | version = "0.0.6"
1521 | source = "registry+https://github.com/rust-lang/crates.io-index"
1522 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
1523 | dependencies = [
1524 | "libc",
1525 | ]
1526 |
1527 | [[package]]
1528 | name = "markup5ever"
1529 | version = "0.10.1"
1530 | source = "registry+https://github.com/rust-lang/crates.io-index"
1531 | checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd"
1532 | dependencies = [
1533 | "log",
1534 | "phf 0.8.0",
1535 | "phf_codegen",
1536 | "string_cache",
1537 | "string_cache_codegen",
1538 | "tendril",
1539 | ]
1540 |
1541 | [[package]]
1542 | name = "matchers"
1543 | version = "0.1.0"
1544 | source = "registry+https://github.com/rust-lang/crates.io-index"
1545 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
1546 | dependencies = [
1547 | "regex-automata",
1548 | ]
1549 |
1550 | [[package]]
1551 | name = "matches"
1552 | version = "0.1.10"
1553 | source = "registry+https://github.com/rust-lang/crates.io-index"
1554 | checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
1555 |
1556 | [[package]]
1557 | name = "memchr"
1558 | version = "2.5.0"
1559 | source = "registry+https://github.com/rust-lang/crates.io-index"
1560 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
1561 |
1562 | [[package]]
1563 | name = "memoffset"
1564 | version = "0.6.5"
1565 | source = "registry+https://github.com/rust-lang/crates.io-index"
1566 | checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
1567 | dependencies = [
1568 | "autocfg",
1569 | ]
1570 |
1571 | [[package]]
1572 | name = "memoffset"
1573 | version = "0.7.1"
1574 | source = "registry+https://github.com/rust-lang/crates.io-index"
1575 | checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
1576 | dependencies = [
1577 | "autocfg",
1578 | ]
1579 |
1580 | [[package]]
1581 | name = "mime"
1582 | version = "0.3.16"
1583 | source = "registry+https://github.com/rust-lang/crates.io-index"
1584 | checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
1585 |
1586 | [[package]]
1587 | name = "miniz_oxide"
1588 | version = "0.6.2"
1589 | source = "registry+https://github.com/rust-lang/crates.io-index"
1590 | checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
1591 | dependencies = [
1592 | "adler",
1593 | ]
1594 |
1595 | [[package]]
1596 | name = "mio"
1597 | version = "0.8.11"
1598 | source = "registry+https://github.com/rust-lang/crates.io-index"
1599 | checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"
1600 | dependencies = [
1601 | "libc",
1602 | "log",
1603 | "wasi 0.11.0+wasi-snapshot-preview1",
1604 | "windows-sys 0.48.0",
1605 | ]
1606 |
1607 | [[package]]
1608 | name = "native-tls"
1609 | version = "0.2.11"
1610 | source = "registry+https://github.com/rust-lang/crates.io-index"
1611 | checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
1612 | dependencies = [
1613 | "lazy_static",
1614 | "libc",
1615 | "log",
1616 | "openssl",
1617 | "openssl-probe",
1618 | "openssl-sys",
1619 | "schannel",
1620 | "security-framework",
1621 | "security-framework-sys",
1622 | "tempfile",
1623 | ]
1624 |
1625 | [[package]]
1626 | name = "ndk"
1627 | version = "0.6.0"
1628 | source = "registry+https://github.com/rust-lang/crates.io-index"
1629 | checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4"
1630 | dependencies = [
1631 | "bitflags 1.3.2",
1632 | "jni-sys",
1633 | "ndk-sys",
1634 | "num_enum",
1635 | "thiserror",
1636 | ]
1637 |
1638 | [[package]]
1639 | name = "ndk-context"
1640 | version = "0.1.1"
1641 | source = "registry+https://github.com/rust-lang/crates.io-index"
1642 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
1643 |
1644 | [[package]]
1645 | name = "ndk-sys"
1646 | version = "0.3.0"
1647 | source = "registry+https://github.com/rust-lang/crates.io-index"
1648 | checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97"
1649 | dependencies = [
1650 | "jni-sys",
1651 | ]
1652 |
1653 | [[package]]
1654 | name = "new_debug_unreachable"
1655 | version = "1.0.4"
1656 | source = "registry+https://github.com/rust-lang/crates.io-index"
1657 | checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
1658 |
1659 | [[package]]
1660 | name = "nodrop"
1661 | version = "0.1.14"
1662 | source = "registry+https://github.com/rust-lang/crates.io-index"
1663 | checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
1664 |
1665 | [[package]]
1666 | name = "nom8"
1667 | version = "0.2.0"
1668 | source = "registry+https://github.com/rust-lang/crates.io-index"
1669 | checksum = "ae01545c9c7fc4486ab7debaf2aad7003ac19431791868fb2e8066df97fad2f8"
1670 | dependencies = [
1671 | "memchr",
1672 | ]
1673 |
1674 | [[package]]
1675 | name = "nu-ansi-term"
1676 | version = "0.46.0"
1677 | source = "registry+https://github.com/rust-lang/crates.io-index"
1678 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
1679 | dependencies = [
1680 | "overload",
1681 | "winapi",
1682 | ]
1683 |
1684 | [[package]]
1685 | name = "num-integer"
1686 | version = "0.1.45"
1687 | source = "registry+https://github.com/rust-lang/crates.io-index"
1688 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
1689 | dependencies = [
1690 | "autocfg",
1691 | "num-traits",
1692 | ]
1693 |
1694 | [[package]]
1695 | name = "num-rational"
1696 | version = "0.4.1"
1697 | source = "registry+https://github.com/rust-lang/crates.io-index"
1698 | checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
1699 | dependencies = [
1700 | "autocfg",
1701 | "num-integer",
1702 | "num-traits",
1703 | ]
1704 |
1705 | [[package]]
1706 | name = "num-traits"
1707 | version = "0.2.15"
1708 | source = "registry+https://github.com/rust-lang/crates.io-index"
1709 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
1710 | dependencies = [
1711 | "autocfg",
1712 | ]
1713 |
1714 | [[package]]
1715 | name = "num_cpus"
1716 | version = "1.15.0"
1717 | source = "registry+https://github.com/rust-lang/crates.io-index"
1718 | checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
1719 | dependencies = [
1720 | "hermit-abi",
1721 | "libc",
1722 | ]
1723 |
1724 | [[package]]
1725 | name = "num_enum"
1726 | version = "0.5.9"
1727 | source = "registry+https://github.com/rust-lang/crates.io-index"
1728 | checksum = "8d829733185c1ca374f17e52b762f24f535ec625d2cc1f070e34c8a9068f341b"
1729 | dependencies = [
1730 | "num_enum_derive",
1731 | ]
1732 |
1733 | [[package]]
1734 | name = "num_enum_derive"
1735 | version = "0.5.9"
1736 | source = "registry+https://github.com/rust-lang/crates.io-index"
1737 | checksum = "2be1598bf1c313dcdd12092e3f1920f463462525a21b7b4e11b4168353d0123e"
1738 | dependencies = [
1739 | "proc-macro-crate",
1740 | "proc-macro2",
1741 | "quote",
1742 | "syn",
1743 | ]
1744 |
1745 | [[package]]
1746 | name = "objc"
1747 | version = "0.2.7"
1748 | source = "registry+https://github.com/rust-lang/crates.io-index"
1749 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
1750 | dependencies = [
1751 | "malloc_buf",
1752 | "objc_exception",
1753 | ]
1754 |
1755 | [[package]]
1756 | name = "objc-foundation"
1757 | version = "0.1.1"
1758 | source = "registry+https://github.com/rust-lang/crates.io-index"
1759 | checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
1760 | dependencies = [
1761 | "block",
1762 | "objc",
1763 | "objc_id",
1764 | ]
1765 |
1766 | [[package]]
1767 | name = "objc_exception"
1768 | version = "0.1.2"
1769 | source = "registry+https://github.com/rust-lang/crates.io-index"
1770 | checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
1771 | dependencies = [
1772 | "cc",
1773 | ]
1774 |
1775 | [[package]]
1776 | name = "objc_id"
1777 | version = "0.1.1"
1778 | source = "registry+https://github.com/rust-lang/crates.io-index"
1779 | checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
1780 | dependencies = [
1781 | "objc",
1782 | ]
1783 |
1784 | [[package]]
1785 | name = "once_cell"
1786 | version = "1.17.0"
1787 | source = "registry+https://github.com/rust-lang/crates.io-index"
1788 | checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
1789 |
1790 | [[package]]
1791 | name = "open"
1792 | version = "3.2.0"
1793 | source = "registry+https://github.com/rust-lang/crates.io-index"
1794 | checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8"
1795 | dependencies = [
1796 | "pathdiff",
1797 | "windows-sys 0.42.0",
1798 | ]
1799 |
1800 | [[package]]
1801 | name = "openssl"
1802 | version = "0.10.66"
1803 | source = "registry+https://github.com/rust-lang/crates.io-index"
1804 | checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1"
1805 | dependencies = [
1806 | "bitflags 2.6.0",
1807 | "cfg-if",
1808 | "foreign-types",
1809 | "libc",
1810 | "once_cell",
1811 | "openssl-macros",
1812 | "openssl-sys",
1813 | ]
1814 |
1815 | [[package]]
1816 | name = "openssl-macros"
1817 | version = "0.1.0"
1818 | source = "registry+https://github.com/rust-lang/crates.io-index"
1819 | checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
1820 | dependencies = [
1821 | "proc-macro2",
1822 | "quote",
1823 | "syn",
1824 | ]
1825 |
1826 | [[package]]
1827 | name = "openssl-probe"
1828 | version = "0.1.5"
1829 | source = "registry+https://github.com/rust-lang/crates.io-index"
1830 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
1831 |
1832 | [[package]]
1833 | name = "openssl-sys"
1834 | version = "0.9.103"
1835 | source = "registry+https://github.com/rust-lang/crates.io-index"
1836 | checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6"
1837 | dependencies = [
1838 | "cc",
1839 | "libc",
1840 | "pkg-config",
1841 | "vcpkg",
1842 | ]
1843 |
1844 | [[package]]
1845 | name = "overload"
1846 | version = "0.1.1"
1847 | source = "registry+https://github.com/rust-lang/crates.io-index"
1848 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
1849 |
1850 | [[package]]
1851 | name = "pango"
1852 | version = "0.15.10"
1853 | source = "registry+https://github.com/rust-lang/crates.io-index"
1854 | checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f"
1855 | dependencies = [
1856 | "bitflags 1.3.2",
1857 | "glib",
1858 | "libc",
1859 | "once_cell",
1860 | "pango-sys",
1861 | ]
1862 |
1863 | [[package]]
1864 | name = "pango-sys"
1865 | version = "0.15.10"
1866 | source = "registry+https://github.com/rust-lang/crates.io-index"
1867 | checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa"
1868 | dependencies = [
1869 | "glib-sys",
1870 | "gobject-sys",
1871 | "libc",
1872 | "system-deps 6.0.3",
1873 | ]
1874 |
1875 | [[package]]
1876 | name = "parking_lot"
1877 | version = "0.12.1"
1878 | source = "registry+https://github.com/rust-lang/crates.io-index"
1879 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
1880 | dependencies = [
1881 | "lock_api",
1882 | "parking_lot_core",
1883 | ]
1884 |
1885 | [[package]]
1886 | name = "parking_lot_core"
1887 | version = "0.9.6"
1888 | source = "registry+https://github.com/rust-lang/crates.io-index"
1889 | checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf"
1890 | dependencies = [
1891 | "cfg-if",
1892 | "libc",
1893 | "redox_syscall",
1894 | "smallvec",
1895 | "windows-sys 0.42.0",
1896 | ]
1897 |
1898 | [[package]]
1899 | name = "paste"
1900 | version = "1.0.11"
1901 | source = "registry+https://github.com/rust-lang/crates.io-index"
1902 | checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba"
1903 |
1904 | [[package]]
1905 | name = "pathdiff"
1906 | version = "0.2.1"
1907 | source = "registry+https://github.com/rust-lang/crates.io-index"
1908 | checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
1909 |
1910 | [[package]]
1911 | name = "percent-encoding"
1912 | version = "2.2.0"
1913 | source = "registry+https://github.com/rust-lang/crates.io-index"
1914 | checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
1915 |
1916 | [[package]]
1917 | name = "pest"
1918 | version = "2.5.4"
1919 | source = "registry+https://github.com/rust-lang/crates.io-index"
1920 | checksum = "4ab62d2fa33726dbe6321cc97ef96d8cde531e3eeaf858a058de53a8a6d40d8f"
1921 | dependencies = [
1922 | "thiserror",
1923 | "ucd-trie",
1924 | ]
1925 |
1926 | [[package]]
1927 | name = "phf"
1928 | version = "0.8.0"
1929 | source = "registry+https://github.com/rust-lang/crates.io-index"
1930 | checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
1931 | dependencies = [
1932 | "phf_macros 0.8.0",
1933 | "phf_shared 0.8.0",
1934 | "proc-macro-hack",
1935 | ]
1936 |
1937 | [[package]]
1938 | name = "phf"
1939 | version = "0.10.1"
1940 | source = "registry+https://github.com/rust-lang/crates.io-index"
1941 | checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
1942 | dependencies = [
1943 | "phf_macros 0.10.0",
1944 | "phf_shared 0.10.0",
1945 | "proc-macro-hack",
1946 | ]
1947 |
1948 | [[package]]
1949 | name = "phf_codegen"
1950 | version = "0.8.0"
1951 | source = "registry+https://github.com/rust-lang/crates.io-index"
1952 | checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
1953 | dependencies = [
1954 | "phf_generator 0.8.0",
1955 | "phf_shared 0.8.0",
1956 | ]
1957 |
1958 | [[package]]
1959 | name = "phf_generator"
1960 | version = "0.8.0"
1961 | source = "registry+https://github.com/rust-lang/crates.io-index"
1962 | checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
1963 | dependencies = [
1964 | "phf_shared 0.8.0",
1965 | "rand 0.7.3",
1966 | ]
1967 |
1968 | [[package]]
1969 | name = "phf_generator"
1970 | version = "0.10.0"
1971 | source = "registry+https://github.com/rust-lang/crates.io-index"
1972 | checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
1973 | dependencies = [
1974 | "phf_shared 0.10.0",
1975 | "rand 0.8.5",
1976 | ]
1977 |
1978 | [[package]]
1979 | name = "phf_macros"
1980 | version = "0.8.0"
1981 | source = "registry+https://github.com/rust-lang/crates.io-index"
1982 | checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c"
1983 | dependencies = [
1984 | "phf_generator 0.8.0",
1985 | "phf_shared 0.8.0",
1986 | "proc-macro-hack",
1987 | "proc-macro2",
1988 | "quote",
1989 | "syn",
1990 | ]
1991 |
1992 | [[package]]
1993 | name = "phf_macros"
1994 | version = "0.10.0"
1995 | source = "registry+https://github.com/rust-lang/crates.io-index"
1996 | checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0"
1997 | dependencies = [
1998 | "phf_generator 0.10.0",
1999 | "phf_shared 0.10.0",
2000 | "proc-macro-hack",
2001 | "proc-macro2",
2002 | "quote",
2003 | "syn",
2004 | ]
2005 |
2006 | [[package]]
2007 | name = "phf_shared"
2008 | version = "0.8.0"
2009 | source = "registry+https://github.com/rust-lang/crates.io-index"
2010 | checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
2011 | dependencies = [
2012 | "siphasher",
2013 | ]
2014 |
2015 | [[package]]
2016 | name = "phf_shared"
2017 | version = "0.10.0"
2018 | source = "registry+https://github.com/rust-lang/crates.io-index"
2019 | checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
2020 | dependencies = [
2021 | "siphasher",
2022 | ]
2023 |
2024 | [[package]]
2025 | name = "pin-project-lite"
2026 | version = "0.2.9"
2027 | source = "registry+https://github.com/rust-lang/crates.io-index"
2028 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
2029 |
2030 | [[package]]
2031 | name = "pin-utils"
2032 | version = "0.1.0"
2033 | source = "registry+https://github.com/rust-lang/crates.io-index"
2034 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
2035 |
2036 | [[package]]
2037 | name = "pkg-config"
2038 | version = "0.3.26"
2039 | source = "registry+https://github.com/rust-lang/crates.io-index"
2040 | checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
2041 |
2042 | [[package]]
2043 | name = "plist"
2044 | version = "1.4.0"
2045 | source = "registry+https://github.com/rust-lang/crates.io-index"
2046 | checksum = "5329b8f106a176ab0dce4aae5da86bfcb139bb74fb00882859e03745011f3635"
2047 | dependencies = [
2048 | "base64 0.13.1",
2049 | "indexmap 1.9.2",
2050 | "line-wrap",
2051 | "quick-xml",
2052 | "serde",
2053 | "time",
2054 | ]
2055 |
2056 | [[package]]
2057 | name = "png"
2058 | version = "0.17.7"
2059 | source = "registry+https://github.com/rust-lang/crates.io-index"
2060 | checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638"
2061 | dependencies = [
2062 | "bitflags 1.3.2",
2063 | "crc32fast",
2064 | "flate2",
2065 | "miniz_oxide",
2066 | ]
2067 |
2068 | [[package]]
2069 | name = "ppv-lite86"
2070 | version = "0.2.17"
2071 | source = "registry+https://github.com/rust-lang/crates.io-index"
2072 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
2073 |
2074 | [[package]]
2075 | name = "precomputed-hash"
2076 | version = "0.1.1"
2077 | source = "registry+https://github.com/rust-lang/crates.io-index"
2078 | checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
2079 |
2080 | [[package]]
2081 | name = "proc-macro-crate"
2082 | version = "1.3.0"
2083 | source = "registry+https://github.com/rust-lang/crates.io-index"
2084 | checksum = "66618389e4ec1c7afe67d51a9bf34ff9236480f8d51e7489b7d5ab0303c13f34"
2085 | dependencies = [
2086 | "once_cell",
2087 | "toml_edit",
2088 | ]
2089 |
2090 | [[package]]
2091 | name = "proc-macro-error"
2092 | version = "1.0.4"
2093 | source = "registry+https://github.com/rust-lang/crates.io-index"
2094 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
2095 | dependencies = [
2096 | "proc-macro-error-attr",
2097 | "proc-macro2",
2098 | "quote",
2099 | "syn",
2100 | "version_check",
2101 | ]
2102 |
2103 | [[package]]
2104 | name = "proc-macro-error-attr"
2105 | version = "1.0.4"
2106 | source = "registry+https://github.com/rust-lang/crates.io-index"
2107 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
2108 | dependencies = [
2109 | "proc-macro2",
2110 | "quote",
2111 | "version_check",
2112 | ]
2113 |
2114 | [[package]]
2115 | name = "proc-macro-hack"
2116 | version = "0.5.20+deprecated"
2117 | source = "registry+https://github.com/rust-lang/crates.io-index"
2118 | checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
2119 |
2120 | [[package]]
2121 | name = "proc-macro2"
2122 | version = "1.0.50"
2123 | source = "registry+https://github.com/rust-lang/crates.io-index"
2124 | checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2"
2125 | dependencies = [
2126 | "unicode-ident",
2127 | ]
2128 |
2129 | [[package]]
2130 | name = "proxy-checker"
2131 | version = "0.1.1"
2132 | dependencies = [
2133 | "checker-library",
2134 | "env_logger",
2135 | "log",
2136 | "num_cpus",
2137 | "rayon",
2138 | "serde",
2139 | "serde_json",
2140 | "tauri",
2141 | "tauri-build",
2142 | "tauri-plugin-store",
2143 | "tokio",
2144 | "uuid 1.2.2",
2145 | ]
2146 |
2147 | [[package]]
2148 | name = "quick-xml"
2149 | version = "0.26.0"
2150 | source = "registry+https://github.com/rust-lang/crates.io-index"
2151 | checksum = "7f50b1c63b38611e7d4d7f68b82d3ad0cc71a2ad2e7f61fc10f1328d917c93cd"
2152 | dependencies = [
2153 | "memchr",
2154 | ]
2155 |
2156 | [[package]]
2157 | name = "quote"
2158 | version = "1.0.23"
2159 | source = "registry+https://github.com/rust-lang/crates.io-index"
2160 | checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
2161 | dependencies = [
2162 | "proc-macro2",
2163 | ]
2164 |
2165 | [[package]]
2166 | name = "rand"
2167 | version = "0.7.3"
2168 | source = "registry+https://github.com/rust-lang/crates.io-index"
2169 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
2170 | dependencies = [
2171 | "getrandom 0.1.16",
2172 | "libc",
2173 | "rand_chacha 0.2.2",
2174 | "rand_core 0.5.1",
2175 | "rand_hc",
2176 | "rand_pcg",
2177 | ]
2178 |
2179 | [[package]]
2180 | name = "rand"
2181 | version = "0.8.5"
2182 | source = "registry+https://github.com/rust-lang/crates.io-index"
2183 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
2184 | dependencies = [
2185 | "libc",
2186 | "rand_chacha 0.3.1",
2187 | "rand_core 0.6.4",
2188 | ]
2189 |
2190 | [[package]]
2191 | name = "rand_chacha"
2192 | version = "0.2.2"
2193 | source = "registry+https://github.com/rust-lang/crates.io-index"
2194 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
2195 | dependencies = [
2196 | "ppv-lite86",
2197 | "rand_core 0.5.1",
2198 | ]
2199 |
2200 | [[package]]
2201 | name = "rand_chacha"
2202 | version = "0.3.1"
2203 | source = "registry+https://github.com/rust-lang/crates.io-index"
2204 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
2205 | dependencies = [
2206 | "ppv-lite86",
2207 | "rand_core 0.6.4",
2208 | ]
2209 |
2210 | [[package]]
2211 | name = "rand_core"
2212 | version = "0.5.1"
2213 | source = "registry+https://github.com/rust-lang/crates.io-index"
2214 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
2215 | dependencies = [
2216 | "getrandom 0.1.16",
2217 | ]
2218 |
2219 | [[package]]
2220 | name = "rand_core"
2221 | version = "0.6.4"
2222 | source = "registry+https://github.com/rust-lang/crates.io-index"
2223 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
2224 | dependencies = [
2225 | "getrandom 0.2.8",
2226 | ]
2227 |
2228 | [[package]]
2229 | name = "rand_hc"
2230 | version = "0.2.0"
2231 | source = "registry+https://github.com/rust-lang/crates.io-index"
2232 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
2233 | dependencies = [
2234 | "rand_core 0.5.1",
2235 | ]
2236 |
2237 | [[package]]
2238 | name = "rand_pcg"
2239 | version = "0.2.1"
2240 | source = "registry+https://github.com/rust-lang/crates.io-index"
2241 | checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
2242 | dependencies = [
2243 | "rand_core 0.5.1",
2244 | ]
2245 |
2246 | [[package]]
2247 | name = "raw-window-handle"
2248 | version = "0.5.0"
2249 | source = "registry+https://github.com/rust-lang/crates.io-index"
2250 | checksum = "ed7e3d950b66e19e0c372f3fa3fbbcf85b1746b571f74e0c2af6042a5c93420a"
2251 | dependencies = [
2252 | "cty",
2253 | ]
2254 |
2255 | [[package]]
2256 | name = "rayon"
2257 | version = "1.6.1"
2258 | source = "registry+https://github.com/rust-lang/crates.io-index"
2259 | checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7"
2260 | dependencies = [
2261 | "either",
2262 | "rayon-core",
2263 | ]
2264 |
2265 | [[package]]
2266 | name = "rayon-core"
2267 | version = "1.10.2"
2268 | source = "registry+https://github.com/rust-lang/crates.io-index"
2269 | checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b"
2270 | dependencies = [
2271 | "crossbeam-channel",
2272 | "crossbeam-deque",
2273 | "crossbeam-utils",
2274 | "num_cpus",
2275 | ]
2276 |
2277 | [[package]]
2278 | name = "redox_syscall"
2279 | version = "0.2.16"
2280 | source = "registry+https://github.com/rust-lang/crates.io-index"
2281 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
2282 | dependencies = [
2283 | "bitflags 1.3.2",
2284 | ]
2285 |
2286 | [[package]]
2287 | name = "redox_users"
2288 | version = "0.4.3"
2289 | source = "registry+https://github.com/rust-lang/crates.io-index"
2290 | checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
2291 | dependencies = [
2292 | "getrandom 0.2.8",
2293 | "redox_syscall",
2294 | "thiserror",
2295 | ]
2296 |
2297 | [[package]]
2298 | name = "regex"
2299 | version = "1.7.1"
2300 | source = "registry+https://github.com/rust-lang/crates.io-index"
2301 | checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
2302 | dependencies = [
2303 | "aho-corasick",
2304 | "memchr",
2305 | "regex-syntax",
2306 | ]
2307 |
2308 | [[package]]
2309 | name = "regex-automata"
2310 | version = "0.1.10"
2311 | source = "registry+https://github.com/rust-lang/crates.io-index"
2312 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
2313 | dependencies = [
2314 | "regex-syntax",
2315 | ]
2316 |
2317 | [[package]]
2318 | name = "regex-syntax"
2319 | version = "0.6.28"
2320 | source = "registry+https://github.com/rust-lang/crates.io-index"
2321 | checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
2322 |
2323 | [[package]]
2324 | name = "remove_dir_all"
2325 | version = "0.5.3"
2326 | source = "registry+https://github.com/rust-lang/crates.io-index"
2327 | checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
2328 | dependencies = [
2329 | "winapi",
2330 | ]
2331 |
2332 | [[package]]
2333 | name = "reqwest"
2334 | version = "0.11.14"
2335 | source = "registry+https://github.com/rust-lang/crates.io-index"
2336 | checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9"
2337 | dependencies = [
2338 | "base64 0.21.0",
2339 | "bytes",
2340 | "encoding_rs",
2341 | "futures-core",
2342 | "futures-util",
2343 | "h2",
2344 | "http",
2345 | "http-body",
2346 | "hyper",
2347 | "hyper-tls",
2348 | "ipnet",
2349 | "js-sys",
2350 | "log",
2351 | "mime",
2352 | "native-tls",
2353 | "once_cell",
2354 | "percent-encoding",
2355 | "pin-project-lite",
2356 | "serde",
2357 | "serde_json",
2358 | "serde_urlencoded",
2359 | "tokio",
2360 | "tokio-native-tls",
2361 | "tokio-socks",
2362 | "tower-service",
2363 | "url",
2364 | "wasm-bindgen",
2365 | "wasm-bindgen-futures",
2366 | "web-sys",
2367 | "winreg",
2368 | ]
2369 |
2370 | [[package]]
2371 | name = "rfd"
2372 | version = "0.10.0"
2373 | source = "registry+https://github.com/rust-lang/crates.io-index"
2374 | checksum = "0149778bd99b6959285b0933288206090c50e2327f47a9c463bfdbf45c8823ea"
2375 | dependencies = [
2376 | "block",
2377 | "dispatch",
2378 | "glib-sys",
2379 | "gobject-sys",
2380 | "gtk-sys",
2381 | "js-sys",
2382 | "lazy_static",
2383 | "log",
2384 | "objc",
2385 | "objc-foundation",
2386 | "objc_id",
2387 | "raw-window-handle",
2388 | "wasm-bindgen",
2389 | "wasm-bindgen-futures",
2390 | "web-sys",
2391 | "windows 0.37.0",
2392 | ]
2393 |
2394 | [[package]]
2395 | name = "rustc_version"
2396 | version = "0.3.3"
2397 | source = "registry+https://github.com/rust-lang/crates.io-index"
2398 | checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee"
2399 | dependencies = [
2400 | "semver 0.11.0",
2401 | ]
2402 |
2403 | [[package]]
2404 | name = "rustc_version"
2405 | version = "0.4.0"
2406 | source = "registry+https://github.com/rust-lang/crates.io-index"
2407 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
2408 | dependencies = [
2409 | "semver 1.0.16",
2410 | ]
2411 |
2412 | [[package]]
2413 | name = "rustix"
2414 | version = "0.36.17"
2415 | source = "registry+https://github.com/rust-lang/crates.io-index"
2416 | checksum = "305efbd14fde4139eb501df5f136994bb520b033fa9fbdce287507dc23b8c7ed"
2417 | dependencies = [
2418 | "bitflags 1.3.2",
2419 | "errno",
2420 | "io-lifetimes",
2421 | "libc",
2422 | "linux-raw-sys",
2423 | "windows-sys 0.45.0",
2424 | ]
2425 |
2426 | [[package]]
2427 | name = "rustversion"
2428 | version = "1.0.11"
2429 | source = "registry+https://github.com/rust-lang/crates.io-index"
2430 | checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70"
2431 |
2432 | [[package]]
2433 | name = "ryu"
2434 | version = "1.0.12"
2435 | source = "registry+https://github.com/rust-lang/crates.io-index"
2436 | checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
2437 |
2438 | [[package]]
2439 | name = "safemem"
2440 | version = "0.3.3"
2441 | source = "registry+https://github.com/rust-lang/crates.io-index"
2442 | checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
2443 |
2444 | [[package]]
2445 | name = "same-file"
2446 | version = "1.0.6"
2447 | source = "registry+https://github.com/rust-lang/crates.io-index"
2448 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
2449 | dependencies = [
2450 | "winapi-util",
2451 | ]
2452 |
2453 | [[package]]
2454 | name = "schannel"
2455 | version = "0.1.21"
2456 | source = "registry+https://github.com/rust-lang/crates.io-index"
2457 | checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
2458 | dependencies = [
2459 | "windows-sys 0.42.0",
2460 | ]
2461 |
2462 | [[package]]
2463 | name = "scoped-tls"
2464 | version = "1.0.1"
2465 | source = "registry+https://github.com/rust-lang/crates.io-index"
2466 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
2467 |
2468 | [[package]]
2469 | name = "scopeguard"
2470 | version = "1.1.0"
2471 | source = "registry+https://github.com/rust-lang/crates.io-index"
2472 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
2473 |
2474 | [[package]]
2475 | name = "security-framework"
2476 | version = "2.8.2"
2477 | source = "registry+https://github.com/rust-lang/crates.io-index"
2478 | checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
2479 | dependencies = [
2480 | "bitflags 1.3.2",
2481 | "core-foundation",
2482 | "core-foundation-sys",
2483 | "libc",
2484 | "security-framework-sys",
2485 | ]
2486 |
2487 | [[package]]
2488 | name = "security-framework-sys"
2489 | version = "2.8.0"
2490 | source = "registry+https://github.com/rust-lang/crates.io-index"
2491 | checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
2492 | dependencies = [
2493 | "core-foundation-sys",
2494 | "libc",
2495 | ]
2496 |
2497 | [[package]]
2498 | name = "selectors"
2499 | version = "0.22.0"
2500 | source = "registry+https://github.com/rust-lang/crates.io-index"
2501 | checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe"
2502 | dependencies = [
2503 | "bitflags 1.3.2",
2504 | "cssparser",
2505 | "derive_more",
2506 | "fxhash",
2507 | "log",
2508 | "matches",
2509 | "phf 0.8.0",
2510 | "phf_codegen",
2511 | "precomputed-hash",
2512 | "servo_arc",
2513 | "smallvec",
2514 | "thin-slice",
2515 | ]
2516 |
2517 | [[package]]
2518 | name = "semver"
2519 | version = "0.11.0"
2520 | source = "registry+https://github.com/rust-lang/crates.io-index"
2521 | checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
2522 | dependencies = [
2523 | "semver-parser",
2524 | ]
2525 |
2526 | [[package]]
2527 | name = "semver"
2528 | version = "1.0.16"
2529 | source = "registry+https://github.com/rust-lang/crates.io-index"
2530 | checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a"
2531 | dependencies = [
2532 | "serde",
2533 | ]
2534 |
2535 | [[package]]
2536 | name = "semver-parser"
2537 | version = "0.10.2"
2538 | source = "registry+https://github.com/rust-lang/crates.io-index"
2539 | checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
2540 | dependencies = [
2541 | "pest",
2542 | ]
2543 |
2544 | [[package]]
2545 | name = "serde"
2546 | version = "1.0.152"
2547 | source = "registry+https://github.com/rust-lang/crates.io-index"
2548 | checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
2549 | dependencies = [
2550 | "serde_derive",
2551 | ]
2552 |
2553 | [[package]]
2554 | name = "serde_derive"
2555 | version = "1.0.152"
2556 | source = "registry+https://github.com/rust-lang/crates.io-index"
2557 | checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
2558 | dependencies = [
2559 | "proc-macro2",
2560 | "quote",
2561 | "syn",
2562 | ]
2563 |
2564 | [[package]]
2565 | name = "serde_json"
2566 | version = "1.0.91"
2567 | source = "registry+https://github.com/rust-lang/crates.io-index"
2568 | checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883"
2569 | dependencies = [
2570 | "itoa 1.0.5",
2571 | "ryu",
2572 | "serde",
2573 | ]
2574 |
2575 | [[package]]
2576 | name = "serde_repr"
2577 | version = "0.1.10"
2578 | source = "registry+https://github.com/rust-lang/crates.io-index"
2579 | checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e"
2580 | dependencies = [
2581 | "proc-macro2",
2582 | "quote",
2583 | "syn",
2584 | ]
2585 |
2586 | [[package]]
2587 | name = "serde_urlencoded"
2588 | version = "0.7.1"
2589 | source = "registry+https://github.com/rust-lang/crates.io-index"
2590 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
2591 | dependencies = [
2592 | "form_urlencoded",
2593 | "itoa 1.0.5",
2594 | "ryu",
2595 | "serde",
2596 | ]
2597 |
2598 | [[package]]
2599 | name = "serde_with"
2600 | version = "1.14.0"
2601 | source = "registry+https://github.com/rust-lang/crates.io-index"
2602 | checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff"
2603 | dependencies = [
2604 | "serde",
2605 | "serde_with_macros",
2606 | ]
2607 |
2608 | [[package]]
2609 | name = "serde_with_macros"
2610 | version = "1.5.2"
2611 | source = "registry+https://github.com/rust-lang/crates.io-index"
2612 | checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082"
2613 | dependencies = [
2614 | "darling",
2615 | "proc-macro2",
2616 | "quote",
2617 | "syn",
2618 | ]
2619 |
2620 | [[package]]
2621 | name = "serialize-to-javascript"
2622 | version = "0.1.1"
2623 | source = "registry+https://github.com/rust-lang/crates.io-index"
2624 | checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb"
2625 | dependencies = [
2626 | "serde",
2627 | "serde_json",
2628 | "serialize-to-javascript-impl",
2629 | ]
2630 |
2631 | [[package]]
2632 | name = "serialize-to-javascript-impl"
2633 | version = "0.1.1"
2634 | source = "registry+https://github.com/rust-lang/crates.io-index"
2635 | checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763"
2636 | dependencies = [
2637 | "proc-macro2",
2638 | "quote",
2639 | "syn",
2640 | ]
2641 |
2642 | [[package]]
2643 | name = "servo_arc"
2644 | version = "0.1.1"
2645 | source = "registry+https://github.com/rust-lang/crates.io-index"
2646 | checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432"
2647 | dependencies = [
2648 | "nodrop",
2649 | "stable_deref_trait",
2650 | ]
2651 |
2652 | [[package]]
2653 | name = "sha2"
2654 | version = "0.10.6"
2655 | source = "registry+https://github.com/rust-lang/crates.io-index"
2656 | checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
2657 | dependencies = [
2658 | "cfg-if",
2659 | "cpufeatures",
2660 | "digest",
2661 | ]
2662 |
2663 | [[package]]
2664 | name = "sharded-slab"
2665 | version = "0.1.4"
2666 | source = "registry+https://github.com/rust-lang/crates.io-index"
2667 | checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
2668 | dependencies = [
2669 | "lazy_static",
2670 | ]
2671 |
2672 | [[package]]
2673 | name = "signal-hook-registry"
2674 | version = "1.4.0"
2675 | source = "registry+https://github.com/rust-lang/crates.io-index"
2676 | checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
2677 | dependencies = [
2678 | "libc",
2679 | ]
2680 |
2681 | [[package]]
2682 | name = "siphasher"
2683 | version = "0.3.10"
2684 | source = "registry+https://github.com/rust-lang/crates.io-index"
2685 | checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
2686 |
2687 | [[package]]
2688 | name = "slab"
2689 | version = "0.4.7"
2690 | source = "registry+https://github.com/rust-lang/crates.io-index"
2691 | checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
2692 | dependencies = [
2693 | "autocfg",
2694 | ]
2695 |
2696 | [[package]]
2697 | name = "smallvec"
2698 | version = "1.10.0"
2699 | source = "registry+https://github.com/rust-lang/crates.io-index"
2700 | checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
2701 |
2702 | [[package]]
2703 | name = "socket2"
2704 | version = "0.4.7"
2705 | source = "registry+https://github.com/rust-lang/crates.io-index"
2706 | checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
2707 | dependencies = [
2708 | "libc",
2709 | "winapi",
2710 | ]
2711 |
2712 | [[package]]
2713 | name = "soup2"
2714 | version = "0.2.1"
2715 | source = "registry+https://github.com/rust-lang/crates.io-index"
2716 | checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0"
2717 | dependencies = [
2718 | "bitflags 1.3.2",
2719 | "gio",
2720 | "glib",
2721 | "libc",
2722 | "once_cell",
2723 | "soup2-sys",
2724 | ]
2725 |
2726 | [[package]]
2727 | name = "soup2-sys"
2728 | version = "0.2.0"
2729 | source = "registry+https://github.com/rust-lang/crates.io-index"
2730 | checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf"
2731 | dependencies = [
2732 | "bitflags 1.3.2",
2733 | "gio-sys",
2734 | "glib-sys",
2735 | "gobject-sys",
2736 | "libc",
2737 | "system-deps 5.0.0",
2738 | ]
2739 |
2740 | [[package]]
2741 | name = "stable_deref_trait"
2742 | version = "1.2.0"
2743 | source = "registry+https://github.com/rust-lang/crates.io-index"
2744 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
2745 |
2746 | [[package]]
2747 | name = "state"
2748 | version = "0.5.3"
2749 | source = "registry+https://github.com/rust-lang/crates.io-index"
2750 | checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b"
2751 | dependencies = [
2752 | "loom",
2753 | ]
2754 |
2755 | [[package]]
2756 | name = "string_cache"
2757 | version = "0.8.4"
2758 | source = "registry+https://github.com/rust-lang/crates.io-index"
2759 | checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08"
2760 | dependencies = [
2761 | "new_debug_unreachable",
2762 | "once_cell",
2763 | "parking_lot",
2764 | "phf_shared 0.10.0",
2765 | "precomputed-hash",
2766 | "serde",
2767 | ]
2768 |
2769 | [[package]]
2770 | name = "string_cache_codegen"
2771 | version = "0.5.2"
2772 | source = "registry+https://github.com/rust-lang/crates.io-index"
2773 | checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
2774 | dependencies = [
2775 | "phf_generator 0.10.0",
2776 | "phf_shared 0.10.0",
2777 | "proc-macro2",
2778 | "quote",
2779 | ]
2780 |
2781 | [[package]]
2782 | name = "strsim"
2783 | version = "0.10.0"
2784 | source = "registry+https://github.com/rust-lang/crates.io-index"
2785 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
2786 |
2787 | [[package]]
2788 | name = "syn"
2789 | version = "1.0.107"
2790 | source = "registry+https://github.com/rust-lang/crates.io-index"
2791 | checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5"
2792 | dependencies = [
2793 | "proc-macro2",
2794 | "quote",
2795 | "unicode-ident",
2796 | ]
2797 |
2798 | [[package]]
2799 | name = "system-deps"
2800 | version = "5.0.0"
2801 | source = "registry+https://github.com/rust-lang/crates.io-index"
2802 | checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e"
2803 | dependencies = [
2804 | "cfg-expr 0.9.1",
2805 | "heck 0.3.3",
2806 | "pkg-config",
2807 | "toml",
2808 | "version-compare 0.0.11",
2809 | ]
2810 |
2811 | [[package]]
2812 | name = "system-deps"
2813 | version = "6.0.3"
2814 | source = "registry+https://github.com/rust-lang/crates.io-index"
2815 | checksum = "2955b1fe31e1fa2fbd1976b71cc69a606d7d4da16f6de3333d0c92d51419aeff"
2816 | dependencies = [
2817 | "cfg-expr 0.11.0",
2818 | "heck 0.4.0",
2819 | "pkg-config",
2820 | "toml",
2821 | "version-compare 0.1.1",
2822 | ]
2823 |
2824 | [[package]]
2825 | name = "tao"
2826 | version = "0.15.8"
2827 | source = "registry+https://github.com/rust-lang/crates.io-index"
2828 | checksum = "ac8e6399427c8494f9849b58694754d7cc741293348a6836b6c8d2c5aa82d8e6"
2829 | dependencies = [
2830 | "bitflags 1.3.2",
2831 | "cairo-rs",
2832 | "cc",
2833 | "cocoa",
2834 | "core-foundation",
2835 | "core-graphics",
2836 | "crossbeam-channel",
2837 | "dispatch",
2838 | "gdk",
2839 | "gdk-pixbuf",
2840 | "gdk-sys",
2841 | "gdkx11-sys",
2842 | "gio",
2843 | "glib",
2844 | "glib-sys",
2845 | "gtk",
2846 | "image",
2847 | "instant",
2848 | "jni",
2849 | "lazy_static",
2850 | "libc",
2851 | "log",
2852 | "ndk",
2853 | "ndk-context",
2854 | "ndk-sys",
2855 | "objc",
2856 | "once_cell",
2857 | "parking_lot",
2858 | "paste",
2859 | "png",
2860 | "raw-window-handle",
2861 | "scopeguard",
2862 | "serde",
2863 | "unicode-segmentation",
2864 | "uuid 1.2.2",
2865 | "windows 0.39.0",
2866 | "windows-implement",
2867 | "x11-dl",
2868 | ]
2869 |
2870 | [[package]]
2871 | name = "tar"
2872 | version = "0.4.38"
2873 | source = "registry+https://github.com/rust-lang/crates.io-index"
2874 | checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
2875 | dependencies = [
2876 | "filetime",
2877 | "libc",
2878 | "xattr",
2879 | ]
2880 |
2881 | [[package]]
2882 | name = "tauri"
2883 | version = "1.2.5"
2884 | source = "registry+https://github.com/rust-lang/crates.io-index"
2885 | checksum = "e3a1fe72365a6d860fddf3403934649a5157b2bbb6f0b50dd3a8858cd1a22412"
2886 | dependencies = [
2887 | "anyhow",
2888 | "cocoa",
2889 | "dirs-next",
2890 | "embed_plist",
2891 | "encoding_rs",
2892 | "flate2",
2893 | "futures-util",
2894 | "glib",
2895 | "glob",
2896 | "gtk",
2897 | "heck 0.4.0",
2898 | "http",
2899 | "ignore",
2900 | "objc",
2901 | "once_cell",
2902 | "open",
2903 | "percent-encoding",
2904 | "rand 0.8.5",
2905 | "raw-window-handle",
2906 | "regex",
2907 | "rfd",
2908 | "semver 1.0.16",
2909 | "serde",
2910 | "serde_json",
2911 | "serde_repr",
2912 | "serialize-to-javascript",
2913 | "state",
2914 | "tar",
2915 | "tauri-macros",
2916 | "tauri-runtime",
2917 | "tauri-runtime-wry",
2918 | "tauri-utils",
2919 | "tempfile",
2920 | "thiserror",
2921 | "tokio",
2922 | "url",
2923 | "uuid 1.2.2",
2924 | "webkit2gtk",
2925 | "webview2-com",
2926 | "windows 0.39.0",
2927 | ]
2928 |
2929 | [[package]]
2930 | name = "tauri-build"
2931 | version = "1.2.1"
2932 | source = "registry+https://github.com/rust-lang/crates.io-index"
2933 | checksum = "8807c85d656b2b93927c19fe5a5f1f1f348f96c2de8b90763b3c2d561511f9b4"
2934 | dependencies = [
2935 | "anyhow",
2936 | "cargo_toml",
2937 | "heck 0.4.0",
2938 | "json-patch",
2939 | "semver 1.0.16",
2940 | "serde_json",
2941 | "tauri-utils",
2942 | "winres",
2943 | ]
2944 |
2945 | [[package]]
2946 | name = "tauri-codegen"
2947 | version = "1.2.1"
2948 | source = "registry+https://github.com/rust-lang/crates.io-index"
2949 | checksum = "14388d484b6b1b5dc0f6a7d6cc6433b3b230bec85eaa576adcdf3f9fafa49251"
2950 | dependencies = [
2951 | "base64 0.13.1",
2952 | "brotli",
2953 | "ico",
2954 | "json-patch",
2955 | "plist",
2956 | "png",
2957 | "proc-macro2",
2958 | "quote",
2959 | "regex",
2960 | "semver 1.0.16",
2961 | "serde",
2962 | "serde_json",
2963 | "sha2",
2964 | "tauri-utils",
2965 | "thiserror",
2966 | "time",
2967 | "uuid 1.2.2",
2968 | "walkdir",
2969 | ]
2970 |
2971 | [[package]]
2972 | name = "tauri-macros"
2973 | version = "1.2.1"
2974 | source = "registry+https://github.com/rust-lang/crates.io-index"
2975 | checksum = "069319e5ecbe653a799b94b0690d9f9bf5d00f7b1d3989aa331c524d4e354075"
2976 | dependencies = [
2977 | "heck 0.4.0",
2978 | "proc-macro2",
2979 | "quote",
2980 | "syn",
2981 | "tauri-codegen",
2982 | "tauri-utils",
2983 | ]
2984 |
2985 | [[package]]
2986 | name = "tauri-plugin-store"
2987 | version = "0.0.0"
2988 | source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#a32008965b5cf060cc04e1e143dd221ce410715d"
2989 | dependencies = [
2990 | "log",
2991 | "serde",
2992 | "serde_json",
2993 | "tauri",
2994 | "thiserror",
2995 | ]
2996 |
2997 | [[package]]
2998 | name = "tauri-runtime"
2999 | version = "0.12.2"
3000 | source = "registry+https://github.com/rust-lang/crates.io-index"
3001 | checksum = "dc36898ad4acb6c381878acf903c320a36cf29b68b74f6e791d6045b6557128c"
3002 | dependencies = [
3003 | "gtk",
3004 | "http",
3005 | "http-range",
3006 | "rand 0.8.5",
3007 | "raw-window-handle",
3008 | "serde",
3009 | "serde_json",
3010 | "tauri-utils",
3011 | "thiserror",
3012 | "url",
3013 | "uuid 1.2.2",
3014 | "webview2-com",
3015 | "windows 0.39.0",
3016 | ]
3017 |
3018 | [[package]]
3019 | name = "tauri-runtime-wry"
3020 | version = "0.12.3"
3021 | source = "registry+https://github.com/rust-lang/crates.io-index"
3022 | checksum = "e2ebc22bc5566ba33310744fadd86709fa591ed163491b165855474523ac1aab"
3023 | dependencies = [
3024 | "cocoa",
3025 | "gtk",
3026 | "percent-encoding",
3027 | "rand 0.8.5",
3028 | "raw-window-handle",
3029 | "tauri-runtime",
3030 | "tauri-utils",
3031 | "url",
3032 | "uuid 1.2.2",
3033 | "webkit2gtk",
3034 | "webview2-com",
3035 | "windows 0.39.0",
3036 | "wry",
3037 | ]
3038 |
3039 | [[package]]
3040 | name = "tauri-utils"
3041 | version = "1.2.1"
3042 | source = "registry+https://github.com/rust-lang/crates.io-index"
3043 | checksum = "5abbc109a6eb45127956ffcc26ef0e875d160150ac16cfa45d26a6b2871686f1"
3044 | dependencies = [
3045 | "brotli",
3046 | "ctor",
3047 | "glob",
3048 | "heck 0.4.0",
3049 | "html5ever",
3050 | "infer",
3051 | "json-patch",
3052 | "kuchiki",
3053 | "memchr",
3054 | "phf 0.10.1",
3055 | "proc-macro2",
3056 | "quote",
3057 | "semver 1.0.16",
3058 | "serde",
3059 | "serde_json",
3060 | "serde_with",
3061 | "thiserror",
3062 | "url",
3063 | "walkdir",
3064 | "windows 0.39.0",
3065 | ]
3066 |
3067 | [[package]]
3068 | name = "tempfile"
3069 | version = "3.3.0"
3070 | source = "registry+https://github.com/rust-lang/crates.io-index"
3071 | checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
3072 | dependencies = [
3073 | "cfg-if",
3074 | "fastrand",
3075 | "libc",
3076 | "redox_syscall",
3077 | "remove_dir_all",
3078 | "winapi",
3079 | ]
3080 |
3081 | [[package]]
3082 | name = "tendril"
3083 | version = "0.4.3"
3084 | source = "registry+https://github.com/rust-lang/crates.io-index"
3085 | checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
3086 | dependencies = [
3087 | "futf",
3088 | "mac",
3089 | "utf-8",
3090 | ]
3091 |
3092 | [[package]]
3093 | name = "termcolor"
3094 | version = "1.2.0"
3095 | source = "registry+https://github.com/rust-lang/crates.io-index"
3096 | checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
3097 | dependencies = [
3098 | "winapi-util",
3099 | ]
3100 |
3101 | [[package]]
3102 | name = "thin-slice"
3103 | version = "0.1.1"
3104 | source = "registry+https://github.com/rust-lang/crates.io-index"
3105 | checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
3106 |
3107 | [[package]]
3108 | name = "thiserror"
3109 | version = "1.0.38"
3110 | source = "registry+https://github.com/rust-lang/crates.io-index"
3111 | checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0"
3112 | dependencies = [
3113 | "thiserror-impl",
3114 | ]
3115 |
3116 | [[package]]
3117 | name = "thiserror-impl"
3118 | version = "1.0.38"
3119 | source = "registry+https://github.com/rust-lang/crates.io-index"
3120 | checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
3121 | dependencies = [
3122 | "proc-macro2",
3123 | "quote",
3124 | "syn",
3125 | ]
3126 |
3127 | [[package]]
3128 | name = "thread_local"
3129 | version = "1.1.4"
3130 | source = "registry+https://github.com/rust-lang/crates.io-index"
3131 | checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
3132 | dependencies = [
3133 | "once_cell",
3134 | ]
3135 |
3136 | [[package]]
3137 | name = "time"
3138 | version = "0.3.17"
3139 | source = "registry+https://github.com/rust-lang/crates.io-index"
3140 | checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376"
3141 | dependencies = [
3142 | "itoa 1.0.5",
3143 | "serde",
3144 | "time-core",
3145 | "time-macros",
3146 | ]
3147 |
3148 | [[package]]
3149 | name = "time-core"
3150 | version = "0.1.0"
3151 | source = "registry+https://github.com/rust-lang/crates.io-index"
3152 | checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
3153 |
3154 | [[package]]
3155 | name = "time-macros"
3156 | version = "0.2.6"
3157 | source = "registry+https://github.com/rust-lang/crates.io-index"
3158 | checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2"
3159 | dependencies = [
3160 | "time-core",
3161 | ]
3162 |
3163 | [[package]]
3164 | name = "tinyvec"
3165 | version = "1.6.0"
3166 | source = "registry+https://github.com/rust-lang/crates.io-index"
3167 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
3168 | dependencies = [
3169 | "tinyvec_macros",
3170 | ]
3171 |
3172 | [[package]]
3173 | name = "tinyvec_macros"
3174 | version = "0.1.0"
3175 | source = "registry+https://github.com/rust-lang/crates.io-index"
3176 | checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
3177 |
3178 | [[package]]
3179 | name = "tokio"
3180 | version = "1.24.2"
3181 | source = "registry+https://github.com/rust-lang/crates.io-index"
3182 | checksum = "597a12a59981d9e3c38d216785b0c37399f6e415e8d0712047620f189371b0bb"
3183 | dependencies = [
3184 | "autocfg",
3185 | "bytes",
3186 | "libc",
3187 | "memchr",
3188 | "mio",
3189 | "num_cpus",
3190 | "parking_lot",
3191 | "pin-project-lite",
3192 | "signal-hook-registry",
3193 | "socket2",
3194 | "tokio-macros",
3195 | "windows-sys 0.42.0",
3196 | ]
3197 |
3198 | [[package]]
3199 | name = "tokio-macros"
3200 | version = "1.8.2"
3201 | source = "registry+https://github.com/rust-lang/crates.io-index"
3202 | checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8"
3203 | dependencies = [
3204 | "proc-macro2",
3205 | "quote",
3206 | "syn",
3207 | ]
3208 |
3209 | [[package]]
3210 | name = "tokio-native-tls"
3211 | version = "0.3.0"
3212 | source = "registry+https://github.com/rust-lang/crates.io-index"
3213 | checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
3214 | dependencies = [
3215 | "native-tls",
3216 | "tokio",
3217 | ]
3218 |
3219 | [[package]]
3220 | name = "tokio-socks"
3221 | version = "0.5.1"
3222 | source = "registry+https://github.com/rust-lang/crates.io-index"
3223 | checksum = "51165dfa029d2a65969413a6cc96f354b86b464498702f174a4efa13608fd8c0"
3224 | dependencies = [
3225 | "either",
3226 | "futures-util",
3227 | "thiserror",
3228 | "tokio",
3229 | ]
3230 |
3231 | [[package]]
3232 | name = "tokio-util"
3233 | version = "0.7.4"
3234 | source = "registry+https://github.com/rust-lang/crates.io-index"
3235 | checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740"
3236 | dependencies = [
3237 | "bytes",
3238 | "futures-core",
3239 | "futures-sink",
3240 | "pin-project-lite",
3241 | "tokio",
3242 | "tracing",
3243 | ]
3244 |
3245 | [[package]]
3246 | name = "toml"
3247 | version = "0.5.11"
3248 | source = "registry+https://github.com/rust-lang/crates.io-index"
3249 | checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
3250 | dependencies = [
3251 | "serde",
3252 | ]
3253 |
3254 | [[package]]
3255 | name = "toml_datetime"
3256 | version = "0.5.1"
3257 | source = "registry+https://github.com/rust-lang/crates.io-index"
3258 | checksum = "4553f467ac8e3d374bc9a177a26801e5d0f9b211aa1673fb137a403afd1c9cf5"
3259 |
3260 | [[package]]
3261 | name = "toml_edit"
3262 | version = "0.18.1"
3263 | source = "registry+https://github.com/rust-lang/crates.io-index"
3264 | checksum = "56c59d8dd7d0dcbc6428bf7aa2f0e823e26e43b3c9aca15bbc9475d23e5fa12b"
3265 | dependencies = [
3266 | "indexmap 1.9.2",
3267 | "nom8",
3268 | "toml_datetime",
3269 | ]
3270 |
3271 | [[package]]
3272 | name = "tower-service"
3273 | version = "0.3.2"
3274 | source = "registry+https://github.com/rust-lang/crates.io-index"
3275 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
3276 |
3277 | [[package]]
3278 | name = "tracing"
3279 | version = "0.1.37"
3280 | source = "registry+https://github.com/rust-lang/crates.io-index"
3281 | checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
3282 | dependencies = [
3283 | "cfg-if",
3284 | "pin-project-lite",
3285 | "tracing-attributes",
3286 | "tracing-core",
3287 | ]
3288 |
3289 | [[package]]
3290 | name = "tracing-attributes"
3291 | version = "0.1.23"
3292 | source = "registry+https://github.com/rust-lang/crates.io-index"
3293 | checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
3294 | dependencies = [
3295 | "proc-macro2",
3296 | "quote",
3297 | "syn",
3298 | ]
3299 |
3300 | [[package]]
3301 | name = "tracing-core"
3302 | version = "0.1.30"
3303 | source = "registry+https://github.com/rust-lang/crates.io-index"
3304 | checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
3305 | dependencies = [
3306 | "once_cell",
3307 | "valuable",
3308 | ]
3309 |
3310 | [[package]]
3311 | name = "tracing-log"
3312 | version = "0.1.3"
3313 | source = "registry+https://github.com/rust-lang/crates.io-index"
3314 | checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
3315 | dependencies = [
3316 | "lazy_static",
3317 | "log",
3318 | "tracing-core",
3319 | ]
3320 |
3321 | [[package]]
3322 | name = "tracing-subscriber"
3323 | version = "0.3.16"
3324 | source = "registry+https://github.com/rust-lang/crates.io-index"
3325 | checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70"
3326 | dependencies = [
3327 | "matchers",
3328 | "nu-ansi-term",
3329 | "once_cell",
3330 | "regex",
3331 | "sharded-slab",
3332 | "smallvec",
3333 | "thread_local",
3334 | "tracing",
3335 | "tracing-core",
3336 | "tracing-log",
3337 | ]
3338 |
3339 | [[package]]
3340 | name = "treediff"
3341 | version = "3.0.2"
3342 | source = "registry+https://github.com/rust-lang/crates.io-index"
3343 | checksum = "761e8d5ad7ce14bb82b7e61ccc0ca961005a275a060b9644a2431aa11553c2ff"
3344 | dependencies = [
3345 | "serde_json",
3346 | ]
3347 |
3348 | [[package]]
3349 | name = "try-lock"
3350 | version = "0.2.4"
3351 | source = "registry+https://github.com/rust-lang/crates.io-index"
3352 | checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
3353 |
3354 | [[package]]
3355 | name = "typenum"
3356 | version = "1.16.0"
3357 | source = "registry+https://github.com/rust-lang/crates.io-index"
3358 | checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
3359 |
3360 | [[package]]
3361 | name = "ucd-trie"
3362 | version = "0.1.5"
3363 | source = "registry+https://github.com/rust-lang/crates.io-index"
3364 | checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
3365 |
3366 | [[package]]
3367 | name = "unicode-bidi"
3368 | version = "0.3.10"
3369 | source = "registry+https://github.com/rust-lang/crates.io-index"
3370 | checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58"
3371 |
3372 | [[package]]
3373 | name = "unicode-ident"
3374 | version = "1.0.6"
3375 | source = "registry+https://github.com/rust-lang/crates.io-index"
3376 | checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
3377 |
3378 | [[package]]
3379 | name = "unicode-normalization"
3380 | version = "0.1.22"
3381 | source = "registry+https://github.com/rust-lang/crates.io-index"
3382 | checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
3383 | dependencies = [
3384 | "tinyvec",
3385 | ]
3386 |
3387 | [[package]]
3388 | name = "unicode-segmentation"
3389 | version = "1.10.0"
3390 | source = "registry+https://github.com/rust-lang/crates.io-index"
3391 | checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a"
3392 |
3393 | [[package]]
3394 | name = "url"
3395 | version = "2.3.1"
3396 | source = "registry+https://github.com/rust-lang/crates.io-index"
3397 | checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
3398 | dependencies = [
3399 | "form_urlencoded",
3400 | "idna",
3401 | "percent-encoding",
3402 | "serde",
3403 | ]
3404 |
3405 | [[package]]
3406 | name = "utf-8"
3407 | version = "0.7.6"
3408 | source = "registry+https://github.com/rust-lang/crates.io-index"
3409 | checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
3410 |
3411 | [[package]]
3412 | name = "uuid"
3413 | version = "0.8.2"
3414 | source = "registry+https://github.com/rust-lang/crates.io-index"
3415 | checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
3416 |
3417 | [[package]]
3418 | name = "uuid"
3419 | version = "1.2.2"
3420 | source = "registry+https://github.com/rust-lang/crates.io-index"
3421 | checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c"
3422 | dependencies = [
3423 | "getrandom 0.2.8",
3424 | "rand 0.8.5",
3425 | "serde",
3426 | ]
3427 |
3428 | [[package]]
3429 | name = "valuable"
3430 | version = "0.1.0"
3431 | source = "registry+https://github.com/rust-lang/crates.io-index"
3432 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
3433 |
3434 | [[package]]
3435 | name = "vcpkg"
3436 | version = "0.2.15"
3437 | source = "registry+https://github.com/rust-lang/crates.io-index"
3438 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
3439 |
3440 | [[package]]
3441 | name = "version-compare"
3442 | version = "0.0.11"
3443 | source = "registry+https://github.com/rust-lang/crates.io-index"
3444 | checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
3445 |
3446 | [[package]]
3447 | name = "version-compare"
3448 | version = "0.1.1"
3449 | source = "registry+https://github.com/rust-lang/crates.io-index"
3450 | checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
3451 |
3452 | [[package]]
3453 | name = "version_check"
3454 | version = "0.9.4"
3455 | source = "registry+https://github.com/rust-lang/crates.io-index"
3456 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
3457 |
3458 | [[package]]
3459 | name = "walkdir"
3460 | version = "2.3.2"
3461 | source = "registry+https://github.com/rust-lang/crates.io-index"
3462 | checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
3463 | dependencies = [
3464 | "same-file",
3465 | "winapi",
3466 | "winapi-util",
3467 | ]
3468 |
3469 | [[package]]
3470 | name = "want"
3471 | version = "0.3.0"
3472 | source = "registry+https://github.com/rust-lang/crates.io-index"
3473 | checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
3474 | dependencies = [
3475 | "log",
3476 | "try-lock",
3477 | ]
3478 |
3479 | [[package]]
3480 | name = "wasi"
3481 | version = "0.9.0+wasi-snapshot-preview1"
3482 | source = "registry+https://github.com/rust-lang/crates.io-index"
3483 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
3484 |
3485 | [[package]]
3486 | name = "wasi"
3487 | version = "0.11.0+wasi-snapshot-preview1"
3488 | source = "registry+https://github.com/rust-lang/crates.io-index"
3489 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
3490 |
3491 | [[package]]
3492 | name = "wasm-bindgen"
3493 | version = "0.2.83"
3494 | source = "registry+https://github.com/rust-lang/crates.io-index"
3495 | checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
3496 | dependencies = [
3497 | "cfg-if",
3498 | "wasm-bindgen-macro",
3499 | ]
3500 |
3501 | [[package]]
3502 | name = "wasm-bindgen-backend"
3503 | version = "0.2.83"
3504 | source = "registry+https://github.com/rust-lang/crates.io-index"
3505 | checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
3506 | dependencies = [
3507 | "bumpalo",
3508 | "log",
3509 | "once_cell",
3510 | "proc-macro2",
3511 | "quote",
3512 | "syn",
3513 | "wasm-bindgen-shared",
3514 | ]
3515 |
3516 | [[package]]
3517 | name = "wasm-bindgen-futures"
3518 | version = "0.4.33"
3519 | source = "registry+https://github.com/rust-lang/crates.io-index"
3520 | checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d"
3521 | dependencies = [
3522 | "cfg-if",
3523 | "js-sys",
3524 | "wasm-bindgen",
3525 | "web-sys",
3526 | ]
3527 |
3528 | [[package]]
3529 | name = "wasm-bindgen-macro"
3530 | version = "0.2.83"
3531 | source = "registry+https://github.com/rust-lang/crates.io-index"
3532 | checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
3533 | dependencies = [
3534 | "quote",
3535 | "wasm-bindgen-macro-support",
3536 | ]
3537 |
3538 | [[package]]
3539 | name = "wasm-bindgen-macro-support"
3540 | version = "0.2.83"
3541 | source = "registry+https://github.com/rust-lang/crates.io-index"
3542 | checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
3543 | dependencies = [
3544 | "proc-macro2",
3545 | "quote",
3546 | "syn",
3547 | "wasm-bindgen-backend",
3548 | "wasm-bindgen-shared",
3549 | ]
3550 |
3551 | [[package]]
3552 | name = "wasm-bindgen-shared"
3553 | version = "0.2.83"
3554 | source = "registry+https://github.com/rust-lang/crates.io-index"
3555 | checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
3556 |
3557 | [[package]]
3558 | name = "web-sys"
3559 | version = "0.3.60"
3560 | source = "registry+https://github.com/rust-lang/crates.io-index"
3561 | checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f"
3562 | dependencies = [
3563 | "js-sys",
3564 | "wasm-bindgen",
3565 | ]
3566 |
3567 | [[package]]
3568 | name = "webkit2gtk"
3569 | version = "0.18.2"
3570 | source = "registry+https://github.com/rust-lang/crates.io-index"
3571 | checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370"
3572 | dependencies = [
3573 | "bitflags 1.3.2",
3574 | "cairo-rs",
3575 | "gdk",
3576 | "gdk-sys",
3577 | "gio",
3578 | "gio-sys",
3579 | "glib",
3580 | "glib-sys",
3581 | "gobject-sys",
3582 | "gtk",
3583 | "gtk-sys",
3584 | "javascriptcore-rs",
3585 | "libc",
3586 | "once_cell",
3587 | "soup2",
3588 | "webkit2gtk-sys",
3589 | ]
3590 |
3591 | [[package]]
3592 | name = "webkit2gtk-sys"
3593 | version = "0.18.0"
3594 | source = "registry+https://github.com/rust-lang/crates.io-index"
3595 | checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3"
3596 | dependencies = [
3597 | "atk-sys",
3598 | "bitflags 1.3.2",
3599 | "cairo-sys-rs",
3600 | "gdk-pixbuf-sys",
3601 | "gdk-sys",
3602 | "gio-sys",
3603 | "glib-sys",
3604 | "gobject-sys",
3605 | "gtk-sys",
3606 | "javascriptcore-rs-sys",
3607 | "libc",
3608 | "pango-sys",
3609 | "pkg-config",
3610 | "soup2-sys",
3611 | "system-deps 6.0.3",
3612 | ]
3613 |
3614 | [[package]]
3615 | name = "webview2-com"
3616 | version = "0.19.1"
3617 | source = "registry+https://github.com/rust-lang/crates.io-index"
3618 | checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178"
3619 | dependencies = [
3620 | "webview2-com-macros",
3621 | "webview2-com-sys",
3622 | "windows 0.39.0",
3623 | "windows-implement",
3624 | ]
3625 |
3626 | [[package]]
3627 | name = "webview2-com-macros"
3628 | version = "0.6.0"
3629 | source = "registry+https://github.com/rust-lang/crates.io-index"
3630 | checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac"
3631 | dependencies = [
3632 | "proc-macro2",
3633 | "quote",
3634 | "syn",
3635 | ]
3636 |
3637 | [[package]]
3638 | name = "webview2-com-sys"
3639 | version = "0.19.0"
3640 | source = "registry+https://github.com/rust-lang/crates.io-index"
3641 | checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7"
3642 | dependencies = [
3643 | "regex",
3644 | "serde",
3645 | "serde_json",
3646 | "thiserror",
3647 | "windows 0.39.0",
3648 | "windows-bindgen",
3649 | "windows-metadata",
3650 | ]
3651 |
3652 | [[package]]
3653 | name = "winapi"
3654 | version = "0.3.9"
3655 | source = "registry+https://github.com/rust-lang/crates.io-index"
3656 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
3657 | dependencies = [
3658 | "winapi-i686-pc-windows-gnu",
3659 | "winapi-x86_64-pc-windows-gnu",
3660 | ]
3661 |
3662 | [[package]]
3663 | name = "winapi-i686-pc-windows-gnu"
3664 | version = "0.4.0"
3665 | source = "registry+https://github.com/rust-lang/crates.io-index"
3666 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
3667 |
3668 | [[package]]
3669 | name = "winapi-util"
3670 | version = "0.1.5"
3671 | source = "registry+https://github.com/rust-lang/crates.io-index"
3672 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
3673 | dependencies = [
3674 | "winapi",
3675 | ]
3676 |
3677 | [[package]]
3678 | name = "winapi-x86_64-pc-windows-gnu"
3679 | version = "0.4.0"
3680 | source = "registry+https://github.com/rust-lang/crates.io-index"
3681 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
3682 |
3683 | [[package]]
3684 | name = "windows"
3685 | version = "0.37.0"
3686 | source = "registry+https://github.com/rust-lang/crates.io-index"
3687 | checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647"
3688 | dependencies = [
3689 | "windows_aarch64_msvc 0.37.0",
3690 | "windows_i686_gnu 0.37.0",
3691 | "windows_i686_msvc 0.37.0",
3692 | "windows_x86_64_gnu 0.37.0",
3693 | "windows_x86_64_msvc 0.37.0",
3694 | ]
3695 |
3696 | [[package]]
3697 | name = "windows"
3698 | version = "0.39.0"
3699 | source = "registry+https://github.com/rust-lang/crates.io-index"
3700 | checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a"
3701 | dependencies = [
3702 | "windows-implement",
3703 | "windows_aarch64_msvc 0.39.0",
3704 | "windows_i686_gnu 0.39.0",
3705 | "windows_i686_msvc 0.39.0",
3706 | "windows_x86_64_gnu 0.39.0",
3707 | "windows_x86_64_msvc 0.39.0",
3708 | ]
3709 |
3710 | [[package]]
3711 | name = "windows-bindgen"
3712 | version = "0.39.0"
3713 | source = "registry+https://github.com/rust-lang/crates.io-index"
3714 | checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41"
3715 | dependencies = [
3716 | "windows-metadata",
3717 | "windows-tokens",
3718 | ]
3719 |
3720 | [[package]]
3721 | name = "windows-implement"
3722 | version = "0.39.0"
3723 | source = "registry+https://github.com/rust-lang/crates.io-index"
3724 | checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7"
3725 | dependencies = [
3726 | "syn",
3727 | "windows-tokens",
3728 | ]
3729 |
3730 | [[package]]
3731 | name = "windows-metadata"
3732 | version = "0.39.0"
3733 | source = "registry+https://github.com/rust-lang/crates.io-index"
3734 | checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278"
3735 |
3736 | [[package]]
3737 | name = "windows-sys"
3738 | version = "0.42.0"
3739 | source = "registry+https://github.com/rust-lang/crates.io-index"
3740 | checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
3741 | dependencies = [
3742 | "windows_aarch64_gnullvm 0.42.1",
3743 | "windows_aarch64_msvc 0.42.1",
3744 | "windows_i686_gnu 0.42.1",
3745 | "windows_i686_msvc 0.42.1",
3746 | "windows_x86_64_gnu 0.42.1",
3747 | "windows_x86_64_gnullvm 0.42.1",
3748 | "windows_x86_64_msvc 0.42.1",
3749 | ]
3750 |
3751 | [[package]]
3752 | name = "windows-sys"
3753 | version = "0.45.0"
3754 | source = "registry+https://github.com/rust-lang/crates.io-index"
3755 | checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
3756 | dependencies = [
3757 | "windows-targets 0.42.1",
3758 | ]
3759 |
3760 | [[package]]
3761 | name = "windows-sys"
3762 | version = "0.48.0"
3763 | source = "registry+https://github.com/rust-lang/crates.io-index"
3764 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
3765 | dependencies = [
3766 | "windows-targets 0.48.5",
3767 | ]
3768 |
3769 | [[package]]
3770 | name = "windows-sys"
3771 | version = "0.52.0"
3772 | source = "registry+https://github.com/rust-lang/crates.io-index"
3773 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
3774 | dependencies = [
3775 | "windows-targets 0.52.6",
3776 | ]
3777 |
3778 | [[package]]
3779 | name = "windows-targets"
3780 | version = "0.42.1"
3781 | source = "registry+https://github.com/rust-lang/crates.io-index"
3782 | checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7"
3783 | dependencies = [
3784 | "windows_aarch64_gnullvm 0.42.1",
3785 | "windows_aarch64_msvc 0.42.1",
3786 | "windows_i686_gnu 0.42.1",
3787 | "windows_i686_msvc 0.42.1",
3788 | "windows_x86_64_gnu 0.42.1",
3789 | "windows_x86_64_gnullvm 0.42.1",
3790 | "windows_x86_64_msvc 0.42.1",
3791 | ]
3792 |
3793 | [[package]]
3794 | name = "windows-targets"
3795 | version = "0.48.5"
3796 | source = "registry+https://github.com/rust-lang/crates.io-index"
3797 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
3798 | dependencies = [
3799 | "windows_aarch64_gnullvm 0.48.5",
3800 | "windows_aarch64_msvc 0.48.5",
3801 | "windows_i686_gnu 0.48.5",
3802 | "windows_i686_msvc 0.48.5",
3803 | "windows_x86_64_gnu 0.48.5",
3804 | "windows_x86_64_gnullvm 0.48.5",
3805 | "windows_x86_64_msvc 0.48.5",
3806 | ]
3807 |
3808 | [[package]]
3809 | name = "windows-targets"
3810 | version = "0.52.6"
3811 | source = "registry+https://github.com/rust-lang/crates.io-index"
3812 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
3813 | dependencies = [
3814 | "windows_aarch64_gnullvm 0.52.6",
3815 | "windows_aarch64_msvc 0.52.6",
3816 | "windows_i686_gnu 0.52.6",
3817 | "windows_i686_gnullvm",
3818 | "windows_i686_msvc 0.52.6",
3819 | "windows_x86_64_gnu 0.52.6",
3820 | "windows_x86_64_gnullvm 0.52.6",
3821 | "windows_x86_64_msvc 0.52.6",
3822 | ]
3823 |
3824 | [[package]]
3825 | name = "windows-tokens"
3826 | version = "0.39.0"
3827 | source = "registry+https://github.com/rust-lang/crates.io-index"
3828 | checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597"
3829 |
3830 | [[package]]
3831 | name = "windows_aarch64_gnullvm"
3832 | version = "0.42.1"
3833 | source = "registry+https://github.com/rust-lang/crates.io-index"
3834 | checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
3835 |
3836 | [[package]]
3837 | name = "windows_aarch64_gnullvm"
3838 | version = "0.48.5"
3839 | source = "registry+https://github.com/rust-lang/crates.io-index"
3840 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
3841 |
3842 | [[package]]
3843 | name = "windows_aarch64_gnullvm"
3844 | version = "0.52.6"
3845 | source = "registry+https://github.com/rust-lang/crates.io-index"
3846 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
3847 |
3848 | [[package]]
3849 | name = "windows_aarch64_msvc"
3850 | version = "0.37.0"
3851 | source = "registry+https://github.com/rust-lang/crates.io-index"
3852 | checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a"
3853 |
3854 | [[package]]
3855 | name = "windows_aarch64_msvc"
3856 | version = "0.39.0"
3857 | source = "registry+https://github.com/rust-lang/crates.io-index"
3858 | checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2"
3859 |
3860 | [[package]]
3861 | name = "windows_aarch64_msvc"
3862 | version = "0.42.1"
3863 | source = "registry+https://github.com/rust-lang/crates.io-index"
3864 | checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
3865 |
3866 | [[package]]
3867 | name = "windows_aarch64_msvc"
3868 | version = "0.48.5"
3869 | source = "registry+https://github.com/rust-lang/crates.io-index"
3870 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
3871 |
3872 | [[package]]
3873 | name = "windows_aarch64_msvc"
3874 | version = "0.52.6"
3875 | source = "registry+https://github.com/rust-lang/crates.io-index"
3876 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
3877 |
3878 | [[package]]
3879 | name = "windows_i686_gnu"
3880 | version = "0.37.0"
3881 | source = "registry+https://github.com/rust-lang/crates.io-index"
3882 | checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1"
3883 |
3884 | [[package]]
3885 | name = "windows_i686_gnu"
3886 | version = "0.39.0"
3887 | source = "registry+https://github.com/rust-lang/crates.io-index"
3888 | checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b"
3889 |
3890 | [[package]]
3891 | name = "windows_i686_gnu"
3892 | version = "0.42.1"
3893 | source = "registry+https://github.com/rust-lang/crates.io-index"
3894 | checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
3895 |
3896 | [[package]]
3897 | name = "windows_i686_gnu"
3898 | version = "0.48.5"
3899 | source = "registry+https://github.com/rust-lang/crates.io-index"
3900 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
3901 |
3902 | [[package]]
3903 | name = "windows_i686_gnu"
3904 | version = "0.52.6"
3905 | source = "registry+https://github.com/rust-lang/crates.io-index"
3906 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
3907 |
3908 | [[package]]
3909 | name = "windows_i686_gnullvm"
3910 | version = "0.52.6"
3911 | source = "registry+https://github.com/rust-lang/crates.io-index"
3912 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
3913 |
3914 | [[package]]
3915 | name = "windows_i686_msvc"
3916 | version = "0.37.0"
3917 | source = "registry+https://github.com/rust-lang/crates.io-index"
3918 | checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c"
3919 |
3920 | [[package]]
3921 | name = "windows_i686_msvc"
3922 | version = "0.39.0"
3923 | source = "registry+https://github.com/rust-lang/crates.io-index"
3924 | checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106"
3925 |
3926 | [[package]]
3927 | name = "windows_i686_msvc"
3928 | version = "0.42.1"
3929 | source = "registry+https://github.com/rust-lang/crates.io-index"
3930 | checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
3931 |
3932 | [[package]]
3933 | name = "windows_i686_msvc"
3934 | version = "0.48.5"
3935 | source = "registry+https://github.com/rust-lang/crates.io-index"
3936 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
3937 |
3938 | [[package]]
3939 | name = "windows_i686_msvc"
3940 | version = "0.52.6"
3941 | source = "registry+https://github.com/rust-lang/crates.io-index"
3942 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
3943 |
3944 | [[package]]
3945 | name = "windows_x86_64_gnu"
3946 | version = "0.37.0"
3947 | source = "registry+https://github.com/rust-lang/crates.io-index"
3948 | checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d"
3949 |
3950 | [[package]]
3951 | name = "windows_x86_64_gnu"
3952 | version = "0.39.0"
3953 | source = "registry+https://github.com/rust-lang/crates.io-index"
3954 | checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65"
3955 |
3956 | [[package]]
3957 | name = "windows_x86_64_gnu"
3958 | version = "0.42.1"
3959 | source = "registry+https://github.com/rust-lang/crates.io-index"
3960 | checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
3961 |
3962 | [[package]]
3963 | name = "windows_x86_64_gnu"
3964 | version = "0.48.5"
3965 | source = "registry+https://github.com/rust-lang/crates.io-index"
3966 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
3967 |
3968 | [[package]]
3969 | name = "windows_x86_64_gnu"
3970 | version = "0.52.6"
3971 | source = "registry+https://github.com/rust-lang/crates.io-index"
3972 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
3973 |
3974 | [[package]]
3975 | name = "windows_x86_64_gnullvm"
3976 | version = "0.42.1"
3977 | source = "registry+https://github.com/rust-lang/crates.io-index"
3978 | checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
3979 |
3980 | [[package]]
3981 | name = "windows_x86_64_gnullvm"
3982 | version = "0.48.5"
3983 | source = "registry+https://github.com/rust-lang/crates.io-index"
3984 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
3985 |
3986 | [[package]]
3987 | name = "windows_x86_64_gnullvm"
3988 | version = "0.52.6"
3989 | source = "registry+https://github.com/rust-lang/crates.io-index"
3990 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
3991 |
3992 | [[package]]
3993 | name = "windows_x86_64_msvc"
3994 | version = "0.37.0"
3995 | source = "registry+https://github.com/rust-lang/crates.io-index"
3996 | checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d"
3997 |
3998 | [[package]]
3999 | name = "windows_x86_64_msvc"
4000 | version = "0.39.0"
4001 | source = "registry+https://github.com/rust-lang/crates.io-index"
4002 | checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809"
4003 |
4004 | [[package]]
4005 | name = "windows_x86_64_msvc"
4006 | version = "0.42.1"
4007 | source = "registry+https://github.com/rust-lang/crates.io-index"
4008 | checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
4009 |
4010 | [[package]]
4011 | name = "windows_x86_64_msvc"
4012 | version = "0.48.5"
4013 | source = "registry+https://github.com/rust-lang/crates.io-index"
4014 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
4015 |
4016 | [[package]]
4017 | name = "windows_x86_64_msvc"
4018 | version = "0.52.6"
4019 | source = "registry+https://github.com/rust-lang/crates.io-index"
4020 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
4021 |
4022 | [[package]]
4023 | name = "winreg"
4024 | version = "0.10.1"
4025 | source = "registry+https://github.com/rust-lang/crates.io-index"
4026 | checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
4027 | dependencies = [
4028 | "winapi",
4029 | ]
4030 |
4031 | [[package]]
4032 | name = "winres"
4033 | version = "0.1.12"
4034 | source = "registry+https://github.com/rust-lang/crates.io-index"
4035 | checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c"
4036 | dependencies = [
4037 | "toml",
4038 | ]
4039 |
4040 | [[package]]
4041 | name = "wry"
4042 | version = "0.23.4"
4043 | source = "registry+https://github.com/rust-lang/crates.io-index"
4044 | checksum = "4c1ad8e2424f554cc5bdebe8aa374ef5b433feff817aebabca0389961fc7ef98"
4045 | dependencies = [
4046 | "base64 0.13.1",
4047 | "block",
4048 | "cocoa",
4049 | "core-graphics",
4050 | "crossbeam-channel",
4051 | "dunce",
4052 | "gdk",
4053 | "gio",
4054 | "glib",
4055 | "gtk",
4056 | "html5ever",
4057 | "http",
4058 | "kuchiki",
4059 | "libc",
4060 | "log",
4061 | "objc",
4062 | "objc_id",
4063 | "once_cell",
4064 | "serde",
4065 | "serde_json",
4066 | "sha2",
4067 | "soup2",
4068 | "tao",
4069 | "thiserror",
4070 | "url",
4071 | "webkit2gtk",
4072 | "webkit2gtk-sys",
4073 | "webview2-com",
4074 | "windows 0.39.0",
4075 | "windows-implement",
4076 | ]
4077 |
4078 | [[package]]
4079 | name = "x11"
4080 | version = "2.21.0"
4081 | source = "registry+https://github.com/rust-lang/crates.io-index"
4082 | checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e"
4083 | dependencies = [
4084 | "libc",
4085 | "pkg-config",
4086 | ]
4087 |
4088 | [[package]]
4089 | name = "x11-dl"
4090 | version = "2.21.0"
4091 | source = "registry+https://github.com/rust-lang/crates.io-index"
4092 | checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
4093 | dependencies = [
4094 | "libc",
4095 | "once_cell",
4096 | "pkg-config",
4097 | ]
4098 |
4099 | [[package]]
4100 | name = "xattr"
4101 | version = "0.2.3"
4102 | source = "registry+https://github.com/rust-lang/crates.io-index"
4103 | checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
4104 | dependencies = [
4105 | "libc",
4106 | ]
4107 |
--------------------------------------------------------------------------------
/src-tauri/Cargo.toml:
--------------------------------------------------------------------------------
1 | [workspace]
2 |
3 | [package]
4 | name = "proxy-checker"
5 | version = "0.1.1"
6 | description = "A Tauri App"
7 | authors = ["you"]
8 | license = ""
9 | repository = ""
10 | edition = "2021"
11 | rust-version = "1.57"
12 |
13 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
14 |
15 | [profile.release]
16 | panic = "abort" # Strip expensive panic clean-up logic
17 | codegen-units = 1 # Compile crates one after another so the compiler can optimize better
18 | lto = true # Enables link to optimizations
19 | opt-level = "z" # Optimize for binary size
20 | strip = true # Remove debug symbols
21 |
22 | [build-dependencies]
23 | tauri-build = { version = "1.2", features = [] }
24 |
25 | [workspace.dependencies]
26 | serde_json = "1.0"
27 | serde = { version = "1.0", features = ["derive"] }
28 | tokio = { version = "1.24.2", features = ["full"] }
29 | rayon = "1.6.1"
30 |
31 | [dependencies]
32 | checker-library = { path = "checker-library" }
33 | serde_json = "1.0"
34 | serde = { version = "1.0", features = ["derive"] }
35 | tauri = { version = "1.2", features = ["dialog-open", "dialog-save", "fs-read-file", "fs-write-file", "shell-open"] }
36 | tauri-plugin-store = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" }
37 | tokio = { version = "1.24.2", features = ["full"] }
38 | log = "0.4.17"
39 | env_logger = "0.10.0"
40 | rayon = "1.6.1"
41 | num_cpus = "1.15.0"
42 | uuid = { version = "1.2.2", features = ["v4", "fast-rng", "serde"] }
43 |
44 | [features]
45 | # by default Tauri runs in production mode
46 | # when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL
47 | default = ["custom-protocol"]
48 | # this feature is used used for production builds where `devPath` points to the filesystem
49 | # DO NOT remove this
50 | custom-protocol = ["tauri/custom-protocol"]
51 |
--------------------------------------------------------------------------------
/src-tauri/build.rs:
--------------------------------------------------------------------------------
1 | fn main() {
2 | tauri_build::build()
3 | }
4 |
--------------------------------------------------------------------------------
/src-tauri/checker-library/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "checker-library"
3 | version = "0.1.1"
4 | edition = "2021"
5 |
6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7 |
8 | [dependencies]
9 | serde_json.workspace = true
10 | serde.workspace = true
11 | tokio.workspace = true
12 | rayon.workspace = true
13 | futures = "0.3.25"
14 | itertools = "0.10.5"
15 | regex = "1.7.1"
16 | reqwest = { version = "0.11.14", features = ["json", "socks"] }
17 | thiserror = "1.0.38"
18 |
--------------------------------------------------------------------------------
/src-tauri/checker-library/src/error.rs:
--------------------------------------------------------------------------------
1 | use thiserror::Error;
2 |
3 | pub type Result = std::result::Result;
4 |
5 | #[derive(Error, Debug)]
6 | pub enum ProxyCheckerError {
7 | #[error("given invalid expression for Regex::new(re: &str)")]
8 | Regex(#[from] regex::Error),
9 | #[error("proxy '{proxy}' does not match pattern '{pattern}'")]
10 | RegexPatternMismatch { proxy: String, pattern: String },
11 | #[error("ip is a required field for '{0}'")]
12 | RegexMissingIp(String),
13 | #[error("port is a required field for '{0}'")]
14 | RegexMissingPort(String),
15 | // Or just #[error(transparent)]
16 | #[error("request processing error: '{0}'")]
17 | Reqwest(#[from] reqwest::Error),
18 | }
19 |
--------------------------------------------------------------------------------
/src-tauri/checker-library/src/lib.rs:
--------------------------------------------------------------------------------
1 | mod error;
2 |
3 | use error::{ProxyCheckerError, Result};
4 | use itertools::Itertools;
5 | use rayon::prelude::*;
6 | use regex::Regex;
7 | use serde::Serialize;
8 | use tokio::sync::Semaphore;
9 |
10 | use std::fmt;
11 | use std::sync::{Arc, Mutex};
12 | use std::time::{Duration, Instant};
13 |
14 | #[derive(Clone, Serialize)]
15 | pub enum EventStatus {
16 | Success,
17 | Error,
18 | }
19 |
20 | #[derive(Clone)]
21 | #[cfg_attr(test, derive(Debug, PartialEq))]
22 | pub struct Proxy {
23 | // Perhaps it's better to make `protocol` as enum
24 | protocol: String,
25 | login: Option,
26 | password: Option,
27 | ip: String,
28 | port: String,
29 | pattern: String,
30 | }
31 |
32 | impl Proxy {
33 | fn new>(
34 | protocol: T,
35 | login: Option,
36 | password: Option,
37 | ip: T,
38 | port: T,
39 | pattern: T,
40 | ) -> Self {
41 | Self {
42 | protocol: protocol.into(),
43 | login: login.map(|l| l.into()),
44 | password: password.map(|p| p.into()),
45 | ip: ip.into(),
46 | port: port.into(),
47 | pattern: pattern.into(),
48 | }
49 | }
50 |
51 | fn protocol(&self) -> &str {
52 | &self.protocol
53 | }
54 |
55 | fn login(&self) -> Option<&str> {
56 | self.login.as_deref()
57 | }
58 |
59 | fn password(&self) -> Option<&str> {
60 | self.password.as_deref()
61 | }
62 |
63 | fn ip(&self) -> &str {
64 | &self.ip
65 | }
66 |
67 | fn port(&self) -> &str {
68 | &self.port
69 | }
70 |
71 | fn pattern(&self) -> &str {
72 | &self.pattern
73 | }
74 |
75 | fn from_string(pattern: &str, proxy: &str, default_protocol: &str) -> Result {
76 | // It might be better to throw `ProxyCheckerError::Regex` not in an event
77 | let re = Regex::new(&build_regex(pattern))?;
78 | let caps = re
79 | .captures(proxy)
80 | .ok_or(ProxyCheckerError::RegexPatternMismatch {
81 | proxy: proxy.to_owned(),
82 | pattern: pattern.to_owned(),
83 | })?;
84 |
85 | Ok(Self::new(
86 | caps.name("protocol")
87 | .map_or(default_protocol, |m| m.as_str()),
88 | caps.name("login").map(|m| m.as_str()),
89 | caps.name("password").map(|m| m.as_str()),
90 | caps.name("ip")
91 | .ok_or(ProxyCheckerError::RegexMissingIp(proxy.to_owned()))?
92 | .as_str(),
93 | caps.name("port")
94 | .ok_or(ProxyCheckerError::RegexMissingPort(proxy.to_owned()))?
95 | .as_str(),
96 | pattern,
97 | ))
98 | }
99 |
100 | fn get_reqwest_proxy(&self) -> Result {
101 | let mut proxy = reqwest::Proxy::all(format!(
102 | "{}://{}:{}",
103 | self.protocol(),
104 | self.ip(),
105 | self.port()
106 | ))?;
107 |
108 | if let (Some(login), Some(password)) = (self.login(), self.password()) {
109 | proxy = proxy.basic_auth(login, password);
110 | }
111 |
112 | Ok(proxy)
113 | }
114 |
115 | async fn send_request(self, url: &str, timeout: u64) -> Result {
116 | let proxy = self.get_reqwest_proxy()?;
117 |
118 | let client = reqwest::Client::builder()
119 | .proxy(proxy)
120 | .timeout(Duration::from_millis(timeout))
121 | .build()?;
122 |
123 | let start = Instant::now();
124 |
125 | client.get(url).send().await?;
126 |
127 | Ok(ProxyWithLatency::new(self, start.elapsed()))
128 | }
129 | }
130 |
131 | impl fmt::Display for Proxy {
132 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
133 | let string = self
134 | .pattern()
135 | .replace("protocol", self.protocol())
136 | // It doesn't affect anything, but `unwrap_or_default` is not the best solution (match is better)
137 | .replace("login", self.login().unwrap_or_default())
138 | .replace("password", self.password().unwrap_or_default())
139 | .replace("ip", self.ip())
140 | .replace("port", self.port());
141 | write!(f, "{string}")
142 | }
143 | }
144 |
145 | struct ProxyWithLatency {
146 | proxy: Proxy,
147 | latancy: Duration,
148 | }
149 |
150 | impl ProxyWithLatency {
151 | fn new(proxy: Proxy, latancy: Duration) -> Self {
152 | Self { proxy, latancy }
153 | }
154 | }
155 |
156 | fn build_regex(pattern: &str) -> String {
157 | pattern
158 | .replace("protocol", r"(?P\w+)")
159 | .replace("login", r"(?P[^:@]+)")
160 | .replace("password", r"(?P[^:@]+)")
161 | .replace(
162 | "ip",
163 | r"(?P(?:\d{1,3}\.){3}\d{1,3}|(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,})",
164 | )
165 | .replace("port", r"(?P\d+)")
166 | }
167 |
168 | pub fn parse_and_filter_proxies(
169 | proxies: String,
170 | pattern: String,
171 | default_protocol: String,
172 | event_handler: F,
173 | ) -> (Vec, usize)
174 | where
175 | F: Fn(EventStatus, String) + Sync,
176 | {
177 | let lines = proxies
178 | .trim()
179 | .lines()
180 | .map(str::trim)
181 | .unique()
182 | .collect::>();
183 |
184 | let proxies = lines
185 | .into_par_iter()
186 | .filter_map(|proxy| {
187 | Proxy::from_string(&pattern, proxy, &default_protocol)
188 | .map_err(|e| event_handler(EventStatus::Error, format!("Error parsing proxy: {e}")))
189 | .ok()
190 | })
191 | .collect::>();
192 |
193 | let length = proxies.len();
194 |
195 | (proxies, length)
196 | }
197 |
198 | pub async fn check_proxies(
199 | proxies: Vec,
200 | url: String,
201 | timeout: u64,
202 | event_handler: F,
203 | threads: usize,
204 | ) -> Vec
205 | where
206 | F: Fn(EventStatus, String) + Send + 'static,
207 | {
208 | let event_handler = Arc::new(Mutex::new(event_handler));
209 | let sem = Arc::new(Semaphore::new(threads));
210 | let mut tasks = vec![];
211 |
212 | for proxy in proxies {
213 | let permit = Arc::clone(&sem).acquire_owned().await;
214 | let proxy_string = proxy.to_string();
215 | let url = url.clone();
216 | let event_handler = event_handler.clone();
217 |
218 | tasks.push(tokio::spawn(async move {
219 | let _permit = permit;
220 |
221 | match proxy.send_request(&url, timeout).await {
222 | Ok(proxy) => {
223 | event_handler.lock().unwrap()(
224 | EventStatus::Success,
225 | format!("Success: {proxy_string} ({} ms)", proxy.latancy.as_millis()),
226 | );
227 | Ok(proxy)
228 | }
229 | Err(err) => {
230 | event_handler.lock().unwrap()(
231 | EventStatus::Error,
232 | format!("Error: {proxy_string} ({err})"),
233 | );
234 | Err(err)
235 | }
236 | }
237 | }))
238 | }
239 |
240 | let result = futures::future::join_all(tasks).await;
241 |
242 | // This can be refactored
243 | result
244 | .into_iter()
245 | .filter_map(|join_result| match join_result {
246 | Ok(Ok(proxy)) => Some(proxy),
247 | _ => None,
248 | })
249 | .sorted_by_key(|proxy| proxy.latancy)
250 | .map(|proxy| proxy.proxy.to_string())
251 | .collect::>()
252 | }
253 |
254 | #[cfg(test)]
255 | mod tests {
256 | use super::*;
257 |
258 | fn setup() -> Vec {
259 | vec![
260 | Proxy::new(
261 | "http",
262 | Some("test"),
263 | Some("test"),
264 | "1.1.1.1",
265 | "80",
266 | "protocol://login:password@ip:port",
267 | ),
268 | Proxy::new("http", None, None, "1.1.1.1", "80", "protocol://ip:port"),
269 | Proxy::new("socks5", None, None, "1.1.1.1", "80", "ip:port"),
270 | Proxy::new(
271 | "http",
272 | Some("test"),
273 | Some("test"),
274 | "example.com",
275 | "80",
276 | "ip:port:login:password",
277 | ),
278 | ]
279 | }
280 |
281 | #[test]
282 | fn test_proxy_new() {
283 | let proxies = setup();
284 |
285 | let expected_proxy0 = Proxy {
286 | protocol: "http".to_owned(),
287 | login: Some("test".to_owned()),
288 | password: Some("test".to_owned()),
289 | ip: "1.1.1.1".to_owned(),
290 | port: "80".to_owned(),
291 | pattern: "protocol://login:password@ip:port".to_owned(),
292 | };
293 |
294 | assert_eq!(proxies[0], expected_proxy0);
295 |
296 | let expected_proxy1 = Proxy {
297 | protocol: "http".to_owned(),
298 | login: None,
299 | password: None,
300 | ip: "1.1.1.1".to_owned(),
301 | port: "80".to_owned(),
302 | pattern: "protocol://ip:port".to_owned(),
303 | };
304 |
305 | assert_eq!(proxies[1], expected_proxy1);
306 |
307 | let expected_proxy2 = Proxy {
308 | protocol: "socks5".to_owned(),
309 | login: None,
310 | password: None,
311 | ip: "1.1.1.1".to_owned(),
312 | port: "80".to_owned(),
313 | pattern: "ip:port".to_owned(),
314 | };
315 |
316 | assert_eq!(proxies[2], expected_proxy2);
317 |
318 | let expected_proxy3 = Proxy {
319 | protocol: "http".to_owned(),
320 | login: Some("test".to_owned()),
321 | password: Some("test".to_owned()),
322 | ip: "example.com".to_owned(),
323 | port: "80".to_owned(),
324 | pattern: "ip:port:login:password".to_owned(),
325 | };
326 |
327 | assert_eq!(proxies[3], expected_proxy3);
328 | }
329 |
330 | #[test]
331 | fn test_proxy_from_string() {
332 | let proxies = setup();
333 |
334 | let test_cases = vec![
335 | (
336 | "protocol://login:password@ip:port",
337 | "http://test:test@1.1.1.1:80",
338 | "http",
339 | proxies[0].clone(),
340 | ),
341 | (
342 | "protocol://ip:port",
343 | "http://1.1.1.1:80",
344 | "http",
345 | proxies[1].clone(),
346 | ),
347 | ("ip:port", "1.1.1.1:80", "socks5", proxies[2].clone()),
348 | (
349 | "ip:port:login:password",
350 | "example.com:80:test:test",
351 | "http",
352 | proxies[3].clone(),
353 | ),
354 | ];
355 |
356 | for (pattern, proxy_string, default_protocol, expected_proxy) in test_cases {
357 | let proxy = Proxy::from_string(pattern, proxy_string, default_protocol).unwrap();
358 | assert_eq!(proxy, expected_proxy);
359 | }
360 | }
361 |
362 | #[test]
363 | fn test_proxy_to_string() {
364 | let proxies = setup();
365 | let expected = vec![
366 | "http://test:test@1.1.1.1:80",
367 | "http://1.1.1.1:80",
368 | "1.1.1.1:80",
369 | "example.com:80:test:test",
370 | ];
371 |
372 | for (proxy, expected) in proxies.into_iter().zip(expected.into_iter()) {
373 | assert_eq!(proxy.to_string(), *expected);
374 | }
375 | }
376 |
377 | fn emit_new_log_event(status: EventStatus, message: String) {
378 | match status {
379 | EventStatus::Success => println!("{}", message),
380 | EventStatus::Error => eprintln!("{}", message),
381 | };
382 | }
383 |
384 | #[test]
385 | fn test_parse_and_filter_proxies() {
386 | let proxies = "1.1.1.1:80\n2.2.2.2:80".to_owned();
387 | let pattern = "ip:port".to_owned();
388 | let default_protocol = "http".to_owned();
389 |
390 | let (proxies, length) =
391 | parse_and_filter_proxies(proxies, pattern, default_protocol, emit_new_log_event);
392 |
393 | let expected_proxy0 = Proxy::new("http", None, None, "1.1.1.1", "80", "ip:port");
394 | let expected_proxy1 = Proxy::new("http", None, None, "2.2.2.2", "80", "ip:port");
395 |
396 | assert_eq!(proxies[0], expected_proxy0);
397 | assert_eq!(proxies[1], expected_proxy1);
398 | assert_eq!(length, 2);
399 | }
400 |
401 | #[tokio::test]
402 | async fn test_check_proxies() {
403 | let proxies = setup().into_iter().take(3).collect::>();
404 | let url = "http://example.com".to_owned();
405 | let timeout = 5000;
406 | let threads = 250;
407 |
408 | let results = check_proxies(proxies, url, timeout, emit_new_log_event, threads).await;
409 |
410 | assert_eq!(results.len(), 2);
411 | }
412 | }
413 |
--------------------------------------------------------------------------------
/src-tauri/icons/128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src-tauri/icons/128x128.png
--------------------------------------------------------------------------------
/src-tauri/icons/128x128@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src-tauri/icons/128x128@2x.png
--------------------------------------------------------------------------------
/src-tauri/icons/32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src-tauri/icons/32x32.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square107x107Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src-tauri/icons/Square107x107Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square142x142Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src-tauri/icons/Square142x142Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square150x150Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src-tauri/icons/Square150x150Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square284x284Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src-tauri/icons/Square284x284Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square30x30Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src-tauri/icons/Square30x30Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square310x310Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src-tauri/icons/Square310x310Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square44x44Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src-tauri/icons/Square44x44Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square71x71Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src-tauri/icons/Square71x71Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square89x89Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src-tauri/icons/Square89x89Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src-tauri/icons/StoreLogo.png
--------------------------------------------------------------------------------
/src-tauri/icons/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src-tauri/icons/icon.icns
--------------------------------------------------------------------------------
/src-tauri/icons/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src-tauri/icons/icon.ico
--------------------------------------------------------------------------------
/src-tauri/icons/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src-tauri/icons/icon.png
--------------------------------------------------------------------------------
/src-tauri/src/main.rs:
--------------------------------------------------------------------------------
1 | #![cfg_attr(
2 | all(not(debug_assertions), target_os = "windows"),
3 | windows_subsystem = "windows"
4 | )]
5 |
6 | use checker_library::{check_proxies, parse_and_filter_proxies, EventStatus, Proxy};
7 | use log::{error, info};
8 | use serde::Serialize;
9 | use uuid::Uuid;
10 |
11 | use std::cmp;
12 | use std::sync::{Arc, Mutex};
13 |
14 | #[derive(Clone, Serialize)]
15 | struct LogPayload {
16 | key: Uuid,
17 | status: EventStatus,
18 | message: String,
19 | }
20 |
21 | impl LogPayload {
22 | fn new(status: EventStatus, message: String) -> Self {
23 | Self {
24 | key: Uuid::new_v4(),
25 | status,
26 | message,
27 | }
28 | }
29 | }
30 |
31 | struct Proxies(Arc>>);
32 | struct WorkingProxies(Mutex>);
33 |
34 | #[tauri::command]
35 | fn parse_and_filter_proxies_command(
36 | window: tauri::Window,
37 | state: tauri::State,
38 | proxies: String,
39 | pattern: String,
40 | default_protocol: String,
41 | ) -> usize {
42 | let (proxies, length) =
43 | parse_and_filter_proxies(proxies, pattern, default_protocol, |status, message| {
44 | emit_new_log_event(&window, status, message);
45 | });
46 |
47 | *state.0.lock().unwrap() = proxies;
48 |
49 | length
50 | }
51 |
52 | #[tauri::command]
53 | async fn check_proxies_command(
54 | window: tauri::Window,
55 | state: tauri::State<'_, Proxies>,
56 | success: tauri::State<'_, WorkingProxies>,
57 | url: String,
58 | timeout: u64,
59 | threads: usize,
60 | ) -> Result<(), ()> {
61 | let proxies = state.0.lock().unwrap().to_vec();
62 |
63 | let result = check_proxies(proxies, url, timeout, move |status, message| {
64 | emit_new_log_event(&window, status, message);
65 | }, threads)
66 | .await;
67 |
68 | *success.0.lock().unwrap() = result;
69 |
70 | Ok(())
71 | }
72 |
73 | fn emit_new_log_event(window: &tauri::Window, status: EventStatus, message: String) {
74 | match status {
75 | EventStatus::Success => info!("{}", message),
76 | EventStatus::Error => error!("{}", message),
77 | };
78 |
79 | if let Err(err) = window.emit("new-log", Some(LogPayload::new(status, message))) {
80 | error!("Error emitting new-log event: {}", err)
81 | }
82 | }
83 |
84 | #[tauri::command]
85 | async fn download_proxies_command(success: tauri::State<'_, WorkingProxies>) -> Result {
86 | let proxies = success.0.lock().unwrap();
87 | let proxies = proxies.join("\n");
88 |
89 | Ok(proxies)
90 | }
91 |
92 | fn main() {
93 | env_logger::init();
94 | // Half of the threads are used to reduce the CPU load
95 | let num_threads = cmp::max(1, num_cpus::get() / 2);
96 |
97 | rayon::ThreadPoolBuilder::new()
98 | .num_threads(num_threads)
99 | .build_global()
100 | .unwrap();
101 |
102 | tauri::Builder::default()
103 | .manage(Proxies(Arc::new(Mutex::new(Vec::new()))))
104 | .manage(WorkingProxies(Mutex::new(Vec::new())))
105 | .invoke_handler(tauri::generate_handler![
106 | parse_and_filter_proxies_command,
107 | check_proxies_command,
108 | download_proxies_command,
109 | ])
110 | .plugin(tauri_plugin_store::Builder::default().build())
111 | .run(tauri::generate_context!())
112 | .expect("error while running tauri application");
113 | }
114 |
--------------------------------------------------------------------------------
/src-tauri/tauri.conf.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "beforeDevCommand": "npm run dev",
4 | "beforeBuildCommand": "npm run build",
5 | "devPath": "http://localhost:1420",
6 | "distDir": "../dist"
7 | },
8 | "package": {
9 | "productName": "proxy-checker",
10 | "version": "0.1.1"
11 | },
12 | "tauri": {
13 | "allowlist": {
14 | "all": false,
15 | "dialog": {
16 | "open": true,
17 | "save": true
18 | },
19 | "fs": {
20 | "readFile": true,
21 | "writeFile": true
22 | },
23 | "shell": {
24 | "open": "^https://github.com/"
25 | }
26 | },
27 | "bundle": {
28 | "active": true,
29 | "category": "DeveloperTool",
30 | "copyright": "",
31 | "deb": {
32 | "depends": []
33 | },
34 | "externalBin": [],
35 | "icon": [
36 | "icons/32x32.png",
37 | "icons/128x128.png",
38 | "icons/128x128@2x.png",
39 | "icons/icon.icns",
40 | "icons/icon.ico"
41 | ],
42 | "identifier": "proxy-checker",
43 | "longDescription": "",
44 | "macOS": {
45 | "entitlements": null,
46 | "exceptionDomain": "",
47 | "frameworks": [],
48 | "providerShortName": null,
49 | "signingIdentity": null
50 | },
51 | "resources": [],
52 | "shortDescription": "",
53 | "targets": "all",
54 | "windows": {
55 | "certificateThumbprint": null,
56 | "digestAlgorithm": "sha256",
57 | "timestampUrl": ""
58 | }
59 | },
60 | "security": {
61 | "csp": null
62 | },
63 | "updater": {
64 | "active": false
65 | },
66 | "windows": [
67 | {
68 | "fullscreen": false,
69 | "height": 720,
70 | "resizable": true,
71 | "title": "Proxy Checker",
72 | "width": 1280
73 | }
74 | ]
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/src/App.tsx:
--------------------------------------------------------------------------------
1 | import { Grid } from '@mantine/core';
2 | import Wrapper from './components/Wrapper';
3 | import Shell from './components/Shell';
4 | import ProxiesCard from './components/ProxiesCard';
5 | import Stats from './components/Stats';
6 | import Logs from './components/Logs';
7 | import { ProxiesState } from './context/ProxiesContext';
8 |
9 | function App() {
10 | return (
11 |
12 |
13 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | );
32 | }
33 |
34 | export default App;
35 |
--------------------------------------------------------------------------------
/src/assets/dark-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src/assets/dark-bg.jpg
--------------------------------------------------------------------------------
/src/assets/light-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/quertc/ProxyChecker/26b0626e7298ef3eb68a50a3f92ecdf478c52f07/src/assets/light-bg.jpg
--------------------------------------------------------------------------------
/src/components/CheckButton.tsx:
--------------------------------------------------------------------------------
1 | import { useContext } from 'react';
2 | import { Button } from '@mantine/core';
3 | import { invoke } from '@tauri-apps/api/tauri';
4 | import { ProxiesContext } from '../context/ProxiesContext';
5 |
6 | function CheckButton() {
7 | const { url, timeout, threads, path, total, isCheckLoading, isDownloadLoading, setWork, setLogs, setIsDownloadLoading } = useContext(ProxiesContext);
8 |
9 | // Move this to the hook (for other components too)
10 | async function checkProxies() {
11 | try {
12 | setIsDownloadLoading(true);
13 | setWork(0);
14 | setLogs([]);
15 | await invoke('check_proxies_command', { url, timeout, threads });
16 | setIsDownloadLoading(false);
17 | } catch (e) {
18 | console.error(e);
19 | setIsDownloadLoading(false);
20 | }
21 | }
22 |
23 | return (
24 |
34 | );
35 | }
36 |
37 | export default CheckButton;
38 |
--------------------------------------------------------------------------------
/src/components/DefaultProtocolSelect.tsx:
--------------------------------------------------------------------------------
1 | import { useContext } from 'react';
2 | import { MantineNumberSize, Select } from '@mantine/core';
3 | import { IconShieldLock, IconChevronDown } from '@tabler/icons-react';
4 | import { ProxiesContext } from '../context/ProxiesContext';
5 |
6 | interface DefaultProtocolSelectProps {
7 | mt: MantineNumberSize;
8 | }
9 |
10 | function DefaultProtocolSelect({ mt }: DefaultProtocolSelectProps) {
11 | const { pattern, defaultProtocol, setDefaultProtocol } = useContext(ProxiesContext);
12 |
13 | const data = [
14 | { label: 'Http', value: 'http' },
15 | { label: 'Https', value: 'https' },
16 | { label: 'Socks4 (currently not supported)', value: 'socks4', disabled: true },
17 | { label: 'Socks5', value: 'socks5' },
18 | ];
19 |
20 | return (
21 | }
29 | rightSection={}
30 | data={data}
31 | mt={mt}
32 | styles={{
33 | input: {
34 | '&::-webkit-search-cancel-button': {
35 | display: 'none',
36 | },
37 | },
38 | }}
39 | error={!defaultProtocol ? 'Default protocol is required' : undefined}
40 | />
41 | );
42 | }
43 |
44 | export default DefaultProtocolSelect;
45 |
--------------------------------------------------------------------------------
/src/components/DownloadButton.tsx:
--------------------------------------------------------------------------------
1 | import { useContext } from 'react';
2 | import { Button } from '@mantine/core';
3 | import { save } from '@tauri-apps/api/dialog';
4 | import { writeTextFile } from '@tauri-apps/api/fs';
5 | import { invoke } from '@tauri-apps/api/tauri';
6 | import { ProxiesContext } from '../context/ProxiesContext';
7 |
8 | function DownloadButton() {
9 | const { work, isDownloadLoading } = useContext(ProxiesContext);
10 |
11 | async function downloadProxies() {
12 | try {
13 | const filePath = await save({
14 | filters: [{
15 | name: 'Text',
16 | extensions: ['txt'],
17 | }],
18 | });
19 |
20 | if (filePath !== null) {
21 | const result = await invoke('download_proxies_command');
22 | await writeTextFile(filePath, result);
23 | }
24 | } catch (e) {
25 | console.error(e);
26 | }
27 | }
28 |
29 | return (
30 |
40 | );
41 | }
42 |
43 | export default DownloadButton;
44 |
--------------------------------------------------------------------------------
/src/components/FileSelect.tsx:
--------------------------------------------------------------------------------
1 | import { MantineTheme, Input } from '@mantine/core';
2 | import { IconUpload } from '@tabler/icons-react';
3 | import useFileSelect from '../hooks/useFileSelect';
4 |
5 | function FileSelect() {
6 | const { selectFile, path, isError } = useFileSelect();
7 |
8 | function getColor(theme: MantineTheme) {
9 | if (isError) {
10 | return theme.colors.red;
11 | }
12 |
13 | if (path) {
14 | return 'inherit';
15 | }
16 |
17 | return theme.colors.dark[3];
18 | }
19 |
20 | return (
21 | }
24 | styles={{
25 | input: {
26 | lineHeight: 'normal',
27 | },
28 | }}
29 | onClick={selectFile}
30 | >
31 | ({
32 | color: getColor(theme),
33 | })}
34 | >
35 | {isError ? 'Error during file selection' : path || 'Select .txt file with proxies'}
36 |
37 |
38 | );
39 | }
40 |
41 | export default FileSelect;
42 |
--------------------------------------------------------------------------------
/src/components/Log.tsx:
--------------------------------------------------------------------------------
1 | import { Text, Code } from '@mantine/core';
2 | import { LogPayload } from '../hooks/useLogs';
3 |
4 | function Log({ status, message }: LogPayload) {
5 | return (
6 |
7 | $
8 | {' '}
9 | {message}
10 |
11 | );
12 | }
13 |
14 | export default Log;
15 |
--------------------------------------------------------------------------------
/src/components/Logs.tsx:
--------------------------------------------------------------------------------
1 | import { useRef, useEffect } from 'react';
2 | import { Card, Divider, Text } from '@mantine/core';
3 | import { useLogs } from '../hooks/useLogs';
4 | import Log from './Log';
5 |
6 | function Logs() {
7 | const { logs, isError } = useLogs();
8 | const cardRef = useRef(null);
9 | const bottomRef = useRef(null);
10 |
11 | const scrollToBottom = () => {
12 | if (cardRef.current && bottomRef.current) {
13 | const { scrollHeight, clientHeight } = cardRef.current;
14 | if (scrollHeight > clientHeight) {
15 | bottomRef.current.scrollIntoView({ behavior: 'smooth' });
16 | }
17 | }
18 | };
19 |
20 | useEffect(() => {
21 | scrollToBottom();
22 | }, [logs]);
23 |
24 | return (
25 |
33 | Logs} />
34 | {logs.length === 0 && !isError && No logs yet}
35 | {isError && Error listening to new-log event}
36 | {logs.map(log => (
37 |
38 | ))}
39 |
40 |
41 | );
42 | }
43 |
44 | export default Logs;
45 |
--------------------------------------------------------------------------------
/src/components/PatternInput.tsx:
--------------------------------------------------------------------------------
1 | import { useContext } from 'react';
2 | import { TextInput, Tooltip } from '@mantine/core';
3 | import { IconGrain, IconAlertCircle } from '@tabler/icons-react';
4 | import { ProxiesContext } from '../context/ProxiesContext';
5 |
6 | function PatternInput() {
7 | const { pattern, setPattern } = useContext(ProxiesContext);
8 |
9 | return (
10 | setPattern(event.currentTarget.value)}
16 | icon={}
17 | error={!pattern ? 'Pattern is required' : undefined}
18 | rightSection={(
19 |
27 |
28 |
29 |
30 |
31 | )}
32 | />
33 | );
34 | }
35 |
36 | export default PatternInput;
37 |
--------------------------------------------------------------------------------
/src/components/ProxiesCard.tsx:
--------------------------------------------------------------------------------
1 | import { MantineNumberSize, Paper, SimpleGrid } from '@mantine/core';
2 | import FileSelect from './FileSelect';
3 | import SettingsModal from './SettingsModal';
4 | import CheckButton from './CheckButton';
5 |
6 | interface ProxiesCardProps {
7 | mb: MantineNumberSize;
8 | }
9 |
10 | function ProxiesCard({ mb }: ProxiesCardProps) {
11 | return (
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | );
20 | }
21 |
22 | export default ProxiesCard;
23 |
--------------------------------------------------------------------------------
/src/components/SettingsModal.tsx:
--------------------------------------------------------------------------------
1 | import { useContext, useState } from 'react';
2 | import { useMantineTheme, Modal, Button } from '@mantine/core';
3 | import { ProxiesContext } from '../context/ProxiesContext';
4 | import settings from '../store/settings';
5 | import PatternInput from './PatternInput';
6 | import DefaultProtocolSelect from './DefaultProtocolSelect';
7 | import UrlInput from './UrlInput';
8 | import TimeoutInput from './TimeoutInput';
9 | import ThreadsInput from './ThreadsInput';
10 |
11 | function SettingsModal() {
12 | const [opened, setOpened] = useState(false);
13 | const { pattern, defaultProtocol, url, timeout } = useContext(ProxiesContext);
14 | const theme = useMantineTheme();
15 |
16 | async function saveSettings() {
17 | try {
18 | await settings.set('proxies-settings', {
19 | pattern,
20 | defaultProtocol,
21 | url,
22 | timeout,
23 | });
24 |
25 | setOpened(false);
26 | } catch (e) {
27 | console.error(e);
28 | }
29 | }
30 |
31 | return (
32 | <>
33 | setOpened(false)}
37 | centered
38 | shadow="md"
39 | overlayColor={theme.colorScheme === 'dark' ? theme.colors.dark[9] : theme.colors.gray[2]}
40 | overlayOpacity={0.6}
41 | overlayBlur={3}
42 | >
43 |
44 |
45 |
46 |
47 |
48 |
58 |
59 |
60 |
61 | >
62 | );
63 | }
64 |
65 | export default SettingsModal;
66 |
--------------------------------------------------------------------------------
/src/components/Shell.tsx:
--------------------------------------------------------------------------------
1 | import { useMantineColorScheme, AppShell, Header, Group, Button, ActionIcon } from '@mantine/core';
2 | import { IconBrandGithub, IconSun, IconMoonStars } from '@tabler/icons-react';
3 | import PackageJson from '../../package.json';
4 | import DarkBg from '../assets/dark-bg.jpg';
5 | import LightBg from '../assets/light-bg.jpg';
6 |
7 | interface ShellProps {
8 | children: React.ReactNode;
9 | }
10 |
11 | function Shell({ children }: ShellProps) {
12 | const colorSchemeContext = useMantineColorScheme();
13 | const appName = `ProxyChecker v${PackageJson.version}`;
14 |
15 | return (
16 |
20 |
21 | }>
22 | {appName}
23 |
24 | colorSchemeContext.toggleColorScheme()}
26 | variant="default"
27 | size="lg"
28 | sx={theme => ({
29 | backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark[6] : theme.colors.gray[0],
30 | color: theme.colorScheme === 'dark' ? theme.colors.yellow[4] : theme.colors.blue[6],
31 | })}
32 | >
33 | {colorSchemeContext.colorScheme === 'dark' ? : }
34 |
35 |
36 |
37 | )}
38 | styles={theme => ({
39 | body: {
40 | backgroundImage: `url(${theme.colorScheme === 'dark' ? DarkBg : LightBg})`,
41 | backgroundPosition: 'center',
42 | backgroundSize: 'cover',
43 | backgroundRepeat: 'no-repeat',
44 | minWidth: '100vw',
45 | minHeight: '100vh',
46 | },
47 | })}
48 | >
49 | {children}
50 |
51 | );
52 | }
53 |
54 | export default Shell;
55 |
--------------------------------------------------------------------------------
/src/components/Stats.tsx:
--------------------------------------------------------------------------------
1 | import { useContext } from 'react';
2 | import { Paper, Text, Progress } from '@mantine/core';
3 | import { ProxiesContext } from '../context/ProxiesContext';
4 | import DownloadButton from './DownloadButton';
5 |
6 | function Stats() {
7 | const { total, work } = useContext(ProxiesContext);
8 |
9 | const getPercentage = () => (work / total) * 100;
10 |
11 | const getColor = () => {
12 | const percentage = getPercentage() || 0;
13 |
14 | if (percentage < 20) return 'red';
15 | if (percentage < 40) return 'orange';
16 | if (percentage < 60) return 'yellow';
17 | if (percentage < 80) return 'teal';
18 |
19 | return 'green';
20 | };
21 |
22 | return (
23 |
24 |
25 | Working proxies
26 |
27 |
28 | {work}
29 | {' / '}
30 | {total}
31 |
32 |
33 |
34 |
35 | );
36 | }
37 |
38 | export default Stats;
39 |
--------------------------------------------------------------------------------
/src/components/ThreadsInput.tsx:
--------------------------------------------------------------------------------
1 | import { useContext } from 'react';
2 | import { MantineNumberSize, NumberInput } from '@mantine/core';
3 | import { IconCpu } from '@tabler/icons-react';
4 | import { ProxiesContext } from '../context/ProxiesContext';
5 |
6 | interface DefaultProtocolSelectProps {
7 | mt: MantineNumberSize;
8 | }
9 |
10 | function ThreadsInput({ mt }: DefaultProtocolSelectProps) {
11 | const { threads, setThreads } = useContext(ProxiesContext);
12 |
13 | return (
14 | }
22 | withAsterisk
23 | mt={mt}
24 | error={!threads ? 'Threads is required' : undefined}
25 | />
26 | );
27 | }
28 |
29 | export default ThreadsInput;
30 |
--------------------------------------------------------------------------------
/src/components/TimeoutInput.tsx:
--------------------------------------------------------------------------------
1 | import { useContext } from 'react';
2 | import { MantineNumberSize, NumberInput } from '@mantine/core';
3 | import { IconClock } from '@tabler/icons-react';
4 | import { ProxiesContext } from '../context/ProxiesContext';
5 |
6 | interface DefaultProtocolSelectProps {
7 | mt: MantineNumberSize;
8 | }
9 |
10 | function TimeoutInput({ mt }: DefaultProtocolSelectProps) {
11 | const { timeout, setTimeout } = useContext(ProxiesContext);
12 |
13 | return (
14 | }
23 | withAsterisk
24 | mt={mt}
25 | error={!timeout ? 'Timeout is required' : undefined}
26 | />
27 | );
28 | }
29 |
30 | export default TimeoutInput;
31 |
--------------------------------------------------------------------------------
/src/components/UrlInput.tsx:
--------------------------------------------------------------------------------
1 | import { useContext } from 'react';
2 | import { MantineNumberSize, TextInput } from '@mantine/core';
3 | import { IconLink } from '@tabler/icons-react';
4 | import { ProxiesContext } from '../context/ProxiesContext';
5 |
6 | interface DefaultProtocolSelectProps {
7 | mt: MantineNumberSize;
8 | }
9 |
10 | function UrlInput({ mt }: DefaultProtocolSelectProps) {
11 | const { url, setUrl } = useContext(ProxiesContext);
12 |
13 | return (
14 | setUrl(event.currentTarget.value)}
20 | icon={}
21 | mt={mt}
22 | error={!url ? 'Request url is required' : undefined}
23 | />
24 | );
25 | }
26 |
27 | export default UrlInput;
28 |
--------------------------------------------------------------------------------
/src/components/Wrapper.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState } from 'react';
2 | import { ColorScheme, ColorSchemeProvider, MantineProvider } from '@mantine/core';
3 | import store from '../store/settings';
4 |
5 | interface WrapperProps {
6 | children: React.ReactNode;
7 | }
8 |
9 | interface ConfigStore {
10 | theme: string;
11 | }
12 |
13 | function Wrapper({ children }: WrapperProps) {
14 | const [colorScheme, setColorScheme] = useState('dark');
15 |
16 | const toggleColorScheme = async (value?: ColorScheme) => {
17 | try {
18 | const theme = value || (colorScheme === 'dark' ? 'light' : 'dark');
19 | await store.set('config', { theme });
20 | setColorScheme(theme);
21 | } catch (e) {
22 | console.error(e);
23 | }
24 | };
25 |
26 | function getConfigValues(): Promise {
27 | return store.get('config');
28 | }
29 |
30 | useEffect(() => {
31 | getConfigValues()
32 | .then(config => {
33 | if (config) {
34 | setColorScheme(config.theme as ColorScheme);
35 | }
36 | })
37 | .catch(err => console.error(err));
38 | }, []);
39 |
40 | return (
41 |
42 |
43 | {children}
44 |
45 |
46 | );
47 | }
48 |
49 | export default Wrapper;
50 |
--------------------------------------------------------------------------------
/src/context/ProxiesContext.tsx:
--------------------------------------------------------------------------------
1 | import { createContext, useState, useEffect, useMemo } from 'react';
2 | import store from '../store/settings';
3 |
4 | interface ProxiesContextProps {
5 | pattern: string;
6 | defaultProtocol: DefaultProtocolOrNull;
7 | url: string;
8 | timeout: number;
9 | threads: number;
10 | path: string;
11 | total: number;
12 | work: number;
13 | logs: LogPayload[];
14 | isCheckLoading: boolean,
15 | isDownloadLoading: boolean,
16 | setPattern: (pattern: string) => void;
17 | setDefaultProtocol: (defaultProtocol: DefaultProtocol) => void;
18 | setUrl: (url: string) => void;
19 | setTimeout: (timeout: number) => void;
20 | setThreads: (threads: number) => void;
21 | setPath: (path: string) => void;
22 | setTotal: (total: number) => void;
23 | setWork: React.Dispatch>;
24 | setLogs: React.Dispatch>;
25 | setIsCheckLoading: (isCheckLoading: boolean) => void;
26 | setIsDownloadLoading: (isDownloadLoading: boolean) => void;
27 | }
28 |
29 | export interface LogPayload {
30 | key: string,
31 | status: 'Success' | 'Error';
32 | message: string;
33 | }
34 |
35 | export type DefaultProtocol = 'http' | 'https' | 'socks4' | 'socks5';
36 | type DefaultProtocolOrNull = DefaultProtocol | null;
37 |
38 | export const ProxiesContext = createContext({} as ProxiesContextProps);
39 |
40 | interface ProxiesSettingsStore {
41 | pattern: string;
42 | defaultProtocol: DefaultProtocol;
43 | url: string;
44 | timeout: number;
45 | threads: number;
46 | }
47 |
48 | interface ProxiesStateProps {
49 | children: React.ReactNode;
50 | }
51 |
52 | export function ProxiesState({ children }: ProxiesStateProps) {
53 | const [pattern, setPattern] = useState('');
54 | const [defaultProtocol, setDefaultProtocol] = useState(null);
55 | const [url, setUrl] = useState('');
56 | const [timeout, setTimeout] = useState(0);
57 | const [threads, setThreads] = useState(0);
58 | const [path, setPath] = useState('');
59 | const [total, setTotal] = useState(0);
60 | const [work, setWork] = useState(0);
61 | const [logs, setLogs] = useState([]);
62 | const [isCheckLoading, setIsCheckLoading] = useState(false);
63 | const [isDownloadLoading, setIsDownloadLoading] = useState(false);
64 |
65 | function getSettingsValues(): Promise {
66 | return store.get('proxies-settings');
67 | }
68 |
69 | useEffect(() => {
70 | getSettingsValues()
71 | .then(settings => {
72 | setPattern(settings?.pattern ?? 'protocol://login:password@ip:port');
73 | setDefaultProtocol(settings?.defaultProtocol ?? 'http');
74 | setUrl(settings?.url ?? 'https://api.ipify.org/');
75 | setTimeout(settings?.timeout ?? 10000);
76 | setThreads(settings?.threads ?? 500);
77 | })
78 | .catch(console.error);
79 | }, []);
80 |
81 | const value = useMemo(() => ({
82 | pattern,
83 | defaultProtocol,
84 | url,
85 | timeout,
86 | threads,
87 | path,
88 | total,
89 | work,
90 | logs,
91 | isCheckLoading,
92 | isDownloadLoading,
93 | setPattern,
94 | setDefaultProtocol,
95 | setUrl,
96 | setTimeout,
97 | setThreads,
98 | setPath,
99 | setTotal,
100 | setWork,
101 | setLogs,
102 | setIsCheckLoading,
103 | setIsDownloadLoading,
104 | }), [pattern, defaultProtocol, url, timeout, threads, path, total, work, logs, isCheckLoading, isDownloadLoading]);
105 |
106 | return (
107 |
108 | {children}
109 |
110 | );
111 | }
112 |
--------------------------------------------------------------------------------
/src/hooks/useFileSelect.ts:
--------------------------------------------------------------------------------
1 | import { useContext, useState } from 'react';
2 | import { open } from '@tauri-apps/api/dialog';
3 | import { readTextFile } from '@tauri-apps/api/fs';
4 | import { invoke } from '@tauri-apps/api/tauri';
5 | import { ProxiesContext } from '../context/ProxiesContext';
6 |
7 | function useFileSelect() {
8 | const { pattern, defaultProtocol, path, setPath, setTotal, setWork, setLogs, setIsCheckLoading } = useContext(ProxiesContext);
9 | const [isError, setIsError] = useState(false);
10 |
11 | async function selectFile() {
12 | try {
13 | const selected = await open({
14 | title: 'Select text file with proxies',
15 | filters: [{
16 | name: 'Text',
17 | extensions: ['txt'],
18 | }],
19 | });
20 |
21 | if (selected !== null && !Array.isArray(selected)) {
22 | setIsCheckLoading(true);
23 | setPath(selected);
24 | const proxies = await readTextFile(selected);
25 | const total = await invoke('parse_and_filter_proxies_command', { proxies, pattern, defaultProtocol });
26 | setTotal(total);
27 | setWork(0);
28 | setLogs([]);
29 | setIsCheckLoading(false);
30 | }
31 | } catch (e) {
32 | setIsError(true);
33 | setIsCheckLoading(false);
34 | }
35 | }
36 |
37 | return { selectFile, path, isError };
38 | }
39 |
40 | export default useFileSelect;
41 |
--------------------------------------------------------------------------------
/src/hooks/useLogs.ts:
--------------------------------------------------------------------------------
1 | import { useContext, useState, useEffect } from 'react';
2 | import { listen } from '@tauri-apps/api/event';
3 | import { LogPayload as ContextLogPayload, ProxiesContext } from '../context/ProxiesContext';
4 |
5 | export type LogPayload = ContextLogPayload;
6 |
7 | export function useLogs() {
8 | const { logs, setWork, setLogs } = useContext(ProxiesContext);
9 | const [isError, setIsError] = useState(false);
10 |
11 | useEffect(() => {
12 | async function handleLog() {
13 | await listen('new-log', ({ payload }) => {
14 | setLogs(prev => [...prev, payload]);
15 |
16 | if (payload.status === 'Success') {
17 | setWork((prev: number) => prev + 1);
18 | }
19 | });
20 | }
21 |
22 | handleLog().catch(() => setIsError(true));
23 | }, [setWork, setLogs]);
24 |
25 | // Maybe it's better to stop listening to the event when the component is unmounted
26 |
27 | return { logs, isError };
28 | }
29 |
--------------------------------------------------------------------------------
/src/main.tsx:
--------------------------------------------------------------------------------
1 | import ReactDOM from 'react-dom/client';
2 | import App from './App';
3 |
4 | ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
5 | ,
6 | );
7 |
--------------------------------------------------------------------------------
/src/store/settings.ts:
--------------------------------------------------------------------------------
1 | import { Store } from 'tauri-plugin-store-api';
2 |
3 | export default new Store('.settings.dat');
4 |
--------------------------------------------------------------------------------
/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ESNext",
4 | "useDefineForClassFields": true,
5 | "lib": ["DOM", "DOM.Iterable", "ESNext"],
6 | "allowJs": false,
7 | "skipLibCheck": true,
8 | "esModuleInterop": false,
9 | "allowSyntheticDefaultImports": true,
10 | "strict": true,
11 | "forceConsistentCasingInFileNames": true,
12 | "module": "ESNext",
13 | "moduleResolution": "Node",
14 | "resolveJsonModule": true,
15 | "isolatedModules": true,
16 | "noEmit": true,
17 | "jsx": "react-jsx"
18 | },
19 | "include": ["src", ".eslintrc.cjs", "vite.config.ts"],
20 | "references": [{ "path": "./tsconfig.node.json" }]
21 | }
22 |
--------------------------------------------------------------------------------
/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "module": "ESNext",
5 | "moduleResolution": "Node",
6 | "allowSyntheticDefaultImports": true
7 | },
8 | "include": ["vite.config.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite';
2 | import react from '@vitejs/plugin-react';
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 |
8 | // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
9 | // prevent vite from obscuring rust errors
10 | clearScreen: false,
11 | // tauri expects a fixed port, fail if that port is not available
12 | server: {
13 | port: 1420,
14 | strictPort: true,
15 | },
16 | // to make use of `TAURI_DEBUG` and other env variables
17 | // https://tauri.studio/v1/api/config#buildconfig.beforedevcommand
18 | envPrefix: ['VITE_', 'TAURI_'],
19 | build: {
20 | // Tauri supports es2021
21 | target: process.env.TAURI_PLATFORM === 'windows' ? 'chrome105' : 'safari13',
22 | // don't minify for debug builds
23 | minify: !process.env.TAURI_DEBUG ? 'esbuild' : false,
24 | // produce sourcemaps for debug builds
25 | sourcemap: !!process.env.TAURI_DEBUG,
26 | },
27 | });
28 |
--------------------------------------------------------------------------------