tangled
alpha
login
or
join now
microcosm.blue
/
microcosm-rs
65
fork
atom
Constellation, Spacedust, Slingshot, UFOs: atproto crates and services for microcosm
65
fork
atom
overview
issues
8
pulls
2
pipelines
update foyer
bad-example.com
1 month ago
08b154cf
1e078949
+249
-386
6 changed files
expand all
collapse all
unified
split
Cargo.lock
slingshot
Cargo.toml
src
firehose_cache.rs
identity.rs
record.rs
server.rs
+163
-339
Cargo.lock
···
24
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
25
dependencies = [
26
"cfg-if",
27
-
"getrandom 0.2.15",
28
"once_cell",
29
"version_check",
30
"zerocopy 0.7.35",
···
123
checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223"
124
125
[[package]]
126
-
name = "arc-swap"
127
-
version = "1.7.1"
128
-
source = "registry+https://github.com/rust-lang/crates.io-index"
129
-
checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457"
130
-
131
-
[[package]]
132
name = "arrayvec"
133
version = "0.7.6"
134
source = "registry+https://github.com/rust-lang/crates.io-index"
···
162
"proc-macro2",
163
"quote",
164
"serde",
165
-
"syn 2.0.106",
166
]
167
168
[[package]]
···
204
dependencies = [
205
"proc-macro2",
206
"quote",
207
-
"syn 2.0.106",
208
"synstructure",
209
]
210
···
216
dependencies = [
217
"proc-macro2",
218
"quote",
219
-
"syn 2.0.106",
220
-
]
221
-
222
-
[[package]]
223
-
name = "async-channel"
224
-
version = "2.5.0"
225
-
source = "registry+https://github.com/rust-lang/crates.io-index"
226
-
checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2"
227
-
dependencies = [
228
-
"concurrent-queue",
229
-
"event-listener-strategy",
230
-
"futures-core",
231
-
"pin-project-lite",
232
]
233
234
[[package]]
···
274
dependencies = [
275
"proc-macro2",
276
"quote",
277
-
"syn 2.0.106",
278
]
279
280
[[package]]
281
-
name = "async-task"
282
-
version = "4.7.1"
283
-
source = "registry+https://github.com/rust-lang/crates.io-index"
284
-
checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
285
-
286
-
[[package]]
287
name = "async-trait"
288
version = "0.1.88"
289
source = "registry+https://github.com/rust-lang/crates.io-index"
···
291
dependencies = [
292
"proc-macro2",
293
"quote",
294
-
"syn 2.0.106",
295
]
296
297
[[package]]
···
496
"serde_json",
497
"thiserror 1.0.69",
498
"trait-variant",
499
-
]
500
-
501
-
[[package]]
502
-
name = "auto_enums"
503
-
version = "0.8.7"
504
-
source = "registry+https://github.com/rust-lang/crates.io-index"
505
-
checksum = "9c170965892137a3a9aeb000b4524aa3cc022a310e709d848b6e1cdce4ab4781"
506
-
dependencies = [
507
-
"derive_utils",
508
-
"proc-macro2",
509
-
"quote",
510
-
"syn 2.0.106",
511
]
512
513
[[package]]
···
749
"regex",
750
"rustc-hash 1.1.0",
751
"shlex",
752
-
"syn 2.0.106",
753
"which",
754
]
755
···
762
"bitflags",
763
"cexpr",
764
"clang-sys",
765
-
"itertools 0.13.0",
766
"proc-macro2",
767
"quote",
768
"regex",
769
"rustc-hash 1.1.0",
770
"shlex",
771
-
"syn 2.0.106",
772
]
773
774
[[package]]
···
780
"bitflags",
781
"cexpr",
782
"clang-sys",
783
-
"itertools 0.13.0",
784
"proc-macro2",
785
"quote",
786
"regex",
787
"rustc-hash 2.1.1",
788
"shlex",
789
-
"syn 2.0.106",
790
]
791
792
[[package]]
···
1009
"anstream",
1010
"anstyle",
1011
"clap_lex",
1012
-
"strsim 0.11.1",
1013
]
1014
1015
[[package]]
···
1021
"heck",
1022
"proc-macro2",
1023
"quote",
1024
-
"syn 2.0.106",
1025
]
1026
1027
[[package]]
···
1173
]
1174
1175
[[package]]
0
0
0
0
0
0
0
0
0
0
0
1176
name = "cpufeatures"
1177
version = "0.2.17"
1178
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1270
1271
[[package]]
1272
name = "darling"
1273
-
version = "0.14.4"
1274
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1275
-
checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850"
1276
-
dependencies = [
1277
-
"darling_core 0.14.4",
1278
-
"darling_macro 0.14.4",
1279
-
]
1280
-
1281
-
[[package]]
1282
-
name = "darling"
1283
version = "0.20.11"
1284
source = "registry+https://github.com/rust-lang/crates.io-index"
1285
checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
1286
dependencies = [
1287
-
"darling_core 0.20.11",
1288
-
"darling_macro 0.20.11",
1289
-
]
1290
-
1291
-
[[package]]
1292
-
name = "darling_core"
1293
-
version = "0.14.4"
1294
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1295
-
checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0"
1296
-
dependencies = [
1297
-
"fnv",
1298
-
"ident_case",
1299
-
"proc-macro2",
1300
-
"quote",
1301
-
"strsim 0.10.0",
1302
-
"syn 1.0.109",
1303
]
1304
1305
[[package]]
···
1312
"ident_case",
1313
"proc-macro2",
1314
"quote",
1315
-
"strsim 0.11.1",
1316
-
"syn 2.0.106",
1317
-
]
1318
-
1319
-
[[package]]
1320
-
name = "darling_macro"
1321
-
version = "0.14.4"
1322
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1323
-
checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e"
1324
-
dependencies = [
1325
-
"darling_core 0.14.4",
1326
-
"quote",
1327
-
"syn 1.0.109",
1328
]
1329
1330
[[package]]
···
1333
source = "registry+https://github.com/rust-lang/crates.io-index"
1334
checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
1335
dependencies = [
1336
-
"darling_core 0.20.11",
1337
"quote",
1338
-
"syn 2.0.106",
1339
]
1340
1341
[[package]]
···
1375
checksum = "18e4fdb82bd54a12e42fb58a800dcae6b9e13982238ce2296dc3570b92148e1f"
1376
dependencies = [
1377
"data-encoding",
1378
-
"syn 2.0.106",
1379
]
1380
1381
[[package]]
···
1434
source = "registry+https://github.com/rust-lang/crates.io-index"
1435
checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8"
1436
dependencies = [
1437
-
"darling 0.20.11",
1438
"proc-macro2",
1439
"quote",
1440
-
"syn 2.0.106",
1441
]
1442
1443
[[package]]
···
1447
checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c"
1448
dependencies = [
1449
"derive_builder_core",
1450
-
"syn 2.0.106",
1451
]
1452
1453
[[package]]
···
1467
dependencies = [
1468
"proc-macro2",
1469
"quote",
1470
-
"syn 2.0.106",
1471
"unicode-xid",
1472
-
]
1473
-
1474
-
[[package]]
1475
-
name = "derive_utils"
1476
-
version = "0.15.0"
1477
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1478
-
checksum = "ccfae181bab5ab6c5478b2ccb69e4c68a02f8c3ec72f6616bfec9dbc599d2ee0"
1479
-
dependencies = [
1480
-
"proc-macro2",
1481
-
"quote",
1482
-
"syn 2.0.106",
1483
]
1484
1485
[[package]]
···
1523
dependencies = [
1524
"proc-macro2",
1525
"quote",
1526
-
"syn 2.0.106",
1527
]
1528
1529
[[package]]
···
1533
checksum = "c0d05e1c0dbad51b52c38bda7adceef61b9efc2baf04acfe8726a8c4630a6f57"
1534
1535
[[package]]
1536
-
name = "downcast-rs"
1537
-
version = "1.2.1"
1538
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1539
-
checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
1540
-
1541
-
[[package]]
1542
name = "dropshot"
1543
version = "0.16.3"
1544
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1582
"thiserror 2.0.16",
1583
"tokio",
1584
"tokio-rustls 0.25.0",
1585
-
"toml 0.9.7",
1586
"uuid",
1587
"version_check",
1588
"waitgroup",
···
1600
"semver",
1601
"serde",
1602
"serde_tokenstream",
1603
-
"syn 2.0.106",
1604
]
1605
1606
[[package]]
···
1673
"heck",
1674
"proc-macro2",
1675
"quote",
1676
-
"syn 2.0.106",
1677
]
1678
1679
[[package]]
···
1685
"once_cell",
1686
"proc-macro2",
1687
"quote",
1688
-
"syn 2.0.106",
1689
]
1690
1691
[[package]]
···
1761
checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
1762
1763
[[package]]
0
0
0
0
0
0
0
0
0
0
1764
name = "fastrand"
1765
version = "2.3.0"
1766
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1835
source = "registry+https://github.com/rust-lang/crates.io-index"
1836
checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095"
1837
dependencies = [
1838
-
"futures-core",
1839
-
"futures-sink",
1840
-
"nanorand",
1841
"spin",
1842
]
1843
···
1854
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
1855
1856
[[package]]
0
0
0
0
0
0
1857
name = "foreign-types"
1858
version = "0.3.2"
1859
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1879
1880
[[package]]
1881
name = "foyer"
1882
-
version = "0.18.0"
1883
source = "registry+https://github.com/rust-lang/crates.io-index"
1884
-
checksum = "0b4d8e96374206ff1b4265f2e2e6e1f80bc3048957b2a1e7fdeef929d68f318f"
1885
dependencies = [
0
1886
"equivalent",
1887
"foyer-common",
1888
"foyer-memory",
1889
"foyer-storage",
1890
-
"madsim-tokio",
0
0
1891
"mixtrics",
1892
"pin-project",
1893
"serde",
1894
-
"thiserror 2.0.16",
1895
-
"tokio",
1896
"tracing",
1897
]
1898
1899
[[package]]
1900
name = "foyer-common"
1901
-
version = "0.18.0"
1902
source = "registry+https://github.com/rust-lang/crates.io-index"
1903
-
checksum = "911b8e3f23d5fe55b0b240f75af1d2fa5cb7261d3f9b38ef1c57bbc9f0449317"
1904
dependencies = [
0
1905
"bincode 1.3.3",
1906
"bytes",
1907
"cfg-if",
1908
-
"itertools 0.14.0",
1909
-
"madsim-tokio",
1910
"mixtrics",
1911
"parking_lot",
1912
"pin-project",
1913
"serde",
1914
-
"thiserror 2.0.16",
1915
-
"tokio",
1916
"twox-hash",
1917
]
1918
···
1927
1928
[[package]]
1929
name = "foyer-memory"
1930
-
version = "0.18.0"
1931
source = "registry+https://github.com/rust-lang/crates.io-index"
1932
-
checksum = "506883d5a8500dea1b1662f7180f3534bdcbfa718d3253db7179552ef83612fa"
1933
dependencies = [
1934
-
"arc-swap",
1935
"bitflags",
1936
"cmsketch",
1937
"equivalent",
1938
"foyer-common",
1939
"foyer-intrusive-collections",
1940
-
"hashbrown 0.15.2",
0
0
1941
"itertools 0.14.0",
1942
-
"madsim-tokio",
1943
"mixtrics",
1944
"parking_lot",
0
1945
"pin-project",
1946
"serde",
1947
-
"thiserror 2.0.16",
1948
-
"tokio",
1949
"tracing",
1950
]
1951
1952
[[package]]
1953
name = "foyer-storage"
1954
-
version = "0.18.0"
1955
source = "registry+https://github.com/rust-lang/crates.io-index"
1956
-
checksum = "1ba8403a54a2f2032fb647e49c442e5feeb33f3989f7024f1b178341a016f06d"
1957
dependencies = [
1958
"allocator-api2",
1959
"anyhow",
1960
-
"auto_enums",
1961
"bytes",
0
1962
"equivalent",
1963
-
"flume",
1964
"foyer-common",
1965
"foyer-memory",
0
1966
"fs4 0.13.1",
1967
"futures-core",
1968
"futures-util",
0
0
1969
"itertools 0.14.0",
1970
"libc",
1971
"lz4",
1972
-
"madsim-tokio",
1973
-
"ordered_hash_map",
1974
"parking_lot",
1975
-
"paste",
1976
"pin-project",
1977
"rand 0.9.1",
1978
"serde",
1979
-
"thiserror 2.0.16",
1980
-
"tokio",
1981
"tracing",
1982
"twox-hash",
1983
"zstd",
0
0
0
0
0
0
0
0
0
1984
]
1985
1986
[[package]]
···
2065
dependencies = [
2066
"proc-macro2",
2067
"quote",
2068
-
"syn 2.0.106",
2069
]
2070
2071
[[package]]
···
2232
2233
[[package]]
2234
name = "hashbrown"
2235
-
version = "0.13.2"
2236
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2237
-
checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
2238
-
dependencies = [
2239
-
"ahash",
2240
-
]
2241
-
2242
-
[[package]]
2243
-
name = "hashbrown"
2244
version = "0.14.5"
2245
source = "registry+https://github.com/rust-lang/crates.io-index"
2246
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
···
2253
dependencies = [
2254
"allocator-api2",
2255
"equivalent",
2256
-
"foldhash",
0
0
0
0
0
0
0
0
0
0
0
2257
]
2258
2259
[[package]]
···
2687
dependencies = [
2688
"proc-macro2",
2689
"quote",
2690
-
"syn 2.0.106",
2691
]
2692
2693
[[package]]
···
2827
2828
[[package]]
2829
name = "itertools"
2830
-
version = "0.13.0"
2831
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2832
-
checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
2833
-
dependencies = [
2834
-
"either",
2835
-
]
2836
-
2837
-
[[package]]
2838
-
name = "itertools"
2839
version = "0.14.0"
2840
source = "registry+https://github.com/rust-lang/crates.io-index"
2841
checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
···
2891
dependencies = [
2892
"proc-macro2",
2893
"quote",
2894
-
"syn 2.0.106",
2895
]
2896
2897
[[package]]
···
3243
]
3244
3245
[[package]]
3246
-
name = "madsim"
3247
-
version = "0.2.32"
3248
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3249
-
checksum = "db6694555643da293dfb89e33c2880a13b62711d64b6588bc7df6ce4110b27f1"
3250
-
dependencies = [
3251
-
"ahash",
3252
-
"async-channel",
3253
-
"async-stream",
3254
-
"async-task",
3255
-
"bincode 1.3.3",
3256
-
"bytes",
3257
-
"downcast-rs",
3258
-
"futures-util",
3259
-
"lazy_static",
3260
-
"libc",
3261
-
"madsim-macros",
3262
-
"naive-timer",
3263
-
"panic-message",
3264
-
"rand 0.8.5",
3265
-
"rand_xoshiro 0.6.0",
3266
-
"rustversion",
3267
-
"serde",
3268
-
"spin",
3269
-
"tokio",
3270
-
"tokio-util",
3271
-
"toml 0.8.23",
3272
-
"tracing",
3273
-
"tracing-subscriber",
3274
-
]
3275
-
3276
-
[[package]]
3277
-
name = "madsim-macros"
3278
-
version = "0.2.12"
3279
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3280
-
checksum = "f3d248e97b1a48826a12c3828d921e8548e714394bf17274dd0a93910dc946e1"
3281
-
dependencies = [
3282
-
"darling 0.14.4",
3283
-
"proc-macro2",
3284
-
"quote",
3285
-
"syn 1.0.109",
3286
-
]
3287
-
3288
-
[[package]]
3289
-
name = "madsim-tokio"
3290
-
version = "0.2.30"
3291
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3292
-
checksum = "7d3eb2acc57c82d21d699119b859e2df70a91dbdb84734885a1e72be83bdecb5"
3293
-
dependencies = [
3294
-
"madsim",
3295
-
"spin",
3296
-
"tokio",
3297
-
]
3298
-
3299
-
[[package]]
3300
name = "match_cfg"
3301
version = "0.1.0"
3302
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3316
version = "0.8.4"
3317
source = "registry+https://github.com/rust-lang/crates.io-index"
3318
checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3"
0
0
0
0
0
0
0
0
0
3319
3320
[[package]]
3321
name = "mediatype"
···
3552
]
3553
3554
[[package]]
3555
-
name = "naive-timer"
3556
-
version = "0.2.0"
3557
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3558
-
checksum = "034a0ad7deebf0c2abcf2435950a6666c3c15ea9d8fad0c0f48efa8a7f843fed"
3559
-
3560
-
[[package]]
3561
-
name = "nanorand"
3562
-
version = "0.7.0"
3563
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3564
-
checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
3565
-
dependencies = [
3566
-
"getrandom 0.2.15",
3567
-
]
3568
-
3569
-
[[package]]
3570
name = "native-tls"
3571
version = "0.2.14"
3572
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3699
dependencies = [
3700
"autocfg",
3701
"libm",
0
0
0
0
0
0
0
0
0
0
3702
]
3703
3704
[[package]]
···
3772
dependencies = [
3773
"proc-macro2",
3774
"quote",
3775
-
"syn 2.0.106",
3776
]
3777
3778
[[package]]
···
3804
]
3805
3806
[[package]]
3807
-
name = "ordered_hash_map"
3808
-
version = "0.4.0"
3809
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3810
-
checksum = "ab0e5f22bf6dd04abd854a8874247813a8fa2c8c1260eba6fbb150270ce7c176"
3811
-
dependencies = [
3812
-
"hashbrown 0.13.2",
3813
-
]
3814
-
3815
-
[[package]]
3816
name = "p256"
3817
version = "0.13.2"
3818
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3835
]
3836
3837
[[package]]
3838
-
name = "panic-message"
3839
-
version = "0.3.0"
3840
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3841
-
checksum = "384e52fd8fbd4cbe3c317e8216260c21a0f9134de108cea8a4dd4e7e152c472d"
3842
-
3843
-
[[package]]
3844
name = "parking"
3845
version = "2.2.1"
3846
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3949
"pest_meta",
3950
"proc-macro2",
3951
"quote",
3952
-
"syn 2.0.106",
3953
]
3954
3955
[[package]]
···
3979
dependencies = [
3980
"proc-macro2",
3981
"quote",
3982
-
"syn 2.0.106",
3983
]
3984
3985
[[package]]
···
4097
"proc-macro-crate",
4098
"proc-macro2",
4099
"quote",
4100
-
"syn 2.0.106",
4101
]
4102
4103
[[package]]
···
4132
source = "registry+https://github.com/rust-lang/crates.io-index"
4133
checksum = "41273b691a3d467a8c44d05506afba9f7b6bd56c9cdf80123de13fe52d7ec587"
4134
dependencies = [
4135
-
"darling 0.20.11",
4136
"http",
4137
"indexmap 2.11.4",
4138
"mime",
···
4140
"proc-macro2",
4141
"quote",
4142
"regex",
4143
-
"syn 2.0.106",
4144
"thiserror 2.0.16",
4145
]
4146
···
4181
checksum = "6837b9e10d61f45f987d50808f83d1ee3d206c66acf650c3e4ae2e1f6ddedf55"
4182
dependencies = [
4183
"proc-macro2",
4184
-
"syn 2.0.106",
4185
]
4186
4187
[[package]]
···
4492
dependencies = [
4493
"proc-macro2",
4494
"quote",
4495
-
"syn 2.0.106",
4496
]
4497
4498
[[package]]
···
4874
"proc-macro2",
4875
"quote",
4876
"serde_derive_internals",
4877
-
"syn 2.0.106",
4878
]
4879
4880
[[package]]
···
5007
dependencies = [
5008
"proc-macro2",
5009
"quote",
5010
-
"syn 2.0.106",
5011
]
5012
5013
[[package]]
···
5018
dependencies = [
5019
"proc-macro2",
5020
"quote",
5021
-
"syn 2.0.106",
5022
]
5023
5024
[[package]]
···
5072
5073
[[package]]
5074
name = "serde_spanned"
5075
-
version = "0.6.9"
5076
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5077
-
checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
5078
-
dependencies = [
5079
-
"serde",
5080
-
]
5081
-
5082
-
[[package]]
5083
-
name = "serde_spanned"
5084
version = "1.0.2"
5085
source = "registry+https://github.com/rust-lang/crates.io-index"
5086
checksum = "5417783452c2be558477e104686f7de5dae53dba813c28435e0e70f82d9b04ee"
···
5097
"proc-macro2",
5098
"quote",
5099
"serde",
5100
-
"syn 2.0.106",
5101
]
5102
5103
[[package]]
···
5136
source = "registry+https://github.com/rust-lang/crates.io-index"
5137
checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e"
5138
dependencies = [
5139
-
"darling 0.20.11",
5140
"proc-macro2",
5141
"quote",
5142
-
"syn 2.0.106",
5143
]
5144
5145
[[package]]
···
5231
5232
[[package]]
5233
name = "slab"
5234
-
version = "0.4.9"
5235
source = "registry+https://github.com/rust-lang/crates.io-index"
5236
-
checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
5237
-
dependencies = [
5238
-
"autocfg",
5239
-
]
5240
5241
[[package]]
5242
name = "slingshot"
···
5325
]
5326
5327
[[package]]
0
0
0
0
0
0
5328
name = "smallvec"
5329
version = "1.15.0"
5330
source = "registry+https://github.com/rust-lang/crates.io-index"
···
5412
5413
[[package]]
5414
name = "strsim"
5415
-
version = "0.10.0"
5416
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5417
-
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
5418
-
5419
-
[[package]]
5420
-
name = "strsim"
5421
version = "0.11.1"
5422
source = "registry+https://github.com/rust-lang/crates.io-index"
5423
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
···
5430
5431
[[package]]
5432
name = "syn"
5433
-
version = "1.0.109"
5434
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5435
-
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
5436
-
dependencies = [
5437
-
"proc-macro2",
5438
-
"quote",
5439
-
"unicode-ident",
5440
-
]
5441
-
5442
-
[[package]]
5443
-
name = "syn"
5444
version = "2.0.106"
5445
source = "registry+https://github.com/rust-lang/crates.io-index"
5446
checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
···
5467
dependencies = [
5468
"proc-macro2",
5469
"quote",
5470
-
"syn 2.0.106",
5471
]
5472
5473
[[package]]
···
5553
dependencies = [
5554
"proc-macro2",
5555
"quote",
5556
-
"syn 2.0.106",
5557
]
5558
5559
[[package]]
···
5564
dependencies = [
5565
"proc-macro2",
5566
"quote",
5567
-
"syn 2.0.106",
5568
]
5569
5570
[[package]]
···
5689
dependencies = [
5690
"proc-macro2",
5691
"quote",
5692
-
"syn 2.0.106",
5693
]
5694
5695
[[package]]
···
5775
5776
[[package]]
5777
name = "toml"
5778
-
version = "0.8.23"
5779
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5780
-
checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
5781
-
dependencies = [
5782
-
"serde",
5783
-
"serde_spanned 0.6.9",
5784
-
"toml_datetime 0.6.11",
5785
-
"toml_edit",
5786
-
]
5787
-
5788
-
[[package]]
5789
-
name = "toml"
5790
version = "0.9.7"
5791
source = "registry+https://github.com/rust-lang/crates.io-index"
5792
checksum = "00e5e5d9bf2475ac9d4f0d9edab68cc573dc2fd644b0dba36b0c30a92dd9eaa0"
5793
dependencies = [
5794
"indexmap 2.11.4",
5795
"serde_core",
5796
-
"serde_spanned 1.0.2",
5797
"toml_datetime 0.7.2",
5798
"toml_parser",
5799
"toml_writer",
···
5805
version = "0.6.11"
5806
source = "registry+https://github.com/rust-lang/crates.io-index"
5807
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
5808
-
dependencies = [
5809
-
"serde",
5810
-
]
5811
5812
[[package]]
5813
name = "toml_datetime"
···
5825
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
5826
dependencies = [
5827
"indexmap 2.11.4",
5828
-
"serde",
5829
-
"serde_spanned 0.6.9",
5830
"toml_datetime 0.6.11",
5831
-
"toml_write",
5832
"winnow",
5833
]
5834
···
5840
dependencies = [
5841
"winnow",
5842
]
5843
-
5844
-
[[package]]
5845
-
name = "toml_write"
5846
-
version = "0.1.2"
5847
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5848
-
checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
5849
5850
[[package]]
5851
name = "toml_writer"
···
5919
dependencies = [
5920
"proc-macro2",
5921
"quote",
5922
-
"syn 2.0.106",
5923
]
5924
5925
[[package]]
···
5969
dependencies = [
5970
"proc-macro2",
5971
"quote",
5972
-
"syn 2.0.106",
5973
]
5974
5975
[[package]]
···
6291
"log",
6292
"proc-macro2",
6293
"quote",
6294
-
"syn 2.0.106",
6295
"wasm-bindgen-shared",
6296
]
6297
···
6326
dependencies = [
6327
"proc-macro2",
6328
"quote",
6329
-
"syn 2.0.106",
6330
"wasm-bindgen-backend",
6331
"wasm-bindgen-shared",
6332
]
···
6479
dependencies = [
6480
"proc-macro2",
6481
"quote",
6482
-
"syn 2.0.106",
6483
]
6484
6485
[[package]]
···
6490
dependencies = [
6491
"proc-macro2",
6492
"quote",
6493
-
"syn 2.0.106",
6494
]
6495
6496
[[package]]
···
6796
dependencies = [
6797
"proc-macro2",
6798
"quote",
6799
-
"syn 2.0.106",
6800
"synstructure",
6801
]
6802
···
6826
dependencies = [
6827
"proc-macro2",
6828
"quote",
6829
-
"syn 2.0.106",
6830
]
6831
6832
[[package]]
···
6837
dependencies = [
6838
"proc-macro2",
6839
"quote",
6840
-
"syn 2.0.106",
6841
]
6842
6843
[[package]]
···
6857
dependencies = [
6858
"proc-macro2",
6859
"quote",
6860
-
"syn 2.0.106",
6861
"synstructure",
6862
]
6863
···
6879
dependencies = [
6880
"proc-macro2",
6881
"quote",
6882
-
"syn 2.0.106",
6883
]
6884
6885
[[package]]
···
6901
dependencies = [
6902
"proc-macro2",
6903
"quote",
6904
-
"syn 2.0.106",
6905
]
6906
6907
[[package]]
···
24
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
25
dependencies = [
26
"cfg-if",
0
27
"once_cell",
28
"version_check",
29
"zerocopy 0.7.35",
···
122
checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223"
123
124
[[package]]
0
0
0
0
0
0
125
name = "arrayvec"
126
version = "0.7.6"
127
source = "registry+https://github.com/rust-lang/crates.io-index"
···
155
"proc-macro2",
156
"quote",
157
"serde",
158
+
"syn",
159
]
160
161
[[package]]
···
197
dependencies = [
198
"proc-macro2",
199
"quote",
200
+
"syn",
201
"synstructure",
202
]
203
···
209
dependencies = [
210
"proc-macro2",
211
"quote",
212
+
"syn",
0
0
0
0
0
0
0
0
0
0
0
0
213
]
214
215
[[package]]
···
255
dependencies = [
256
"proc-macro2",
257
"quote",
258
+
"syn",
259
]
260
261
[[package]]
0
0
0
0
0
0
262
name = "async-trait"
263
version = "0.1.88"
264
source = "registry+https://github.com/rust-lang/crates.io-index"
···
266
dependencies = [
267
"proc-macro2",
268
"quote",
269
+
"syn",
270
]
271
272
[[package]]
···
471
"serde_json",
472
"thiserror 1.0.69",
473
"trait-variant",
0
0
0
0
0
0
0
0
0
0
0
0
474
]
475
476
[[package]]
···
712
"regex",
713
"rustc-hash 1.1.0",
714
"shlex",
715
+
"syn",
716
"which",
717
]
718
···
725
"bitflags",
726
"cexpr",
727
"clang-sys",
728
+
"itertools 0.12.1",
729
"proc-macro2",
730
"quote",
731
"regex",
732
"rustc-hash 1.1.0",
733
"shlex",
734
+
"syn",
735
]
736
737
[[package]]
···
743
"bitflags",
744
"cexpr",
745
"clang-sys",
746
+
"itertools 0.12.1",
747
"proc-macro2",
748
"quote",
749
"regex",
750
"rustc-hash 2.1.1",
751
"shlex",
752
+
"syn",
753
]
754
755
[[package]]
···
972
"anstream",
973
"anstyle",
974
"clap_lex",
975
+
"strsim",
976
]
977
978
[[package]]
···
984
"heck",
985
"proc-macro2",
986
"quote",
987
+
"syn",
988
]
989
990
[[package]]
···
1136
]
1137
1138
[[package]]
1139
+
name = "core_affinity"
1140
+
version = "0.8.3"
1141
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1142
+
checksum = "a034b3a7b624016c6e13f5df875747cc25f884156aad2abd12b6c46797971342"
1143
+
dependencies = [
1144
+
"libc",
1145
+
"num_cpus",
1146
+
"winapi",
1147
+
]
1148
+
1149
+
[[package]]
1150
name = "cpufeatures"
1151
version = "0.2.17"
1152
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1244
1245
[[package]]
1246
name = "darling"
0
0
0
0
0
0
0
0
0
0
1247
version = "0.20.11"
1248
source = "registry+https://github.com/rust-lang/crates.io-index"
1249
checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
1250
dependencies = [
1251
+
"darling_core",
1252
+
"darling_macro",
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1253
]
1254
1255
[[package]]
···
1262
"ident_case",
1263
"proc-macro2",
1264
"quote",
1265
+
"strsim",
1266
+
"syn",
0
0
0
0
0
0
0
0
0
0
0
1267
]
1268
1269
[[package]]
···
1272
source = "registry+https://github.com/rust-lang/crates.io-index"
1273
checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
1274
dependencies = [
1275
+
"darling_core",
1276
"quote",
1277
+
"syn",
1278
]
1279
1280
[[package]]
···
1314
checksum = "18e4fdb82bd54a12e42fb58a800dcae6b9e13982238ce2296dc3570b92148e1f"
1315
dependencies = [
1316
"data-encoding",
1317
+
"syn",
1318
]
1319
1320
[[package]]
···
1373
source = "registry+https://github.com/rust-lang/crates.io-index"
1374
checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8"
1375
dependencies = [
1376
+
"darling",
1377
"proc-macro2",
1378
"quote",
1379
+
"syn",
1380
]
1381
1382
[[package]]
···
1386
checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c"
1387
dependencies = [
1388
"derive_builder_core",
1389
+
"syn",
1390
]
1391
1392
[[package]]
···
1406
dependencies = [
1407
"proc-macro2",
1408
"quote",
1409
+
"syn",
1410
"unicode-xid",
0
0
0
0
0
0
0
0
0
0
0
1411
]
1412
1413
[[package]]
···
1451
dependencies = [
1452
"proc-macro2",
1453
"quote",
1454
+
"syn",
1455
]
1456
1457
[[package]]
···
1461
checksum = "c0d05e1c0dbad51b52c38bda7adceef61b9efc2baf04acfe8726a8c4630a6f57"
1462
1463
[[package]]
0
0
0
0
0
0
1464
name = "dropshot"
1465
version = "0.16.3"
1466
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1504
"thiserror 2.0.16",
1505
"tokio",
1506
"tokio-rustls 0.25.0",
1507
+
"toml",
1508
"uuid",
1509
"version_check",
1510
"waitgroup",
···
1522
"semver",
1523
"serde",
1524
"serde_tokenstream",
1525
+
"syn",
1526
]
1527
1528
[[package]]
···
1595
"heck",
1596
"proc-macro2",
1597
"quote",
1598
+
"syn",
1599
]
1600
1601
[[package]]
···
1607
"once_cell",
1608
"proc-macro2",
1609
"quote",
1610
+
"syn",
1611
]
1612
1613
[[package]]
···
1683
checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
1684
1685
[[package]]
1686
+
name = "fastant"
1687
+
version = "0.1.11"
1688
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1689
+
checksum = "2e825441bfb2d831c47c97d05821552db8832479f44c571b97fededbf0099c07"
1690
+
dependencies = [
1691
+
"small_ctor",
1692
+
"web-time",
1693
+
]
1694
+
1695
+
[[package]]
1696
name = "fastrand"
1697
version = "2.3.0"
1698
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1767
source = "registry+https://github.com/rust-lang/crates.io-index"
1768
checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095"
1769
dependencies = [
0
0
0
1770
"spin",
1771
]
1772
···
1783
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
1784
1785
[[package]]
1786
+
name = "foldhash"
1787
+
version = "0.2.0"
1788
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1789
+
checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
1790
+
1791
+
[[package]]
1792
name = "foreign-types"
1793
version = "0.3.2"
1794
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1814
1815
[[package]]
1816
name = "foyer"
1817
+
version = "0.22.3"
1818
source = "registry+https://github.com/rust-lang/crates.io-index"
1819
+
checksum = "3b0abc0b87814989efa711f9becd9f26969820e2d3905db27d10969c4bd45890"
1820
dependencies = [
1821
+
"anyhow",
1822
"equivalent",
1823
"foyer-common",
1824
"foyer-memory",
1825
"foyer-storage",
1826
+
"foyer-tokio",
1827
+
"futures-util",
1828
+
"mea",
1829
"mixtrics",
1830
"pin-project",
1831
"serde",
0
0
1832
"tracing",
1833
]
1834
1835
[[package]]
1836
name = "foyer-common"
1837
+
version = "0.22.3"
1838
source = "registry+https://github.com/rust-lang/crates.io-index"
1839
+
checksum = "a3db80d5dece93adb7ad709c84578794724a9cba342a7e566c3551c7ec626789"
1840
dependencies = [
1841
+
"anyhow",
1842
"bincode 1.3.3",
1843
"bytes",
1844
"cfg-if",
1845
+
"foyer-tokio",
0
1846
"mixtrics",
1847
"parking_lot",
1848
"pin-project",
1849
"serde",
0
0
1850
"twox-hash",
1851
]
1852
···
1861
1862
[[package]]
1863
name = "foyer-memory"
1864
+
version = "0.22.3"
1865
source = "registry+https://github.com/rust-lang/crates.io-index"
1866
+
checksum = "db907f40a527ca2aa2f40a5f68b32ea58aa70f050cd233518e9ffd402cfba6ce"
1867
dependencies = [
1868
+
"anyhow",
1869
"bitflags",
1870
"cmsketch",
1871
"equivalent",
1872
"foyer-common",
1873
"foyer-intrusive-collections",
1874
+
"foyer-tokio",
1875
+
"futures-util",
1876
+
"hashbrown 0.16.1",
1877
"itertools 0.14.0",
1878
+
"mea",
1879
"mixtrics",
1880
"parking_lot",
1881
+
"paste",
1882
"pin-project",
1883
"serde",
0
0
1884
"tracing",
1885
]
1886
1887
[[package]]
1888
name = "foyer-storage"
1889
+
version = "0.22.3"
1890
source = "registry+https://github.com/rust-lang/crates.io-index"
1891
+
checksum = "1983f1db3d0710e9c9d5fc116d9202dccd41a2d1e032572224f1aff5520aa958"
1892
dependencies = [
1893
"allocator-api2",
1894
"anyhow",
0
1895
"bytes",
1896
+
"core_affinity",
1897
"equivalent",
1898
+
"fastant",
1899
"foyer-common",
1900
"foyer-memory",
1901
+
"foyer-tokio",
1902
"fs4 0.13.1",
1903
"futures-core",
1904
"futures-util",
1905
+
"hashbrown 0.16.1",
1906
+
"io-uring",
1907
"itertools 0.14.0",
1908
"libc",
1909
"lz4",
1910
+
"mea",
0
1911
"parking_lot",
0
1912
"pin-project",
1913
"rand 0.9.1",
1914
"serde",
0
0
1915
"tracing",
1916
"twox-hash",
1917
"zstd",
1918
+
]
1919
+
1920
+
[[package]]
1921
+
name = "foyer-tokio"
1922
+
version = "0.22.3"
1923
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1924
+
checksum = "f6577b05a7ffad0db555aedf00bfe52af818220fc4c1c3a7a12520896fc38627"
1925
+
dependencies = [
1926
+
"tokio",
1927
]
1928
1929
[[package]]
···
2008
dependencies = [
2009
"proc-macro2",
2010
"quote",
2011
+
"syn",
2012
]
2013
2014
[[package]]
···
2175
2176
[[package]]
2177
name = "hashbrown"
0
0
0
0
0
0
0
0
0
2178
version = "0.14.5"
2179
source = "registry+https://github.com/rust-lang/crates.io-index"
2180
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
···
2187
dependencies = [
2188
"allocator-api2",
2189
"equivalent",
2190
+
"foldhash 0.1.5",
2191
+
]
2192
+
2193
+
[[package]]
2194
+
name = "hashbrown"
2195
+
version = "0.16.1"
2196
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2197
+
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
2198
+
dependencies = [
2199
+
"allocator-api2",
2200
+
"equivalent",
2201
+
"foldhash 0.2.0",
2202
]
2203
2204
[[package]]
···
2632
dependencies = [
2633
"proc-macro2",
2634
"quote",
2635
+
"syn",
2636
]
2637
2638
[[package]]
···
2772
2773
[[package]]
2774
name = "itertools"
0
0
0
0
0
0
0
0
0
2775
version = "0.14.0"
2776
source = "registry+https://github.com/rust-lang/crates.io-index"
2777
checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
···
2827
dependencies = [
2828
"proc-macro2",
2829
"quote",
2830
+
"syn",
2831
]
2832
2833
[[package]]
···
3179
]
3180
3181
[[package]]
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
3182
name = "match_cfg"
3183
version = "0.1.0"
3184
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3198
version = "0.8.4"
3199
source = "registry+https://github.com/rust-lang/crates.io-index"
3200
checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3"
3201
+
3202
+
[[package]]
3203
+
name = "mea"
3204
+
version = "0.6.3"
3205
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3206
+
checksum = "6747f54621d156e1b47eb6b25f39a941b9fc347f98f67d25d8881ff99e8ed832"
3207
+
dependencies = [
3208
+
"slab",
3209
+
]
3210
3211
[[package]]
3212
name = "mediatype"
···
3443
]
3444
3445
[[package]]
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
3446
name = "native-tls"
3447
version = "0.2.14"
3448
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3575
dependencies = [
3576
"autocfg",
3577
"libm",
3578
+
]
3579
+
3580
+
[[package]]
3581
+
name = "num_cpus"
3582
+
version = "1.17.0"
3583
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3584
+
checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b"
3585
+
dependencies = [
3586
+
"hermit-abi",
3587
+
"libc",
3588
]
3589
3590
[[package]]
···
3658
dependencies = [
3659
"proc-macro2",
3660
"quote",
3661
+
"syn",
3662
]
3663
3664
[[package]]
···
3690
]
3691
3692
[[package]]
0
0
0
0
0
0
0
0
0
3693
name = "p256"
3694
version = "0.13.2"
3695
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3712
]
3713
3714
[[package]]
0
0
0
0
0
0
3715
name = "parking"
3716
version = "2.2.1"
3717
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3820
"pest_meta",
3821
"proc-macro2",
3822
"quote",
3823
+
"syn",
3824
]
3825
3826
[[package]]
···
3850
dependencies = [
3851
"proc-macro2",
3852
"quote",
3853
+
"syn",
3854
]
3855
3856
[[package]]
···
3968
"proc-macro-crate",
3969
"proc-macro2",
3970
"quote",
3971
+
"syn",
3972
]
3973
3974
[[package]]
···
4003
source = "registry+https://github.com/rust-lang/crates.io-index"
4004
checksum = "41273b691a3d467a8c44d05506afba9f7b6bd56c9cdf80123de13fe52d7ec587"
4005
dependencies = [
4006
+
"darling",
4007
"http",
4008
"indexmap 2.11.4",
4009
"mime",
···
4011
"proc-macro2",
4012
"quote",
4013
"regex",
4014
+
"syn",
4015
"thiserror 2.0.16",
4016
]
4017
···
4052
checksum = "6837b9e10d61f45f987d50808f83d1ee3d206c66acf650c3e4ae2e1f6ddedf55"
4053
dependencies = [
4054
"proc-macro2",
4055
+
"syn",
4056
]
4057
4058
[[package]]
···
4363
dependencies = [
4364
"proc-macro2",
4365
"quote",
4366
+
"syn",
4367
]
4368
4369
[[package]]
···
4745
"proc-macro2",
4746
"quote",
4747
"serde_derive_internals",
4748
+
"syn",
4749
]
4750
4751
[[package]]
···
4878
dependencies = [
4879
"proc-macro2",
4880
"quote",
4881
+
"syn",
4882
]
4883
4884
[[package]]
···
4889
dependencies = [
4890
"proc-macro2",
4891
"quote",
4892
+
"syn",
4893
]
4894
4895
[[package]]
···
4943
4944
[[package]]
4945
name = "serde_spanned"
0
0
0
0
0
0
0
0
0
4946
version = "1.0.2"
4947
source = "registry+https://github.com/rust-lang/crates.io-index"
4948
checksum = "5417783452c2be558477e104686f7de5dae53dba813c28435e0e70f82d9b04ee"
···
4959
"proc-macro2",
4960
"quote",
4961
"serde",
4962
+
"syn",
4963
]
4964
4965
[[package]]
···
4998
source = "registry+https://github.com/rust-lang/crates.io-index"
4999
checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e"
5000
dependencies = [
5001
+
"darling",
5002
"proc-macro2",
5003
"quote",
5004
+
"syn",
5005
]
5006
5007
[[package]]
···
5093
5094
[[package]]
5095
name = "slab"
5096
+
version = "0.4.12"
5097
source = "registry+https://github.com/rust-lang/crates.io-index"
5098
+
checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
0
0
0
5099
5100
[[package]]
5101
name = "slingshot"
···
5184
]
5185
5186
[[package]]
5187
+
name = "small_ctor"
5188
+
version = "0.1.2"
5189
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5190
+
checksum = "88414a5ca1f85d82cc34471e975f0f74f6aa54c40f062efa42c0080e7f763f81"
5191
+
5192
+
[[package]]
5193
name = "smallvec"
5194
version = "1.15.0"
5195
source = "registry+https://github.com/rust-lang/crates.io-index"
···
5277
5278
[[package]]
5279
name = "strsim"
0
0
0
0
0
0
5280
version = "0.11.1"
5281
source = "registry+https://github.com/rust-lang/crates.io-index"
5282
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
···
5289
5290
[[package]]
5291
name = "syn"
0
0
0
0
0
0
0
0
0
0
0
5292
version = "2.0.106"
5293
source = "registry+https://github.com/rust-lang/crates.io-index"
5294
checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
···
5315
dependencies = [
5316
"proc-macro2",
5317
"quote",
5318
+
"syn",
5319
]
5320
5321
[[package]]
···
5401
dependencies = [
5402
"proc-macro2",
5403
"quote",
5404
+
"syn",
5405
]
5406
5407
[[package]]
···
5412
dependencies = [
5413
"proc-macro2",
5414
"quote",
5415
+
"syn",
5416
]
5417
5418
[[package]]
···
5537
dependencies = [
5538
"proc-macro2",
5539
"quote",
5540
+
"syn",
5541
]
5542
5543
[[package]]
···
5623
5624
[[package]]
5625
name = "toml"
0
0
0
0
0
0
0
0
0
0
0
0
5626
version = "0.9.7"
5627
source = "registry+https://github.com/rust-lang/crates.io-index"
5628
checksum = "00e5e5d9bf2475ac9d4f0d9edab68cc573dc2fd644b0dba36b0c30a92dd9eaa0"
5629
dependencies = [
5630
"indexmap 2.11.4",
5631
"serde_core",
5632
+
"serde_spanned",
5633
"toml_datetime 0.7.2",
5634
"toml_parser",
5635
"toml_writer",
···
5641
version = "0.6.11"
5642
source = "registry+https://github.com/rust-lang/crates.io-index"
5643
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
0
0
0
5644
5645
[[package]]
5646
name = "toml_datetime"
···
5658
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
5659
dependencies = [
5660
"indexmap 2.11.4",
0
0
5661
"toml_datetime 0.6.11",
0
5662
"winnow",
5663
]
5664
···
5670
dependencies = [
5671
"winnow",
5672
]
0
0
0
0
0
0
5673
5674
[[package]]
5675
name = "toml_writer"
···
5743
dependencies = [
5744
"proc-macro2",
5745
"quote",
5746
+
"syn",
5747
]
5748
5749
[[package]]
···
5793
dependencies = [
5794
"proc-macro2",
5795
"quote",
5796
+
"syn",
5797
]
5798
5799
[[package]]
···
6115
"log",
6116
"proc-macro2",
6117
"quote",
6118
+
"syn",
6119
"wasm-bindgen-shared",
6120
]
6121
···
6150
dependencies = [
6151
"proc-macro2",
6152
"quote",
6153
+
"syn",
6154
"wasm-bindgen-backend",
6155
"wasm-bindgen-shared",
6156
]
···
6303
dependencies = [
6304
"proc-macro2",
6305
"quote",
6306
+
"syn",
6307
]
6308
6309
[[package]]
···
6314
dependencies = [
6315
"proc-macro2",
6316
"quote",
6317
+
"syn",
6318
]
6319
6320
[[package]]
···
6620
dependencies = [
6621
"proc-macro2",
6622
"quote",
6623
+
"syn",
6624
"synstructure",
6625
]
6626
···
6650
dependencies = [
6651
"proc-macro2",
6652
"quote",
6653
+
"syn",
6654
]
6655
6656
[[package]]
···
6661
dependencies = [
6662
"proc-macro2",
6663
"quote",
6664
+
"syn",
6665
]
6666
6667
[[package]]
···
6681
dependencies = [
6682
"proc-macro2",
6683
"quote",
6684
+
"syn",
6685
"synstructure",
6686
]
6687
···
6703
dependencies = [
6704
"proc-macro2",
6705
"quote",
6706
+
"syn",
6707
]
6708
6709
[[package]]
···
6725
dependencies = [
6726
"proc-macro2",
6727
"quote",
6728
+
"syn",
6729
]
6730
6731
[[package]]
+1
-1
slingshot/Cargo.toml
···
10
atrium-oauth = { git = "https://github.com/uniphil/atrium.git", branch = "fix/resolve-handle-https-accept-whitespace" }
11
clap = { workspace = true }
12
ctrlc = "3.4.7"
13
-
foyer = { version = "0.18.0", features = ["serde"] }
14
hickory-resolver = "0.25.2"
15
jetstream = { path = "../jetstream", features = ["metrics"] }
16
links = { path = "../links" }
···
10
atrium-oauth = { git = "https://github.com/uniphil/atrium.git", branch = "fix/resolve-handle-https-accept-whitespace" }
11
clap = { workspace = true }
12
ctrlc = "3.4.7"
13
+
foyer = { version = "0.22.3", features = ["serde"] }
14
hickory-resolver = "0.25.2"
15
jetstream = { path = "../jetstream", features = ["metrics"] }
16
links = { path = "../links" }
+14
-8
slingshot/src/firehose_cache.rs
···
1
use crate::CachedRecord;
2
-
use foyer::{DirectFsDeviceOptions, Engine, HybridCache, HybridCacheBuilder};
3
use std::path::Path;
4
5
pub async fn firehose_cache(
···
7
memory_mb: usize,
8
disk_gb: usize,
9
) -> Result<HybridCache<String, CachedRecord>, String> {
0
0
0
0
0
0
0
10
let cache = HybridCacheBuilder::new()
11
.with_name("firehose")
12
.memory(memory_mb * 2_usize.pow(20))
13
-
.with_weighter(|k: &String, v| k.len() + std::mem::size_of_val(v))
14
-
.storage(Engine::large())
15
-
.with_device_options(
16
-
DirectFsDeviceOptions::new(cache_dir)
17
-
.with_capacity(disk_gb * 2_usize.pow(30))
18
-
.with_file_size(16 * 2_usize.pow(20)), // note: this does limit the max cached item size (records should be max 1mb cbor, bit bigger json)
19
-
)
20
.build()
21
.await
22
.map_err(|e| format!("foyer setup error: {e:?}"))?;
0
23
Ok(cache)
24
}
···
1
use crate::CachedRecord;
2
+
use foyer::{BlockEngineConfig, DeviceBuilder, FileDeviceBuilder, HybridCache, HybridCacheBuilder};
3
use std::path::Path;
4
5
pub async fn firehose_cache(
···
7
memory_mb: usize,
8
disk_gb: usize,
9
) -> Result<HybridCache<String, CachedRecord>, String> {
10
+
let device = FileDeviceBuilder::new(cache_dir)
11
+
.with_capacity(disk_gb * 2_usize.pow(30))
12
+
.build()
13
+
.map_err(|e| format!("foyer device setup error: {e}"))?;
14
+
15
+
let engine = BlockEngineConfig::new(device).with_block_size(16 * 2_usize.pow(20)); // note: this does limit the max cached item size
16
+
17
let cache = HybridCacheBuilder::new()
18
.with_name("firehose")
19
.memory(memory_mb * 2_usize.pow(20))
20
+
.with_weighter(|k: &String, v: &CachedRecord| {
21
+
std::mem::size_of_val(k.as_str()) + v.weight()
22
+
})
23
+
.storage()
24
+
.with_engine_config(engine)
0
0
25
.build()
26
.await
27
.map_err(|e| format!("foyer setup error: {e:?}"))?;
28
+
29
Ok(cache)
30
}
+45
-24
slingshot/src/identity.rs
···
26
handle::{AtprotoHandleResolver, AtprotoHandleResolverConfig, DnsTxtResolver},
27
};
28
use atrium_oauth::DefaultHttpClient; // it's probably not worth bringing all of atrium_oauth for this but
29
-
use foyer::{DirectFsDeviceOptions, Engine, HybridCache, HybridCacheBuilder};
30
use serde::{Deserialize, Serialize};
31
use time::UtcDateTime;
32
···
40
Did(Did),
41
}
42
0
0
0
0
0
0
0
0
0
0
43
#[derive(Debug, Serialize, Deserialize)]
44
struct IdentityVal(UtcDateTime, IdentityData);
45
···
48
NotFound,
49
Did(Did),
50
Doc(PartialMiniDoc),
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
51
}
52
53
/// partial representation of a com.bad-example.identity mini atproto doc
···
176
http_client: http_client.clone(),
177
});
178
0
0
0
0
0
179
let cache = HybridCacheBuilder::new()
180
.with_name("identity")
181
.memory(memory_mb * 2_usize.pow(20))
182
-
.with_weighter(|k, v| std::mem::size_of_val(k) + std::mem::size_of_val(v))
183
-
.storage(Engine::small())
184
-
.with_device_options(
185
-
DirectFsDeviceOptions::new(cache_dir)
186
-
.with_capacity(disk_gb * 2_usize.pow(30)) // TODO: configurable (1GB to have something)
187
-
.with_file_size(2_usize.pow(20)), // note: this does limit the max cached item size!
188
-
)
189
.build()
190
.await?;
191
···
235
let key = IdentityKey::Handle(handle.clone());
236
let entry = self
237
.cache
238
-
.fetch(key.clone(), {
239
let handle = handle.clone();
240
let resolver = self.handle_resolver.clone();
241
|| async move {
···
244
Err(atrium_identity::Error::NotFound) => {
245
Ok(IdentityVal(UtcDateTime::now(), IdentityData::NotFound))
246
}
247
-
Err(other) => Err(foyer::Error::Other(Box::new({
248
log::debug!("other error resolving handle: {other:?}");
249
-
IdentityError::ResolutionFailed(other)
250
-
}))),
251
}
252
}
253
})
···
283
let key = IdentityKey::Did(did.clone());
284
let entry = self
285
.cache
286
-
.fetch(key.clone(), {
287
let did = did.clone();
288
let resolver = self.did_resolver.clone();
289
|| async move {
···
291
Ok(did_doc) => {
292
// TODO: fix in atrium: should verify id is did
293
if did_doc.id != did.to_string() {
294
-
return Err(foyer::Error::other(Box::new(
295
-
IdentityError::BadDidDoc(
296
-
"did doc's id did not match did".to_string(),
297
-
),
298
-
)));
299
}
300
-
let mini_doc = did_doc.try_into().map_err(|e| {
301
-
foyer::Error::Other(Box::new(IdentityError::BadDidDoc(e)))
302
-
})?;
303
Ok(IdentityVal(UtcDateTime::now(), IdentityData::Doc(mini_doc)))
304
}
305
Err(atrium_identity::Error::NotFound) => {
306
Ok(IdentityVal(UtcDateTime::now(), IdentityData::NotFound))
307
}
308
-
Err(other) => Err(foyer::Error::Other(Box::new(
309
-
IdentityError::ResolutionFailed(other),
310
-
))),
311
}
312
}
313
})
···
26
handle::{AtprotoHandleResolver, AtprotoHandleResolverConfig, DnsTxtResolver},
27
};
28
use atrium_oauth::DefaultHttpClient; // it's probably not worth bringing all of atrium_oauth for this but
29
+
use foyer::{BlockEngineConfig, DeviceBuilder, FileDeviceBuilder, HybridCache, HybridCacheBuilder};
30
use serde::{Deserialize, Serialize};
31
use time::UtcDateTime;
32
···
40
Did(Did),
41
}
42
43
+
impl IdentityKey {
44
+
fn weight(&self) -> usize {
45
+
let s = match self {
46
+
IdentityKey::Handle(h) => h.as_str(),
47
+
IdentityKey::Did(d) => d.as_str(),
48
+
};
49
+
std::mem::size_of::<Self>() + std::mem::size_of_val(s)
50
+
}
51
+
}
52
+
53
#[derive(Debug, Serialize, Deserialize)]
54
struct IdentityVal(UtcDateTime, IdentityData);
55
···
58
NotFound,
59
Did(Did),
60
Doc(PartialMiniDoc),
61
+
}
62
+
63
+
impl IdentityVal {
64
+
fn weight(&self) -> usize {
65
+
let wrapping = std::mem::size_of::<Self>();
66
+
let inner = match &self.1 {
67
+
IdentityData::NotFound => 0,
68
+
IdentityData::Did(d) => std::mem::size_of_val(d.as_str()),
69
+
IdentityData::Doc(d) => {
70
+
std::mem::size_of_val(d.unverified_handle.as_str())
71
+
+ std::mem::size_of_val(d.pds.as_str())
72
+
+ std::mem::size_of_val(d.signing_key.as_str())
73
+
}
74
+
};
75
+
wrapping + inner
76
+
}
77
}
78
79
/// partial representation of a com.bad-example.identity mini atproto doc
···
202
http_client: http_client.clone(),
203
});
204
205
+
let device = FileDeviceBuilder::new(cache_dir)
206
+
.with_capacity(disk_gb * 2_usize.pow(30))
207
+
.build()?;
208
+
let engine = BlockEngineConfig::new(device).with_block_size(2_usize.pow(20)); // note: this does limit the max cached item size
209
+
210
let cache = HybridCacheBuilder::new()
211
.with_name("identity")
212
.memory(memory_mb * 2_usize.pow(20))
213
+
.with_weighter(|k: &IdentityKey, v: &IdentityVal| k.weight() + v.weight())
214
+
.storage()
215
+
.with_engine_config(engine)
0
0
0
0
216
.build()
217
.await?;
218
···
262
let key = IdentityKey::Handle(handle.clone());
263
let entry = self
264
.cache
265
+
.get_or_fetch(&key, {
266
let handle = handle.clone();
267
let resolver = self.handle_resolver.clone();
268
|| async move {
···
271
Err(atrium_identity::Error::NotFound) => {
272
Ok(IdentityVal(UtcDateTime::now(), IdentityData::NotFound))
273
}
274
+
Err(other) => {
275
log::debug!("other error resolving handle: {other:?}");
276
+
Err(IdentityError::ResolutionFailed(other))
277
+
}
278
}
279
}
280
})
···
310
let key = IdentityKey::Did(did.clone());
311
let entry = self
312
.cache
313
+
.get_or_fetch(&key, {
314
let did = did.clone();
315
let resolver = self.did_resolver.clone();
316
|| async move {
···
318
Ok(did_doc) => {
319
// TODO: fix in atrium: should verify id is did
320
if did_doc.id != did.to_string() {
321
+
return Err(IdentityError::BadDidDoc(
322
+
"did doc's id did not match did".to_string(),
323
+
));
0
0
324
}
325
+
let mini_doc = did_doc.try_into().map_err(IdentityError::BadDidDoc)?;
0
0
326
Ok(IdentityVal(UtcDateTime::now(), IdentityData::Doc(mini_doc)))
327
}
328
Err(atrium_identity::Error::NotFound) => {
329
Ok(IdentityVal(UtcDateTime::now(), IdentityData::NotFound))
330
}
331
+
Err(other) => Err(IdentityError::ResolutionFailed(other)),
0
0
332
}
333
}
334
})
+11
slingshot/src/record.rs
···
42
Deleted,
43
}
44
0
0
0
0
0
0
0
0
0
0
0
45
//////// upstream record fetching
46
47
#[derive(Deserialize)]
···
42
Deleted,
43
}
44
45
+
impl CachedRecord {
46
+
pub(crate) fn weight(&self) -> usize {
47
+
let wrapping = std::mem::size_of::<Self>();
48
+
let inner = match self {
49
+
CachedRecord::Found(RawRecord { record, .. }) => std::mem::size_of_val(record.as_str()),
50
+
_ => 0,
51
+
};
52
+
wrapping + inner
53
+
}
54
+
}
55
+
56
//////// upstream record fetching
57
58
#[derive(Deserialize)]
+15
-14
slingshot/src/server.rs
···
565
566
let fr = self
567
.cache
568
-
.fetch(at_uri.clone(), {
569
let cid = cid.clone();
570
let repo_api = self.repo.clone();
571
-
|| async move {
572
-
repo_api
573
-
.get_record(&did, &collection, &rkey, &cid)
574
-
.await
575
-
.map_err(|e| foyer::Error::Other(Box::new(e)))
576
-
}
577
})
578
.await;
579
580
let entry = match fr {
581
Ok(e) => e,
582
-
Err(foyer::Error::Other(e)) => {
583
-
let record_error = match e.downcast::<RecordError>() {
584
-
Ok(e) => e,
585
-
Err(e) => {
586
-
log::error!("error (foyer other) getting cache entry, {e:?}");
0
0
0
0
587
return GetRecordResponse::ServerError(xrpc_error(
588
"ServerError",
589
"sorry, something went wrong",
590
));
591
}
592
};
593
-
let RecordError::UpstreamBadRequest(ErrorResponseObject { error, message }) =
594
-
*record_error
0
0
595
else {
596
log::error!("RecordError getting cache entry, {record_error:?}");
597
return GetRecordResponse::ServerError(xrpc_error(
···
565
566
let fr = self
567
.cache
568
+
.get_or_fetch(&at_uri, {
569
let cid = cid.clone();
570
let repo_api = self.repo.clone();
571
+
|| async move { repo_api.get_record(&did, &collection, &rkey, &cid).await }
0
0
0
0
0
572
})
573
.await;
574
575
let entry = match fr {
576
Ok(e) => e,
577
+
Err(e) if e.kind() == foyer::ErrorKind::External => {
578
+
let record_error = match e.source().map(|s| s.downcast_ref::<RecordError>()) {
579
+
Some(Some(e)) => e,
580
+
other => {
581
+
if other.is_none() {
582
+
log::error!("external error without a source. wat? {e}");
583
+
} else {
584
+
log::error!("downcast to RecordError failed...? {e}");
585
+
}
586
return GetRecordResponse::ServerError(xrpc_error(
587
"ServerError",
588
"sorry, something went wrong",
589
));
590
}
591
};
592
+
let RecordError::UpstreamBadRequest(ErrorResponseObject {
593
+
ref error,
594
+
ref message,
595
+
}) = *record_error
596
else {
597
log::error!("RecordError getting cache entry, {record_error:?}");
598
return GetRecordResponse::ServerError(xrpc_error(