Constellation, Spacedust, Slingshot, UFOs: atproto crates and services for microcosm

update foyer

+249 -386
+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]] 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]] 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]] 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 = [ 1886 "equivalent", 1887 "foyer-common", 1888 "foyer-memory", 1889 "foyer-storage", 1890 - "madsim-tokio", 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 = [ 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", 1941 "itertools 0.14.0", 1942 - "madsim-tokio", 1943 "mixtrics", 1944 "parking_lot", 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", 1962 "equivalent", 1963 - "flume", 1964 "foyer-common", 1965 "foyer-memory", 1966 "fs4 0.13.1", 1967 "futures-core", 1968 "futures-util", 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", 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", 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" 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", 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]] 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", 27 "once_cell", 28 "version_check", 29 "zerocopy 0.7.35", ··· 122 checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" 123 124 [[package]] 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", 213 ] 214 215 [[package]] ··· 255 dependencies = [ 256 "proc-macro2", 257 "quote", 258 + "syn", 259 ] 260 261 [[package]] 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", 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" 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", 1253 ] 1254 1255 [[package]] ··· 1262 "ident_case", 1263 "proc-macro2", 1264 "quote", 1265 + "strsim", 1266 + "syn", 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", 1411 ] 1412 1413 [[package]] ··· 1451 dependencies = [ 1452 "proc-macro2", 1453 "quote", 1454 + "syn", 1455 ] 1456 1457 [[package]] ··· 1461 checksum = "c0d05e1c0dbad51b52c38bda7adceef61b9efc2baf04acfe8726a8c4630a6f57" 1462 1463 [[package]] 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 = [ 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", 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", 1846 "mixtrics", 1847 "parking_lot", 1848 "pin-project", 1849 "serde", 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", 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", 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", 1911 "parking_lot", 1912 "pin-project", 1913 "rand 0.9.1", 1914 "serde", 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" 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" 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]] 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]] 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]] 3693 name = "p256" 3694 version = "0.13.2" 3695 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3712 ] 3713 3714 [[package]] 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" 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" 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" 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" 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" 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" 5644 5645 [[package]] 5646 name = "toml_datetime" ··· 5658 checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" 5659 dependencies = [ 5660 "indexmap 2.11.4", 5661 "toml_datetime 0.6.11", 5662 "winnow", 5663 ] 5664 ··· 5670 dependencies = [ 5671 "winnow", 5672 ] 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> { 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:?}"))?; 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) 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 43 #[derive(Debug, Serialize, Deserialize)] 44 struct IdentityVal(UtcDateTime, IdentityData); 45 ··· 48 NotFound, 49 Did(Did), 50 Doc(PartialMiniDoc), 51 } 52 53 /// partial representation of a com.bad-example.identity mini atproto doc ··· 176 http_client: http_client.clone(), 177 }); 178 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) 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 + )); 324 } 325 + let mini_doc = did_doc.try_into().map_err(IdentityError::BadDidDoc)?; 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)), 332 } 333 } 334 })
+11
slingshot/src/record.rs
··· 42 Deleted, 43 } 44 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:?}"); 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 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 } 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(