A PLC Mirror written in Rust

plc import

+1044 -17
+873 -17
Cargo.lock
··· 95 95 "miniz_oxide", 96 96 "object", 97 97 "rustc-demangle", 98 - "windows-targets", 98 + "windows-targets 0.52.6", 99 99 ] 100 + 101 + [[package]] 102 + name = "base-x" 103 + version = "0.2.11" 104 + source = "registry+https://github.com/rust-lang/crates.io-index" 105 + checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" 100 106 101 107 [[package]] 102 108 name = "base64" ··· 163 169 dependencies = [ 164 170 "android-tzdata", 165 171 "iana-time-zone", 172 + "js-sys", 166 173 "num-traits", 167 174 "serde", 175 + "wasm-bindgen", 168 176 "windows-link", 169 177 ] 170 178 171 179 [[package]] 180 + name = "cid" 181 + version = "0.11.1" 182 + source = "registry+https://github.com/rust-lang/crates.io-index" 183 + checksum = "3147d8272e8fa0ccd29ce51194dd98f79ddfb8191ba9e3409884e751798acf3a" 184 + dependencies = [ 185 + "core2", 186 + "multibase", 187 + "multihash", 188 + "serde", 189 + "serde_bytes", 190 + "unsigned-varint", 191 + ] 192 + 193 + [[package]] 194 + name = "core-foundation" 195 + version = "0.9.4" 196 + source = "registry+https://github.com/rust-lang/crates.io-index" 197 + checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 198 + dependencies = [ 199 + "core-foundation-sys", 200 + "libc", 201 + ] 202 + 203 + [[package]] 172 204 name = "core-foundation-sys" 173 205 version = "0.8.7" 174 206 source = "registry+https://github.com/rust-lang/crates.io-index" 175 207 checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 208 + 209 + [[package]] 210 + name = "core2" 211 + version = "0.4.0" 212 + source = "registry+https://github.com/rust-lang/crates.io-index" 213 + checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" 214 + dependencies = [ 215 + "memchr", 216 + ] 176 217 177 218 [[package]] 178 219 name = "cpufeatures" ··· 209 250 ] 210 251 211 252 [[package]] 253 + name = "data-encoding" 254 + version = "2.9.0" 255 + source = "registry+https://github.com/rust-lang/crates.io-index" 256 + checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" 257 + 258 + [[package]] 259 + name = "data-encoding-macro" 260 + version = "0.1.18" 261 + source = "registry+https://github.com/rust-lang/crates.io-index" 262 + checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d" 263 + dependencies = [ 264 + "data-encoding", 265 + "data-encoding-macro-internal", 266 + ] 267 + 268 + [[package]] 269 + name = "data-encoding-macro-internal" 270 + version = "0.1.16" 271 + source = "registry+https://github.com/rust-lang/crates.io-index" 272 + checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" 273 + dependencies = [ 274 + "data-encoding", 275 + "syn", 276 + ] 277 + 278 + [[package]] 212 279 name = "debug-ignore" 213 280 version = "1.0.5" 214 281 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 255 322 ] 256 323 257 324 [[package]] 325 + name = "displaydoc" 326 + version = "0.2.5" 327 + source = "registry+https://github.com/rust-lang/crates.io-index" 328 + checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 329 + dependencies = [ 330 + "proc-macro2", 331 + "quote", 332 + "syn", 333 + ] 334 + 335 + [[package]] 258 336 name = "dropshot" 259 337 version = "0.16.0" 260 338 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 280 358 "openapiv3", 281 359 "paste", 282 360 "percent-encoding", 283 - "rustls", 361 + "rustls 0.22.4", 284 362 "rustls-pemfile", 285 363 "schemars", 286 364 "scopeguard", ··· 297 375 "slog-term", 298 376 "thiserror 2.0.12", 299 377 "tokio", 300 - "tokio-rustls", 378 + "tokio-rustls 0.25.0", 301 379 "toml", 302 380 "uuid", 303 381 "version_check", ··· 341 419 checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 342 420 343 421 [[package]] 422 + name = "errno" 423 + version = "0.3.11" 424 + source = "registry+https://github.com/rust-lang/crates.io-index" 425 + checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" 426 + dependencies = [ 427 + "libc", 428 + "windows-sys 0.59.0", 429 + ] 430 + 431 + [[package]] 344 432 name = "eyre" 345 433 version = "0.6.12" 346 434 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 351 439 ] 352 440 353 441 [[package]] 442 + name = "fastrand" 443 + version = "2.3.0" 444 + source = "registry+https://github.com/rust-lang/crates.io-index" 445 + checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 446 + 447 + [[package]] 354 448 name = "fnv" 355 449 version = "1.0.7" 356 450 source = "registry+https://github.com/rust-lang/crates.io-index" 357 451 checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 358 452 359 453 [[package]] 454 + name = "foreign-types" 455 + version = "0.3.2" 456 + source = "registry+https://github.com/rust-lang/crates.io-index" 457 + checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 458 + dependencies = [ 459 + "foreign-types-shared", 460 + ] 461 + 462 + [[package]] 463 + name = "foreign-types-shared" 464 + version = "0.1.1" 465 + source = "registry+https://github.com/rust-lang/crates.io-index" 466 + checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 467 + 468 + [[package]] 360 469 name = "form_urlencoded" 361 470 version = "1.2.1" 362 471 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 620 729 ] 621 730 622 731 [[package]] 732 + name = "hyper-rustls" 733 + version = "0.27.5" 734 + source = "registry+https://github.com/rust-lang/crates.io-index" 735 + checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" 736 + dependencies = [ 737 + "futures-util", 738 + "http", 739 + "hyper", 740 + "hyper-util", 741 + "rustls 0.23.26", 742 + "rustls-pki-types", 743 + "tokio", 744 + "tokio-rustls 0.26.2", 745 + "tower-service", 746 + ] 747 + 748 + [[package]] 749 + name = "hyper-tls" 750 + version = "0.6.0" 751 + source = "registry+https://github.com/rust-lang/crates.io-index" 752 + checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" 753 + dependencies = [ 754 + "bytes", 755 + "http-body-util", 756 + "hyper", 757 + "hyper-util", 758 + "native-tls", 759 + "tokio", 760 + "tokio-native-tls", 761 + "tower-service", 762 + ] 763 + 764 + [[package]] 623 765 name = "hyper-util" 624 766 version = "0.1.11" 625 767 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 664 806 ] 665 807 666 808 [[package]] 809 + name = "icu_collections" 810 + version = "1.5.0" 811 + source = "registry+https://github.com/rust-lang/crates.io-index" 812 + checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 813 + dependencies = [ 814 + "displaydoc", 815 + "yoke", 816 + "zerofrom", 817 + "zerovec", 818 + ] 819 + 820 + [[package]] 821 + name = "icu_locid" 822 + version = "1.5.0" 823 + source = "registry+https://github.com/rust-lang/crates.io-index" 824 + checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 825 + dependencies = [ 826 + "displaydoc", 827 + "litemap", 828 + "tinystr", 829 + "writeable", 830 + "zerovec", 831 + ] 832 + 833 + [[package]] 834 + name = "icu_locid_transform" 835 + version = "1.5.0" 836 + source = "registry+https://github.com/rust-lang/crates.io-index" 837 + checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 838 + dependencies = [ 839 + "displaydoc", 840 + "icu_locid", 841 + "icu_locid_transform_data", 842 + "icu_provider", 843 + "tinystr", 844 + "zerovec", 845 + ] 846 + 847 + [[package]] 848 + name = "icu_locid_transform_data" 849 + version = "1.5.1" 850 + source = "registry+https://github.com/rust-lang/crates.io-index" 851 + checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" 852 + 853 + [[package]] 854 + name = "icu_normalizer" 855 + version = "1.5.0" 856 + source = "registry+https://github.com/rust-lang/crates.io-index" 857 + checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 858 + dependencies = [ 859 + "displaydoc", 860 + "icu_collections", 861 + "icu_normalizer_data", 862 + "icu_properties", 863 + "icu_provider", 864 + "smallvec", 865 + "utf16_iter", 866 + "utf8_iter", 867 + "write16", 868 + "zerovec", 869 + ] 870 + 871 + [[package]] 872 + name = "icu_normalizer_data" 873 + version = "1.5.1" 874 + source = "registry+https://github.com/rust-lang/crates.io-index" 875 + checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" 876 + 877 + [[package]] 878 + name = "icu_properties" 879 + version = "1.5.1" 880 + source = "registry+https://github.com/rust-lang/crates.io-index" 881 + checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 882 + dependencies = [ 883 + "displaydoc", 884 + "icu_collections", 885 + "icu_locid_transform", 886 + "icu_properties_data", 887 + "icu_provider", 888 + "tinystr", 889 + "zerovec", 890 + ] 891 + 892 + [[package]] 893 + name = "icu_properties_data" 894 + version = "1.5.1" 895 + source = "registry+https://github.com/rust-lang/crates.io-index" 896 + checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" 897 + 898 + [[package]] 899 + name = "icu_provider" 900 + version = "1.5.0" 901 + source = "registry+https://github.com/rust-lang/crates.io-index" 902 + checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 903 + dependencies = [ 904 + "displaydoc", 905 + "icu_locid", 906 + "icu_provider_macros", 907 + "stable_deref_trait", 908 + "tinystr", 909 + "writeable", 910 + "yoke", 911 + "zerofrom", 912 + "zerovec", 913 + ] 914 + 915 + [[package]] 916 + name = "icu_provider_macros" 917 + version = "1.5.0" 918 + source = "registry+https://github.com/rust-lang/crates.io-index" 919 + checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 920 + dependencies = [ 921 + "proc-macro2", 922 + "quote", 923 + "syn", 924 + ] 925 + 926 + [[package]] 927 + name = "idna" 928 + version = "1.0.3" 929 + source = "registry+https://github.com/rust-lang/crates.io-index" 930 + checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 931 + dependencies = [ 932 + "idna_adapter", 933 + "smallvec", 934 + "utf8_iter", 935 + ] 936 + 937 + [[package]] 938 + name = "idna_adapter" 939 + version = "1.2.0" 940 + source = "registry+https://github.com/rust-lang/crates.io-index" 941 + checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 942 + dependencies = [ 943 + "icu_normalizer", 944 + "icu_properties", 945 + ] 946 + 947 + [[package]] 667 948 name = "indenter" 668 949 version = "0.3.3" 669 950 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 679 960 "hashbrown", 680 961 "serde", 681 962 ] 963 + 964 + [[package]] 965 + name = "ipld-core" 966 + version = "0.4.2" 967 + source = "registry+https://github.com/rust-lang/crates.io-index" 968 + checksum = "104718b1cc124d92a6d01ca9c9258a7df311405debb3408c445a36452f9bf8db" 969 + dependencies = [ 970 + "cid", 971 + "serde", 972 + "serde_bytes", 973 + ] 974 + 975 + [[package]] 976 + name = "ipnet" 977 + version = "2.11.0" 978 + source = "registry+https://github.com/rust-lang/crates.io-index" 979 + checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" 682 980 683 981 [[package]] 684 982 name = "is-terminal" ··· 730 1028 ] 731 1029 732 1030 [[package]] 1031 + name = "linux-raw-sys" 1032 + version = "0.9.4" 1033 + source = "registry+https://github.com/rust-lang/crates.io-index" 1034 + checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 1035 + 1036 + [[package]] 1037 + name = "litemap" 1038 + version = "0.7.5" 1039 + source = "registry+https://github.com/rust-lang/crates.io-index" 1040 + checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" 1041 + 1042 + [[package]] 733 1043 name = "lock_api" 734 1044 version = "0.4.12" 735 1045 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 801 1111 ] 802 1112 803 1113 [[package]] 1114 + name = "multibase" 1115 + version = "0.9.1" 1116 + source = "registry+https://github.com/rust-lang/crates.io-index" 1117 + checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" 1118 + dependencies = [ 1119 + "base-x", 1120 + "data-encoding", 1121 + "data-encoding-macro", 1122 + ] 1123 + 1124 + [[package]] 1125 + name = "multihash" 1126 + version = "0.19.3" 1127 + source = "registry+https://github.com/rust-lang/crates.io-index" 1128 + checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" 1129 + dependencies = [ 1130 + "core2", 1131 + "serde", 1132 + "unsigned-varint", 1133 + ] 1134 + 1135 + [[package]] 1136 + name = "native-tls" 1137 + version = "0.2.14" 1138 + source = "registry+https://github.com/rust-lang/crates.io-index" 1139 + checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" 1140 + dependencies = [ 1141 + "libc", 1142 + "log", 1143 + "openssl", 1144 + "openssl-probe", 1145 + "openssl-sys", 1146 + "schannel", 1147 + "security-framework", 1148 + "security-framework-sys", 1149 + "tempfile", 1150 + ] 1151 + 1152 + [[package]] 804 1153 name = "num-conv" 805 1154 version = "0.1.0" 806 1155 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 851 1200 ] 852 1201 853 1202 [[package]] 1203 + name = "openssl" 1204 + version = "0.10.72" 1205 + source = "registry+https://github.com/rust-lang/crates.io-index" 1206 + checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" 1207 + dependencies = [ 1208 + "bitflags", 1209 + "cfg-if", 1210 + "foreign-types", 1211 + "libc", 1212 + "once_cell", 1213 + "openssl-macros", 1214 + "openssl-sys", 1215 + ] 1216 + 1217 + [[package]] 1218 + name = "openssl-macros" 1219 + version = "0.1.1" 1220 + source = "registry+https://github.com/rust-lang/crates.io-index" 1221 + checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 1222 + dependencies = [ 1223 + "proc-macro2", 1224 + "quote", 1225 + "syn", 1226 + ] 1227 + 1228 + [[package]] 1229 + name = "openssl-probe" 1230 + version = "0.1.6" 1231 + source = "registry+https://github.com/rust-lang/crates.io-index" 1232 + checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" 1233 + 1234 + [[package]] 1235 + name = "openssl-sys" 1236 + version = "0.9.107" 1237 + source = "registry+https://github.com/rust-lang/crates.io-index" 1238 + checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" 1239 + dependencies = [ 1240 + "cc", 1241 + "libc", 1242 + "pkg-config", 1243 + "vcpkg", 1244 + ] 1245 + 1246 + [[package]] 854 1247 name = "parking_lot" 855 1248 version = "0.12.3" 856 1249 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 870 1263 "libc", 871 1264 "redox_syscall", 872 1265 "smallvec", 873 - "windows-targets", 1266 + "windows-targets 0.52.6", 874 1267 ] 875 1268 876 1269 [[package]] ··· 898 1291 checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 899 1292 900 1293 [[package]] 1294 + name = "pkg-config" 1295 + version = "0.3.32" 1296 + source = "registry+https://github.com/rust-lang/crates.io-index" 1297 + checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 1298 + 1299 + [[package]] 901 1300 name = "plc-mirror" 902 1301 version = "0.1.0" 903 1302 dependencies = [ 1303 + "chrono", 904 1304 "dropshot", 905 1305 "eyre", 1306 + "ipld-core", 1307 + "reqwest", 906 1308 "serde", 907 1309 "serde_json", 908 1310 "slog", ··· 962 1364 ] 963 1365 964 1366 [[package]] 1367 + name = "reqwest" 1368 + version = "0.12.15" 1369 + source = "registry+https://github.com/rust-lang/crates.io-index" 1370 + checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" 1371 + dependencies = [ 1372 + "base64", 1373 + "bytes", 1374 + "encoding_rs", 1375 + "futures-core", 1376 + "futures-util", 1377 + "h2", 1378 + "http", 1379 + "http-body", 1380 + "http-body-util", 1381 + "hyper", 1382 + "hyper-rustls", 1383 + "hyper-tls", 1384 + "hyper-util", 1385 + "ipnet", 1386 + "js-sys", 1387 + "log", 1388 + "mime", 1389 + "native-tls", 1390 + "once_cell", 1391 + "percent-encoding", 1392 + "pin-project-lite", 1393 + "rustls-pemfile", 1394 + "serde", 1395 + "serde_json", 1396 + "serde_urlencoded", 1397 + "sync_wrapper", 1398 + "system-configuration", 1399 + "tokio", 1400 + "tokio-native-tls", 1401 + "tower", 1402 + "tower-service", 1403 + "url", 1404 + "wasm-bindgen", 1405 + "wasm-bindgen-futures", 1406 + "web-sys", 1407 + "windows-registry", 1408 + ] 1409 + 1410 + [[package]] 965 1411 name = "ring" 966 1412 version = "0.17.14" 967 1413 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 982 1428 checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 983 1429 984 1430 [[package]] 1431 + name = "rustix" 1432 + version = "1.0.5" 1433 + source = "registry+https://github.com/rust-lang/crates.io-index" 1434 + checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" 1435 + dependencies = [ 1436 + "bitflags", 1437 + "errno", 1438 + "libc", 1439 + "linux-raw-sys", 1440 + "windows-sys 0.59.0", 1441 + ] 1442 + 1443 + [[package]] 985 1444 name = "rustls" 986 1445 version = "0.22.4" 987 1446 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 990 1449 "log", 991 1450 "ring", 992 1451 "rustls-pki-types", 993 - "rustls-webpki", 1452 + "rustls-webpki 0.102.8", 1453 + "subtle", 1454 + "zeroize", 1455 + ] 1456 + 1457 + [[package]] 1458 + name = "rustls" 1459 + version = "0.23.26" 1460 + source = "registry+https://github.com/rust-lang/crates.io-index" 1461 + checksum = "df51b5869f3a441595eac5e8ff14d486ff285f7b8c0df8770e49c3b56351f0f0" 1462 + dependencies = [ 1463 + "once_cell", 1464 + "rustls-pki-types", 1465 + "rustls-webpki 0.103.1", 994 1466 "subtle", 995 1467 "zeroize", 996 1468 ] ··· 1022 1494 ] 1023 1495 1024 1496 [[package]] 1497 + name = "rustls-webpki" 1498 + version = "0.103.1" 1499 + source = "registry+https://github.com/rust-lang/crates.io-index" 1500 + checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" 1501 + dependencies = [ 1502 + "ring", 1503 + "rustls-pki-types", 1504 + "untrusted", 1505 + ] 1506 + 1507 + [[package]] 1025 1508 name = "rustversion" 1026 1509 version = "1.0.20" 1027 1510 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1034 1517 checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 1035 1518 1036 1519 [[package]] 1520 + name = "schannel" 1521 + version = "0.1.27" 1522 + source = "registry+https://github.com/rust-lang/crates.io-index" 1523 + checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" 1524 + dependencies = [ 1525 + "windows-sys 0.59.0", 1526 + ] 1527 + 1528 + [[package]] 1037 1529 name = "schemars" 1038 1530 version = "0.8.22" 1039 1531 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1065 1557 checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1066 1558 1067 1559 [[package]] 1560 + name = "security-framework" 1561 + version = "2.11.1" 1562 + source = "registry+https://github.com/rust-lang/crates.io-index" 1563 + checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 1564 + dependencies = [ 1565 + "bitflags", 1566 + "core-foundation", 1567 + "core-foundation-sys", 1568 + "libc", 1569 + "security-framework-sys", 1570 + ] 1571 + 1572 + [[package]] 1573 + name = "security-framework-sys" 1574 + version = "2.14.0" 1575 + source = "registry+https://github.com/rust-lang/crates.io-index" 1576 + checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" 1577 + dependencies = [ 1578 + "core-foundation-sys", 1579 + "libc", 1580 + ] 1581 + 1582 + [[package]] 1068 1583 name = "semver" 1069 1584 version = "1.0.26" 1070 1585 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1077 1592 checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 1078 1593 dependencies = [ 1079 1594 "serde_derive", 1595 + ] 1596 + 1597 + [[package]] 1598 + name = "serde_bytes" 1599 + version = "0.11.17" 1600 + source = "registry+https://github.com/rust-lang/crates.io-index" 1601 + checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" 1602 + dependencies = [ 1603 + "serde", 1080 1604 ] 1081 1605 1082 1606 [[package]] ··· 1291 1815 checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 1292 1816 1293 1817 [[package]] 1818 + name = "stable_deref_trait" 1819 + version = "1.2.0" 1820 + source = "registry+https://github.com/rust-lang/crates.io-index" 1821 + checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1822 + 1823 + [[package]] 1294 1824 name = "subtle" 1295 1825 version = "2.6.1" 1296 1826 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1308 1838 ] 1309 1839 1310 1840 [[package]] 1841 + name = "sync_wrapper" 1842 + version = "1.0.2" 1843 + source = "registry+https://github.com/rust-lang/crates.io-index" 1844 + checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 1845 + dependencies = [ 1846 + "futures-core", 1847 + ] 1848 + 1849 + [[package]] 1850 + name = "synstructure" 1851 + version = "0.13.2" 1852 + source = "registry+https://github.com/rust-lang/crates.io-index" 1853 + checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 1854 + dependencies = [ 1855 + "proc-macro2", 1856 + "quote", 1857 + "syn", 1858 + ] 1859 + 1860 + [[package]] 1861 + name = "system-configuration" 1862 + version = "0.6.1" 1863 + source = "registry+https://github.com/rust-lang/crates.io-index" 1864 + checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 1865 + dependencies = [ 1866 + "bitflags", 1867 + "core-foundation", 1868 + "system-configuration-sys", 1869 + ] 1870 + 1871 + [[package]] 1872 + name = "system-configuration-sys" 1873 + version = "0.6.0" 1874 + source = "registry+https://github.com/rust-lang/crates.io-index" 1875 + checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" 1876 + dependencies = [ 1877 + "core-foundation-sys", 1878 + "libc", 1879 + ] 1880 + 1881 + [[package]] 1311 1882 name = "take_mut" 1312 1883 version = "0.2.2" 1313 1884 source = "registry+https://github.com/rust-lang/crates.io-index" 1314 1885 checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" 1886 + 1887 + [[package]] 1888 + name = "tempfile" 1889 + version = "3.19.1" 1890 + source = "registry+https://github.com/rust-lang/crates.io-index" 1891 + checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" 1892 + dependencies = [ 1893 + "fastrand", 1894 + "getrandom 0.3.2", 1895 + "once_cell", 1896 + "rustix", 1897 + "windows-sys 0.59.0", 1898 + ] 1315 1899 1316 1900 [[package]] 1317 1901 name = "term" ··· 1408 1992 ] 1409 1993 1410 1994 [[package]] 1995 + name = "tinystr" 1996 + version = "0.7.6" 1997 + source = "registry+https://github.com/rust-lang/crates.io-index" 1998 + checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 1999 + dependencies = [ 2000 + "displaydoc", 2001 + "zerovec", 2002 + ] 2003 + 2004 + [[package]] 1411 2005 name = "tokio" 1412 2006 version = "1.44.2" 1413 2007 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1437 2031 ] 1438 2032 1439 2033 [[package]] 2034 + name = "tokio-native-tls" 2035 + version = "0.3.1" 2036 + source = "registry+https://github.com/rust-lang/crates.io-index" 2037 + checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 2038 + dependencies = [ 2039 + "native-tls", 2040 + "tokio", 2041 + ] 2042 + 2043 + [[package]] 1440 2044 name = "tokio-rustls" 1441 2045 version = "0.25.0" 1442 2046 source = "registry+https://github.com/rust-lang/crates.io-index" 1443 2047 checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" 1444 2048 dependencies = [ 1445 - "rustls", 2049 + "rustls 0.22.4", 1446 2050 "rustls-pki-types", 2051 + "tokio", 2052 + ] 2053 + 2054 + [[package]] 2055 + name = "tokio-rustls" 2056 + version = "0.26.2" 2057 + source = "registry+https://github.com/rust-lang/crates.io-index" 2058 + checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" 2059 + dependencies = [ 2060 + "rustls 0.23.26", 1447 2061 "tokio", 1448 2062 ] 1449 2063 ··· 1502 2116 checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076" 1503 2117 1504 2118 [[package]] 2119 + name = "tower" 2120 + version = "0.5.2" 2121 + source = "registry+https://github.com/rust-lang/crates.io-index" 2122 + checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 2123 + dependencies = [ 2124 + "futures-core", 2125 + "futures-util", 2126 + "pin-project-lite", 2127 + "sync_wrapper", 2128 + "tokio", 2129 + "tower-layer", 2130 + "tower-service", 2131 + ] 2132 + 2133 + [[package]] 2134 + name = "tower-layer" 2135 + version = "0.3.3" 2136 + source = "registry+https://github.com/rust-lang/crates.io-index" 2137 + checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 2138 + 2139 + [[package]] 1505 2140 name = "tower-service" 1506 2141 version = "0.3.3" 1507 2142 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1545 2180 checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 1546 2181 1547 2182 [[package]] 2183 + name = "unsigned-varint" 2184 + version = "0.8.0" 2185 + source = "registry+https://github.com/rust-lang/crates.io-index" 2186 + checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" 2187 + 2188 + [[package]] 1548 2189 name = "untrusted" 1549 2190 version = "0.9.0" 1550 2191 source = "registry+https://github.com/rust-lang/crates.io-index" 1551 2192 checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 1552 2193 1553 2194 [[package]] 2195 + name = "url" 2196 + version = "2.5.4" 2197 + source = "registry+https://github.com/rust-lang/crates.io-index" 2198 + checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 2199 + dependencies = [ 2200 + "form_urlencoded", 2201 + "idna", 2202 + "percent-encoding", 2203 + ] 2204 + 2205 + [[package]] 2206 + name = "utf16_iter" 2207 + version = "1.0.5" 2208 + source = "registry+https://github.com/rust-lang/crates.io-index" 2209 + checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 2210 + 2211 + [[package]] 2212 + name = "utf8_iter" 2213 + version = "1.0.4" 2214 + source = "registry+https://github.com/rust-lang/crates.io-index" 2215 + checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 2216 + 2217 + [[package]] 1554 2218 name = "uuid" 1555 2219 version = "1.16.0" 1556 2220 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1559 2223 "getrandom 0.3.2", 1560 2224 "serde", 1561 2225 ] 2226 + 2227 + [[package]] 2228 + name = "vcpkg" 2229 + version = "0.2.15" 2230 + source = "registry+https://github.com/rust-lang/crates.io-index" 2231 + checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 1562 2232 1563 2233 [[package]] 1564 2234 name = "version_check" ··· 1626 2296 ] 1627 2297 1628 2298 [[package]] 2299 + name = "wasm-bindgen-futures" 2300 + version = "0.4.50" 2301 + source = "registry+https://github.com/rust-lang/crates.io-index" 2302 + checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 2303 + dependencies = [ 2304 + "cfg-if", 2305 + "js-sys", 2306 + "once_cell", 2307 + "wasm-bindgen", 2308 + "web-sys", 2309 + ] 2310 + 2311 + [[package]] 1629 2312 name = "wasm-bindgen-macro" 1630 2313 version = "0.2.100" 1631 2314 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1658 2341 ] 1659 2342 1660 2343 [[package]] 2344 + name = "web-sys" 2345 + version = "0.3.77" 2346 + source = "registry+https://github.com/rust-lang/crates.io-index" 2347 + checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 2348 + dependencies = [ 2349 + "js-sys", 2350 + "wasm-bindgen", 2351 + ] 2352 + 2353 + [[package]] 1661 2354 name = "winapi" 1662 2355 version = "0.3.9" 1663 2356 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1689 2382 "windows-interface", 1690 2383 "windows-link", 1691 2384 "windows-result", 1692 - "windows-strings", 2385 + "windows-strings 0.4.0", 1693 2386 ] 1694 2387 1695 2388 [[package]] ··· 1721 2414 checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" 1722 2415 1723 2416 [[package]] 2417 + name = "windows-registry" 2418 + version = "0.4.0" 2419 + source = "registry+https://github.com/rust-lang/crates.io-index" 2420 + checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" 2421 + dependencies = [ 2422 + "windows-result", 2423 + "windows-strings 0.3.1", 2424 + "windows-targets 0.53.0", 2425 + ] 2426 + 2427 + [[package]] 1724 2428 name = "windows-result" 1725 2429 version = "0.3.2" 1726 2430 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1731 2435 1732 2436 [[package]] 1733 2437 name = "windows-strings" 2438 + version = "0.3.1" 2439 + source = "registry+https://github.com/rust-lang/crates.io-index" 2440 + checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" 2441 + dependencies = [ 2442 + "windows-link", 2443 + ] 2444 + 2445 + [[package]] 2446 + name = "windows-strings" 1734 2447 version = "0.4.0" 1735 2448 source = "registry+https://github.com/rust-lang/crates.io-index" 1736 2449 checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" ··· 1744 2457 source = "registry+https://github.com/rust-lang/crates.io-index" 1745 2458 checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 1746 2459 dependencies = [ 1747 - "windows-targets", 2460 + "windows-targets 0.52.6", 1748 2461 ] 1749 2462 1750 2463 [[package]] ··· 1753 2466 source = "registry+https://github.com/rust-lang/crates.io-index" 1754 2467 checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 1755 2468 dependencies = [ 1756 - "windows-targets", 2469 + "windows-targets 0.52.6", 1757 2470 ] 1758 2471 1759 2472 [[package]] ··· 1762 2475 source = "registry+https://github.com/rust-lang/crates.io-index" 1763 2476 checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 1764 2477 dependencies = [ 1765 - "windows_aarch64_gnullvm", 1766 - "windows_aarch64_msvc", 1767 - "windows_i686_gnu", 1768 - "windows_i686_gnullvm", 1769 - "windows_i686_msvc", 1770 - "windows_x86_64_gnu", 1771 - "windows_x86_64_gnullvm", 1772 - "windows_x86_64_msvc", 2478 + "windows_aarch64_gnullvm 0.52.6", 2479 + "windows_aarch64_msvc 0.52.6", 2480 + "windows_i686_gnu 0.52.6", 2481 + "windows_i686_gnullvm 0.52.6", 2482 + "windows_i686_msvc 0.52.6", 2483 + "windows_x86_64_gnu 0.52.6", 2484 + "windows_x86_64_gnullvm 0.52.6", 2485 + "windows_x86_64_msvc 0.52.6", 2486 + ] 2487 + 2488 + [[package]] 2489 + name = "windows-targets" 2490 + version = "0.53.0" 2491 + source = "registry+https://github.com/rust-lang/crates.io-index" 2492 + checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" 2493 + dependencies = [ 2494 + "windows_aarch64_gnullvm 0.53.0", 2495 + "windows_aarch64_msvc 0.53.0", 2496 + "windows_i686_gnu 0.53.0", 2497 + "windows_i686_gnullvm 0.53.0", 2498 + "windows_i686_msvc 0.53.0", 2499 + "windows_x86_64_gnu 0.53.0", 2500 + "windows_x86_64_gnullvm 0.53.0", 2501 + "windows_x86_64_msvc 0.53.0", 1773 2502 ] 1774 2503 1775 2504 [[package]] ··· 1779 2508 checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 1780 2509 1781 2510 [[package]] 2511 + name = "windows_aarch64_gnullvm" 2512 + version = "0.53.0" 2513 + source = "registry+https://github.com/rust-lang/crates.io-index" 2514 + checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" 2515 + 2516 + [[package]] 1782 2517 name = "windows_aarch64_msvc" 1783 2518 version = "0.52.6" 1784 2519 source = "registry+https://github.com/rust-lang/crates.io-index" 1785 2520 checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 1786 2521 1787 2522 [[package]] 2523 + name = "windows_aarch64_msvc" 2524 + version = "0.53.0" 2525 + source = "registry+https://github.com/rust-lang/crates.io-index" 2526 + checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" 2527 + 2528 + [[package]] 1788 2529 name = "windows_i686_gnu" 1789 2530 version = "0.52.6" 1790 2531 source = "registry+https://github.com/rust-lang/crates.io-index" 1791 2532 checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 1792 2533 1793 2534 [[package]] 2535 + name = "windows_i686_gnu" 2536 + version = "0.53.0" 2537 + source = "registry+https://github.com/rust-lang/crates.io-index" 2538 + checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" 2539 + 2540 + [[package]] 1794 2541 name = "windows_i686_gnullvm" 1795 2542 version = "0.52.6" 1796 2543 source = "registry+https://github.com/rust-lang/crates.io-index" 1797 2544 checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 1798 2545 1799 2546 [[package]] 2547 + name = "windows_i686_gnullvm" 2548 + version = "0.53.0" 2549 + source = "registry+https://github.com/rust-lang/crates.io-index" 2550 + checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" 2551 + 2552 + [[package]] 1800 2553 name = "windows_i686_msvc" 1801 2554 version = "0.52.6" 1802 2555 source = "registry+https://github.com/rust-lang/crates.io-index" 1803 2556 checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 2557 + 2558 + [[package]] 2559 + name = "windows_i686_msvc" 2560 + version = "0.53.0" 2561 + source = "registry+https://github.com/rust-lang/crates.io-index" 2562 + checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" 1804 2563 1805 2564 [[package]] 1806 2565 name = "windows_x86_64_gnu" ··· 1809 2568 checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 1810 2569 1811 2570 [[package]] 2571 + name = "windows_x86_64_gnu" 2572 + version = "0.53.0" 2573 + source = "registry+https://github.com/rust-lang/crates.io-index" 2574 + checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" 2575 + 2576 + [[package]] 1812 2577 name = "windows_x86_64_gnullvm" 1813 2578 version = "0.52.6" 1814 2579 source = "registry+https://github.com/rust-lang/crates.io-index" 1815 2580 checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 1816 2581 1817 2582 [[package]] 2583 + name = "windows_x86_64_gnullvm" 2584 + version = "0.53.0" 2585 + source = "registry+https://github.com/rust-lang/crates.io-index" 2586 + checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" 2587 + 2588 + [[package]] 1818 2589 name = "windows_x86_64_msvc" 1819 2590 version = "0.52.6" 1820 2591 source = "registry+https://github.com/rust-lang/crates.io-index" 1821 2592 checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 1822 2593 1823 2594 [[package]] 2595 + name = "windows_x86_64_msvc" 2596 + version = "0.53.0" 2597 + source = "registry+https://github.com/rust-lang/crates.io-index" 2598 + checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" 2599 + 2600 + [[package]] 1824 2601 name = "winnow" 1825 2602 version = "0.7.7" 1826 2603 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1839 2616 ] 1840 2617 1841 2618 [[package]] 2619 + name = "write16" 2620 + version = "1.0.0" 2621 + source = "registry+https://github.com/rust-lang/crates.io-index" 2622 + checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 2623 + 2624 + [[package]] 2625 + name = "writeable" 2626 + version = "0.5.5" 2627 + source = "registry+https://github.com/rust-lang/crates.io-index" 2628 + checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 2629 + 2630 + [[package]] 2631 + name = "yoke" 2632 + version = "0.7.5" 2633 + source = "registry+https://github.com/rust-lang/crates.io-index" 2634 + checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" 2635 + dependencies = [ 2636 + "serde", 2637 + "stable_deref_trait", 2638 + "yoke-derive", 2639 + "zerofrom", 2640 + ] 2641 + 2642 + [[package]] 2643 + name = "yoke-derive" 2644 + version = "0.7.5" 2645 + source = "registry+https://github.com/rust-lang/crates.io-index" 2646 + checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" 2647 + dependencies = [ 2648 + "proc-macro2", 2649 + "quote", 2650 + "syn", 2651 + "synstructure", 2652 + ] 2653 + 2654 + [[package]] 2655 + name = "zerofrom" 2656 + version = "0.1.6" 2657 + source = "registry+https://github.com/rust-lang/crates.io-index" 2658 + checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 2659 + dependencies = [ 2660 + "zerofrom-derive", 2661 + ] 2662 + 2663 + [[package]] 2664 + name = "zerofrom-derive" 2665 + version = "0.1.6" 2666 + source = "registry+https://github.com/rust-lang/crates.io-index" 2667 + checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 2668 + dependencies = [ 2669 + "proc-macro2", 2670 + "quote", 2671 + "syn", 2672 + "synstructure", 2673 + ] 2674 + 2675 + [[package]] 1842 2676 name = "zeroize" 1843 2677 version = "1.8.1" 1844 2678 source = "registry+https://github.com/rust-lang/crates.io-index" 1845 2679 checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 2680 + 2681 + [[package]] 2682 + name = "zerovec" 2683 + version = "0.10.4" 2684 + source = "registry+https://github.com/rust-lang/crates.io-index" 2685 + checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 2686 + dependencies = [ 2687 + "yoke", 2688 + "zerofrom", 2689 + "zerovec-derive", 2690 + ] 2691 + 2692 + [[package]] 2693 + name = "zerovec-derive" 2694 + version = "0.10.3" 2695 + source = "registry+https://github.com/rust-lang/crates.io-index" 2696 + checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 2697 + dependencies = [ 2698 + "proc-macro2", 2699 + "quote", 2700 + "syn", 2701 + ]
+3
Cargo.toml
··· 4 4 edition = "2024" 5 5 6 6 [dependencies] 7 + chrono = { version = "0.4.39", features = ["serde"] } 7 8 dropshot = "0.16.0" 8 9 eyre = "0.6.12" 10 + ipld-core = { version = "0.4.1", features = ["serde"] } 11 + reqwest = { version = "0.12.12", features = ["native-tls", "json"] } 9 12 serde = { version = "1.0.217", features = ["derive"] } 10 13 serde_json = "1.0.134" 11 14 slog = { version = "2.7.0" }
+91
src/import.rs
··· 1 + use crate::types::PlcOperationType; 2 + use crate::utils::*; 3 + use chrono::{DateTime, Utc}; 4 + use ipld_core::cid::Cid; 5 + use reqwest::Client; 6 + use serde::{Deserialize, Serialize}; 7 + use slog::{Logger, error, debug}; 8 + use std::env::var; 9 + use std::time::{Duration, Instant}; 10 + 11 + // PLC rate limit is 100req/min - we aim a little lower 12 + const SLEEP_TIME_F: f32 = (60. / 90.) * 1000.; 13 + const SLEEP_TIME: Duration = Duration::from_millis(SLEEP_TIME_F as u64); 14 + 15 + pub async fn importer(log: Logger) { 16 + let plc_main = var("PLC_UPSTREAM").unwrap_or("https://plc.directory".to_string()); 17 + let user_agent = var("PLC_USER_AGENT").unwrap_or("parakeet-plc".to_string()); 18 + 19 + let mut after = var("PLC_START_AFTER").ok(); 20 + 21 + let client = Client::builder().user_agent(user_agent).build().unwrap(); 22 + 23 + loop { 24 + let start = Instant::now(); 25 + 26 + match upstream_export(&client, &plc_main, after.clone()).await { 27 + Ok((entries, errors)) => { 28 + debug!( 29 + log, 30 + "exported {} entries, {} failed", 31 + entries.len(), 32 + errors.len() 33 + ); 34 + 35 + // todo: report errors 36 + // todo: DB inserts 37 + 38 + let new_after = entries.last().unwrap().created_at; 39 + after = Some(new_after.to_rfc3339_opts(chrono::SecondsFormat::Millis, true)); 40 + } 41 + Err(err) => error!(log, "failed to export PLC directory: {err}"), 42 + } 43 + 44 + let end = start.elapsed(); 45 + tokio::time::sleep(SLEEP_TIME.saturating_sub(end)).await; 46 + } 47 + } 48 + 49 + async fn upstream_export( 50 + client: &Client, 51 + plc: &str, 52 + after: Option<String>, 53 + ) -> eyre::Result<(Vec<PlcExportEntry>, Vec<serde_json::Error>)> { 54 + let mut uri = format!("{plc}/export?count=1000"); 55 + if let Some(after) = after { 56 + uri += format!("&after={}", after).as_str(); 57 + } 58 + 59 + let export_res = client.get(uri).send().await?; 60 + 61 + let export = export_res.text().await?; 62 + let (exports, errors) = export 63 + .lines() 64 + .map(serde_json::from_str) 65 + .fold((Vec::new(), Vec::new()), fold_exports); 66 + 67 + Ok((exports, errors)) 68 + } 69 + 70 + fn fold_exports<A, B>( 71 + (mut oks, mut errors): (Vec<A>, Vec<B>), 72 + current: Result<A, B>, 73 + ) -> (Vec<A>, Vec<B>) { 74 + match current { 75 + Ok(data) => oks.push(data), 76 + Err(err) => errors.push(err), 77 + }; 78 + 79 + (oks, errors) 80 + } 81 + 82 + #[derive(Debug, Deserialize, Serialize)] 83 + #[serde(rename_all = "camelCase")] 84 + pub struct PlcExportEntry { 85 + pub did: String, 86 + pub operation: PlcOperationType, 87 + #[serde(deserialize_with = "cid_from_string")] 88 + pub cid: Cid, 89 + pub nullified: bool, 90 + pub created_at: DateTime<Utc>, 91 + }
+4
src/lib.rs
··· 1 1 use dropshot::{ApiDescription, ConfigLogging, ConfigLoggingLevel}; 2 2 use slog::Logger; 3 3 4 + pub mod import; 5 + mod types; 6 + mod utils; 7 + 4 8 #[derive(Clone)] 5 9 pub struct ApiContext {} 6 10
+2
src/main.rs
··· 12 12 let _scope = slog_scope::set_global_logger(log.clone()); 13 13 slog_stdlog::init()?; 14 14 15 + tokio::spawn(plc_mirror::import::importer(log.clone())); 16 + 15 17 let bind_address = var("PLC_BIND_ADDR") 16 18 .unwrap_or(DEFAULT_BIND.to_string()) 17 19 .parse()?;
+54
src/types.rs
··· 1 + use crate::utils::*; 2 + use ipld_core::cid::Cid; 3 + use serde::{Deserialize, Serialize}; 4 + use std::collections::HashMap; 5 + 6 + #[derive(Debug, Deserialize, Serialize)] 7 + #[serde(tag = "type")] 8 + pub enum PlcOperationType { 9 + #[serde(rename = "create")] 10 + Create(PlcCreate), 11 + #[serde(rename = "plc_tombstone")] 12 + Tombstone(PlcTombstone), 13 + #[serde(rename = "plc_operation")] 14 + Operation(PlcOperation), 15 + } 16 + 17 + #[derive(Debug, Deserialize, Serialize)] 18 + #[serde(rename_all = "camelCase")] 19 + pub struct PlcCreate { 20 + pub sig: String, 21 + #[serde(deserialize_with = "option_cid_from_string")] 22 + pub prev: Option<Cid>, 23 + pub signing_key: String, 24 + pub recovery_key: String, 25 + pub handle: String, 26 + pub service: String, 27 + } 28 + 29 + #[derive(Debug, Deserialize, Serialize)] 30 + #[serde(rename_all = "camelCase")] 31 + pub struct PlcTombstone { 32 + pub sig: String, 33 + #[serde(deserialize_with = "option_cid_from_string")] 34 + pub prev: Option<Cid>, 35 + } 36 + 37 + #[derive(Debug, Deserialize, Serialize)] 38 + #[serde(rename_all = "camelCase")] 39 + pub struct PlcOperation { 40 + pub sig: String, 41 + #[serde(deserialize_with = "option_cid_from_string")] 42 + pub prev: Option<Cid>, 43 + pub rotation_keys: Vec<String>, 44 + pub verification_methods: HashMap<String, String>, 45 + pub also_known_as: Vec<String>, 46 + pub services: HashMap<String, PlcService>, 47 + } 48 + 49 + #[derive(Debug, Deserialize, Serialize)] 50 + pub struct PlcService { 51 + #[serde(rename = "type")] 52 + pub ty: String, 53 + pub endpoint: String, 54 + }
+17
src/utils.rs
··· 1 + use ipld_core::cid::Cid; 2 + use serde::{Deserialize, Deserializer}; 3 + 4 + pub fn cid_from_string<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Cid, D::Error> { 5 + let str = String::deserialize(deserializer)?; 6 + 7 + Cid::try_from(str).map_err(serde::de::Error::custom) 8 + } 9 + 10 + pub fn option_cid_from_string<'de, D: Deserializer<'de>>( 11 + deserializer: D, 12 + ) -> Result<Option<Cid>, D::Error> { 13 + #[derive(Deserialize)] 14 + struct Wrapper(#[serde(deserialize_with = "cid_from_string")] Cid); 15 + 16 + Ok(Option::deserialize(deserializer)?.map(|Wrapper(v)| v)) 17 + }