+1
.gitignore
+1
.gitignore
···
1
+
/target
+1545
Cargo.lock
+1545
Cargo.lock
···
1
+
# This file is automatically @generated by Cargo.
2
+
# It is not intended for manual editing.
3
+
version = 4
4
+
5
+
[[package]]
6
+
name = "addr2line"
7
+
version = "0.24.2"
8
+
source = "registry+https://github.com/rust-lang/crates.io-index"
9
+
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
10
+
dependencies = [
11
+
"gimli",
12
+
]
13
+
14
+
[[package]]
15
+
name = "adler2"
16
+
version = "2.0.1"
17
+
source = "registry+https://github.com/rust-lang/crates.io-index"
18
+
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
19
+
20
+
[[package]]
21
+
name = "aho-corasick"
22
+
version = "1.1.3"
23
+
source = "registry+https://github.com/rust-lang/crates.io-index"
24
+
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
25
+
dependencies = [
26
+
"memchr",
27
+
]
28
+
29
+
[[package]]
30
+
name = "anstream"
31
+
version = "0.6.20"
32
+
source = "registry+https://github.com/rust-lang/crates.io-index"
33
+
checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192"
34
+
dependencies = [
35
+
"anstyle",
36
+
"anstyle-parse",
37
+
"anstyle-query",
38
+
"anstyle-wincon",
39
+
"colorchoice",
40
+
"is_terminal_polyfill",
41
+
"utf8parse",
42
+
]
43
+
44
+
[[package]]
45
+
name = "anstyle"
46
+
version = "1.0.11"
47
+
source = "registry+https://github.com/rust-lang/crates.io-index"
48
+
checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd"
49
+
50
+
[[package]]
51
+
name = "anstyle-parse"
52
+
version = "0.2.7"
53
+
source = "registry+https://github.com/rust-lang/crates.io-index"
54
+
checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
55
+
dependencies = [
56
+
"utf8parse",
57
+
]
58
+
59
+
[[package]]
60
+
name = "anstyle-query"
61
+
version = "1.1.4"
62
+
source = "registry+https://github.com/rust-lang/crates.io-index"
63
+
checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2"
64
+
dependencies = [
65
+
"windows-sys 0.60.2",
66
+
]
67
+
68
+
[[package]]
69
+
name = "anstyle-wincon"
70
+
version = "3.0.10"
71
+
source = "registry+https://github.com/rust-lang/crates.io-index"
72
+
checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a"
73
+
dependencies = [
74
+
"anstyle",
75
+
"once_cell_polyfill",
76
+
"windows-sys 0.60.2",
77
+
]
78
+
79
+
[[package]]
80
+
name = "autocfg"
81
+
version = "1.5.0"
82
+
source = "registry+https://github.com/rust-lang/crates.io-index"
83
+
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
84
+
85
+
[[package]]
86
+
name = "backtrace"
87
+
version = "0.3.75"
88
+
source = "registry+https://github.com/rust-lang/crates.io-index"
89
+
checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
90
+
dependencies = [
91
+
"addr2line",
92
+
"cfg-if",
93
+
"libc",
94
+
"miniz_oxide",
95
+
"object",
96
+
"rustc-demangle",
97
+
"windows-targets 0.52.6",
98
+
]
99
+
100
+
[[package]]
101
+
name = "bitflags"
102
+
version = "2.9.4"
103
+
source = "registry+https://github.com/rust-lang/crates.io-index"
104
+
checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
105
+
106
+
[[package]]
107
+
name = "block-buffer"
108
+
version = "0.10.4"
109
+
source = "registry+https://github.com/rust-lang/crates.io-index"
110
+
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
111
+
dependencies = [
112
+
"generic-array",
113
+
]
114
+
115
+
[[package]]
116
+
name = "byteorder"
117
+
version = "1.5.0"
118
+
source = "registry+https://github.com/rust-lang/crates.io-index"
119
+
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
120
+
121
+
[[package]]
122
+
name = "bytes"
123
+
version = "1.10.1"
124
+
source = "registry+https://github.com/rust-lang/crates.io-index"
125
+
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
126
+
127
+
[[package]]
128
+
name = "cc"
129
+
version = "1.2.34"
130
+
source = "registry+https://github.com/rust-lang/crates.io-index"
131
+
checksum = "42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc"
132
+
dependencies = [
133
+
"shlex",
134
+
]
135
+
136
+
[[package]]
137
+
name = "cfg-if"
138
+
version = "1.0.3"
139
+
source = "registry+https://github.com/rust-lang/crates.io-index"
140
+
checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
141
+
142
+
[[package]]
143
+
name = "cfg_aliases"
144
+
version = "0.2.1"
145
+
source = "registry+https://github.com/rust-lang/crates.io-index"
146
+
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
147
+
148
+
[[package]]
149
+
name = "colorchoice"
150
+
version = "1.0.4"
151
+
source = "registry+https://github.com/rust-lang/crates.io-index"
152
+
checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
153
+
154
+
[[package]]
155
+
name = "core-foundation"
156
+
version = "0.9.4"
157
+
source = "registry+https://github.com/rust-lang/crates.io-index"
158
+
checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
159
+
dependencies = [
160
+
"core-foundation-sys",
161
+
"libc",
162
+
]
163
+
164
+
[[package]]
165
+
name = "core-foundation-sys"
166
+
version = "0.8.7"
167
+
source = "registry+https://github.com/rust-lang/crates.io-index"
168
+
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
169
+
170
+
[[package]]
171
+
name = "cpufeatures"
172
+
version = "0.2.17"
173
+
source = "registry+https://github.com/rust-lang/crates.io-index"
174
+
checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
175
+
dependencies = [
176
+
"libc",
177
+
]
178
+
179
+
[[package]]
180
+
name = "crypto-common"
181
+
version = "0.1.6"
182
+
source = "registry+https://github.com/rust-lang/crates.io-index"
183
+
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
184
+
dependencies = [
185
+
"generic-array",
186
+
"typenum",
187
+
]
188
+
189
+
[[package]]
190
+
name = "data-encoding"
191
+
version = "2.9.0"
192
+
source = "registry+https://github.com/rust-lang/crates.io-index"
193
+
checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
194
+
195
+
[[package]]
196
+
name = "digest"
197
+
version = "0.10.7"
198
+
source = "registry+https://github.com/rust-lang/crates.io-index"
199
+
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
200
+
dependencies = [
201
+
"block-buffer",
202
+
"crypto-common",
203
+
]
204
+
205
+
[[package]]
206
+
name = "displaydoc"
207
+
version = "0.2.5"
208
+
source = "registry+https://github.com/rust-lang/crates.io-index"
209
+
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
210
+
dependencies = [
211
+
"proc-macro2",
212
+
"quote",
213
+
"syn",
214
+
]
215
+
216
+
[[package]]
217
+
name = "env_filter"
218
+
version = "0.1.3"
219
+
source = "registry+https://github.com/rust-lang/crates.io-index"
220
+
checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0"
221
+
dependencies = [
222
+
"log",
223
+
"regex",
224
+
]
225
+
226
+
[[package]]
227
+
name = "env_logger"
228
+
version = "0.11.8"
229
+
source = "registry+https://github.com/rust-lang/crates.io-index"
230
+
checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f"
231
+
dependencies = [
232
+
"anstream",
233
+
"anstyle",
234
+
"env_filter",
235
+
"jiff",
236
+
"log",
237
+
]
238
+
239
+
[[package]]
240
+
name = "errno"
241
+
version = "0.3.13"
242
+
source = "registry+https://github.com/rust-lang/crates.io-index"
243
+
checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad"
244
+
dependencies = [
245
+
"libc",
246
+
"windows-sys 0.59.0",
247
+
]
248
+
249
+
[[package]]
250
+
name = "excuse"
251
+
version = "0.1.0"
252
+
dependencies = [
253
+
"env_logger",
254
+
"fuser",
255
+
"futures-util",
256
+
"libc",
257
+
"log",
258
+
"tokio",
259
+
"tokio-tungstenite",
260
+
]
261
+
262
+
[[package]]
263
+
name = "fastrand"
264
+
version = "2.3.0"
265
+
source = "registry+https://github.com/rust-lang/crates.io-index"
266
+
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
267
+
268
+
[[package]]
269
+
name = "fnv"
270
+
version = "1.0.7"
271
+
source = "registry+https://github.com/rust-lang/crates.io-index"
272
+
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
273
+
274
+
[[package]]
275
+
name = "foreign-types"
276
+
version = "0.3.2"
277
+
source = "registry+https://github.com/rust-lang/crates.io-index"
278
+
checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
279
+
dependencies = [
280
+
"foreign-types-shared",
281
+
]
282
+
283
+
[[package]]
284
+
name = "foreign-types-shared"
285
+
version = "0.1.1"
286
+
source = "registry+https://github.com/rust-lang/crates.io-index"
287
+
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
288
+
289
+
[[package]]
290
+
name = "form_urlencoded"
291
+
version = "1.2.2"
292
+
source = "registry+https://github.com/rust-lang/crates.io-index"
293
+
checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
294
+
dependencies = [
295
+
"percent-encoding",
296
+
]
297
+
298
+
[[package]]
299
+
name = "fuser"
300
+
version = "0.15.1"
301
+
source = "git+https://github.com/Haoyu-Xiao/fuser#a0d28df7eb7cff47d5c04cf86aa356936a9a6a86"
302
+
dependencies = [
303
+
"libc",
304
+
"log",
305
+
"memchr",
306
+
"nix",
307
+
"page_size",
308
+
"pkg-config",
309
+
"smallvec",
310
+
"zerocopy",
311
+
]
312
+
313
+
[[package]]
314
+
name = "futures-core"
315
+
version = "0.3.31"
316
+
source = "registry+https://github.com/rust-lang/crates.io-index"
317
+
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
318
+
319
+
[[package]]
320
+
name = "futures-macro"
321
+
version = "0.3.31"
322
+
source = "registry+https://github.com/rust-lang/crates.io-index"
323
+
checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
324
+
dependencies = [
325
+
"proc-macro2",
326
+
"quote",
327
+
"syn",
328
+
]
329
+
330
+
[[package]]
331
+
name = "futures-sink"
332
+
version = "0.3.31"
333
+
source = "registry+https://github.com/rust-lang/crates.io-index"
334
+
checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
335
+
336
+
[[package]]
337
+
name = "futures-task"
338
+
version = "0.3.31"
339
+
source = "registry+https://github.com/rust-lang/crates.io-index"
340
+
checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
341
+
342
+
[[package]]
343
+
name = "futures-util"
344
+
version = "0.3.31"
345
+
source = "registry+https://github.com/rust-lang/crates.io-index"
346
+
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
347
+
dependencies = [
348
+
"futures-core",
349
+
"futures-macro",
350
+
"futures-sink",
351
+
"futures-task",
352
+
"pin-project-lite",
353
+
"pin-utils",
354
+
"slab",
355
+
]
356
+
357
+
[[package]]
358
+
name = "generic-array"
359
+
version = "0.14.7"
360
+
source = "registry+https://github.com/rust-lang/crates.io-index"
361
+
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
362
+
dependencies = [
363
+
"typenum",
364
+
"version_check",
365
+
]
366
+
367
+
[[package]]
368
+
name = "getrandom"
369
+
version = "0.2.16"
370
+
source = "registry+https://github.com/rust-lang/crates.io-index"
371
+
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
372
+
dependencies = [
373
+
"cfg-if",
374
+
"libc",
375
+
"wasi 0.11.1+wasi-snapshot-preview1",
376
+
]
377
+
378
+
[[package]]
379
+
name = "getrandom"
380
+
version = "0.3.3"
381
+
source = "registry+https://github.com/rust-lang/crates.io-index"
382
+
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
383
+
dependencies = [
384
+
"cfg-if",
385
+
"libc",
386
+
"r-efi",
387
+
"wasi 0.14.7+wasi-0.2.4",
388
+
]
389
+
390
+
[[package]]
391
+
name = "gimli"
392
+
version = "0.31.1"
393
+
source = "registry+https://github.com/rust-lang/crates.io-index"
394
+
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
395
+
396
+
[[package]]
397
+
name = "http"
398
+
version = "0.2.12"
399
+
source = "registry+https://github.com/rust-lang/crates.io-index"
400
+
checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
401
+
dependencies = [
402
+
"bytes",
403
+
"fnv",
404
+
"itoa",
405
+
]
406
+
407
+
[[package]]
408
+
name = "httparse"
409
+
version = "1.10.1"
410
+
source = "registry+https://github.com/rust-lang/crates.io-index"
411
+
checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
412
+
413
+
[[package]]
414
+
name = "icu_collections"
415
+
version = "2.0.0"
416
+
source = "registry+https://github.com/rust-lang/crates.io-index"
417
+
checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
418
+
dependencies = [
419
+
"displaydoc",
420
+
"potential_utf",
421
+
"yoke",
422
+
"zerofrom",
423
+
"zerovec",
424
+
]
425
+
426
+
[[package]]
427
+
name = "icu_locale_core"
428
+
version = "2.0.0"
429
+
source = "registry+https://github.com/rust-lang/crates.io-index"
430
+
checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
431
+
dependencies = [
432
+
"displaydoc",
433
+
"litemap",
434
+
"tinystr",
435
+
"writeable",
436
+
"zerovec",
437
+
]
438
+
439
+
[[package]]
440
+
name = "icu_normalizer"
441
+
version = "2.0.0"
442
+
source = "registry+https://github.com/rust-lang/crates.io-index"
443
+
checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
444
+
dependencies = [
445
+
"displaydoc",
446
+
"icu_collections",
447
+
"icu_normalizer_data",
448
+
"icu_properties",
449
+
"icu_provider",
450
+
"smallvec",
451
+
"zerovec",
452
+
]
453
+
454
+
[[package]]
455
+
name = "icu_normalizer_data"
456
+
version = "2.0.0"
457
+
source = "registry+https://github.com/rust-lang/crates.io-index"
458
+
checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
459
+
460
+
[[package]]
461
+
name = "icu_properties"
462
+
version = "2.0.1"
463
+
source = "registry+https://github.com/rust-lang/crates.io-index"
464
+
checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
465
+
dependencies = [
466
+
"displaydoc",
467
+
"icu_collections",
468
+
"icu_locale_core",
469
+
"icu_properties_data",
470
+
"icu_provider",
471
+
"potential_utf",
472
+
"zerotrie",
473
+
"zerovec",
474
+
]
475
+
476
+
[[package]]
477
+
name = "icu_properties_data"
478
+
version = "2.0.1"
479
+
source = "registry+https://github.com/rust-lang/crates.io-index"
480
+
checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
481
+
482
+
[[package]]
483
+
name = "icu_provider"
484
+
version = "2.0.0"
485
+
source = "registry+https://github.com/rust-lang/crates.io-index"
486
+
checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
487
+
dependencies = [
488
+
"displaydoc",
489
+
"icu_locale_core",
490
+
"stable_deref_trait",
491
+
"tinystr",
492
+
"writeable",
493
+
"yoke",
494
+
"zerofrom",
495
+
"zerotrie",
496
+
"zerovec",
497
+
]
498
+
499
+
[[package]]
500
+
name = "idna"
501
+
version = "1.1.0"
502
+
source = "registry+https://github.com/rust-lang/crates.io-index"
503
+
checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
504
+
dependencies = [
505
+
"idna_adapter",
506
+
"smallvec",
507
+
"utf8_iter",
508
+
]
509
+
510
+
[[package]]
511
+
name = "idna_adapter"
512
+
version = "1.2.1"
513
+
source = "registry+https://github.com/rust-lang/crates.io-index"
514
+
checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
515
+
dependencies = [
516
+
"icu_normalizer",
517
+
"icu_properties",
518
+
]
519
+
520
+
[[package]]
521
+
name = "io-uring"
522
+
version = "0.7.10"
523
+
source = "registry+https://github.com/rust-lang/crates.io-index"
524
+
checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b"
525
+
dependencies = [
526
+
"bitflags",
527
+
"cfg-if",
528
+
"libc",
529
+
]
530
+
531
+
[[package]]
532
+
name = "is_terminal_polyfill"
533
+
version = "1.70.1"
534
+
source = "registry+https://github.com/rust-lang/crates.io-index"
535
+
checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
536
+
537
+
[[package]]
538
+
name = "itoa"
539
+
version = "1.0.15"
540
+
source = "registry+https://github.com/rust-lang/crates.io-index"
541
+
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
542
+
543
+
[[package]]
544
+
name = "jiff"
545
+
version = "0.2.15"
546
+
source = "registry+https://github.com/rust-lang/crates.io-index"
547
+
checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49"
548
+
dependencies = [
549
+
"jiff-static",
550
+
"log",
551
+
"portable-atomic",
552
+
"portable-atomic-util",
553
+
"serde",
554
+
]
555
+
556
+
[[package]]
557
+
name = "jiff-static"
558
+
version = "0.2.15"
559
+
source = "registry+https://github.com/rust-lang/crates.io-index"
560
+
checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4"
561
+
dependencies = [
562
+
"proc-macro2",
563
+
"quote",
564
+
"syn",
565
+
]
566
+
567
+
[[package]]
568
+
name = "libc"
569
+
version = "0.2.175"
570
+
source = "registry+https://github.com/rust-lang/crates.io-index"
571
+
checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
572
+
573
+
[[package]]
574
+
name = "linux-raw-sys"
575
+
version = "0.9.4"
576
+
source = "registry+https://github.com/rust-lang/crates.io-index"
577
+
checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
578
+
579
+
[[package]]
580
+
name = "litemap"
581
+
version = "0.8.0"
582
+
source = "registry+https://github.com/rust-lang/crates.io-index"
583
+
checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
584
+
585
+
[[package]]
586
+
name = "lock_api"
587
+
version = "0.4.13"
588
+
source = "registry+https://github.com/rust-lang/crates.io-index"
589
+
checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
590
+
dependencies = [
591
+
"autocfg",
592
+
"scopeguard",
593
+
]
594
+
595
+
[[package]]
596
+
name = "log"
597
+
version = "0.4.28"
598
+
source = "registry+https://github.com/rust-lang/crates.io-index"
599
+
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
600
+
601
+
[[package]]
602
+
name = "memchr"
603
+
version = "2.7.5"
604
+
source = "registry+https://github.com/rust-lang/crates.io-index"
605
+
checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
606
+
607
+
[[package]]
608
+
name = "miniz_oxide"
609
+
version = "0.8.9"
610
+
source = "registry+https://github.com/rust-lang/crates.io-index"
611
+
checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
612
+
dependencies = [
613
+
"adler2",
614
+
]
615
+
616
+
[[package]]
617
+
name = "mio"
618
+
version = "1.0.4"
619
+
source = "registry+https://github.com/rust-lang/crates.io-index"
620
+
checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
621
+
dependencies = [
622
+
"libc",
623
+
"wasi 0.11.1+wasi-snapshot-preview1",
624
+
"windows-sys 0.59.0",
625
+
]
626
+
627
+
[[package]]
628
+
name = "native-tls"
629
+
version = "0.2.14"
630
+
source = "registry+https://github.com/rust-lang/crates.io-index"
631
+
checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e"
632
+
dependencies = [
633
+
"libc",
634
+
"log",
635
+
"openssl",
636
+
"openssl-probe",
637
+
"openssl-sys",
638
+
"schannel",
639
+
"security-framework",
640
+
"security-framework-sys",
641
+
"tempfile",
642
+
]
643
+
644
+
[[package]]
645
+
name = "nix"
646
+
version = "0.29.0"
647
+
source = "registry+https://github.com/rust-lang/crates.io-index"
648
+
checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
649
+
dependencies = [
650
+
"bitflags",
651
+
"cfg-if",
652
+
"cfg_aliases",
653
+
"libc",
654
+
]
655
+
656
+
[[package]]
657
+
name = "object"
658
+
version = "0.36.7"
659
+
source = "registry+https://github.com/rust-lang/crates.io-index"
660
+
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
661
+
dependencies = [
662
+
"memchr",
663
+
]
664
+
665
+
[[package]]
666
+
name = "once_cell"
667
+
version = "1.21.3"
668
+
source = "registry+https://github.com/rust-lang/crates.io-index"
669
+
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
670
+
671
+
[[package]]
672
+
name = "once_cell_polyfill"
673
+
version = "1.70.1"
674
+
source = "registry+https://github.com/rust-lang/crates.io-index"
675
+
checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad"
676
+
677
+
[[package]]
678
+
name = "openssl"
679
+
version = "0.10.73"
680
+
source = "registry+https://github.com/rust-lang/crates.io-index"
681
+
checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8"
682
+
dependencies = [
683
+
"bitflags",
684
+
"cfg-if",
685
+
"foreign-types",
686
+
"libc",
687
+
"once_cell",
688
+
"openssl-macros",
689
+
"openssl-sys",
690
+
]
691
+
692
+
[[package]]
693
+
name = "openssl-macros"
694
+
version = "0.1.1"
695
+
source = "registry+https://github.com/rust-lang/crates.io-index"
696
+
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
697
+
dependencies = [
698
+
"proc-macro2",
699
+
"quote",
700
+
"syn",
701
+
]
702
+
703
+
[[package]]
704
+
name = "openssl-probe"
705
+
version = "0.1.6"
706
+
source = "registry+https://github.com/rust-lang/crates.io-index"
707
+
checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
708
+
709
+
[[package]]
710
+
name = "openssl-sys"
711
+
version = "0.9.109"
712
+
source = "registry+https://github.com/rust-lang/crates.io-index"
713
+
checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571"
714
+
dependencies = [
715
+
"cc",
716
+
"libc",
717
+
"pkg-config",
718
+
"vcpkg",
719
+
]
720
+
721
+
[[package]]
722
+
name = "page_size"
723
+
version = "0.6.0"
724
+
source = "registry+https://github.com/rust-lang/crates.io-index"
725
+
checksum = "30d5b2194ed13191c1999ae0704b7839fb18384fa22e49b57eeaa97d79ce40da"
726
+
dependencies = [
727
+
"libc",
728
+
"winapi",
729
+
]
730
+
731
+
[[package]]
732
+
name = "parking_lot"
733
+
version = "0.12.4"
734
+
source = "registry+https://github.com/rust-lang/crates.io-index"
735
+
checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13"
736
+
dependencies = [
737
+
"lock_api",
738
+
"parking_lot_core",
739
+
]
740
+
741
+
[[package]]
742
+
name = "parking_lot_core"
743
+
version = "0.9.11"
744
+
source = "registry+https://github.com/rust-lang/crates.io-index"
745
+
checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5"
746
+
dependencies = [
747
+
"cfg-if",
748
+
"libc",
749
+
"redox_syscall",
750
+
"smallvec",
751
+
"windows-targets 0.52.6",
752
+
]
753
+
754
+
[[package]]
755
+
name = "percent-encoding"
756
+
version = "2.3.2"
757
+
source = "registry+https://github.com/rust-lang/crates.io-index"
758
+
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
759
+
760
+
[[package]]
761
+
name = "pin-project-lite"
762
+
version = "0.2.16"
763
+
source = "registry+https://github.com/rust-lang/crates.io-index"
764
+
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
765
+
766
+
[[package]]
767
+
name = "pin-utils"
768
+
version = "0.1.0"
769
+
source = "registry+https://github.com/rust-lang/crates.io-index"
770
+
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
771
+
772
+
[[package]]
773
+
name = "pkg-config"
774
+
version = "0.3.32"
775
+
source = "registry+https://github.com/rust-lang/crates.io-index"
776
+
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
777
+
778
+
[[package]]
779
+
name = "portable-atomic"
780
+
version = "1.11.1"
781
+
source = "registry+https://github.com/rust-lang/crates.io-index"
782
+
checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
783
+
784
+
[[package]]
785
+
name = "portable-atomic-util"
786
+
version = "0.2.4"
787
+
source = "registry+https://github.com/rust-lang/crates.io-index"
788
+
checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
789
+
dependencies = [
790
+
"portable-atomic",
791
+
]
792
+
793
+
[[package]]
794
+
name = "potential_utf"
795
+
version = "0.1.3"
796
+
source = "registry+https://github.com/rust-lang/crates.io-index"
797
+
checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a"
798
+
dependencies = [
799
+
"zerovec",
800
+
]
801
+
802
+
[[package]]
803
+
name = "ppv-lite86"
804
+
version = "0.2.21"
805
+
source = "registry+https://github.com/rust-lang/crates.io-index"
806
+
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
807
+
dependencies = [
808
+
"zerocopy",
809
+
]
810
+
811
+
[[package]]
812
+
name = "proc-macro2"
813
+
version = "1.0.101"
814
+
source = "registry+https://github.com/rust-lang/crates.io-index"
815
+
checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
816
+
dependencies = [
817
+
"unicode-ident",
818
+
]
819
+
820
+
[[package]]
821
+
name = "quote"
822
+
version = "1.0.40"
823
+
source = "registry+https://github.com/rust-lang/crates.io-index"
824
+
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
825
+
dependencies = [
826
+
"proc-macro2",
827
+
]
828
+
829
+
[[package]]
830
+
name = "r-efi"
831
+
version = "5.3.0"
832
+
source = "registry+https://github.com/rust-lang/crates.io-index"
833
+
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
834
+
835
+
[[package]]
836
+
name = "rand"
837
+
version = "0.8.5"
838
+
source = "registry+https://github.com/rust-lang/crates.io-index"
839
+
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
840
+
dependencies = [
841
+
"libc",
842
+
"rand_chacha",
843
+
"rand_core",
844
+
]
845
+
846
+
[[package]]
847
+
name = "rand_chacha"
848
+
version = "0.3.1"
849
+
source = "registry+https://github.com/rust-lang/crates.io-index"
850
+
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
851
+
dependencies = [
852
+
"ppv-lite86",
853
+
"rand_core",
854
+
]
855
+
856
+
[[package]]
857
+
name = "rand_core"
858
+
version = "0.6.4"
859
+
source = "registry+https://github.com/rust-lang/crates.io-index"
860
+
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
861
+
dependencies = [
862
+
"getrandom 0.2.16",
863
+
]
864
+
865
+
[[package]]
866
+
name = "redox_syscall"
867
+
version = "0.5.17"
868
+
source = "registry+https://github.com/rust-lang/crates.io-index"
869
+
checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77"
870
+
dependencies = [
871
+
"bitflags",
872
+
]
873
+
874
+
[[package]]
875
+
name = "regex"
876
+
version = "1.11.2"
877
+
source = "registry+https://github.com/rust-lang/crates.io-index"
878
+
checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912"
879
+
dependencies = [
880
+
"aho-corasick",
881
+
"memchr",
882
+
"regex-automata",
883
+
"regex-syntax",
884
+
]
885
+
886
+
[[package]]
887
+
name = "regex-automata"
888
+
version = "0.4.10"
889
+
source = "registry+https://github.com/rust-lang/crates.io-index"
890
+
checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6"
891
+
dependencies = [
892
+
"aho-corasick",
893
+
"memchr",
894
+
"regex-syntax",
895
+
]
896
+
897
+
[[package]]
898
+
name = "regex-syntax"
899
+
version = "0.8.6"
900
+
source = "registry+https://github.com/rust-lang/crates.io-index"
901
+
checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001"
902
+
903
+
[[package]]
904
+
name = "rustc-demangle"
905
+
version = "0.1.26"
906
+
source = "registry+https://github.com/rust-lang/crates.io-index"
907
+
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
908
+
909
+
[[package]]
910
+
name = "rustix"
911
+
version = "1.0.8"
912
+
source = "registry+https://github.com/rust-lang/crates.io-index"
913
+
checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8"
914
+
dependencies = [
915
+
"bitflags",
916
+
"errno",
917
+
"libc",
918
+
"linux-raw-sys",
919
+
"windows-sys 0.59.0",
920
+
]
921
+
922
+
[[package]]
923
+
name = "schannel"
924
+
version = "0.1.27"
925
+
source = "registry+https://github.com/rust-lang/crates.io-index"
926
+
checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d"
927
+
dependencies = [
928
+
"windows-sys 0.59.0",
929
+
]
930
+
931
+
[[package]]
932
+
name = "scopeguard"
933
+
version = "1.2.0"
934
+
source = "registry+https://github.com/rust-lang/crates.io-index"
935
+
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
936
+
937
+
[[package]]
938
+
name = "security-framework"
939
+
version = "2.11.1"
940
+
source = "registry+https://github.com/rust-lang/crates.io-index"
941
+
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
942
+
dependencies = [
943
+
"bitflags",
944
+
"core-foundation",
945
+
"core-foundation-sys",
946
+
"libc",
947
+
"security-framework-sys",
948
+
]
949
+
950
+
[[package]]
951
+
name = "security-framework-sys"
952
+
version = "2.14.0"
953
+
source = "registry+https://github.com/rust-lang/crates.io-index"
954
+
checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32"
955
+
dependencies = [
956
+
"core-foundation-sys",
957
+
"libc",
958
+
]
959
+
960
+
[[package]]
961
+
name = "serde"
962
+
version = "1.0.225"
963
+
source = "registry+https://github.com/rust-lang/crates.io-index"
964
+
checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d"
965
+
dependencies = [
966
+
"serde_core",
967
+
"serde_derive",
968
+
]
969
+
970
+
[[package]]
971
+
name = "serde_core"
972
+
version = "1.0.225"
973
+
source = "registry+https://github.com/rust-lang/crates.io-index"
974
+
checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383"
975
+
dependencies = [
976
+
"serde_derive",
977
+
]
978
+
979
+
[[package]]
980
+
name = "serde_derive"
981
+
version = "1.0.225"
982
+
source = "registry+https://github.com/rust-lang/crates.io-index"
983
+
checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516"
984
+
dependencies = [
985
+
"proc-macro2",
986
+
"quote",
987
+
"syn",
988
+
]
989
+
990
+
[[package]]
991
+
name = "sha1"
992
+
version = "0.10.6"
993
+
source = "registry+https://github.com/rust-lang/crates.io-index"
994
+
checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
995
+
dependencies = [
996
+
"cfg-if",
997
+
"cpufeatures",
998
+
"digest",
999
+
]
1000
+
1001
+
[[package]]
1002
+
name = "shlex"
1003
+
version = "1.3.0"
1004
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1005
+
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
1006
+
1007
+
[[package]]
1008
+
name = "signal-hook-registry"
1009
+
version = "1.4.6"
1010
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1011
+
checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b"
1012
+
dependencies = [
1013
+
"libc",
1014
+
]
1015
+
1016
+
[[package]]
1017
+
name = "slab"
1018
+
version = "0.4.11"
1019
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1020
+
checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
1021
+
1022
+
[[package]]
1023
+
name = "smallvec"
1024
+
version = "1.15.1"
1025
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1026
+
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
1027
+
1028
+
[[package]]
1029
+
name = "socket2"
1030
+
version = "0.6.0"
1031
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1032
+
checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
1033
+
dependencies = [
1034
+
"libc",
1035
+
"windows-sys 0.59.0",
1036
+
]
1037
+
1038
+
[[package]]
1039
+
name = "stable_deref_trait"
1040
+
version = "1.2.0"
1041
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1042
+
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
1043
+
1044
+
[[package]]
1045
+
name = "syn"
1046
+
version = "2.0.106"
1047
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1048
+
checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
1049
+
dependencies = [
1050
+
"proc-macro2",
1051
+
"quote",
1052
+
"unicode-ident",
1053
+
]
1054
+
1055
+
[[package]]
1056
+
name = "synstructure"
1057
+
version = "0.13.2"
1058
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1059
+
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
1060
+
dependencies = [
1061
+
"proc-macro2",
1062
+
"quote",
1063
+
"syn",
1064
+
]
1065
+
1066
+
[[package]]
1067
+
name = "tempfile"
1068
+
version = "3.21.0"
1069
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1070
+
checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e"
1071
+
dependencies = [
1072
+
"fastrand",
1073
+
"getrandom 0.3.3",
1074
+
"once_cell",
1075
+
"rustix",
1076
+
"windows-sys 0.59.0",
1077
+
]
1078
+
1079
+
[[package]]
1080
+
name = "thiserror"
1081
+
version = "1.0.69"
1082
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1083
+
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
1084
+
dependencies = [
1085
+
"thiserror-impl",
1086
+
]
1087
+
1088
+
[[package]]
1089
+
name = "thiserror-impl"
1090
+
version = "1.0.69"
1091
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1092
+
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
1093
+
dependencies = [
1094
+
"proc-macro2",
1095
+
"quote",
1096
+
"syn",
1097
+
]
1098
+
1099
+
[[package]]
1100
+
name = "tinystr"
1101
+
version = "0.8.1"
1102
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1103
+
checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
1104
+
dependencies = [
1105
+
"displaydoc",
1106
+
"zerovec",
1107
+
]
1108
+
1109
+
[[package]]
1110
+
name = "tokio"
1111
+
version = "1.47.1"
1112
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1113
+
checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038"
1114
+
dependencies = [
1115
+
"backtrace",
1116
+
"bytes",
1117
+
"io-uring",
1118
+
"libc",
1119
+
"mio",
1120
+
"parking_lot",
1121
+
"pin-project-lite",
1122
+
"signal-hook-registry",
1123
+
"slab",
1124
+
"socket2",
1125
+
"tokio-macros",
1126
+
"windows-sys 0.59.0",
1127
+
]
1128
+
1129
+
[[package]]
1130
+
name = "tokio-macros"
1131
+
version = "2.5.0"
1132
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1133
+
checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
1134
+
dependencies = [
1135
+
"proc-macro2",
1136
+
"quote",
1137
+
"syn",
1138
+
]
1139
+
1140
+
[[package]]
1141
+
name = "tokio-native-tls"
1142
+
version = "0.3.1"
1143
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1144
+
checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
1145
+
dependencies = [
1146
+
"native-tls",
1147
+
"tokio",
1148
+
]
1149
+
1150
+
[[package]]
1151
+
name = "tokio-tungstenite"
1152
+
version = "0.20.1"
1153
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1154
+
checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c"
1155
+
dependencies = [
1156
+
"futures-util",
1157
+
"log",
1158
+
"native-tls",
1159
+
"tokio",
1160
+
"tokio-native-tls",
1161
+
"tungstenite",
1162
+
]
1163
+
1164
+
[[package]]
1165
+
name = "tungstenite"
1166
+
version = "0.20.1"
1167
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1168
+
checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9"
1169
+
dependencies = [
1170
+
"byteorder",
1171
+
"bytes",
1172
+
"data-encoding",
1173
+
"http",
1174
+
"httparse",
1175
+
"log",
1176
+
"native-tls",
1177
+
"rand",
1178
+
"sha1",
1179
+
"thiserror",
1180
+
"url",
1181
+
"utf-8",
1182
+
]
1183
+
1184
+
[[package]]
1185
+
name = "typenum"
1186
+
version = "1.18.0"
1187
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1188
+
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
1189
+
1190
+
[[package]]
1191
+
name = "unicode-ident"
1192
+
version = "1.0.19"
1193
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1194
+
checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
1195
+
1196
+
[[package]]
1197
+
name = "url"
1198
+
version = "2.5.7"
1199
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1200
+
checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
1201
+
dependencies = [
1202
+
"form_urlencoded",
1203
+
"idna",
1204
+
"percent-encoding",
1205
+
"serde",
1206
+
]
1207
+
1208
+
[[package]]
1209
+
name = "utf-8"
1210
+
version = "0.7.6"
1211
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1212
+
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
1213
+
1214
+
[[package]]
1215
+
name = "utf8_iter"
1216
+
version = "1.0.4"
1217
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1218
+
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
1219
+
1220
+
[[package]]
1221
+
name = "utf8parse"
1222
+
version = "0.2.2"
1223
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1224
+
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
1225
+
1226
+
[[package]]
1227
+
name = "vcpkg"
1228
+
version = "0.2.15"
1229
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1230
+
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
1231
+
1232
+
[[package]]
1233
+
name = "version_check"
1234
+
version = "0.9.5"
1235
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1236
+
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
1237
+
1238
+
[[package]]
1239
+
name = "wasi"
1240
+
version = "0.11.1+wasi-snapshot-preview1"
1241
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1242
+
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
1243
+
1244
+
[[package]]
1245
+
name = "wasi"
1246
+
version = "0.14.7+wasi-0.2.4"
1247
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1248
+
checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c"
1249
+
dependencies = [
1250
+
"wasip2",
1251
+
]
1252
+
1253
+
[[package]]
1254
+
name = "wasip2"
1255
+
version = "1.0.1+wasi-0.2.4"
1256
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1257
+
checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
1258
+
dependencies = [
1259
+
"wit-bindgen",
1260
+
]
1261
+
1262
+
[[package]]
1263
+
name = "winapi"
1264
+
version = "0.3.9"
1265
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1266
+
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
1267
+
dependencies = [
1268
+
"winapi-i686-pc-windows-gnu",
1269
+
"winapi-x86_64-pc-windows-gnu",
1270
+
]
1271
+
1272
+
[[package]]
1273
+
name = "winapi-i686-pc-windows-gnu"
1274
+
version = "0.4.0"
1275
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1276
+
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
1277
+
1278
+
[[package]]
1279
+
name = "winapi-x86_64-pc-windows-gnu"
1280
+
version = "0.4.0"
1281
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1282
+
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
1283
+
1284
+
[[package]]
1285
+
name = "windows-link"
1286
+
version = "0.1.3"
1287
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1288
+
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
1289
+
1290
+
[[package]]
1291
+
name = "windows-sys"
1292
+
version = "0.59.0"
1293
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1294
+
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
1295
+
dependencies = [
1296
+
"windows-targets 0.52.6",
1297
+
]
1298
+
1299
+
[[package]]
1300
+
name = "windows-sys"
1301
+
version = "0.60.2"
1302
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1303
+
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
1304
+
dependencies = [
1305
+
"windows-targets 0.53.3",
1306
+
]
1307
+
1308
+
[[package]]
1309
+
name = "windows-targets"
1310
+
version = "0.52.6"
1311
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1312
+
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
1313
+
dependencies = [
1314
+
"windows_aarch64_gnullvm 0.52.6",
1315
+
"windows_aarch64_msvc 0.52.6",
1316
+
"windows_i686_gnu 0.52.6",
1317
+
"windows_i686_gnullvm 0.52.6",
1318
+
"windows_i686_msvc 0.52.6",
1319
+
"windows_x86_64_gnu 0.52.6",
1320
+
"windows_x86_64_gnullvm 0.52.6",
1321
+
"windows_x86_64_msvc 0.52.6",
1322
+
]
1323
+
1324
+
[[package]]
1325
+
name = "windows-targets"
1326
+
version = "0.53.3"
1327
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1328
+
checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91"
1329
+
dependencies = [
1330
+
"windows-link",
1331
+
"windows_aarch64_gnullvm 0.53.0",
1332
+
"windows_aarch64_msvc 0.53.0",
1333
+
"windows_i686_gnu 0.53.0",
1334
+
"windows_i686_gnullvm 0.53.0",
1335
+
"windows_i686_msvc 0.53.0",
1336
+
"windows_x86_64_gnu 0.53.0",
1337
+
"windows_x86_64_gnullvm 0.53.0",
1338
+
"windows_x86_64_msvc 0.53.0",
1339
+
]
1340
+
1341
+
[[package]]
1342
+
name = "windows_aarch64_gnullvm"
1343
+
version = "0.52.6"
1344
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1345
+
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
1346
+
1347
+
[[package]]
1348
+
name = "windows_aarch64_gnullvm"
1349
+
version = "0.53.0"
1350
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1351
+
checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
1352
+
1353
+
[[package]]
1354
+
name = "windows_aarch64_msvc"
1355
+
version = "0.52.6"
1356
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1357
+
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
1358
+
1359
+
[[package]]
1360
+
name = "windows_aarch64_msvc"
1361
+
version = "0.53.0"
1362
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1363
+
checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
1364
+
1365
+
[[package]]
1366
+
name = "windows_i686_gnu"
1367
+
version = "0.52.6"
1368
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1369
+
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
1370
+
1371
+
[[package]]
1372
+
name = "windows_i686_gnu"
1373
+
version = "0.53.0"
1374
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1375
+
checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
1376
+
1377
+
[[package]]
1378
+
name = "windows_i686_gnullvm"
1379
+
version = "0.52.6"
1380
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1381
+
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
1382
+
1383
+
[[package]]
1384
+
name = "windows_i686_gnullvm"
1385
+
version = "0.53.0"
1386
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1387
+
checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
1388
+
1389
+
[[package]]
1390
+
name = "windows_i686_msvc"
1391
+
version = "0.52.6"
1392
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1393
+
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
1394
+
1395
+
[[package]]
1396
+
name = "windows_i686_msvc"
1397
+
version = "0.53.0"
1398
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1399
+
checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
1400
+
1401
+
[[package]]
1402
+
name = "windows_x86_64_gnu"
1403
+
version = "0.52.6"
1404
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1405
+
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
1406
+
1407
+
[[package]]
1408
+
name = "windows_x86_64_gnu"
1409
+
version = "0.53.0"
1410
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1411
+
checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
1412
+
1413
+
[[package]]
1414
+
name = "windows_x86_64_gnullvm"
1415
+
version = "0.52.6"
1416
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1417
+
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
1418
+
1419
+
[[package]]
1420
+
name = "windows_x86_64_gnullvm"
1421
+
version = "0.53.0"
1422
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1423
+
checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
1424
+
1425
+
[[package]]
1426
+
name = "windows_x86_64_msvc"
1427
+
version = "0.52.6"
1428
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1429
+
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
1430
+
1431
+
[[package]]
1432
+
name = "windows_x86_64_msvc"
1433
+
version = "0.53.0"
1434
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1435
+
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
1436
+
1437
+
[[package]]
1438
+
name = "wit-bindgen"
1439
+
version = "0.46.0"
1440
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1441
+
checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
1442
+
1443
+
[[package]]
1444
+
name = "writeable"
1445
+
version = "0.6.1"
1446
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1447
+
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
1448
+
1449
+
[[package]]
1450
+
name = "yoke"
1451
+
version = "0.8.0"
1452
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1453
+
checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
1454
+
dependencies = [
1455
+
"serde",
1456
+
"stable_deref_trait",
1457
+
"yoke-derive",
1458
+
"zerofrom",
1459
+
]
1460
+
1461
+
[[package]]
1462
+
name = "yoke-derive"
1463
+
version = "0.8.0"
1464
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1465
+
checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
1466
+
dependencies = [
1467
+
"proc-macro2",
1468
+
"quote",
1469
+
"syn",
1470
+
"synstructure",
1471
+
]
1472
+
1473
+
[[package]]
1474
+
name = "zerocopy"
1475
+
version = "0.8.27"
1476
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1477
+
checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
1478
+
dependencies = [
1479
+
"zerocopy-derive",
1480
+
]
1481
+
1482
+
[[package]]
1483
+
name = "zerocopy-derive"
1484
+
version = "0.8.27"
1485
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1486
+
checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
1487
+
dependencies = [
1488
+
"proc-macro2",
1489
+
"quote",
1490
+
"syn",
1491
+
]
1492
+
1493
+
[[package]]
1494
+
name = "zerofrom"
1495
+
version = "0.1.6"
1496
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1497
+
checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
1498
+
dependencies = [
1499
+
"zerofrom-derive",
1500
+
]
1501
+
1502
+
[[package]]
1503
+
name = "zerofrom-derive"
1504
+
version = "0.1.6"
1505
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1506
+
checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
1507
+
dependencies = [
1508
+
"proc-macro2",
1509
+
"quote",
1510
+
"syn",
1511
+
"synstructure",
1512
+
]
1513
+
1514
+
[[package]]
1515
+
name = "zerotrie"
1516
+
version = "0.2.2"
1517
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1518
+
checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
1519
+
dependencies = [
1520
+
"displaydoc",
1521
+
"yoke",
1522
+
"zerofrom",
1523
+
]
1524
+
1525
+
[[package]]
1526
+
name = "zerovec"
1527
+
version = "0.11.4"
1528
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1529
+
checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b"
1530
+
dependencies = [
1531
+
"yoke",
1532
+
"zerofrom",
1533
+
"zerovec-derive",
1534
+
]
1535
+
1536
+
[[package]]
1537
+
name = "zerovec-derive"
1538
+
version = "0.11.1"
1539
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1540
+
checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
1541
+
dependencies = [
1542
+
"proc-macro2",
1543
+
"quote",
1544
+
"syn",
1545
+
]
+13
Cargo.toml
+13
Cargo.toml
···
1
+
[package]
2
+
name = "excuse"
3
+
version = "0.1.0"
4
+
edition = "2024"
5
+
6
+
[dependencies]
7
+
env_logger = "0.11.8"
8
+
fuser = { git = "https://github.com/Haoyu-Xiao/fuser", features = ["abi-7-12", "libfuse"] }
9
+
libc = "0.2.174"
10
+
log = "0.4.28"
11
+
tokio = { version = "1.0", features = ["full"] }
12
+
tokio-tungstenite = { version = "0.20", features = ["native-tls"] }
13
+
futures-util = "0.3"
+20
readme.md
+20
readme.md
···
1
+
# excuse
2
+
3
+
mount jetstream as a userspace character device on linux.
4
+
5
+
## usage
6
+
7
+
```
8
+
λ cargo b
9
+
λ sudo RUST_LOG=info ./target/debug/excuse
10
+
11
+
# -- in another shell --
12
+
λ cat /dev/jetstream | jq
13
+
```
14
+
15
+
## motivation
16
+
17
+
> People who think that userspace filesystems are realistic
18
+
> for anything but toys are just misguided
19
+
>
20
+
> Linus Torvalds
+219
src/main.rs
+219
src/main.rs
···
1
+
use fuser::{Filesystem, ReplyData};
2
+
use futures_util::StreamExt;
3
+
use log::{error, info, warn};
4
+
use std::collections::VecDeque;
5
+
use std::process::Command;
6
+
use std::sync::{Arc, Mutex};
7
+
use std::thread;
8
+
use tokio::sync::oneshot;
9
+
use tokio_tungstenite::{connect_async, tungstenite::Message};
10
+
11
+
const DEV: &str = "jetstream";
12
+
13
+
struct CuseDevice {
14
+
buffer: Arc<Mutex<VecDeque<u8>>>,
15
+
is_running: Arc<Mutex<bool>>,
16
+
cancel: Arc<Mutex<Option<oneshot::Sender<()>>>>,
17
+
}
18
+
19
+
impl CuseDevice {
20
+
fn new() -> Self {
21
+
Self {
22
+
buffer: Arc::new(Mutex::new(VecDeque::new())),
23
+
is_running: Arc::new(Mutex::new(false)),
24
+
cancel: Arc::new(Mutex::new(None)),
25
+
}
26
+
}
27
+
28
+
fn begin_stream(&self) {
29
+
let mut is_running = self.is_running.lock().unwrap();
30
+
if !*is_running {
31
+
*is_running = true;
32
+
let buffer_clone = Arc::clone(&self.buffer);
33
+
let (cancel_tx, cancel_rx) = oneshot::channel();
34
+
35
+
*self.cancel.lock().unwrap() = Some(cancel_tx);
36
+
37
+
thread::spawn(move || {
38
+
let rt = tokio::runtime::Runtime::new().unwrap();
39
+
rt.block_on(async {
40
+
Self::websocket_task(buffer_clone, cancel_rx).await;
41
+
});
42
+
});
43
+
info!("started websocket connection thread");
44
+
}
45
+
}
46
+
47
+
fn end_stream(&self) {
48
+
let mut shutdown_tx = self.cancel.lock().unwrap();
49
+
if let Some(tx) = shutdown_tx.take() {
50
+
let _ = tx.send(());
51
+
info!("sent shutdown signal to websocket");
52
+
}
53
+
*self.is_running.lock().unwrap() = false;
54
+
}
55
+
56
+
async fn websocket_task(
57
+
buffer: Arc<Mutex<VecDeque<u8>>>,
58
+
mut shutdown_rx: oneshot::Receiver<()>,
59
+
) {
60
+
loop {
61
+
info!("connecting to jetstream...");
62
+
match connect_async("wss://jetstream1.us-west.bsky.network/subscribe").await {
63
+
Ok((mut ws, _)) => {
64
+
info!("connected to jetstream ... ");
65
+
66
+
loop {
67
+
tokio::select! {
68
+
_ = &mut shutdown_rx => {
69
+
info!("shutting down ... ");
70
+
let _ = ws.close(None).await;
71
+
return;
72
+
}
73
+
74
+
msg = ws.next() => {
75
+
match msg {
76
+
Some(Ok(Message::Text(text))) => {
77
+
let mut buf = buffer.lock().unwrap();
78
+
79
+
buf.extend(text.as_bytes());
80
+
buf.push_back(b'\n');
81
+
82
+
while buf.len() > 1024 * 1024 {
83
+
buf.pop_front();
84
+
}
85
+
86
+
info!("received {} bytes, buffer size: {}", text.len(), buf.len());
87
+
}
88
+
Some(Ok(Message::Close(_))) => {
89
+
warn!("websocket closed by server");
90
+
break;
91
+
}
92
+
Some(Err(e)) => {
93
+
error!("websocket error: {}", e);
94
+
break;
95
+
}
96
+
None => {
97
+
warn!("websocket stream ended");
98
+
break;
99
+
}
100
+
_ => {}
101
+
}
102
+
}
103
+
}
104
+
}
105
+
}
106
+
Err(e) => {
107
+
error!("failed to connect to websocket: {}", e);
108
+
}
109
+
}
110
+
111
+
if shutdown_rx.try_recv().is_ok() {
112
+
info!("shutdown requested, stopping websocket task");
113
+
return;
114
+
}
115
+
116
+
info!("reconnecting in 5 seconds...");
117
+
tokio::time::sleep(tokio::time::Duration::from_secs(5)).await;
118
+
}
119
+
}
120
+
}
121
+
122
+
impl Filesystem for CuseDevice {
123
+
fn cuse_init(
124
+
&mut self,
125
+
_req: &fuser::Request<'_>,
126
+
reply: fuser::ReplyCuseInit,
127
+
) -> Result<(), libc::c_int> {
128
+
let name = DEV;
129
+
let major = 51;
130
+
let minor = 0;
131
+
info!("Initializing CUSE at /dev/{name}");
132
+
let config = fuser::CuseConfig::new(name, major, minor);
133
+
reply.reply(config);
134
+
Ok(())
135
+
}
136
+
137
+
fn read(
138
+
&mut self,
139
+
_req: &fuser::Request<'_>,
140
+
ino: u64,
141
+
fh: u64,
142
+
offset: i64,
143
+
size: u32,
144
+
flags: i32,
145
+
lock_owner: Option<u64>,
146
+
reply: ReplyData,
147
+
) {
148
+
info!(
149
+
"read(ino: {ino:#x?}, fh: {fh}, offset: {offset}, size: {size}, flags: {flags:#x?}, lock_owner: {lock_owner:?})",
150
+
);
151
+
152
+
self.begin_stream();
153
+
154
+
loop {
155
+
let mut buffer = self.buffer.lock().unwrap();
156
+
if !buffer.is_empty() {
157
+
let bytes_to_read = std::cmp::min(size as usize, buffer.len());
158
+
let data = buffer.drain(0..bytes_to_read).collect::<Vec<_>>();
159
+
info!(
160
+
"Returning {} bytes, buffer remaining: {}",
161
+
data.len(),
162
+
buffer.len()
163
+
);
164
+
reply.data(&data);
165
+
return;
166
+
}
167
+
168
+
drop(buffer);
169
+
std::thread::sleep(std::time::Duration::from_millis(10));
170
+
}
171
+
}
172
+
173
+
fn release(
174
+
&mut self,
175
+
_req: &fuser::Request<'_>,
176
+
ino: u64,
177
+
fh: u64,
178
+
flags: i32,
179
+
lock_owner: Option<u64>,
180
+
flush: bool,
181
+
reply: fuser::ReplyEmpty,
182
+
) {
183
+
info!(
184
+
"release(ino: {:#x?}, fh: {}, flags: {:#x?}, lock_owner: {:?}, flush: {})",
185
+
ino, fh, flags, lock_owner, flush
186
+
);
187
+
self.end_stream();
188
+
reply.ok();
189
+
}
190
+
}
191
+
192
+
fn main() {
193
+
env_logger::init();
194
+
let device = CuseDevice::new();
195
+
196
+
// run cuse in a separate thread
197
+
let handle = thread::spawn(|| {
198
+
fuser::cuse(device).unwrap_or_else(|e| {
199
+
error!(
200
+
"failed to start cuse device: {}. try run this example as privileged user",
201
+
e
202
+
);
203
+
std::process::exit(1);
204
+
})
205
+
});
206
+
207
+
// make the device readable without sudo
208
+
let output = Command::new("chmod")
209
+
.args(&["644", &format!("/dev/{DEV}")])
210
+
.output();
211
+
212
+
match output {
213
+
Ok(result) if result.status.success() => info!("/dev/{DEV} is now 0644"),
214
+
_ => warn!("failed to execute chmod"),
215
+
}
216
+
217
+
let _ = handle.join();
218
+
info!("done");
219
+
}