+2185
Cargo.lock
+2185
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.0"
17
+
source = "registry+https://github.com/rust-lang/crates.io-index"
18
+
checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
19
+
20
+
[[package]]
21
+
name = "allocator-api2"
22
+
version = "0.2.21"
23
+
source = "registry+https://github.com/rust-lang/crates.io-index"
24
+
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
25
+
26
+
[[package]]
27
+
name = "android-tzdata"
28
+
version = "0.1.1"
29
+
source = "registry+https://github.com/rust-lang/crates.io-index"
30
+
checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
31
+
32
+
[[package]]
33
+
name = "android_system_properties"
34
+
version = "0.1.5"
35
+
source = "registry+https://github.com/rust-lang/crates.io-index"
36
+
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
37
+
dependencies = [
38
+
"libc",
39
+
]
40
+
41
+
[[package]]
42
+
name = "atomic-waker"
43
+
version = "1.1.2"
44
+
source = "registry+https://github.com/rust-lang/crates.io-index"
45
+
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
46
+
47
+
[[package]]
48
+
name = "autocfg"
49
+
version = "1.4.0"
50
+
source = "registry+https://github.com/rust-lang/crates.io-index"
51
+
checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
52
+
53
+
[[package]]
54
+
name = "backtrace"
55
+
version = "0.3.74"
56
+
source = "registry+https://github.com/rust-lang/crates.io-index"
57
+
checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a"
58
+
dependencies = [
59
+
"addr2line",
60
+
"cfg-if",
61
+
"libc",
62
+
"miniz_oxide",
63
+
"object",
64
+
"rustc-demangle",
65
+
"windows-targets 0.52.6",
66
+
]
67
+
68
+
[[package]]
69
+
name = "base64"
70
+
version = "0.22.1"
71
+
source = "registry+https://github.com/rust-lang/crates.io-index"
72
+
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
73
+
74
+
[[package]]
75
+
name = "bitflags"
76
+
version = "2.9.0"
77
+
source = "registry+https://github.com/rust-lang/crates.io-index"
78
+
checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
79
+
80
+
[[package]]
81
+
name = "bumpalo"
82
+
version = "3.17.0"
83
+
source = "registry+https://github.com/rust-lang/crates.io-index"
84
+
checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
85
+
86
+
[[package]]
87
+
name = "bytes"
88
+
version = "1.10.1"
89
+
source = "registry+https://github.com/rust-lang/crates.io-index"
90
+
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
91
+
92
+
[[package]]
93
+
name = "cassowary"
94
+
version = "0.3.0"
95
+
source = "registry+https://github.com/rust-lang/crates.io-index"
96
+
checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
97
+
98
+
[[package]]
99
+
name = "castaway"
100
+
version = "0.2.3"
101
+
source = "registry+https://github.com/rust-lang/crates.io-index"
102
+
checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5"
103
+
dependencies = [
104
+
"rustversion",
105
+
]
106
+
107
+
[[package]]
108
+
name = "cc"
109
+
version = "1.2.20"
110
+
source = "registry+https://github.com/rust-lang/crates.io-index"
111
+
checksum = "04da6a0d40b948dfc4fa8f5bbf402b0fc1a64a28dbf7d12ffd683550f2c1b63a"
112
+
dependencies = [
113
+
"shlex",
114
+
]
115
+
116
+
[[package]]
117
+
name = "cfg-if"
118
+
version = "1.0.0"
119
+
source = "registry+https://github.com/rust-lang/crates.io-index"
120
+
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
121
+
122
+
[[package]]
123
+
name = "chrono"
124
+
version = "0.4.40"
125
+
source = "registry+https://github.com/rust-lang/crates.io-index"
126
+
checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c"
127
+
dependencies = [
128
+
"android-tzdata",
129
+
"iana-time-zone",
130
+
"js-sys",
131
+
"num-traits",
132
+
"serde",
133
+
"wasm-bindgen",
134
+
"windows-link",
135
+
]
136
+
137
+
[[package]]
138
+
name = "compact_str"
139
+
version = "0.8.1"
140
+
source = "registry+https://github.com/rust-lang/crates.io-index"
141
+
checksum = "3b79c4069c6cad78e2e0cdfcbd26275770669fb39fd308a752dc110e83b9af32"
142
+
dependencies = [
143
+
"castaway",
144
+
"cfg-if",
145
+
"itoa",
146
+
"rustversion",
147
+
"ryu",
148
+
"static_assertions",
149
+
]
150
+
151
+
[[package]]
152
+
name = "core-foundation"
153
+
version = "0.9.4"
154
+
source = "registry+https://github.com/rust-lang/crates.io-index"
155
+
checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
156
+
dependencies = [
157
+
"core-foundation-sys",
158
+
"libc",
159
+
]
160
+
161
+
[[package]]
162
+
name = "core-foundation-sys"
163
+
version = "0.8.7"
164
+
source = "registry+https://github.com/rust-lang/crates.io-index"
165
+
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
166
+
167
+
[[package]]
168
+
name = "crossterm"
169
+
version = "0.28.1"
170
+
source = "registry+https://github.com/rust-lang/crates.io-index"
171
+
checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6"
172
+
dependencies = [
173
+
"bitflags",
174
+
"crossterm_winapi",
175
+
"mio",
176
+
"parking_lot",
177
+
"rustix 0.38.44",
178
+
"signal-hook",
179
+
"signal-hook-mio",
180
+
"winapi",
181
+
]
182
+
183
+
[[package]]
184
+
name = "crossterm_winapi"
185
+
version = "0.9.1"
186
+
source = "registry+https://github.com/rust-lang/crates.io-index"
187
+
checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
188
+
dependencies = [
189
+
"winapi",
190
+
]
191
+
192
+
[[package]]
193
+
name = "darling"
194
+
version = "0.20.11"
195
+
source = "registry+https://github.com/rust-lang/crates.io-index"
196
+
checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
197
+
dependencies = [
198
+
"darling_core",
199
+
"darling_macro",
200
+
]
201
+
202
+
[[package]]
203
+
name = "darling_core"
204
+
version = "0.20.11"
205
+
source = "registry+https://github.com/rust-lang/crates.io-index"
206
+
checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
207
+
dependencies = [
208
+
"fnv",
209
+
"ident_case",
210
+
"proc-macro2",
211
+
"quote",
212
+
"strsim",
213
+
"syn",
214
+
]
215
+
216
+
[[package]]
217
+
name = "darling_macro"
218
+
version = "0.20.11"
219
+
source = "registry+https://github.com/rust-lang/crates.io-index"
220
+
checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
221
+
dependencies = [
222
+
"darling_core",
223
+
"quote",
224
+
"syn",
225
+
]
226
+
227
+
[[package]]
228
+
name = "displaydoc"
229
+
version = "0.2.5"
230
+
source = "registry+https://github.com/rust-lang/crates.io-index"
231
+
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
232
+
dependencies = [
233
+
"proc-macro2",
234
+
"quote",
235
+
"syn",
236
+
]
237
+
238
+
[[package]]
239
+
name = "either"
240
+
version = "1.15.0"
241
+
source = "registry+https://github.com/rust-lang/crates.io-index"
242
+
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
243
+
244
+
[[package]]
245
+
name = "encoding_rs"
246
+
version = "0.8.35"
247
+
source = "registry+https://github.com/rust-lang/crates.io-index"
248
+
checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
249
+
dependencies = [
250
+
"cfg-if",
251
+
]
252
+
253
+
[[package]]
254
+
name = "equivalent"
255
+
version = "1.0.2"
256
+
source = "registry+https://github.com/rust-lang/crates.io-index"
257
+
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
258
+
259
+
[[package]]
260
+
name = "errno"
261
+
version = "0.3.11"
262
+
source = "registry+https://github.com/rust-lang/crates.io-index"
263
+
checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e"
264
+
dependencies = [
265
+
"libc",
266
+
"windows-sys 0.59.0",
267
+
]
268
+
269
+
[[package]]
270
+
name = "fastrand"
271
+
version = "2.3.0"
272
+
source = "registry+https://github.com/rust-lang/crates.io-index"
273
+
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
274
+
275
+
[[package]]
276
+
name = "fnv"
277
+
version = "1.0.7"
278
+
source = "registry+https://github.com/rust-lang/crates.io-index"
279
+
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
280
+
281
+
[[package]]
282
+
name = "foldhash"
283
+
version = "0.1.5"
284
+
source = "registry+https://github.com/rust-lang/crates.io-index"
285
+
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
286
+
287
+
[[package]]
288
+
name = "foreign-types"
289
+
version = "0.3.2"
290
+
source = "registry+https://github.com/rust-lang/crates.io-index"
291
+
checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
292
+
dependencies = [
293
+
"foreign-types-shared",
294
+
]
295
+
296
+
[[package]]
297
+
name = "foreign-types-shared"
298
+
version = "0.1.1"
299
+
source = "registry+https://github.com/rust-lang/crates.io-index"
300
+
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
301
+
302
+
[[package]]
303
+
name = "form_urlencoded"
304
+
version = "1.2.1"
305
+
source = "registry+https://github.com/rust-lang/crates.io-index"
306
+
checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
307
+
dependencies = [
308
+
"percent-encoding",
309
+
]
310
+
311
+
[[package]]
312
+
name = "futures-channel"
313
+
version = "0.3.31"
314
+
source = "registry+https://github.com/rust-lang/crates.io-index"
315
+
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
316
+
dependencies = [
317
+
"futures-core",
318
+
]
319
+
320
+
[[package]]
321
+
name = "futures-core"
322
+
version = "0.3.31"
323
+
source = "registry+https://github.com/rust-lang/crates.io-index"
324
+
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
325
+
326
+
[[package]]
327
+
name = "futures-sink"
328
+
version = "0.3.31"
329
+
source = "registry+https://github.com/rust-lang/crates.io-index"
330
+
checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
331
+
332
+
[[package]]
333
+
name = "futures-task"
334
+
version = "0.3.31"
335
+
source = "registry+https://github.com/rust-lang/crates.io-index"
336
+
checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
337
+
338
+
[[package]]
339
+
name = "futures-util"
340
+
version = "0.3.31"
341
+
source = "registry+https://github.com/rust-lang/crates.io-index"
342
+
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
343
+
dependencies = [
344
+
"futures-core",
345
+
"futures-task",
346
+
"pin-project-lite",
347
+
"pin-utils",
348
+
]
349
+
350
+
[[package]]
351
+
name = "getrandom"
352
+
version = "0.2.16"
353
+
source = "registry+https://github.com/rust-lang/crates.io-index"
354
+
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
355
+
dependencies = [
356
+
"cfg-if",
357
+
"libc",
358
+
"wasi 0.11.0+wasi-snapshot-preview1",
359
+
]
360
+
361
+
[[package]]
362
+
name = "getrandom"
363
+
version = "0.3.2"
364
+
source = "registry+https://github.com/rust-lang/crates.io-index"
365
+
checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0"
366
+
dependencies = [
367
+
"cfg-if",
368
+
"libc",
369
+
"r-efi",
370
+
"wasi 0.14.2+wasi-0.2.4",
371
+
]
372
+
373
+
[[package]]
374
+
name = "gimli"
375
+
version = "0.31.1"
376
+
source = "registry+https://github.com/rust-lang/crates.io-index"
377
+
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
378
+
379
+
[[package]]
380
+
name = "h2"
381
+
version = "0.4.9"
382
+
source = "registry+https://github.com/rust-lang/crates.io-index"
383
+
checksum = "75249d144030531f8dee69fe9cea04d3edf809a017ae445e2abdff6629e86633"
384
+
dependencies = [
385
+
"atomic-waker",
386
+
"bytes",
387
+
"fnv",
388
+
"futures-core",
389
+
"futures-sink",
390
+
"http",
391
+
"indexmap",
392
+
"slab",
393
+
"tokio",
394
+
"tokio-util",
395
+
"tracing",
396
+
]
397
+
398
+
[[package]]
399
+
name = "hashbrown"
400
+
version = "0.15.2"
401
+
source = "registry+https://github.com/rust-lang/crates.io-index"
402
+
checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
403
+
dependencies = [
404
+
"allocator-api2",
405
+
"equivalent",
406
+
"foldhash",
407
+
]
408
+
409
+
[[package]]
410
+
name = "heck"
411
+
version = "0.5.0"
412
+
source = "registry+https://github.com/rust-lang/crates.io-index"
413
+
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
414
+
415
+
[[package]]
416
+
name = "http"
417
+
version = "1.3.1"
418
+
source = "registry+https://github.com/rust-lang/crates.io-index"
419
+
checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
420
+
dependencies = [
421
+
"bytes",
422
+
"fnv",
423
+
"itoa",
424
+
]
425
+
426
+
[[package]]
427
+
name = "http-body"
428
+
version = "1.0.1"
429
+
source = "registry+https://github.com/rust-lang/crates.io-index"
430
+
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
431
+
dependencies = [
432
+
"bytes",
433
+
"http",
434
+
]
435
+
436
+
[[package]]
437
+
name = "http-body-util"
438
+
version = "0.1.3"
439
+
source = "registry+https://github.com/rust-lang/crates.io-index"
440
+
checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
441
+
dependencies = [
442
+
"bytes",
443
+
"futures-core",
444
+
"http",
445
+
"http-body",
446
+
"pin-project-lite",
447
+
]
448
+
449
+
[[package]]
450
+
name = "httparse"
451
+
version = "1.10.1"
452
+
source = "registry+https://github.com/rust-lang/crates.io-index"
453
+
checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
454
+
455
+
[[package]]
456
+
name = "hyper"
457
+
version = "1.6.0"
458
+
source = "registry+https://github.com/rust-lang/crates.io-index"
459
+
checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80"
460
+
dependencies = [
461
+
"bytes",
462
+
"futures-channel",
463
+
"futures-util",
464
+
"h2",
465
+
"http",
466
+
"http-body",
467
+
"httparse",
468
+
"itoa",
469
+
"pin-project-lite",
470
+
"smallvec",
471
+
"tokio",
472
+
"want",
473
+
]
474
+
475
+
[[package]]
476
+
name = "hyper-rustls"
477
+
version = "0.27.5"
478
+
source = "registry+https://github.com/rust-lang/crates.io-index"
479
+
checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2"
480
+
dependencies = [
481
+
"futures-util",
482
+
"http",
483
+
"hyper",
484
+
"hyper-util",
485
+
"rustls",
486
+
"rustls-pki-types",
487
+
"tokio",
488
+
"tokio-rustls",
489
+
"tower-service",
490
+
]
491
+
492
+
[[package]]
493
+
name = "hyper-tls"
494
+
version = "0.6.0"
495
+
source = "registry+https://github.com/rust-lang/crates.io-index"
496
+
checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0"
497
+
dependencies = [
498
+
"bytes",
499
+
"http-body-util",
500
+
"hyper",
501
+
"hyper-util",
502
+
"native-tls",
503
+
"tokio",
504
+
"tokio-native-tls",
505
+
"tower-service",
506
+
]
507
+
508
+
[[package]]
509
+
name = "hyper-util"
510
+
version = "0.1.11"
511
+
source = "registry+https://github.com/rust-lang/crates.io-index"
512
+
checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2"
513
+
dependencies = [
514
+
"bytes",
515
+
"futures-channel",
516
+
"futures-util",
517
+
"http",
518
+
"http-body",
519
+
"hyper",
520
+
"libc",
521
+
"pin-project-lite",
522
+
"socket2",
523
+
"tokio",
524
+
"tower-service",
525
+
"tracing",
526
+
]
527
+
528
+
[[package]]
529
+
name = "iana-time-zone"
530
+
version = "0.1.63"
531
+
source = "registry+https://github.com/rust-lang/crates.io-index"
532
+
checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
533
+
dependencies = [
534
+
"android_system_properties",
535
+
"core-foundation-sys",
536
+
"iana-time-zone-haiku",
537
+
"js-sys",
538
+
"log",
539
+
"wasm-bindgen",
540
+
"windows-core",
541
+
]
542
+
543
+
[[package]]
544
+
name = "iana-time-zone-haiku"
545
+
version = "0.1.2"
546
+
source = "registry+https://github.com/rust-lang/crates.io-index"
547
+
checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
548
+
dependencies = [
549
+
"cc",
550
+
]
551
+
552
+
[[package]]
553
+
name = "icu_collections"
554
+
version = "1.5.0"
555
+
source = "registry+https://github.com/rust-lang/crates.io-index"
556
+
checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
557
+
dependencies = [
558
+
"displaydoc",
559
+
"yoke",
560
+
"zerofrom",
561
+
"zerovec",
562
+
]
563
+
564
+
[[package]]
565
+
name = "icu_locid"
566
+
version = "1.5.0"
567
+
source = "registry+https://github.com/rust-lang/crates.io-index"
568
+
checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
569
+
dependencies = [
570
+
"displaydoc",
571
+
"litemap",
572
+
"tinystr",
573
+
"writeable",
574
+
"zerovec",
575
+
]
576
+
577
+
[[package]]
578
+
name = "icu_locid_transform"
579
+
version = "1.5.0"
580
+
source = "registry+https://github.com/rust-lang/crates.io-index"
581
+
checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
582
+
dependencies = [
583
+
"displaydoc",
584
+
"icu_locid",
585
+
"icu_locid_transform_data",
586
+
"icu_provider",
587
+
"tinystr",
588
+
"zerovec",
589
+
]
590
+
591
+
[[package]]
592
+
name = "icu_locid_transform_data"
593
+
version = "1.5.1"
594
+
source = "registry+https://github.com/rust-lang/crates.io-index"
595
+
checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d"
596
+
597
+
[[package]]
598
+
name = "icu_normalizer"
599
+
version = "1.5.0"
600
+
source = "registry+https://github.com/rust-lang/crates.io-index"
601
+
checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
602
+
dependencies = [
603
+
"displaydoc",
604
+
"icu_collections",
605
+
"icu_normalizer_data",
606
+
"icu_properties",
607
+
"icu_provider",
608
+
"smallvec",
609
+
"utf16_iter",
610
+
"utf8_iter",
611
+
"write16",
612
+
"zerovec",
613
+
]
614
+
615
+
[[package]]
616
+
name = "icu_normalizer_data"
617
+
version = "1.5.1"
618
+
source = "registry+https://github.com/rust-lang/crates.io-index"
619
+
checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7"
620
+
621
+
[[package]]
622
+
name = "icu_properties"
623
+
version = "1.5.1"
624
+
source = "registry+https://github.com/rust-lang/crates.io-index"
625
+
checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5"
626
+
dependencies = [
627
+
"displaydoc",
628
+
"icu_collections",
629
+
"icu_locid_transform",
630
+
"icu_properties_data",
631
+
"icu_provider",
632
+
"tinystr",
633
+
"zerovec",
634
+
]
635
+
636
+
[[package]]
637
+
name = "icu_properties_data"
638
+
version = "1.5.1"
639
+
source = "registry+https://github.com/rust-lang/crates.io-index"
640
+
checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2"
641
+
642
+
[[package]]
643
+
name = "icu_provider"
644
+
version = "1.5.0"
645
+
source = "registry+https://github.com/rust-lang/crates.io-index"
646
+
checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
647
+
dependencies = [
648
+
"displaydoc",
649
+
"icu_locid",
650
+
"icu_provider_macros",
651
+
"stable_deref_trait",
652
+
"tinystr",
653
+
"writeable",
654
+
"yoke",
655
+
"zerofrom",
656
+
"zerovec",
657
+
]
658
+
659
+
[[package]]
660
+
name = "icu_provider_macros"
661
+
version = "1.5.0"
662
+
source = "registry+https://github.com/rust-lang/crates.io-index"
663
+
checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
664
+
dependencies = [
665
+
"proc-macro2",
666
+
"quote",
667
+
"syn",
668
+
]
669
+
670
+
[[package]]
671
+
name = "ident_case"
672
+
version = "1.0.1"
673
+
source = "registry+https://github.com/rust-lang/crates.io-index"
674
+
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
675
+
676
+
[[package]]
677
+
name = "idna"
678
+
version = "1.0.3"
679
+
source = "registry+https://github.com/rust-lang/crates.io-index"
680
+
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
681
+
dependencies = [
682
+
"idna_adapter",
683
+
"smallvec",
684
+
"utf8_iter",
685
+
]
686
+
687
+
[[package]]
688
+
name = "idna_adapter"
689
+
version = "1.2.0"
690
+
source = "registry+https://github.com/rust-lang/crates.io-index"
691
+
checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71"
692
+
dependencies = [
693
+
"icu_normalizer",
694
+
"icu_properties",
695
+
]
696
+
697
+
[[package]]
698
+
name = "indexmap"
699
+
version = "2.9.0"
700
+
source = "registry+https://github.com/rust-lang/crates.io-index"
701
+
checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
702
+
dependencies = [
703
+
"equivalent",
704
+
"hashbrown",
705
+
]
706
+
707
+
[[package]]
708
+
name = "indoc"
709
+
version = "2.0.6"
710
+
source = "registry+https://github.com/rust-lang/crates.io-index"
711
+
checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd"
712
+
713
+
[[package]]
714
+
name = "instability"
715
+
version = "0.3.7"
716
+
source = "registry+https://github.com/rust-lang/crates.io-index"
717
+
checksum = "0bf9fed6d91cfb734e7476a06bde8300a1b94e217e1b523b6f0cd1a01998c71d"
718
+
dependencies = [
719
+
"darling",
720
+
"indoc",
721
+
"proc-macro2",
722
+
"quote",
723
+
"syn",
724
+
]
725
+
726
+
[[package]]
727
+
name = "ipnet"
728
+
version = "2.11.0"
729
+
source = "registry+https://github.com/rust-lang/crates.io-index"
730
+
checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
731
+
732
+
[[package]]
733
+
name = "itertools"
734
+
version = "0.13.0"
735
+
source = "registry+https://github.com/rust-lang/crates.io-index"
736
+
checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
737
+
dependencies = [
738
+
"either",
739
+
]
740
+
741
+
[[package]]
742
+
name = "itoa"
743
+
version = "1.0.15"
744
+
source = "registry+https://github.com/rust-lang/crates.io-index"
745
+
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
746
+
747
+
[[package]]
748
+
name = "js-sys"
749
+
version = "0.3.77"
750
+
source = "registry+https://github.com/rust-lang/crates.io-index"
751
+
checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
752
+
dependencies = [
753
+
"once_cell",
754
+
"wasm-bindgen",
755
+
]
756
+
757
+
[[package]]
758
+
name = "lazy_static"
759
+
version = "1.5.0"
760
+
source = "registry+https://github.com/rust-lang/crates.io-index"
761
+
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
762
+
763
+
[[package]]
764
+
name = "libc"
765
+
version = "0.2.172"
766
+
source = "registry+https://github.com/rust-lang/crates.io-index"
767
+
checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
768
+
769
+
[[package]]
770
+
name = "linux-raw-sys"
771
+
version = "0.4.15"
772
+
source = "registry+https://github.com/rust-lang/crates.io-index"
773
+
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
774
+
775
+
[[package]]
776
+
name = "linux-raw-sys"
777
+
version = "0.9.4"
778
+
source = "registry+https://github.com/rust-lang/crates.io-index"
779
+
checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
780
+
781
+
[[package]]
782
+
name = "litemap"
783
+
version = "0.7.5"
784
+
source = "registry+https://github.com/rust-lang/crates.io-index"
785
+
checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856"
786
+
787
+
[[package]]
788
+
name = "lock_api"
789
+
version = "0.4.12"
790
+
source = "registry+https://github.com/rust-lang/crates.io-index"
791
+
checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
792
+
dependencies = [
793
+
"autocfg",
794
+
"scopeguard",
795
+
]
796
+
797
+
[[package]]
798
+
name = "log"
799
+
version = "0.4.27"
800
+
source = "registry+https://github.com/rust-lang/crates.io-index"
801
+
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
802
+
803
+
[[package]]
804
+
name = "lru"
805
+
version = "0.12.5"
806
+
source = "registry+https://github.com/rust-lang/crates.io-index"
807
+
checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38"
808
+
dependencies = [
809
+
"hashbrown",
810
+
]
811
+
812
+
[[package]]
813
+
name = "memchr"
814
+
version = "2.7.4"
815
+
source = "registry+https://github.com/rust-lang/crates.io-index"
816
+
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
817
+
818
+
[[package]]
819
+
name = "mime"
820
+
version = "0.3.17"
821
+
source = "registry+https://github.com/rust-lang/crates.io-index"
822
+
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
823
+
824
+
[[package]]
825
+
name = "miniz_oxide"
826
+
version = "0.8.8"
827
+
source = "registry+https://github.com/rust-lang/crates.io-index"
828
+
checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a"
829
+
dependencies = [
830
+
"adler2",
831
+
]
832
+
833
+
[[package]]
834
+
name = "mio"
835
+
version = "1.0.3"
836
+
source = "registry+https://github.com/rust-lang/crates.io-index"
837
+
checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd"
838
+
dependencies = [
839
+
"libc",
840
+
"log",
841
+
"wasi 0.11.0+wasi-snapshot-preview1",
842
+
"windows-sys 0.52.0",
843
+
]
844
+
845
+
[[package]]
846
+
name = "native-tls"
847
+
version = "0.2.14"
848
+
source = "registry+https://github.com/rust-lang/crates.io-index"
849
+
checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e"
850
+
dependencies = [
851
+
"libc",
852
+
"log",
853
+
"openssl",
854
+
"openssl-probe",
855
+
"openssl-sys",
856
+
"schannel",
857
+
"security-framework",
858
+
"security-framework-sys",
859
+
"tempfile",
860
+
]
861
+
862
+
[[package]]
863
+
name = "nu-ansi-term"
864
+
version = "0.46.0"
865
+
source = "registry+https://github.com/rust-lang/crates.io-index"
866
+
checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
867
+
dependencies = [
868
+
"overload",
869
+
"winapi",
870
+
]
871
+
872
+
[[package]]
873
+
name = "num-traits"
874
+
version = "0.2.19"
875
+
source = "registry+https://github.com/rust-lang/crates.io-index"
876
+
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
877
+
dependencies = [
878
+
"autocfg",
879
+
]
880
+
881
+
[[package]]
882
+
name = "object"
883
+
version = "0.36.7"
884
+
source = "registry+https://github.com/rust-lang/crates.io-index"
885
+
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
886
+
dependencies = [
887
+
"memchr",
888
+
]
889
+
890
+
[[package]]
891
+
name = "once_cell"
892
+
version = "1.21.3"
893
+
source = "registry+https://github.com/rust-lang/crates.io-index"
894
+
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
895
+
896
+
[[package]]
897
+
name = "openssl"
898
+
version = "0.10.72"
899
+
source = "registry+https://github.com/rust-lang/crates.io-index"
900
+
checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da"
901
+
dependencies = [
902
+
"bitflags",
903
+
"cfg-if",
904
+
"foreign-types",
905
+
"libc",
906
+
"once_cell",
907
+
"openssl-macros",
908
+
"openssl-sys",
909
+
]
910
+
911
+
[[package]]
912
+
name = "openssl-macros"
913
+
version = "0.1.1"
914
+
source = "registry+https://github.com/rust-lang/crates.io-index"
915
+
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
916
+
dependencies = [
917
+
"proc-macro2",
918
+
"quote",
919
+
"syn",
920
+
]
921
+
922
+
[[package]]
923
+
name = "openssl-probe"
924
+
version = "0.1.6"
925
+
source = "registry+https://github.com/rust-lang/crates.io-index"
926
+
checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
927
+
928
+
[[package]]
929
+
name = "openssl-sys"
930
+
version = "0.9.107"
931
+
source = "registry+https://github.com/rust-lang/crates.io-index"
932
+
checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07"
933
+
dependencies = [
934
+
"cc",
935
+
"libc",
936
+
"pkg-config",
937
+
"vcpkg",
938
+
]
939
+
940
+
[[package]]
941
+
name = "overload"
942
+
version = "0.1.1"
943
+
source = "registry+https://github.com/rust-lang/crates.io-index"
944
+
checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
945
+
946
+
[[package]]
947
+
name = "parking_lot"
948
+
version = "0.12.3"
949
+
source = "registry+https://github.com/rust-lang/crates.io-index"
950
+
checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
951
+
dependencies = [
952
+
"lock_api",
953
+
"parking_lot_core",
954
+
]
955
+
956
+
[[package]]
957
+
name = "parking_lot_core"
958
+
version = "0.9.10"
959
+
source = "registry+https://github.com/rust-lang/crates.io-index"
960
+
checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
961
+
dependencies = [
962
+
"cfg-if",
963
+
"libc",
964
+
"redox_syscall",
965
+
"smallvec",
966
+
"windows-targets 0.52.6",
967
+
]
968
+
969
+
[[package]]
970
+
name = "paste"
971
+
version = "1.0.15"
972
+
source = "registry+https://github.com/rust-lang/crates.io-index"
973
+
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
974
+
975
+
[[package]]
976
+
name = "percent-encoding"
977
+
version = "2.3.1"
978
+
source = "registry+https://github.com/rust-lang/crates.io-index"
979
+
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
980
+
981
+
[[package]]
982
+
name = "pin-project-lite"
983
+
version = "0.2.16"
984
+
source = "registry+https://github.com/rust-lang/crates.io-index"
985
+
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
986
+
987
+
[[package]]
988
+
name = "pin-utils"
989
+
version = "0.1.0"
990
+
source = "registry+https://github.com/rust-lang/crates.io-index"
991
+
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
992
+
993
+
[[package]]
994
+
name = "pkg-config"
995
+
version = "0.3.32"
996
+
source = "registry+https://github.com/rust-lang/crates.io-index"
997
+
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
998
+
999
+
[[package]]
1000
+
name = "proc-macro2"
1001
+
version = "1.0.95"
1002
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1003
+
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
1004
+
dependencies = [
1005
+
"unicode-ident",
1006
+
]
1007
+
1008
+
[[package]]
1009
+
name = "quote"
1010
+
version = "1.0.40"
1011
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1012
+
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
1013
+
dependencies = [
1014
+
"proc-macro2",
1015
+
]
1016
+
1017
+
[[package]]
1018
+
name = "r-efi"
1019
+
version = "5.2.0"
1020
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1021
+
checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5"
1022
+
1023
+
[[package]]
1024
+
name = "ratatui"
1025
+
version = "0.29.0"
1026
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1027
+
checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b"
1028
+
dependencies = [
1029
+
"bitflags",
1030
+
"cassowary",
1031
+
"compact_str",
1032
+
"crossterm",
1033
+
"indoc",
1034
+
"instability",
1035
+
"itertools",
1036
+
"lru",
1037
+
"paste",
1038
+
"strum",
1039
+
"unicode-segmentation",
1040
+
"unicode-truncate",
1041
+
"unicode-width 0.2.0",
1042
+
]
1043
+
1044
+
[[package]]
1045
+
name = "redox_syscall"
1046
+
version = "0.5.11"
1047
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1048
+
checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3"
1049
+
dependencies = [
1050
+
"bitflags",
1051
+
]
1052
+
1053
+
[[package]]
1054
+
name = "reqwest"
1055
+
version = "0.12.15"
1056
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1057
+
checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb"
1058
+
dependencies = [
1059
+
"base64",
1060
+
"bytes",
1061
+
"encoding_rs",
1062
+
"futures-core",
1063
+
"futures-util",
1064
+
"h2",
1065
+
"http",
1066
+
"http-body",
1067
+
"http-body-util",
1068
+
"hyper",
1069
+
"hyper-rustls",
1070
+
"hyper-tls",
1071
+
"hyper-util",
1072
+
"ipnet",
1073
+
"js-sys",
1074
+
"log",
1075
+
"mime",
1076
+
"native-tls",
1077
+
"once_cell",
1078
+
"percent-encoding",
1079
+
"pin-project-lite",
1080
+
"rustls-pemfile",
1081
+
"serde",
1082
+
"serde_json",
1083
+
"serde_urlencoded",
1084
+
"sync_wrapper",
1085
+
"system-configuration",
1086
+
"tokio",
1087
+
"tokio-native-tls",
1088
+
"tower",
1089
+
"tower-service",
1090
+
"url",
1091
+
"wasm-bindgen",
1092
+
"wasm-bindgen-futures",
1093
+
"web-sys",
1094
+
"windows-registry",
1095
+
]
1096
+
1097
+
[[package]]
1098
+
name = "ring"
1099
+
version = "0.17.14"
1100
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1101
+
checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
1102
+
dependencies = [
1103
+
"cc",
1104
+
"cfg-if",
1105
+
"getrandom 0.2.16",
1106
+
"libc",
1107
+
"untrusted",
1108
+
"windows-sys 0.52.0",
1109
+
]
1110
+
1111
+
[[package]]
1112
+
name = "rustc-demangle"
1113
+
version = "0.1.24"
1114
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1115
+
checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
1116
+
1117
+
[[package]]
1118
+
name = "rustix"
1119
+
version = "0.38.44"
1120
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1121
+
checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
1122
+
dependencies = [
1123
+
"bitflags",
1124
+
"errno",
1125
+
"libc",
1126
+
"linux-raw-sys 0.4.15",
1127
+
"windows-sys 0.59.0",
1128
+
]
1129
+
1130
+
[[package]]
1131
+
name = "rustix"
1132
+
version = "1.0.5"
1133
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1134
+
checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf"
1135
+
dependencies = [
1136
+
"bitflags",
1137
+
"errno",
1138
+
"libc",
1139
+
"linux-raw-sys 0.9.4",
1140
+
"windows-sys 0.59.0",
1141
+
]
1142
+
1143
+
[[package]]
1144
+
name = "rustls"
1145
+
version = "0.23.26"
1146
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1147
+
checksum = "df51b5869f3a441595eac5e8ff14d486ff285f7b8c0df8770e49c3b56351f0f0"
1148
+
dependencies = [
1149
+
"once_cell",
1150
+
"rustls-pki-types",
1151
+
"rustls-webpki",
1152
+
"subtle",
1153
+
"zeroize",
1154
+
]
1155
+
1156
+
[[package]]
1157
+
name = "rustls-pemfile"
1158
+
version = "2.2.0"
1159
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1160
+
checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50"
1161
+
dependencies = [
1162
+
"rustls-pki-types",
1163
+
]
1164
+
1165
+
[[package]]
1166
+
name = "rustls-pki-types"
1167
+
version = "1.11.0"
1168
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1169
+
checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c"
1170
+
1171
+
[[package]]
1172
+
name = "rustls-webpki"
1173
+
version = "0.103.1"
1174
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1175
+
checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03"
1176
+
dependencies = [
1177
+
"ring",
1178
+
"rustls-pki-types",
1179
+
"untrusted",
1180
+
]
1181
+
1182
+
[[package]]
1183
+
name = "rustversion"
1184
+
version = "1.0.20"
1185
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1186
+
checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"
1187
+
1188
+
[[package]]
1189
+
name = "ryu"
1190
+
version = "1.0.20"
1191
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1192
+
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
1193
+
1194
+
[[package]]
1195
+
name = "sattelite_observers"
1196
+
version = "0.1.0"
1197
+
dependencies = [
1198
+
"chrono",
1199
+
"ratatui",
1200
+
"reqwest",
1201
+
"serde",
1202
+
"sgp4",
1203
+
"tokio",
1204
+
"tracing",
1205
+
"tracing-error",
1206
+
"tracing-subscriber",
1207
+
]
1208
+
1209
+
[[package]]
1210
+
name = "schannel"
1211
+
version = "0.1.27"
1212
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1213
+
checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d"
1214
+
dependencies = [
1215
+
"windows-sys 0.59.0",
1216
+
]
1217
+
1218
+
[[package]]
1219
+
name = "scopeguard"
1220
+
version = "1.2.0"
1221
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1222
+
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
1223
+
1224
+
[[package]]
1225
+
name = "security-framework"
1226
+
version = "2.11.1"
1227
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1228
+
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
1229
+
dependencies = [
1230
+
"bitflags",
1231
+
"core-foundation",
1232
+
"core-foundation-sys",
1233
+
"libc",
1234
+
"security-framework-sys",
1235
+
]
1236
+
1237
+
[[package]]
1238
+
name = "security-framework-sys"
1239
+
version = "2.14.0"
1240
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1241
+
checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32"
1242
+
dependencies = [
1243
+
"core-foundation-sys",
1244
+
"libc",
1245
+
]
1246
+
1247
+
[[package]]
1248
+
name = "serde"
1249
+
version = "1.0.219"
1250
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1251
+
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
1252
+
dependencies = [
1253
+
"serde_derive",
1254
+
]
1255
+
1256
+
[[package]]
1257
+
name = "serde_derive"
1258
+
version = "1.0.219"
1259
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1260
+
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
1261
+
dependencies = [
1262
+
"proc-macro2",
1263
+
"quote",
1264
+
"syn",
1265
+
]
1266
+
1267
+
[[package]]
1268
+
name = "serde_json"
1269
+
version = "1.0.140"
1270
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1271
+
checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
1272
+
dependencies = [
1273
+
"itoa",
1274
+
"memchr",
1275
+
"ryu",
1276
+
"serde",
1277
+
]
1278
+
1279
+
[[package]]
1280
+
name = "serde_urlencoded"
1281
+
version = "0.7.1"
1282
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1283
+
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
1284
+
dependencies = [
1285
+
"form_urlencoded",
1286
+
"itoa",
1287
+
"ryu",
1288
+
"serde",
1289
+
]
1290
+
1291
+
[[package]]
1292
+
name = "sgp4"
1293
+
version = "2.2.0"
1294
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1295
+
checksum = "1e4b1f4474b6f9c1edcf6c74288127f3d5528d19160b817382e5b7db70637cf1"
1296
+
dependencies = [
1297
+
"chrono",
1298
+
"serde",
1299
+
"serde_json",
1300
+
]
1301
+
1302
+
[[package]]
1303
+
name = "sharded-slab"
1304
+
version = "0.1.7"
1305
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1306
+
checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
1307
+
dependencies = [
1308
+
"lazy_static",
1309
+
]
1310
+
1311
+
[[package]]
1312
+
name = "shlex"
1313
+
version = "1.3.0"
1314
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1315
+
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
1316
+
1317
+
[[package]]
1318
+
name = "signal-hook"
1319
+
version = "0.3.17"
1320
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1321
+
checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
1322
+
dependencies = [
1323
+
"libc",
1324
+
"signal-hook-registry",
1325
+
]
1326
+
1327
+
[[package]]
1328
+
name = "signal-hook-mio"
1329
+
version = "0.2.4"
1330
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1331
+
checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd"
1332
+
dependencies = [
1333
+
"libc",
1334
+
"mio",
1335
+
"signal-hook",
1336
+
]
1337
+
1338
+
[[package]]
1339
+
name = "signal-hook-registry"
1340
+
version = "1.4.5"
1341
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1342
+
checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410"
1343
+
dependencies = [
1344
+
"libc",
1345
+
]
1346
+
1347
+
[[package]]
1348
+
name = "slab"
1349
+
version = "0.4.9"
1350
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1351
+
checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
1352
+
dependencies = [
1353
+
"autocfg",
1354
+
]
1355
+
1356
+
[[package]]
1357
+
name = "smallvec"
1358
+
version = "1.15.0"
1359
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1360
+
checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9"
1361
+
1362
+
[[package]]
1363
+
name = "socket2"
1364
+
version = "0.5.9"
1365
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1366
+
checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef"
1367
+
dependencies = [
1368
+
"libc",
1369
+
"windows-sys 0.52.0",
1370
+
]
1371
+
1372
+
[[package]]
1373
+
name = "stable_deref_trait"
1374
+
version = "1.2.0"
1375
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1376
+
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
1377
+
1378
+
[[package]]
1379
+
name = "static_assertions"
1380
+
version = "1.1.0"
1381
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1382
+
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
1383
+
1384
+
[[package]]
1385
+
name = "strsim"
1386
+
version = "0.11.1"
1387
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1388
+
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
1389
+
1390
+
[[package]]
1391
+
name = "strum"
1392
+
version = "0.26.3"
1393
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1394
+
checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06"
1395
+
dependencies = [
1396
+
"strum_macros",
1397
+
]
1398
+
1399
+
[[package]]
1400
+
name = "strum_macros"
1401
+
version = "0.26.4"
1402
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1403
+
checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be"
1404
+
dependencies = [
1405
+
"heck",
1406
+
"proc-macro2",
1407
+
"quote",
1408
+
"rustversion",
1409
+
"syn",
1410
+
]
1411
+
1412
+
[[package]]
1413
+
name = "subtle"
1414
+
version = "2.6.1"
1415
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1416
+
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
1417
+
1418
+
[[package]]
1419
+
name = "syn"
1420
+
version = "2.0.101"
1421
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1422
+
checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf"
1423
+
dependencies = [
1424
+
"proc-macro2",
1425
+
"quote",
1426
+
"unicode-ident",
1427
+
]
1428
+
1429
+
[[package]]
1430
+
name = "sync_wrapper"
1431
+
version = "1.0.2"
1432
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1433
+
checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
1434
+
dependencies = [
1435
+
"futures-core",
1436
+
]
1437
+
1438
+
[[package]]
1439
+
name = "synstructure"
1440
+
version = "0.13.1"
1441
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1442
+
checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
1443
+
dependencies = [
1444
+
"proc-macro2",
1445
+
"quote",
1446
+
"syn",
1447
+
]
1448
+
1449
+
[[package]]
1450
+
name = "system-configuration"
1451
+
version = "0.6.1"
1452
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1453
+
checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
1454
+
dependencies = [
1455
+
"bitflags",
1456
+
"core-foundation",
1457
+
"system-configuration-sys",
1458
+
]
1459
+
1460
+
[[package]]
1461
+
name = "system-configuration-sys"
1462
+
version = "0.6.0"
1463
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1464
+
checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4"
1465
+
dependencies = [
1466
+
"core-foundation-sys",
1467
+
"libc",
1468
+
]
1469
+
1470
+
[[package]]
1471
+
name = "tempfile"
1472
+
version = "3.19.1"
1473
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1474
+
checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf"
1475
+
dependencies = [
1476
+
"fastrand",
1477
+
"getrandom 0.3.2",
1478
+
"once_cell",
1479
+
"rustix 1.0.5",
1480
+
"windows-sys 0.59.0",
1481
+
]
1482
+
1483
+
[[package]]
1484
+
name = "thread_local"
1485
+
version = "1.1.8"
1486
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1487
+
checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c"
1488
+
dependencies = [
1489
+
"cfg-if",
1490
+
"once_cell",
1491
+
]
1492
+
1493
+
[[package]]
1494
+
name = "tinystr"
1495
+
version = "0.7.6"
1496
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1497
+
checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
1498
+
dependencies = [
1499
+
"displaydoc",
1500
+
"zerovec",
1501
+
]
1502
+
1503
+
[[package]]
1504
+
name = "tokio"
1505
+
version = "1.44.2"
1506
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1507
+
checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48"
1508
+
dependencies = [
1509
+
"backtrace",
1510
+
"bytes",
1511
+
"libc",
1512
+
"mio",
1513
+
"parking_lot",
1514
+
"pin-project-lite",
1515
+
"signal-hook-registry",
1516
+
"socket2",
1517
+
"tokio-macros",
1518
+
"windows-sys 0.52.0",
1519
+
]
1520
+
1521
+
[[package]]
1522
+
name = "tokio-macros"
1523
+
version = "2.5.0"
1524
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1525
+
checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
1526
+
dependencies = [
1527
+
"proc-macro2",
1528
+
"quote",
1529
+
"syn",
1530
+
]
1531
+
1532
+
[[package]]
1533
+
name = "tokio-native-tls"
1534
+
version = "0.3.1"
1535
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1536
+
checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
1537
+
dependencies = [
1538
+
"native-tls",
1539
+
"tokio",
1540
+
]
1541
+
1542
+
[[package]]
1543
+
name = "tokio-rustls"
1544
+
version = "0.26.2"
1545
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1546
+
checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b"
1547
+
dependencies = [
1548
+
"rustls",
1549
+
"tokio",
1550
+
]
1551
+
1552
+
[[package]]
1553
+
name = "tokio-util"
1554
+
version = "0.7.15"
1555
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1556
+
checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df"
1557
+
dependencies = [
1558
+
"bytes",
1559
+
"futures-core",
1560
+
"futures-sink",
1561
+
"pin-project-lite",
1562
+
"tokio",
1563
+
]
1564
+
1565
+
[[package]]
1566
+
name = "tower"
1567
+
version = "0.5.2"
1568
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1569
+
checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
1570
+
dependencies = [
1571
+
"futures-core",
1572
+
"futures-util",
1573
+
"pin-project-lite",
1574
+
"sync_wrapper",
1575
+
"tokio",
1576
+
"tower-layer",
1577
+
"tower-service",
1578
+
]
1579
+
1580
+
[[package]]
1581
+
name = "tower-layer"
1582
+
version = "0.3.3"
1583
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1584
+
checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
1585
+
1586
+
[[package]]
1587
+
name = "tower-service"
1588
+
version = "0.3.3"
1589
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1590
+
checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
1591
+
1592
+
[[package]]
1593
+
name = "tracing"
1594
+
version = "0.1.41"
1595
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1596
+
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
1597
+
dependencies = [
1598
+
"pin-project-lite",
1599
+
"tracing-attributes",
1600
+
"tracing-core",
1601
+
]
1602
+
1603
+
[[package]]
1604
+
name = "tracing-attributes"
1605
+
version = "0.1.28"
1606
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1607
+
checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
1608
+
dependencies = [
1609
+
"proc-macro2",
1610
+
"quote",
1611
+
"syn",
1612
+
]
1613
+
1614
+
[[package]]
1615
+
name = "tracing-core"
1616
+
version = "0.1.33"
1617
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1618
+
checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
1619
+
dependencies = [
1620
+
"once_cell",
1621
+
"valuable",
1622
+
]
1623
+
1624
+
[[package]]
1625
+
name = "tracing-error"
1626
+
version = "0.2.1"
1627
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1628
+
checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db"
1629
+
dependencies = [
1630
+
"tracing",
1631
+
"tracing-subscriber",
1632
+
]
1633
+
1634
+
[[package]]
1635
+
name = "tracing-log"
1636
+
version = "0.2.0"
1637
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1638
+
checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
1639
+
dependencies = [
1640
+
"log",
1641
+
"once_cell",
1642
+
"tracing-core",
1643
+
]
1644
+
1645
+
[[package]]
1646
+
name = "tracing-subscriber"
1647
+
version = "0.3.19"
1648
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1649
+
checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008"
1650
+
dependencies = [
1651
+
"nu-ansi-term",
1652
+
"sharded-slab",
1653
+
"smallvec",
1654
+
"thread_local",
1655
+
"tracing-core",
1656
+
"tracing-log",
1657
+
]
1658
+
1659
+
[[package]]
1660
+
name = "try-lock"
1661
+
version = "0.2.5"
1662
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1663
+
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
1664
+
1665
+
[[package]]
1666
+
name = "unicode-ident"
1667
+
version = "1.0.18"
1668
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1669
+
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
1670
+
1671
+
[[package]]
1672
+
name = "unicode-segmentation"
1673
+
version = "1.12.0"
1674
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1675
+
checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
1676
+
1677
+
[[package]]
1678
+
name = "unicode-truncate"
1679
+
version = "1.1.0"
1680
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1681
+
checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf"
1682
+
dependencies = [
1683
+
"itertools",
1684
+
"unicode-segmentation",
1685
+
"unicode-width 0.1.14",
1686
+
]
1687
+
1688
+
[[package]]
1689
+
name = "unicode-width"
1690
+
version = "0.1.14"
1691
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1692
+
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
1693
+
1694
+
[[package]]
1695
+
name = "unicode-width"
1696
+
version = "0.2.0"
1697
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1698
+
checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd"
1699
+
1700
+
[[package]]
1701
+
name = "untrusted"
1702
+
version = "0.9.0"
1703
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1704
+
checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
1705
+
1706
+
[[package]]
1707
+
name = "url"
1708
+
version = "2.5.4"
1709
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1710
+
checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
1711
+
dependencies = [
1712
+
"form_urlencoded",
1713
+
"idna",
1714
+
"percent-encoding",
1715
+
]
1716
+
1717
+
[[package]]
1718
+
name = "utf16_iter"
1719
+
version = "1.0.5"
1720
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1721
+
checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246"
1722
+
1723
+
[[package]]
1724
+
name = "utf8_iter"
1725
+
version = "1.0.4"
1726
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1727
+
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
1728
+
1729
+
[[package]]
1730
+
name = "valuable"
1731
+
version = "0.1.1"
1732
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1733
+
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
1734
+
1735
+
[[package]]
1736
+
name = "vcpkg"
1737
+
version = "0.2.15"
1738
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1739
+
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
1740
+
1741
+
[[package]]
1742
+
name = "want"
1743
+
version = "0.3.1"
1744
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1745
+
checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
1746
+
dependencies = [
1747
+
"try-lock",
1748
+
]
1749
+
1750
+
[[package]]
1751
+
name = "wasi"
1752
+
version = "0.11.0+wasi-snapshot-preview1"
1753
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1754
+
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
1755
+
1756
+
[[package]]
1757
+
name = "wasi"
1758
+
version = "0.14.2+wasi-0.2.4"
1759
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1760
+
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
1761
+
dependencies = [
1762
+
"wit-bindgen-rt",
1763
+
]
1764
+
1765
+
[[package]]
1766
+
name = "wasm-bindgen"
1767
+
version = "0.2.100"
1768
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1769
+
checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
1770
+
dependencies = [
1771
+
"cfg-if",
1772
+
"once_cell",
1773
+
"rustversion",
1774
+
"wasm-bindgen-macro",
1775
+
]
1776
+
1777
+
[[package]]
1778
+
name = "wasm-bindgen-backend"
1779
+
version = "0.2.100"
1780
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1781
+
checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
1782
+
dependencies = [
1783
+
"bumpalo",
1784
+
"log",
1785
+
"proc-macro2",
1786
+
"quote",
1787
+
"syn",
1788
+
"wasm-bindgen-shared",
1789
+
]
1790
+
1791
+
[[package]]
1792
+
name = "wasm-bindgen-futures"
1793
+
version = "0.4.50"
1794
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1795
+
checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
1796
+
dependencies = [
1797
+
"cfg-if",
1798
+
"js-sys",
1799
+
"once_cell",
1800
+
"wasm-bindgen",
1801
+
"web-sys",
1802
+
]
1803
+
1804
+
[[package]]
1805
+
name = "wasm-bindgen-macro"
1806
+
version = "0.2.100"
1807
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1808
+
checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
1809
+
dependencies = [
1810
+
"quote",
1811
+
"wasm-bindgen-macro-support",
1812
+
]
1813
+
1814
+
[[package]]
1815
+
name = "wasm-bindgen-macro-support"
1816
+
version = "0.2.100"
1817
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1818
+
checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
1819
+
dependencies = [
1820
+
"proc-macro2",
1821
+
"quote",
1822
+
"syn",
1823
+
"wasm-bindgen-backend",
1824
+
"wasm-bindgen-shared",
1825
+
]
1826
+
1827
+
[[package]]
1828
+
name = "wasm-bindgen-shared"
1829
+
version = "0.2.100"
1830
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1831
+
checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
1832
+
dependencies = [
1833
+
"unicode-ident",
1834
+
]
1835
+
1836
+
[[package]]
1837
+
name = "web-sys"
1838
+
version = "0.3.77"
1839
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1840
+
checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
1841
+
dependencies = [
1842
+
"js-sys",
1843
+
"wasm-bindgen",
1844
+
]
1845
+
1846
+
[[package]]
1847
+
name = "winapi"
1848
+
version = "0.3.9"
1849
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1850
+
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
1851
+
dependencies = [
1852
+
"winapi-i686-pc-windows-gnu",
1853
+
"winapi-x86_64-pc-windows-gnu",
1854
+
]
1855
+
1856
+
[[package]]
1857
+
name = "winapi-i686-pc-windows-gnu"
1858
+
version = "0.4.0"
1859
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1860
+
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
1861
+
1862
+
[[package]]
1863
+
name = "winapi-x86_64-pc-windows-gnu"
1864
+
version = "0.4.0"
1865
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1866
+
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
1867
+
1868
+
[[package]]
1869
+
name = "windows-core"
1870
+
version = "0.61.0"
1871
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1872
+
checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980"
1873
+
dependencies = [
1874
+
"windows-implement",
1875
+
"windows-interface",
1876
+
"windows-link",
1877
+
"windows-result",
1878
+
"windows-strings 0.4.0",
1879
+
]
1880
+
1881
+
[[package]]
1882
+
name = "windows-implement"
1883
+
version = "0.60.0"
1884
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1885
+
checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
1886
+
dependencies = [
1887
+
"proc-macro2",
1888
+
"quote",
1889
+
"syn",
1890
+
]
1891
+
1892
+
[[package]]
1893
+
name = "windows-interface"
1894
+
version = "0.59.1"
1895
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1896
+
checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
1897
+
dependencies = [
1898
+
"proc-macro2",
1899
+
"quote",
1900
+
"syn",
1901
+
]
1902
+
1903
+
[[package]]
1904
+
name = "windows-link"
1905
+
version = "0.1.1"
1906
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1907
+
checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
1908
+
1909
+
[[package]]
1910
+
name = "windows-registry"
1911
+
version = "0.4.0"
1912
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1913
+
checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3"
1914
+
dependencies = [
1915
+
"windows-result",
1916
+
"windows-strings 0.3.1",
1917
+
"windows-targets 0.53.0",
1918
+
]
1919
+
1920
+
[[package]]
1921
+
name = "windows-result"
1922
+
version = "0.3.2"
1923
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1924
+
checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252"
1925
+
dependencies = [
1926
+
"windows-link",
1927
+
]
1928
+
1929
+
[[package]]
1930
+
name = "windows-strings"
1931
+
version = "0.3.1"
1932
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1933
+
checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319"
1934
+
dependencies = [
1935
+
"windows-link",
1936
+
]
1937
+
1938
+
[[package]]
1939
+
name = "windows-strings"
1940
+
version = "0.4.0"
1941
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1942
+
checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97"
1943
+
dependencies = [
1944
+
"windows-link",
1945
+
]
1946
+
1947
+
[[package]]
1948
+
name = "windows-sys"
1949
+
version = "0.52.0"
1950
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1951
+
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
1952
+
dependencies = [
1953
+
"windows-targets 0.52.6",
1954
+
]
1955
+
1956
+
[[package]]
1957
+
name = "windows-sys"
1958
+
version = "0.59.0"
1959
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1960
+
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
1961
+
dependencies = [
1962
+
"windows-targets 0.52.6",
1963
+
]
1964
+
1965
+
[[package]]
1966
+
name = "windows-targets"
1967
+
version = "0.52.6"
1968
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1969
+
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
1970
+
dependencies = [
1971
+
"windows_aarch64_gnullvm 0.52.6",
1972
+
"windows_aarch64_msvc 0.52.6",
1973
+
"windows_i686_gnu 0.52.6",
1974
+
"windows_i686_gnullvm 0.52.6",
1975
+
"windows_i686_msvc 0.52.6",
1976
+
"windows_x86_64_gnu 0.52.6",
1977
+
"windows_x86_64_gnullvm 0.52.6",
1978
+
"windows_x86_64_msvc 0.52.6",
1979
+
]
1980
+
1981
+
[[package]]
1982
+
name = "windows-targets"
1983
+
version = "0.53.0"
1984
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1985
+
checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b"
1986
+
dependencies = [
1987
+
"windows_aarch64_gnullvm 0.53.0",
1988
+
"windows_aarch64_msvc 0.53.0",
1989
+
"windows_i686_gnu 0.53.0",
1990
+
"windows_i686_gnullvm 0.53.0",
1991
+
"windows_i686_msvc 0.53.0",
1992
+
"windows_x86_64_gnu 0.53.0",
1993
+
"windows_x86_64_gnullvm 0.53.0",
1994
+
"windows_x86_64_msvc 0.53.0",
1995
+
]
1996
+
1997
+
[[package]]
1998
+
name = "windows_aarch64_gnullvm"
1999
+
version = "0.52.6"
2000
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2001
+
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
2002
+
2003
+
[[package]]
2004
+
name = "windows_aarch64_gnullvm"
2005
+
version = "0.53.0"
2006
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2007
+
checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
2008
+
2009
+
[[package]]
2010
+
name = "windows_aarch64_msvc"
2011
+
version = "0.52.6"
2012
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2013
+
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
2014
+
2015
+
[[package]]
2016
+
name = "windows_aarch64_msvc"
2017
+
version = "0.53.0"
2018
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2019
+
checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
2020
+
2021
+
[[package]]
2022
+
name = "windows_i686_gnu"
2023
+
version = "0.52.6"
2024
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2025
+
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
2026
+
2027
+
[[package]]
2028
+
name = "windows_i686_gnu"
2029
+
version = "0.53.0"
2030
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2031
+
checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
2032
+
2033
+
[[package]]
2034
+
name = "windows_i686_gnullvm"
2035
+
version = "0.52.6"
2036
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2037
+
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
2038
+
2039
+
[[package]]
2040
+
name = "windows_i686_gnullvm"
2041
+
version = "0.53.0"
2042
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2043
+
checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
2044
+
2045
+
[[package]]
2046
+
name = "windows_i686_msvc"
2047
+
version = "0.52.6"
2048
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2049
+
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
2050
+
2051
+
[[package]]
2052
+
name = "windows_i686_msvc"
2053
+
version = "0.53.0"
2054
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2055
+
checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
2056
+
2057
+
[[package]]
2058
+
name = "windows_x86_64_gnu"
2059
+
version = "0.52.6"
2060
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2061
+
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
2062
+
2063
+
[[package]]
2064
+
name = "windows_x86_64_gnu"
2065
+
version = "0.53.0"
2066
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2067
+
checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
2068
+
2069
+
[[package]]
2070
+
name = "windows_x86_64_gnullvm"
2071
+
version = "0.52.6"
2072
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2073
+
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
2074
+
2075
+
[[package]]
2076
+
name = "windows_x86_64_gnullvm"
2077
+
version = "0.53.0"
2078
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2079
+
checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
2080
+
2081
+
[[package]]
2082
+
name = "windows_x86_64_msvc"
2083
+
version = "0.52.6"
2084
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2085
+
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
2086
+
2087
+
[[package]]
2088
+
name = "windows_x86_64_msvc"
2089
+
version = "0.53.0"
2090
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2091
+
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
2092
+
2093
+
[[package]]
2094
+
name = "wit-bindgen-rt"
2095
+
version = "0.39.0"
2096
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2097
+
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
2098
+
dependencies = [
2099
+
"bitflags",
2100
+
]
2101
+
2102
+
[[package]]
2103
+
name = "write16"
2104
+
version = "1.0.0"
2105
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2106
+
checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936"
2107
+
2108
+
[[package]]
2109
+
name = "writeable"
2110
+
version = "0.5.5"
2111
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2112
+
checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
2113
+
2114
+
[[package]]
2115
+
name = "yoke"
2116
+
version = "0.7.5"
2117
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2118
+
checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40"
2119
+
dependencies = [
2120
+
"serde",
2121
+
"stable_deref_trait",
2122
+
"yoke-derive",
2123
+
"zerofrom",
2124
+
]
2125
+
2126
+
[[package]]
2127
+
name = "yoke-derive"
2128
+
version = "0.7.5"
2129
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2130
+
checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
2131
+
dependencies = [
2132
+
"proc-macro2",
2133
+
"quote",
2134
+
"syn",
2135
+
"synstructure",
2136
+
]
2137
+
2138
+
[[package]]
2139
+
name = "zerofrom"
2140
+
version = "0.1.6"
2141
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2142
+
checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
2143
+
dependencies = [
2144
+
"zerofrom-derive",
2145
+
]
2146
+
2147
+
[[package]]
2148
+
name = "zerofrom-derive"
2149
+
version = "0.1.6"
2150
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2151
+
checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
2152
+
dependencies = [
2153
+
"proc-macro2",
2154
+
"quote",
2155
+
"syn",
2156
+
"synstructure",
2157
+
]
2158
+
2159
+
[[package]]
2160
+
name = "zeroize"
2161
+
version = "1.8.1"
2162
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2163
+
checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
2164
+
2165
+
[[package]]
2166
+
name = "zerovec"
2167
+
version = "0.10.4"
2168
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2169
+
checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079"
2170
+
dependencies = [
2171
+
"yoke",
2172
+
"zerofrom",
2173
+
"zerovec-derive",
2174
+
]
2175
+
2176
+
[[package]]
2177
+
name = "zerovec-derive"
2178
+
version = "0.10.3"
2179
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2180
+
checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
2181
+
dependencies = [
2182
+
"proc-macro2",
2183
+
"quote",
2184
+
"syn",
2185
+
]
+19
Cargo.toml
+19
Cargo.toml
···
1
+
[package]
2
+
name = "sattelite_observers"
3
+
version = "0.1.0"
4
+
edition = "2024"
5
+
6
+
[dependencies]
7
+
chrono = "0.4.40"
8
+
ratatui = "0.29.0"
9
+
reqwest = { version = "0.12.15", features = ["json"] }
10
+
serde = { version = "1.0.219", features = ["derive"] }
11
+
sgp4 = "2.2.0"
12
+
tokio = { version = "1.44.2", features = ["full"] }
13
+
14
+
tracing = {version = "0.1.41", optional = true}
15
+
tracing-error = {version="0.2.1",optional = true}
16
+
tracing-subscriber = {version="0.3.19",optional=true}
17
+
18
+
[features]
19
+
logging = ["dep:tracing","dep:tracing-error","tracing-subscriber"]
+25
README.md
+25
README.md
···
1
+
# Satellite observatory
2
+
3
+
Inspired by my previous project [iss_locator.rs](https://tangled.sh/@technoduck.me/iss_locator.rs), and the indomitable human spirit,
4
+
its an interactive program displaying the current location of the ISS.
5
+
6
+
The UI is made using [ratatui.rs](https://ratatui.rs/), which I hopefully will be able to then also port to [ratzilla](https://github.com/orhun/ratzilla).
7
+
8
+
9
+
## Usage
10
+
11
+
Can either be compiled normally, or with a `logging` feature, to enable tracing everything into log.log file (horrible alas it works).
12
+
13
+
## Methods
14
+
15
+
Location of the ISS is obtained from [celestrak](https://celestrak.org), where the Two Line Element for the ISS's orbit is obtained.
16
+
17
+
SGP4 algorithms + Earth Rotation angle are used to calculate the location and velocity at any specific point in time.
18
+
19
+
20
+
## Future?
21
+
22
+
While the code for now is a bit ISS specific other satellites can be easily added, by fetching their TLE and doing the same calculations.
23
+
24
+
25
+
+88
src/app.rs
+88
src/app.rs
···
1
+
use chrono::{DateTime, Utc};
2
+
use crate::location::FLocation;
3
+
use ratatui::{style::Color, text::Line, widgets::{ListItem, ListState}};
4
+
5
+
#[derive(Clone,Debug)]
6
+
pub enum CurrentScreen {
7
+
Map,
8
+
CityChoice,
9
+
Exiting
10
+
}
11
+
12
+
13
+
#[derive(Debug,Clone,PartialEq)]
14
+
pub struct City {
15
+
pub name: String,
16
+
pub long: f32,
17
+
pub lat: f32,
18
+
}
19
+
20
+
impl From<&City> for ListItem<'_> {
21
+
fn from(value: &City) -> Self {
22
+
let line = Line::styled(
23
+
format!("{} : {} W/E , {} N/S",value.name,value.long,value.lat),
24
+
Color::Gray);
25
+
ListItem::new(line)
26
+
}
27
+
28
+
}
29
+
30
+
/// uuuhhh future feature.
31
+
/// checking if the currently chosen city is within the ISS's visibility (https://tangled.sh/@technoduck.me/iss_locator.rs)
32
+
pub const CITIES:[(&str,f32,f32);9] = [
33
+
("Montreal",-72.2,45.5),
34
+
("Tokyo",139.766,35.66),
35
+
("Delhi",77.216,28.6),
36
+
("Shanghai",121.45,31.22),
37
+
("São Paulo",-46.65,-23.55),
38
+
("Mexico City",-99.12,19.45),
39
+
("Cairo",31.233,30.03),
40
+
("New York",-74.0,40.7),
41
+
("London",0.03,51.55)
42
+
];
43
+
44
+
impl From<&(&str,f32,f32)> for City {
45
+
fn from(value: &(&str,f32,f32)) -> Self {
46
+
City { name: value.0.to_string(), long: value.1, lat: value.2 }
47
+
}
48
+
}
49
+
50
+
#[derive(Clone,Debug)]
51
+
pub struct CityList {
52
+
pub cities: Vec<City>,
53
+
pub state: ListState
54
+
}
55
+
56
+
57
+
58
+
59
+
#[derive(Clone,Debug)]
60
+
pub struct App {
61
+
pub current_screen: CurrentScreen,
62
+
pub cities: CityList,
63
+
pub iss_location: Option<FLocation>,
64
+
pub getting_location: bool,
65
+
pub iss_constant: Option<sgp4::Constants>,
66
+
pub iss_constant_epoch: Option<DateTime<Utc>>
67
+
}
68
+
69
+
70
+
impl App {
71
+
pub fn new() -> App {
72
+
73
+
let cities_vec:Vec<City> = CITIES.iter()
74
+
.map(|f| City::from(f))
75
+
.collect();
76
+
let cities:CityList = CityList { cities: cities_vec, state: ListState::default() };
77
+
78
+
App {
79
+
current_screen:CurrentScreen::Map,
80
+
cities,
81
+
iss_location: None,
82
+
getting_location: false,
83
+
iss_constant: None,
84
+
iss_constant_epoch: None
85
+
}
86
+
}
87
+
88
+
}
+72
src/location.rs
+72
src/location.rs
···
1
+
use std::f64::consts::PI;
2
+
3
+
use chrono::{DateTime,Utc};
4
+
use serde::{Deserialize,Serialize};
5
+
6
+
7
+
pub fn earth_rotation_angle(t_u:f64) -> f64 {
8
+
//returns radians
9
+
2.0*PI*(0.7790572732640 + 1.00273781191135448*t_u) % std::f64::consts::TAU
10
+
}
11
+
12
+
13
+
//to be deleted dont think i need it much longer?
14
+
pub async fn get_celerak_data() -> (Option<sgp4::Constants>,Option<DateTime<Utc>>) {
15
+
let resp = reqwest::get("https://celestrak.org/NORAD/elements/gp.php?GROUP=stations&FORMAT=json").await.unwrap();
16
+
17
+
let element_vec:Vec<sgp4::Elements> = resp.json().await.unwrap();
18
+
19
+
20
+
let epoch = &element_vec[0].datetime.and_utc();
21
+
22
+
let iss_constant = sgp4::Constants::from_elements(&element_vec[0]).unwrap();
23
+
24
+
(Some(iss_constant),Some(*epoch))
25
+
26
+
}
27
+
28
+
29
+
// i should be using the geoid crate but this is good enough for now
30
+
pub fn polar_loc_transformer(loc: [f64;3]) -> [f32;2] {
31
+
let theta = -((loc[2]/ (loc[0].powi(2) + loc[1].powi(2) + loc[2].powi(2)).powf(0.5)).acos() - PI/2.0);
32
+
let phi = loc[1].signum() * (loc[0]/(loc[0].powi(2) + loc[1].powi(2)).powf(0.5)).acos();
33
+
34
+
[(phi*180.0/PI) as f32, (theta*180.0/PI) as f32]
35
+
36
+
37
+
}
38
+
39
+
40
+
41
+
#[derive(Debug,Clone,PartialEq,Deserialize,Serialize)]
42
+
pub struct Location {
43
+
pub latitude: String,
44
+
pub longitude: String
45
+
}
46
+
47
+
#[derive(Debug,Clone,Deserialize,Serialize)]
48
+
pub struct FLocation {
49
+
pub latitude: f32,
50
+
pub longitude: f32
51
+
}
52
+
53
+
54
+
55
+
56
+
impl From<Location> for FLocation {
57
+
fn from(value: Location) -> Self {
58
+
FLocation {
59
+
longitude: value.longitude.parse().unwrap(),
60
+
latitude: value.latitude.parse().unwrap()
61
+
}
62
+
}
63
+
64
+
}
65
+
66
+
#[derive(Debug,Clone,PartialEq,Deserialize,Serialize)]
67
+
pub struct LocationResponse {
68
+
pub iss_position: Location,
69
+
message: String,
70
+
timestamp: i64
71
+
}
72
+
+38
src/logging.rs
+38
src/logging.rs
···
1
+
2
+
use std::io::Error;
3
+
4
+
use tracing_error::ErrorLayer;
5
+
use tracing_subscriber::{self, layer::SubscriberExt, util::SubscriberInitExt};
6
+
7
+
pub fn initialize_logging() -> Result<(),Error> {
8
+
let log_file = std::fs::File::create("log.log")?;
9
+
let file_subscriber = tracing_subscriber::fmt::layer()
10
+
.with_file(true)
11
+
.with_line_number(true)
12
+
.with_writer(log_file)
13
+
.with_target(false)
14
+
.with_ansi(false);
15
+
tracing_subscriber::registry().with(file_subscriber).with(ErrorLayer::default()).init();
16
+
Ok(())
17
+
}
18
+
19
+
#[macro_export]
20
+
macro_rules! trace_dbg {
21
+
(target: $target:expr, level: $level:expr, $ex:expr) => {{
22
+
match $ex {
23
+
value => {
24
+
tracing::event!(target: $target, $level, ?value, stringify!($ex));
25
+
value
26
+
}
27
+
}
28
+
}};
29
+
(level: $level:expr, $ex:expr) => {
30
+
trace_dbg!(target: module_path!(), level: $level, $ex)
31
+
};
32
+
(target: $target:expr, $ex:expr) => {
33
+
trace_dbg!(target: $target, level: tracing::Level::DEBUG, $ex)
34
+
};
35
+
($ex:expr) => {
36
+
trace_dbg!(level: tracing::Level::DEBUG, $ex)
37
+
};
38
+
}
+184
src/main.rs
+184
src/main.rs
···
1
+
use chrono::Utc;
2
+
use ratatui::crossterm::event::{self, poll, EnableMouseCapture, Event, KeyCode};
3
+
use ratatui::crossterm::execute;
4
+
use ratatui::crossterm::terminal::{enable_raw_mode, EnterAlternateScreen};
5
+
use ratatui::crossterm::event::DisableMouseCapture;
6
+
use ratatui::crossterm::terminal::{disable_raw_mode, LeaveAlternateScreen};
7
+
use ratatui::prelude::{Backend, CrosstermBackend};
8
+
use ratatui::Terminal;
9
+
use sgp4::{julian_years_since_j2000, MinutesSinceEpoch};
10
+
use std::f32::consts::PI;
11
+
use std::io::{self, Result};
12
+
use std::sync::{Arc, Mutex};
13
+
use std::time::Duration;
14
+
15
+
mod app;
16
+
mod ui;
17
+
mod location;
18
+
19
+
#[cfg(feature = "logging")]
20
+
mod logging;
21
+
22
+
use app::*;
23
+
24
+
#[tokio::main]
25
+
async fn main() -> Result<()> {
26
+
#[cfg(feature = "logging")]
27
+
let _ = logging::initialize_logging();
28
+
enable_raw_mode()?;
29
+
let mut stderr = io::stderr(); // This is a special case. Normally using stdout is fine
30
+
execute!(stderr, EnterAlternateScreen, EnableMouseCapture)?;
31
+
let backend = CrosstermBackend::new(stderr);
32
+
let mut terminal = Terminal::new(backend)?;
33
+
34
+
// create app and run it
35
+
36
+
let app = Arc::new(Mutex::new(App::new()));
37
+
let location_shared_app = Arc::clone(&app);
38
+
let location_shared_app2 = Arc::clone(&app);
39
+
let mut runtime_shared_app = Arc::clone(&app);
40
+
41
+
42
+
let get_constant = tokio::task::spawn(async move {
43
+
location_shared_app.lock().unwrap().getting_location = true;
44
+
let constant = location::get_celerak_data().await;
45
+
if let (Some(cons),Some(epoch)) = constant {
46
+
location_shared_app.lock().unwrap().iss_constant = Some(cons);
47
+
location_shared_app.lock().unwrap().iss_constant_epoch = Some(epoch);
48
+
}
49
+
location_shared_app.lock().unwrap().getting_location = false;
50
+
});
51
+
52
+
let _ = get_constant;
53
+
54
+
55
+
56
+
let forever = tokio::task::spawn(async move {
57
+
let mut interval = tokio::time::interval(Duration::from_secs(2));
58
+
59
+
loop {
60
+
interval.tick().await;
61
+
if location_shared_app2.lock().unwrap().iss_constant.is_some() {
62
+
let now = Utc::now();
63
+
let d_since_j2000 = julian_years_since_j2000(&now.naive_utc()) * 365.25;
64
+
let rad_diff_earth_rotation = location::earth_rotation_angle(d_since_j2000);
65
+
let time_diff = now - location_shared_app2.lock().unwrap().iss_constant_epoch.unwrap();
66
+
let prediction = location_shared_app2.lock().unwrap().iss_constant.as_ref().unwrap()
67
+
.propagate(MinutesSinceEpoch(time_diff.num_seconds() as f64 / 60.0)).unwrap();
68
+
69
+
let pred_spherical = location::polar_loc_transformer(prediction.position);
70
+
71
+
let long_value = if pred_spherical[0]-(rad_diff_earth_rotation as f32)*180.0/PI < 180.0
72
+
{
73
+
pred_spherical[0]-(rad_diff_earth_rotation as f32)*180.0/PI + 360.0
74
+
} else {
75
+
pred_spherical[0]-(rad_diff_earth_rotation as f32)*180.0/PI
76
+
};
77
+
location_shared_app2.lock().unwrap().iss_location = Some(location::FLocation {
78
+
79
+
latitude: pred_spherical[1],
80
+
longitude: long_value
81
+
});
82
+
83
+
}
84
+
} ;
85
+
});
86
+
87
+
88
+
89
+
let _ = forever;
90
+
91
+
let _res = run_app(&mut terminal, &mut runtime_shared_app).await;
92
+
// restore terminal
93
+
disable_raw_mode()?;
94
+
execute!(
95
+
terminal.backend_mut(),
96
+
LeaveAlternateScreen,
97
+
DisableMouseCapture
98
+
)?;
99
+
terminal.show_cursor()?;
100
+
101
+
102
+
Ok(())
103
+
}
104
+
105
+
106
+
async fn run_app<B:Backend> (terminal: &mut Terminal<B>, mut app: &mut Arc<Mutex<App>>) -> Result<bool> {
107
+
loop {
108
+
109
+
110
+
let _ = terminal.draw(|f| ui::ui(f, &mut app));
111
+
112
+
113
+
114
+
if poll(Duration::from_millis(15))? {
115
+
116
+
117
+
if let Event::Key(key) = event::read()? {
118
+
let app_shared = Arc::new(&app);
119
+
let mut app_shared = app_shared.lock().unwrap();
120
+
if key.kind == event::KeyEventKind::Release {
121
+
continue;
122
+
}
123
+
match app_shared.current_screen {
124
+
app::CurrentScreen::Map => match key.code {
125
+
KeyCode::Char('c') => {
126
+
app_shared.current_screen = CurrentScreen::CityChoice;
127
+
}
128
+
KeyCode::Char('q') => {
129
+
app_shared.current_screen = CurrentScreen::Exiting;
130
+
}
131
+
_ => {}
132
+
133
+
}
134
+
app::CurrentScreen::Exiting => match key.code {
135
+
KeyCode::Char('n') | KeyCode::Esc => {
136
+
app_shared.current_screen = CurrentScreen::Map
137
+
}
138
+
KeyCode::Char('y') | KeyCode::Char('q') => {
139
+
return Ok(false)
140
+
}
141
+
_ => {}
142
+
}
143
+
144
+
//weird behaviour with the ListState being 1 longer then the list, resulting in
145
+
//index overflow for the cities list. do not know why. yes even after rendering
146
+
//when the ListState was supposed to update
147
+
app::CurrentScreen::CityChoice => match key.code {
148
+
KeyCode::Up => {
149
+
150
+
if app_shared.cities.state.selected() == Some(0) {
151
+
app_shared.cities.state.select(Some(CITIES.len()-1));
152
+
} else {
153
+
app_shared.cities.state.scroll_up_by(1);
154
+
}
155
+
156
+
},
157
+
KeyCode::Down => {
158
+
if app_shared.cities.state.selected() == Some(app_shared.cities.cities.len()-1) {
159
+
app_shared.cities.state.select(Some(0));
160
+
} else {
161
+
162
+
app_shared.cities.state.scroll_down_by(1);
163
+
}
164
+
}
165
+
KeyCode::Enter => app_shared.current_screen = CurrentScreen::Map,
166
+
KeyCode::Esc => app_shared.current_screen = CurrentScreen::Map,
167
+
KeyCode::Char('q') => app_shared.current_screen = CurrentScreen::Map,
168
+
_ => {}
169
+
}
170
+
171
+
}
172
+
}
173
+
174
+
175
+
}
176
+
}
177
+
}
178
+
179
+
180
+
181
+
182
+
183
+
184
+
+236
src/ui.rs
+236
src/ui.rs
···
1
+
2
+
use std::sync::{Arc, Mutex};
3
+
4
+
use ratatui::{layout::{Constraint, Direction, Layout, Rect}, style::{palette::tailwind::SLATE, Color, Modifier, Style}, text::{Line, Span, Text}, widgets::{canvas::{Canvas, Circle, Map, MapResolution, Points}, Block, Borders, List, ListItem, Paragraph}, Frame};
5
+
use ratatui::prelude::Stylize;
6
+
7
+
use crate::{App, CurrentScreen};
8
+
9
+
const SELECTED_STYLE: Style = Style::new().bg(SLATE.c800).add_modifier(Modifier::BOLD);
10
+
11
+
pub fn ui(frame: &mut Frame, app: &mut Arc<Mutex<App>>) {
12
+
let app_shared = Arc::clone(&app);
13
+
let mut app_shared = app_shared.lock().unwrap();
14
+
let chunks = Layout::default()
15
+
.direction(Direction::Vertical)
16
+
.constraints([
17
+
Constraint::Length(3),
18
+
Constraint::Min(1),
19
+
Constraint::Length(3),
20
+
])
21
+
.split(frame.area());
22
+
23
+
let title_block = Block::default()
24
+
.borders(Borders::ALL)
25
+
.style(Style::default());
26
+
27
+
let title = Paragraph::new(Text::styled(
28
+
"ISS Locator",
29
+
Style::default().fg(ratatui::style::Color::Green),
30
+
))
31
+
.block(title_block);
32
+
33
+
34
+
frame.render_widget(title, chunks[0]);
35
+
36
+
// MAP
37
+
38
+
let map = Canvas::default()
39
+
.block(Block::bordered().title("World Map"))
40
+
.marker(ratatui::symbols::Marker::Braille)
41
+
.paint(|ctx| {
42
+
ctx.draw(&Map {
43
+
color: Color::Green,
44
+
resolution: MapResolution::High,
45
+
});
46
+
47
+
if let Some(loc) = &app_shared.iss_location {
48
+
//allegedly the area visible from the ISS but we all know its not, there is a way
49
+
//to create a new widget that, depending on input location would give the
50
+
//appropriate shape, I however didn't care enough yet to do so.
51
+
ctx.draw(&Circle {
52
+
color: Color::Blue,
53
+
radius: 13.0,
54
+
x: loc.longitude.into(),
55
+
y: loc.latitude.into()
56
+
});
57
+
}
58
+
59
+
60
+
for (i,city) in app_shared.cities.cities.iter().enumerate() {
61
+
62
+
ctx.draw(&Points {
63
+
coords: &[(city.long.into(),city.lat.into())],
64
+
color: Color::Red
65
+
66
+
});
67
+
68
+
if let Some(j) = app_shared.cities.state.selected(){
69
+
if i == j {
70
+
// ctx.draw(&Points {
71
+
// coords: &[(city.long.into(),city.lat.into())],
72
+
// color: Color::Blue
73
+
// });
74
+
75
+
ctx.draw(&Circle {
76
+
color: Color::Yellow,
77
+
radius: 0.7,
78
+
x: city.long.into(),
79
+
y: city.lat.into()
80
+
});
81
+
82
+
}}
83
+
}
84
+
85
+
})
86
+
.x_bounds([-180.0, 180.0])
87
+
.y_bounds([-90.0, 90.0]);
88
+
89
+
90
+
frame.render_widget(map, chunks[1]);
91
+
92
+
93
+
// text on the bottom
94
+
//
95
+
96
+
let nav_text = vec![
97
+
match app_shared.current_screen {
98
+
CurrentScreen::Map => Span::styled("Map", Style::default().fg(Color::Green)),
99
+
CurrentScreen::CityChoice => Span::styled("Location Choice", Style::default().fg(Color::Green)),
100
+
CurrentScreen::Exiting => Span::styled("Exiting", Style::default().fg(Color::Green))
101
+
}.to_owned(),
102
+
103
+
Span::styled(" | ", Style::default().fg(Color::White)),
104
+
105
+
Span::styled(format!("Current location: {}",{
106
+
if let Some(i) = app_shared.cities.state.selected() {
107
+
&app_shared.cities.cities[i].name
108
+
} else {
109
+
"Not selected"
110
+
}
111
+
}), Style::default().fg(Color::Green)),
112
+
113
+
114
+
Span::styled(" | ", Style::default().fg(Color::White)),
115
+
116
+
Span::styled(format!("iss location: {} {} ",{
117
+
if let Some(i) = &app_shared.iss_location {
118
+
i.latitude.clone().to_string()
119
+
} else {
120
+
"?".to_string()
121
+
}},
122
+
{
123
+
if let Some(i) = &app_shared.iss_location {
124
+
i.longitude.clone().to_string()
125
+
} else {
126
+
"?".to_string()
127
+
}
128
+
}
129
+
), Style::default().fg(Color::Green)),
130
+
Span::styled(" | ", Style::default().fg(Color::White)),
131
+
Span::styled(format!(" {}",{
132
+
if app_shared.iss_constant.is_some() {
133
+
"Y"
134
+
} else {
135
+
"N"
136
+
}
137
+
}), Style::default().fg(Color::Green))
138
+
];
139
+
140
+
let mode_footer = Paragraph::new(Line::from(nav_text))
141
+
.block(Block::default().borders(Borders::ALL));
142
+
143
+
144
+
let curr_key_hint = {
145
+
match app_shared.current_screen {
146
+
CurrentScreen::Map => Span::styled(
147
+
"(q) to quit / (c) to change the location", Style::default().fg(Color::Red)),
148
+
CurrentScreen::CityChoice => Span::styled(
149
+
"(ESC) to cancel / (Enter) to confirm choive", Style::default().fg(Color::Red)),
150
+
CurrentScreen::Exiting => Span::styled(
151
+
"(y) to quit / (ESC) to cancel" ,Style::default().fg(Color::Red)),
152
+
}
153
+
};
154
+
155
+
let hint_footer = Paragraph::new(Line::from(curr_key_hint)).block(Block::default().borders(Borders::ALL));
156
+
157
+
158
+
let footer_chunks = Layout::default()
159
+
.direction(Direction::Horizontal)
160
+
.constraints([Constraint::Percentage(50),Constraint::Percentage(50)])
161
+
.split(chunks[2]);
162
+
163
+
frame.render_widget(mode_footer, footer_chunks[0]);
164
+
frame.render_widget(hint_footer, footer_chunks[1]);
165
+
166
+
167
+
// probably better to rewrite as a match statement
168
+
if let CurrentScreen::CityChoice = app_shared.current_screen {
169
+
let popup_block = Block::new()
170
+
.title(Line::raw("Cities Option").centered())
171
+
.borders(Borders::ALL);
172
+
173
+
174
+
let items: Vec<ListItem> = app_shared.cities.cities.iter()
175
+
.map(|item| {
176
+
ListItem::from(item)
177
+
})
178
+
.collect();
179
+
180
+
let list = List::new(items)
181
+
.block(popup_block)
182
+
.style(SELECTED_STYLE)
183
+
.highlight_symbol(">")
184
+
.highlight_spacing(ratatui::widgets::HighlightSpacing::Always);
185
+
186
+
let area = centered_rect(40, 40, frame.area());
187
+
188
+
frame.render_stateful_widget(list, area,&mut app_shared.cities.state);
189
+
190
+
}
191
+
192
+
193
+
if let CurrentScreen::Exiting = app_shared.current_screen {
194
+
195
+
let exit_popup = Block::new()
196
+
.title(Line::raw("Quit?").centered())
197
+
.bg(Color::Gray)
198
+
.borders(Borders::ALL);
199
+
200
+
let exit_text = Text::styled(
201
+
"Would you like to leave?", Style::default().fg(Color::Red));
202
+
203
+
let exit_widget = Paragraph::new(exit_text).centered()
204
+
.block(exit_popup);
205
+
206
+
207
+
let area = centered_rect(30, 20, frame.area());
208
+
frame.render_widget(exit_widget, area);
209
+
}
210
+
211
+
}
212
+
213
+
214
+
215
+
216
+
fn centered_rect(percent_x: u16, percent_y: u16, r: Rect) -> Rect {
217
+
// Cut the given rectangle into three vertical pieces
218
+
let popup_layout = Layout::default()
219
+
.direction(Direction::Vertical)
220
+
.constraints([
221
+
Constraint::Percentage((100 - percent_y) / 2),
222
+
Constraint::Percentage(percent_y),
223
+
Constraint::Percentage((100 - percent_y) / 2),
224
+
])
225
+
.split(r);
226
+
227
+
// Then cut the middle vertical piece into three width-wise pieces
228
+
Layout::default()
229
+
.direction(Direction::Horizontal)
230
+
.constraints([
231
+
Constraint::Percentage((100 - percent_x) / 2),
232
+
Constraint::Percentage(percent_x),
233
+
Constraint::Percentage((100 - percent_x) / 2),
234
+
])
235
+
.split(popup_layout[1])[1] // Return the middle chunk
236
+
}