very fast at protocol indexer with flexible filtering, xrpc queries, cursor-backed event stream, and more, built on fjall
rust fjall at-protocol atproto indexer
60
fork

Configure Feed

Select the types of activity you want to include in your feed.

[deps] use jacquard from crates io

dawn b0c833e7 98061737

+278 -298
+236 -283
Cargo.lock
··· 173 173 "sha1", 174 174 "sync_wrapper", 175 175 "tokio", 176 - "tokio-tungstenite", 176 + "tokio-tungstenite 0.28.0", 177 177 "tower", 178 178 "tower-layer", 179 179 "tower-service", ··· 309 309 ] 310 310 311 311 [[package]] 312 + name = "borrow-or-share" 313 + version = "0.2.4" 314 + source = "registry+https://github.com/rust-lang/crates.io-index" 315 + checksum = "dc0b364ead1874514c8c2855ab558056ebfeb775653e7ae45ff72f28f8f3166c" 316 + 317 + [[package]] 312 318 name = "borsh" 313 319 version = "1.6.1" 314 320 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 394 400 ] 395 401 396 402 [[package]] 397 - name = "cesu8" 398 - version = "1.1.0" 399 - source = "registry+https://github.com/rust-lang/crates.io-index" 400 - checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 401 - 402 - [[package]] 403 403 name = "cfg-if" 404 404 version = "1.0.4" 405 405 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 496 496 ] 497 497 498 498 [[package]] 499 - name = "combine" 500 - version = "4.6.7" 501 - source = "registry+https://github.com/rust-lang/crates.io-index" 502 - checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" 503 - dependencies = [ 504 - "bytes", 505 - "memchr", 506 - ] 507 - 508 - [[package]] 509 499 name = "compare" 510 500 version = "0.0.6" 511 501 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 620 610 version = "1.2.0" 621 611 source = "registry+https://github.com/rust-lang/crates.io-index" 622 612 checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" 623 - 624 - [[package]] 625 - name = "crossbeam-channel" 626 - version = "0.5.15" 627 - source = "registry+https://github.com/rust-lang/crates.io-index" 628 - checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" 629 - dependencies = [ 630 - "crossbeam-utils", 631 - ] 632 613 633 614 [[package]] 634 615 name = "crossbeam-epoch" ··· 696 677 "fiat-crypto", 697 678 "rustc_version", 698 679 "subtle", 680 + "zeroize", 699 681 ] 700 682 701 683 [[package]] ··· 892 874 "curve25519-dalek", 893 875 "ed25519", 894 876 "rand_core 0.6.4", 877 + "serde", 895 878 "sha2", 896 879 "subtle", 880 + "zeroize", 897 881 ] 898 882 899 883 [[package]] ··· 1033 1017 ] 1034 1018 1035 1019 [[package]] 1020 + name = "fluent-uri" 1021 + version = "0.4.1" 1022 + source = "registry+https://github.com/rust-lang/crates.io-index" 1023 + checksum = "bc74ac4d8359ae70623506d512209619e5cf8f347124910440dbc221714b328e" 1024 + dependencies = [ 1025 + "borrow-or-share", 1026 + "ref-cast", 1027 + "serde", 1028 + ] 1029 + 1030 + [[package]] 1036 1031 name = "flume" 1037 1032 version = "0.12.0" 1038 1033 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1054 1049 checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 1055 1050 1056 1051 [[package]] 1057 - name = "foldhash" 1058 - version = "0.2.0" 1059 - source = "registry+https://github.com/rust-lang/crates.io-index" 1060 - checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" 1061 - 1062 - [[package]] 1063 1052 name = "form_urlencoded" 1064 1053 version = "1.2.2" 1065 1054 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1248 1237 checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" 1249 1238 dependencies = [ 1250 1239 "cfg-if", 1251 - "js-sys", 1252 1240 "libc", 1253 1241 "r-efi 6.0.0", 1254 1242 "rand_core 0.10.0", 1255 1243 "wasip2", 1256 1244 "wasip3", 1257 - "wasm-bindgen", 1258 1245 ] 1259 1246 1260 1247 [[package]] ··· 1331 1318 source = "registry+https://github.com/rust-lang/crates.io-index" 1332 1319 checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" 1333 1320 dependencies = [ 1334 - "foldhash 0.1.5", 1321 + "allocator-api2", 1322 + "equivalent", 1323 + "foldhash", 1335 1324 ] 1336 1325 1337 1326 [[package]] ··· 1339 1328 version = "0.16.1" 1340 1329 source = "registry+https://github.com/rust-lang/crates.io-index" 1341 1330 checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" 1342 - dependencies = [ 1343 - "allocator-api2", 1344 - "equivalent", 1345 - "foldhash 0.2.0", 1346 - ] 1347 1331 1348 1332 [[package]] 1349 1333 name = "heapless" ··· 1379 1363 1380 1364 [[package]] 1381 1365 name = "hickory-proto" 1382 - version = "0.25.2" 1366 + version = "0.24.4" 1383 1367 source = "registry+https://github.com/rust-lang/crates.io-index" 1384 - checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" 1368 + checksum = "92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248" 1385 1369 dependencies = [ 1386 1370 "async-trait", 1387 1371 "cfg-if", ··· 1393 1377 "idna", 1394 1378 "ipnet", 1395 1379 "once_cell", 1396 - "rand 0.9.2", 1397 - "ring", 1398 - "thiserror 2.0.18", 1380 + "rand 0.8.5", 1381 + "thiserror 1.0.69", 1399 1382 "tinyvec", 1400 1383 "tokio", 1401 1384 "tracing", ··· 1404 1387 1405 1388 [[package]] 1406 1389 name = "hickory-resolver" 1407 - version = "0.25.2" 1390 + version = "0.24.4" 1408 1391 source = "registry+https://github.com/rust-lang/crates.io-index" 1409 - checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" 1392 + checksum = "cbb117a1ca520e111743ab2f6688eddee69db4e0ea242545a604dce8a66fd22e" 1410 1393 dependencies = [ 1411 1394 "cfg-if", 1412 1395 "futures-util", 1413 1396 "hickory-proto", 1414 1397 "ipconfig", 1415 - "moka", 1398 + "lru-cache", 1416 1399 "once_cell", 1417 1400 "parking_lot", 1418 - "rand 0.9.2", 1401 + "rand 0.8.5", 1419 1402 "resolv-conf", 1420 1403 "smallvec", 1421 - "thiserror 2.0.18", 1404 + "thiserror 1.0.69", 1422 1405 "tokio", 1423 1406 "tracing", 1424 1407 ] ··· 1489 1472 dependencies = [ 1490 1473 "arc-swap", 1491 1474 "axum", 1475 + "bytes", 1492 1476 "chrono", 1493 1477 "cid", 1494 1478 "data-encoding", ··· 1521 1505 "tempfile", 1522 1506 "thiserror 2.0.18", 1523 1507 "tokio", 1524 - "tokio-tungstenite", 1508 + "tokio-tungstenite 0.28.0", 1525 1509 "tower-http", 1526 1510 "tracing", 1527 1511 "tracing-subscriber", ··· 1565 1549 "tokio", 1566 1550 "tokio-rustls", 1567 1551 "tower-service", 1552 + "webpki-roots", 1568 1553 ] 1569 1554 1570 1555 [[package]] ··· 1829 1814 1830 1815 [[package]] 1831 1816 name = "jacquard-api" 1832 - version = "0.9.5" 1833 - source = "git+https://tangled.org/ptr.pet/jacquard#681819111ac12a3c7ef92f1ec0b80c6f732d8b4a" 1817 + version = "0.11.1" 1818 + source = "registry+https://github.com/rust-lang/crates.io-index" 1819 + checksum = "f4bba022e9c632f737de481d7c894b5736dd1a503362876ca4da49b9255a7e61" 1834 1820 dependencies = [ 1835 - "bon", 1836 - "bytes", 1837 1821 "jacquard-common", 1838 1822 "jacquard-derive", 1839 1823 "jacquard-lexicon", 1840 1824 "miette", 1841 - "rustversion", 1842 1825 "serde", 1843 - "serde_bytes", 1844 - "serde_ipld_dagcbor", 1845 1826 "thiserror 2.0.18", 1846 - "unicode-segmentation", 1847 1827 ] 1848 1828 1849 1829 [[package]] 1850 1830 name = "jacquard-common" 1851 - version = "0.9.5" 1852 - source = "git+https://tangled.org/ptr.pet/jacquard#681819111ac12a3c7ef92f1ec0b80c6f732d8b4a" 1831 + version = "0.11.0" 1832 + source = "registry+https://github.com/rust-lang/crates.io-index" 1833 + checksum = "9631f08f1e65d19e204bc6774d00b4e0b69fb649d7d7ac59ccf97797bd9a196e" 1853 1834 dependencies = [ 1854 1835 "base64", 1855 1836 "bon", ··· 1859 1840 "ciborium-io", 1860 1841 "cid", 1861 1842 "ed25519-dalek", 1843 + "fluent-uri", 1844 + "futures", 1862 1845 "getrandom 0.2.17", 1863 - "getrandom 0.4.2", 1864 - "hashbrown 0.16.1", 1846 + "getrandom 0.3.4", 1847 + "hashbrown 0.15.5", 1865 1848 "http", 1866 1849 "ipld-core", 1867 1850 "k256", ··· 1869 1852 "miette", 1870 1853 "multibase", 1871 1854 "multihash", 1855 + "n0-future", 1872 1856 "ouroboros", 1873 1857 "oxilangtag", 1874 1858 "p256", 1859 + "phf", 1875 1860 "postcard", 1876 1861 "rand 0.9.2", 1877 1862 "regex", 1878 1863 "regex-automata", 1879 1864 "regex-lite", 1880 1865 "reqwest", 1866 + "rustversion", 1881 1867 "serde", 1882 1868 "serde_bytes", 1883 1869 "serde_html_form", ··· 1888 1874 "spin 0.10.0", 1889 1875 "thiserror 2.0.18", 1890 1876 "tokio", 1877 + "tokio-tungstenite-wasm", 1891 1878 "tokio-util", 1892 1879 "tracing", 1893 1880 "trait-variant", 1894 - "url", 1881 + "unicode-segmentation", 1895 1882 ] 1896 1883 1897 1884 [[package]] 1898 1885 name = "jacquard-derive" 1899 - version = "0.9.5" 1900 - source = "git+https://tangled.org/ptr.pet/jacquard#681819111ac12a3c7ef92f1ec0b80c6f732d8b4a" 1886 + version = "0.11.0" 1887 + source = "registry+https://github.com/rust-lang/crates.io-index" 1888 + checksum = "22904bd0f9a959591e14ee9e1dab91a9110209cb8b292930e584134f96a83ece" 1901 1889 dependencies = [ 1902 1890 "heck 0.5.0", 1903 1891 "jacquard-lexicon", ··· 1908 1896 1909 1897 [[package]] 1910 1898 name = "jacquard-identity" 1911 - version = "0.9.5" 1912 - source = "git+https://tangled.org/ptr.pet/jacquard#681819111ac12a3c7ef92f1ec0b80c6f732d8b4a" 1899 + version = "0.11.0" 1900 + source = "registry+https://github.com/rust-lang/crates.io-index" 1901 + checksum = "b84a9302ea9dd39c49d748a8eba21faf365570088571ff327ebb00117dbd65b8" 1913 1902 dependencies = [ 1914 1903 "bon", 1915 1904 "bytes", 1916 1905 "hickory-resolver", 1917 1906 "http", 1918 - "jacquard-api", 1919 1907 "jacquard-common", 1920 1908 "jacquard-lexicon", 1921 1909 "miette", 1922 1910 "n0-future", 1923 - "percent-encoding", 1924 1911 "reqwest", 1925 1912 "serde", 1926 1913 "serde_html_form", ··· 1929 1916 "tokio", 1930 1917 "tracing", 1931 1918 "trait-variant", 1932 - "url", 1933 - "urlencoding", 1934 1919 ] 1935 1920 1936 1921 [[package]] 1937 1922 name = "jacquard-lexicon" 1938 - version = "0.9.5" 1939 - source = "git+https://tangled.org/ptr.pet/jacquard#681819111ac12a3c7ef92f1ec0b80c6f732d8b4a" 1923 + version = "0.11.1" 1924 + source = "registry+https://github.com/rust-lang/crates.io-index" 1925 + checksum = "fd7863d4f56a49f07391b5f775e82be12e6381156642ee83574f481ca73e8b0e" 1940 1926 dependencies = [ 1941 1927 "cid", 1942 1928 "dashmap", ··· 1962 1948 1963 1949 [[package]] 1964 1950 name = "jacquard-repo" 1965 - version = "0.9.6" 1966 - source = "git+https://tangled.org/ptr.pet/jacquard#681819111ac12a3c7ef92f1ec0b80c6f732d8b4a" 1951 + version = "0.11.0" 1952 + source = "registry+https://github.com/rust-lang/crates.io-index" 1953 + checksum = "b0c924640eed28b608767e034f7db741a4f3b33c4631db8defc33c5a05f4834e" 1967 1954 dependencies = [ 1968 1955 "bytes", 1969 1956 "cid", 1970 1957 "ed25519-dalek", 1971 1958 "iroh-car", 1959 + "jacquard-api", 1972 1960 "jacquard-common", 1973 1961 "jacquard-derive", 1974 1962 "k256", ··· 1987 1975 ] 1988 1976 1989 1977 [[package]] 1990 - name = "jni" 1991 - version = "0.21.1" 1992 - source = "registry+https://github.com/rust-lang/crates.io-index" 1993 - checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" 1994 - dependencies = [ 1995 - "cesu8", 1996 - "cfg-if", 1997 - "combine", 1998 - "jni-sys", 1999 - "log", 2000 - "thiserror 1.0.69", 2001 - "walkdir", 2002 - "windows-sys 0.45.0", 2003 - ] 2004 - 2005 - [[package]] 2006 - name = "jni-sys" 2007 - version = "0.3.0" 2008 - source = "registry+https://github.com/rust-lang/crates.io-index" 2009 - checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 2010 - 2011 - [[package]] 2012 1978 name = "jobserver" 2013 1979 version = "0.1.34" 2014 1980 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2071 2037 ] 2072 2038 2073 2039 [[package]] 2040 + name = "linked-hash-map" 2041 + version = "0.5.6" 2042 + source = "registry+https://github.com/rust-lang/crates.io-index" 2043 + checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" 2044 + 2045 + [[package]] 2074 2046 name = "linux-raw-sys" 2075 2047 version = "0.12.1" 2076 2048 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2111 2083 ] 2112 2084 2113 2085 [[package]] 2086 + name = "lru-cache" 2087 + version = "0.1.2" 2088 + source = "registry+https://github.com/rust-lang/crates.io-index" 2089 + checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" 2090 + dependencies = [ 2091 + "linked-hash-map", 2092 + ] 2093 + 2094 + [[package]] 2114 2095 name = "lru-slab" 2115 2096 version = "0.1.2" 2116 2097 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2149 2130 2150 2131 [[package]] 2151 2132 name = "maitake-sync" 2152 - version = "0.2.2" 2133 + version = "0.1.2" 2153 2134 source = "registry+https://github.com/rust-lang/crates.io-index" 2154 - checksum = "748f86d9befd480b602c3bebc9ef30dbf2f3dfc8acc4a73d07b90f0117e6de3f" 2135 + checksum = "6816ab14147f80234c675b80ed6dc4f440d8a1cefc158e766067aedb84c0bcd5" 2155 2136 dependencies = [ 2156 2137 "cordyceps", 2157 2138 "loom", 2158 - "mutex-traits", 2159 2139 "mycelium-bitfield", 2160 2140 "pin-project", 2161 2141 "portable-atomic", 2162 - "tracing", 2163 2142 ] 2164 2143 2165 2144 [[package]] ··· 2261 2240 ] 2262 2241 2263 2242 [[package]] 2264 - name = "moka" 2265 - version = "0.12.14" 2266 - source = "registry+https://github.com/rust-lang/crates.io-index" 2267 - checksum = "85f8024e1c8e71c778968af91d43700ce1d11b219d127d79fb2934153b82b42b" 2268 - dependencies = [ 2269 - "crossbeam-channel", 2270 - "crossbeam-epoch", 2271 - "crossbeam-utils", 2272 - "equivalent", 2273 - "parking_lot", 2274 - "portable-atomic", 2275 - "smallvec", 2276 - "tagptr", 2277 - "uuid", 2278 - ] 2279 - 2280 - [[package]] 2281 2243 name = "multibase" 2282 2244 version = "0.9.2" 2283 2245 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2299 2261 "serde", 2300 2262 "unsigned-varint 0.8.0", 2301 2263 ] 2302 - 2303 - [[package]] 2304 - name = "mutex-traits" 2305 - version = "1.0.1" 2306 - source = "registry+https://github.com/rust-lang/crates.io-index" 2307 - checksum = "3929f2b5633d29cf7b6624992e5f3c1e9334f1193423e12d17be4faf678cde3f" 2308 2264 2309 2265 [[package]] 2310 2266 name = "mycelium-bitfield" ··· 2371 2327 version = "1.21.4" 2372 2328 source = "registry+https://github.com/rust-lang/crates.io-index" 2373 2329 checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" 2374 - dependencies = [ 2375 - "critical-section", 2376 - "portable-atomic", 2377 - ] 2378 2330 2379 2331 [[package]] 2380 2332 name = "openssl-probe" ··· 2478 2430 checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 2479 2431 2480 2432 [[package]] 2433 + name = "phf" 2434 + version = "0.11.3" 2435 + source = "registry+https://github.com/rust-lang/crates.io-index" 2436 + checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 2437 + dependencies = [ 2438 + "phf_macros", 2439 + "phf_shared", 2440 + ] 2441 + 2442 + [[package]] 2443 + name = "phf_generator" 2444 + version = "0.11.3" 2445 + source = "registry+https://github.com/rust-lang/crates.io-index" 2446 + checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" 2447 + dependencies = [ 2448 + "phf_shared", 2449 + "rand 0.8.5", 2450 + ] 2451 + 2452 + [[package]] 2453 + name = "phf_macros" 2454 + version = "0.11.3" 2455 + source = "registry+https://github.com/rust-lang/crates.io-index" 2456 + checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" 2457 + dependencies = [ 2458 + "phf_generator", 2459 + "phf_shared", 2460 + "proc-macro2", 2461 + "quote", 2462 + "syn", 2463 + ] 2464 + 2465 + [[package]] 2466 + name = "phf_shared" 2467 + version = "0.11.3" 2468 + source = "registry+https://github.com/rust-lang/crates.io-index" 2469 + checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 2470 + dependencies = [ 2471 + "siphasher", 2472 + ] 2473 + 2474 + [[package]] 2481 2475 name = "pin-project" 2482 2476 version = "1.1.11" 2483 2477 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2645 2639 source = "registry+https://github.com/rust-lang/crates.io-index" 2646 2640 checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" 2647 2641 dependencies = [ 2648 - "aws-lc-rs", 2649 2642 "bytes", 2650 2643 "getrandom 0.3.4", 2651 2644 "lru-slab", ··· 2698 2691 2699 2692 [[package]] 2700 2693 name = "rand" 2694 + version = "0.8.5" 2695 + source = "registry+https://github.com/rust-lang/crates.io-index" 2696 + checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2697 + dependencies = [ 2698 + "libc", 2699 + "rand_chacha 0.3.1", 2700 + "rand_core 0.6.4", 2701 + ] 2702 + 2703 + [[package]] 2704 + name = "rand" 2701 2705 version = "0.9.2" 2702 2706 source = "registry+https://github.com/rust-lang/crates.io-index" 2703 2707 checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" 2704 2708 dependencies = [ 2705 - "rand_chacha", 2709 + "rand_chacha 0.9.0", 2706 2710 "rand_core 0.9.5", 2707 2711 ] 2708 2712 ··· 2715 2719 "chacha20", 2716 2720 "getrandom 0.4.2", 2717 2721 "rand_core 0.10.0", 2722 + ] 2723 + 2724 + [[package]] 2725 + name = "rand_chacha" 2726 + version = "0.3.1" 2727 + source = "registry+https://github.com/rust-lang/crates.io-index" 2728 + checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2729 + dependencies = [ 2730 + "ppv-lite86", 2731 + "rand_core 0.6.4", 2718 2732 ] 2719 2733 2720 2734 [[package]] ··· 2761 2775 ] 2762 2776 2763 2777 [[package]] 2778 + name = "ref-cast" 2779 + version = "1.0.25" 2780 + source = "registry+https://github.com/rust-lang/crates.io-index" 2781 + checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" 2782 + dependencies = [ 2783 + "ref-cast-impl", 2784 + ] 2785 + 2786 + [[package]] 2787 + name = "ref-cast-impl" 2788 + version = "1.0.25" 2789 + source = "registry+https://github.com/rust-lang/crates.io-index" 2790 + checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" 2791 + dependencies = [ 2792 + "proc-macro2", 2793 + "quote", 2794 + "syn", 2795 + ] 2796 + 2797 + [[package]] 2764 2798 name = "regex" 2765 2799 version = "1.12.3" 2766 2800 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2797 2831 2798 2832 [[package]] 2799 2833 name = "reqwest" 2800 - version = "0.13.2" 2834 + version = "0.12.28" 2801 2835 source = "registry+https://github.com/rust-lang/crates.io-index" 2802 - checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" 2836 + checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" 2803 2837 dependencies = [ 2804 2838 "base64", 2805 2839 "bytes", ··· 2821 2855 "quinn", 2822 2856 "rustls", 2823 2857 "rustls-pki-types", 2824 - "rustls-platform-verifier", 2825 2858 "serde", 2826 2859 "serde_json", 2860 + "serde_urlencoded", 2827 2861 "sync_wrapper", 2828 2862 "tokio", 2829 2863 "tokio-rustls", ··· 2836 2870 "wasm-bindgen-futures", 2837 2871 "wasm-streams", 2838 2872 "web-sys", 2873 + "webpki-roots", 2839 2874 ] 2840 2875 2841 2876 [[package]] ··· 2928 2963 "aws-lc-rs", 2929 2964 "log", 2930 2965 "once_cell", 2966 + "ring", 2931 2967 "rustls-pki-types", 2932 2968 "rustls-webpki", 2933 2969 "subtle", ··· 2957 2993 ] 2958 2994 2959 2995 [[package]] 2960 - name = "rustls-platform-verifier" 2961 - version = "0.6.2" 2962 - source = "registry+https://github.com/rust-lang/crates.io-index" 2963 - checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" 2964 - dependencies = [ 2965 - "core-foundation 0.10.1", 2966 - "core-foundation-sys", 2967 - "jni", 2968 - "log", 2969 - "once_cell", 2970 - "rustls", 2971 - "rustls-native-certs", 2972 - "rustls-platform-verifier-android", 2973 - "rustls-webpki", 2974 - "security-framework", 2975 - "security-framework-sys", 2976 - "webpki-root-certs", 2977 - "windows-sys 0.61.2", 2978 - ] 2979 - 2980 - [[package]] 2981 - name = "rustls-platform-verifier-android" 2982 - version = "0.1.1" 2983 - source = "registry+https://github.com/rust-lang/crates.io-index" 2984 - checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" 2985 - 2986 - [[package]] 2987 2996 name = "rustls-webpki" 2988 2997 version = "0.103.9" 2989 2998 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3012 3021 version = "5.5.0" 3013 3022 source = "registry+https://github.com/rust-lang/crates.io-index" 3014 3023 checksum = "16c7f49c9d5caa3bf4b3106900484b447b9253fe99670ceb81cb6cb5027855e1" 3015 - 3016 - [[package]] 3017 - name = "same-file" 3018 - version = "1.0.6" 3019 - source = "registry+https://github.com/rust-lang/crates.io-index" 3020 - checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 3021 - dependencies = [ 3022 - "winapi-util", 3023 - ] 3024 3024 3025 3025 [[package]] 3026 3026 name = "scc" ··· 3327 3327 checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" 3328 3328 3329 3329 [[package]] 3330 + name = "siphasher" 3331 + version = "1.0.2" 3332 + source = "registry+https://github.com/rust-lang/crates.io-index" 3333 + checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" 3334 + 3335 + [[package]] 3330 3336 name = "slab" 3331 3337 version = "0.4.12" 3332 3338 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3491 3497 ] 3492 3498 3493 3499 [[package]] 3494 - name = "tagptr" 3495 - version = "0.2.0" 3496 - source = "registry+https://github.com/rust-lang/crates.io-index" 3497 - checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" 3498 - 3499 - [[package]] 3500 3500 name = "tempfile" 3501 3501 version = "3.27.0" 3502 3502 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3662 3662 3663 3663 [[package]] 3664 3664 name = "tokio-tungstenite" 3665 + version = "0.24.0" 3666 + source = "registry+https://github.com/rust-lang/crates.io-index" 3667 + checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" 3668 + dependencies = [ 3669 + "futures-util", 3670 + "log", 3671 + "rustls", 3672 + "rustls-native-certs", 3673 + "rustls-pki-types", 3674 + "tokio", 3675 + "tokio-rustls", 3676 + "tungstenite 0.24.0", 3677 + ] 3678 + 3679 + [[package]] 3680 + name = "tokio-tungstenite" 3665 3681 version = "0.28.0" 3666 3682 source = "registry+https://github.com/rust-lang/crates.io-index" 3667 3683 checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857" ··· 3673 3689 "rustls-pki-types", 3674 3690 "tokio", 3675 3691 "tokio-rustls", 3676 - "tungstenite", 3692 + "tungstenite 0.28.0", 3693 + ] 3694 + 3695 + [[package]] 3696 + name = "tokio-tungstenite-wasm" 3697 + version = "0.4.0" 3698 + source = "registry+https://github.com/rust-lang/crates.io-index" 3699 + checksum = "e21a5c399399c3db9f08d8297ac12b500e86bca82e930253fdc62eaf9c0de6ae" 3700 + dependencies = [ 3701 + "futures-channel", 3702 + "futures-util", 3703 + "http", 3704 + "httparse", 3705 + "js-sys", 3706 + "rustls", 3707 + "thiserror 1.0.69", 3708 + "tokio", 3709 + "tokio-tungstenite 0.24.0", 3710 + "wasm-bindgen", 3711 + "web-sys", 3677 3712 ] 3678 3713 3679 3714 [[package]] ··· 3823 3858 3824 3859 [[package]] 3825 3860 name = "tungstenite" 3861 + version = "0.24.0" 3862 + source = "registry+https://github.com/rust-lang/crates.io-index" 3863 + checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" 3864 + dependencies = [ 3865 + "byteorder", 3866 + "bytes", 3867 + "data-encoding", 3868 + "http", 3869 + "httparse", 3870 + "log", 3871 + "rand 0.8.5", 3872 + "rustls", 3873 + "rustls-pki-types", 3874 + "sha1", 3875 + "thiserror 1.0.69", 3876 + "utf-8", 3877 + ] 3878 + 3879 + [[package]] 3880 + name = "tungstenite" 3826 3881 version = "0.28.0" 3827 3882 source = "registry+https://github.com/rust-lang/crates.io-index" 3828 3883 checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" ··· 3920 3975 ] 3921 3976 3922 3977 [[package]] 3923 - name = "urlencoding" 3924 - version = "2.1.3" 3925 - source = "registry+https://github.com/rust-lang/crates.io-index" 3926 - checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" 3927 - 3928 - [[package]] 3929 3978 name = "utf-8" 3930 3979 version = "0.7.6" 3931 3980 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3938 3987 checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 3939 3988 3940 3989 [[package]] 3941 - name = "uuid" 3942 - version = "1.22.0" 3943 - source = "registry+https://github.com/rust-lang/crates.io-index" 3944 - checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" 3945 - dependencies = [ 3946 - "getrandom 0.4.2", 3947 - "js-sys", 3948 - "wasm-bindgen", 3949 - ] 3950 - 3951 - [[package]] 3952 3990 name = "valuable" 3953 3991 version = "0.1.1" 3954 3992 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3965 4003 version = "0.9.5" 3966 4004 source = "registry+https://github.com/rust-lang/crates.io-index" 3967 4005 checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 3968 - 3969 - [[package]] 3970 - name = "walkdir" 3971 - version = "2.5.0" 3972 - source = "registry+https://github.com/rust-lang/crates.io-index" 3973 - checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 3974 - dependencies = [ 3975 - "same-file", 3976 - "winapi-util", 3977 - ] 3978 4006 3979 4007 [[package]] 3980 4008 name = "want" ··· 4092 4120 4093 4121 [[package]] 4094 4122 name = "wasm-streams" 4095 - version = "0.5.0" 4123 + version = "0.4.2" 4096 4124 source = "registry+https://github.com/rust-lang/crates.io-index" 4097 - checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb" 4125 + checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" 4098 4126 dependencies = [ 4099 4127 "futures-util", 4100 4128 "js-sys", ··· 4136 4164 ] 4137 4165 4138 4166 [[package]] 4139 - name = "webpki-root-certs" 4167 + name = "webpki-roots" 4140 4168 version = "1.0.6" 4141 4169 source = "registry+https://github.com/rust-lang/crates.io-index" 4142 - checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca" 4170 + checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" 4143 4171 dependencies = [ 4144 4172 "rustls-pki-types", 4145 4173 ] ··· 4149 4177 version = "1.2.1" 4150 4178 source = "registry+https://github.com/rust-lang/crates.io-index" 4151 4179 checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" 4152 - 4153 - [[package]] 4154 - name = "winapi-util" 4155 - version = "0.1.11" 4156 - source = "registry+https://github.com/rust-lang/crates.io-index" 4157 - checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" 4158 - dependencies = [ 4159 - "windows-sys 0.61.2", 4160 - ] 4161 4180 4162 4181 [[package]] 4163 4182 name = "windows-core" ··· 4231 4250 4232 4251 [[package]] 4233 4252 name = "windows-sys" 4234 - version = "0.45.0" 4235 - source = "registry+https://github.com/rust-lang/crates.io-index" 4236 - checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 4237 - dependencies = [ 4238 - "windows-targets 0.42.2", 4239 - ] 4240 - 4241 - [[package]] 4242 - name = "windows-sys" 4243 4253 version = "0.48.0" 4244 4254 source = "registry+https://github.com/rust-lang/crates.io-index" 4245 4255 checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" ··· 4276 4286 4277 4287 [[package]] 4278 4288 name = "windows-targets" 4279 - version = "0.42.2" 4280 - source = "registry+https://github.com/rust-lang/crates.io-index" 4281 - checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 4282 - dependencies = [ 4283 - "windows_aarch64_gnullvm 0.42.2", 4284 - "windows_aarch64_msvc 0.42.2", 4285 - "windows_i686_gnu 0.42.2", 4286 - "windows_i686_msvc 0.42.2", 4287 - "windows_x86_64_gnu 0.42.2", 4288 - "windows_x86_64_gnullvm 0.42.2", 4289 - "windows_x86_64_msvc 0.42.2", 4290 - ] 4291 - 4292 - [[package]] 4293 - name = "windows-targets" 4294 4289 version = "0.48.5" 4295 4290 source = "registry+https://github.com/rust-lang/crates.io-index" 4296 4291 checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" ··· 4339 4334 4340 4335 [[package]] 4341 4336 name = "windows_aarch64_gnullvm" 4342 - version = "0.42.2" 4343 - source = "registry+https://github.com/rust-lang/crates.io-index" 4344 - checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 4345 - 4346 - [[package]] 4347 - name = "windows_aarch64_gnullvm" 4348 4337 version = "0.48.5" 4349 4338 source = "registry+https://github.com/rust-lang/crates.io-index" 4350 4339 checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" ··· 4363 4352 4364 4353 [[package]] 4365 4354 name = "windows_aarch64_msvc" 4366 - version = "0.42.2" 4367 - source = "registry+https://github.com/rust-lang/crates.io-index" 4368 - checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" 4369 - 4370 - [[package]] 4371 - name = "windows_aarch64_msvc" 4372 4355 version = "0.48.5" 4373 4356 source = "registry+https://github.com/rust-lang/crates.io-index" 4374 4357 checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" ··· 4384 4367 version = "0.53.1" 4385 4368 source = "registry+https://github.com/rust-lang/crates.io-index" 4386 4369 checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" 4387 - 4388 - [[package]] 4389 - name = "windows_i686_gnu" 4390 - version = "0.42.2" 4391 - source = "registry+https://github.com/rust-lang/crates.io-index" 4392 - checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" 4393 4370 4394 4371 [[package]] 4395 4372 name = "windows_i686_gnu" ··· 4423 4400 4424 4401 [[package]] 4425 4402 name = "windows_i686_msvc" 4426 - version = "0.42.2" 4427 - source = "registry+https://github.com/rust-lang/crates.io-index" 4428 - checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" 4429 - 4430 - [[package]] 4431 - name = "windows_i686_msvc" 4432 4403 version = "0.48.5" 4433 4404 source = "registry+https://github.com/rust-lang/crates.io-index" 4434 4405 checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" ··· 4447 4418 4448 4419 [[package]] 4449 4420 name = "windows_x86_64_gnu" 4450 - version = "0.42.2" 4451 - source = "registry+https://github.com/rust-lang/crates.io-index" 4452 - checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" 4453 - 4454 - [[package]] 4455 - name = "windows_x86_64_gnu" 4456 4421 version = "0.48.5" 4457 4422 source = "registry+https://github.com/rust-lang/crates.io-index" 4458 4423 checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" ··· 4471 4436 4472 4437 [[package]] 4473 4438 name = "windows_x86_64_gnullvm" 4474 - version = "0.42.2" 4475 - source = "registry+https://github.com/rust-lang/crates.io-index" 4476 - checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" 4477 - 4478 - [[package]] 4479 - name = "windows_x86_64_gnullvm" 4480 4439 version = "0.48.5" 4481 4440 source = "registry+https://github.com/rust-lang/crates.io-index" 4482 4441 checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" ··· 4492 4451 version = "0.53.1" 4493 4452 source = "registry+https://github.com/rust-lang/crates.io-index" 4494 4453 checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" 4495 - 4496 - [[package]] 4497 - name = "windows_x86_64_msvc" 4498 - version = "0.42.2" 4499 - source = "registry+https://github.com/rust-lang/crates.io-index" 4500 - checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" 4501 4454 4502 4455 [[package]] 4503 4456 name = "windows_x86_64_msvc"
+8 -7
Cargo.toml
··· 25 25 serde_ipld_dagcbor = "0.6" 26 26 serde_urlencoded = "0.7" 27 27 28 - url = "2.5" 28 + bytes = { version = "1.11.1", features = ["serde"] } 29 + url = { version = "2.5", features = ["serde"] } 29 30 smol_str = "0.3" 30 31 futures = "0.3" 31 - reqwest = { version = "0.13.2", features = ["json", "rustls", "stream", "gzip", "brotli", "zstd", "http2"], default-features = false } 32 + reqwest = { version = "0.12.8", features = ["json", "rustls-tls", "stream", "gzip", "brotli", "zstd", "http2"], default-features = false } 32 33 axum = { version = "0.8.8", features = ["ws", "macros"] } 33 34 tower-http = { version = "0.6.6", features = ["cors", "trace"] } 34 35 35 - jacquard-common = { git = "https://tangled.org/ptr.pet/jacquard", default-features = false, features = ["tracing", "std", "crypto"] } 36 - jacquard-api = { git = "https://tangled.org/ptr.pet/jacquard" } 37 - jacquard-identity = { git = "https://tangled.org/ptr.pet/jacquard", features = ["dns", "tracing"] } 38 - jacquard-repo = { git = "https://tangled.org/ptr.pet/jacquard" } 39 - jacquard-derive = { git = "https://tangled.org/ptr.pet/jacquard" } 36 + jacquard-common = { version = "0.11", default-features = false, features = ["tracing", "std", "crypto"] } 37 + jacquard-api = { version = "0.11" } 38 + jacquard-identity = { version = "0.11", features = ["dns", "tracing"] } 39 + jacquard-repo = { version = "0.11" } 40 + jacquard-derive = { version = "0.11" } 40 41 chrono = { version = "0.4.43", features = ["serde"] } 41 42 humantime = "2.3.0" 42 43
+2 -2
src/backfill/mod.rs
··· 32 32 pub mod manager; 33 33 34 34 use crate::ingest::{BufferTx, IngestMessage}; 35 - use crate::util::WatchEnabledExt; 35 + use crate::util::{WatchEnabledExt, url_to_fluent_uri}; 36 36 37 37 pub struct BackfillWorker { 38 38 state: Arc<AppState>, ··· 445 445 // 2. fetch repo (car) 446 446 let start = Instant::now(); 447 447 let req = GetRepo::new().did(did.clone()).build(); 448 - let resp = http.xrpc(pds).send(&req).await?; 448 + let resp = http.xrpc(url_to_fluent_uri(&pds)).send(&req).await?; 449 449 450 450 let car_bytes = match resp.into_output() { 451 451 Ok(o) => o,
+10 -1
src/db/types.rs
··· 1 1 use data_encoding::BASE32_NOPAD; 2 2 use fjall::UserKey; 3 - use jacquard_common::types::crypto::{PublicKey, code_of, encode_uvarint}; 3 + use jacquard_common::types::crypto::{PublicKey, encode_uvarint}; 4 4 use jacquard_common::types::string::Did; 5 5 use jacquard_common::types::tid::Tid; 6 6 use jacquard_common::{CowStr, IntoStatic}; ··· 392 392 393 393 impl From<PublicKey<'_>> for DidKey<'static> { 394 394 fn from(value: PublicKey<'_>) -> Self { 395 + use jacquard_common::types::crypto::KeyCodec; 396 + fn code_of(codec: KeyCodec) -> u64 { 397 + match codec { 398 + KeyCodec::Ed25519 => 0xED, 399 + KeyCodec::Secp256k1 => 0xE7, 400 + KeyCodec::P256 => 0x1200, 401 + KeyCodec::Unknown(c) => c, 402 + } 403 + } 395 404 let mut bytes = Vec::with_capacity(8 + value.bytes.len()); 396 405 bytes.append(&mut encode_uvarint(code_of(value.codec))); 397 406 bytes.extend_from_slice(&value.bytes);
+1 -1
src/ingest/stream.rs
··· 1 1 use std::convert::Infallible; 2 2 use std::option::Option; 3 3 4 + use bytes::Bytes; 4 5 use futures::StreamExt; 5 - use jacquard_common::bytes::Bytes; 6 6 use jacquard_common::error::DecodeError; 7 7 use jacquard_common::{ 8 8 CowStr,
+11 -2
src/resolver.rs
··· 1 1 use std::ops::Not; 2 + use std::str::FromStr; 2 3 use std::sync::Arc; 3 4 use std::sync::atomic::{AtomicUsize, Ordering}; 4 5 use std::time::Duration; ··· 18 19 use smol_str::SmolStr; 19 20 use thiserror::Error; 20 21 use url::Url; 22 + 23 + use crate::util::url_to_fluent_uri; 21 24 22 25 #[derive(Debug, Diagnostic, Error)] 23 26 pub enum ResolverError { ··· 72 75 73 76 for url in plc_urls { 74 77 let mut opts = ResolverOptions::default(); 75 - opts.plc_source = PlcSource::PlcDirectory { base: url }; 78 + opts.plc_source = PlcSource::PlcDirectory { 79 + base: url_to_fluent_uri(&url), 80 + }; 76 81 opts.request_timeout = Some(Duration::from_secs(3)); 77 82 78 83 jacquards.push(JacquardResolver::new(http.clone(), opts).with_system_dns()); ··· 171 176 .then(|| handles.remove(0).into_static()); 172 177 let key = doc.atproto_public_key().ok().flatten(); 173 178 174 - let mini = MiniDoc { pds, handle, key }; 179 + let mini = MiniDoc { 180 + pds: Url::from_str(pds.as_str()).expect("that url is valid"), 181 + handle, 182 + key, 183 + }; 175 184 let _ = self.inner.cache.put_async(did_static, mini.clone()).await; 176 185 Ok(mini) 177 186 }
+2 -2
src/types.rs
··· 241 241 pub status: Option<CowStr<'i>>, 242 242 } 243 243 244 - use jacquard_common::bytes::Bytes; 244 + use bytes::Bytes; 245 245 246 246 #[derive(Serialize, Deserialize, Clone)] 247 247 pub(crate) enum StoredData { ··· 291 291 } 292 292 293 293 mod serde_bytes_squared { 294 - use jacquard_common::bytes::Bytes; 294 + use bytes::Bytes; 295 295 use serde::{Deserialize, Deserializer, Serializer}; 296 296 297 297 pub fn serialize<S: Serializer>(v: impl AsRef<[u8]>, s: S) -> Result<S::Ok, S::Error> {
+8
src/util.rs
··· 1 1 use std::time::Duration; 2 2 3 + use jacquard_common::deps::fluent_uri; 3 4 use rand::RngExt; 4 5 use reqwest::StatusCode; 5 6 use serde::{Deserialize, Deserializer, Serializer}; 6 7 use tokio::sync::watch; 7 8 use tracing::info; 9 + use url::Url; 8 10 9 11 use crate::types::RepoStatus; 10 12 ··· 154 156 pub fn repo_status_serialize_str<S: Serializer>(v: &RepoStatus, s: S) -> Result<S::Ok, S::Error> { 155 157 s.serialize_str(&v.to_string()) 156 158 } 159 + 160 + pub fn url_to_fluent_uri(url: &Url) -> fluent_uri::Uri<String> { 161 + fluent_uri::Uri::parse(url.as_str()) 162 + .expect("that url is validated") 163 + .to_owned() 164 + }