no compression just send

Changed files
+602 -24
src
+562 -1
Cargo.lock
··· 97 97 ] 98 98 99 99 [[package]] 100 + name = "async-trait" 101 + version = "0.1.89" 102 + source = "registry+https://github.com/rust-lang/crates.io-index" 103 + checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" 104 + dependencies = [ 105 + "proc-macro2", 106 + "quote", 107 + "syn", 108 + ] 109 + 110 + [[package]] 100 111 name = "atomic-waker" 101 112 version = "1.1.2" 102 113 source = "registry+https://github.com/rust-lang/crates.io-index" 103 114 checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 104 115 105 116 [[package]] 117 + name = "attohttpc" 118 + version = "0.30.1" 119 + source = "registry+https://github.com/rust-lang/crates.io-index" 120 + checksum = "16e2cdb6d5ed835199484bb92bb8b3edd526effe995c61732580439c1a67e2e9" 121 + dependencies = [ 122 + "base64", 123 + "http", 124 + "log", 125 + "native-tls", 126 + "serde", 127 + "serde_json", 128 + "url", 129 + ] 130 + 131 + [[package]] 132 + name = "aws-creds" 133 + version = "0.39.0" 134 + source = "registry+https://github.com/rust-lang/crates.io-index" 135 + checksum = "b13804829a843b3f26e151c97acbb315ee1177a2724690edfcd28f1894146200" 136 + dependencies = [ 137 + "attohttpc", 138 + "home", 139 + "log", 140 + "quick-xml", 141 + "rust-ini", 142 + "serde", 143 + "thiserror", 144 + "time", 145 + "url", 146 + ] 147 + 148 + [[package]] 149 + name = "aws-region" 150 + version = "0.28.0" 151 + source = "registry+https://github.com/rust-lang/crates.io-index" 152 + checksum = "5532f65342f789f9c1b7078ea9c9cd9293cd62dcc284fa99adc4a1c9ba43469c" 153 + dependencies = [ 154 + "thiserror", 155 + ] 156 + 157 + [[package]] 106 158 name = "backtrace" 107 159 version = "0.3.76" 108 160 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 130 182 checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" 131 183 132 184 [[package]] 185 + name = "block-buffer" 186 + version = "0.10.4" 187 + source = "registry+https://github.com/rust-lang/crates.io-index" 188 + checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 189 + dependencies = [ 190 + "generic-array", 191 + ] 192 + 193 + [[package]] 133 194 name = "bumpalo" 134 195 version = "3.19.0" 135 196 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 140 201 version = "1.10.1" 141 202 source = "registry+https://github.com/rust-lang/crates.io-index" 142 203 checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 204 + 205 + [[package]] 206 + name = "castaway" 207 + version = "0.2.4" 208 + source = "registry+https://github.com/rust-lang/crates.io-index" 209 + checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" 210 + dependencies = [ 211 + "rustversion", 212 + ] 143 213 144 214 [[package]] 145 215 name = "cc" ··· 206 276 checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 207 277 208 278 [[package]] 279 + name = "compact_str" 280 + version = "0.7.1" 281 + source = "registry+https://github.com/rust-lang/crates.io-index" 282 + checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f" 283 + dependencies = [ 284 + "castaway", 285 + "cfg-if", 286 + "itoa", 287 + "ryu", 288 + "static_assertions", 289 + ] 290 + 291 + [[package]] 209 292 name = "compression-codecs" 210 293 version = "0.4.31" 211 294 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 223 306 checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" 224 307 225 308 [[package]] 309 + name = "const-random" 310 + version = "0.1.18" 311 + source = "registry+https://github.com/rust-lang/crates.io-index" 312 + checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" 313 + dependencies = [ 314 + "const-random-macro", 315 + ] 316 + 317 + [[package]] 318 + name = "const-random-macro" 319 + version = "0.1.16" 320 + source = "registry+https://github.com/rust-lang/crates.io-index" 321 + checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" 322 + dependencies = [ 323 + "getrandom 0.2.16", 324 + "once_cell", 325 + "tiny-keccak", 326 + ] 327 + 328 + [[package]] 226 329 name = "core-foundation" 227 330 version = "0.9.4" 228 331 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 239 342 checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 240 343 241 344 [[package]] 345 + name = "cpufeatures" 346 + version = "0.2.17" 347 + source = "registry+https://github.com/rust-lang/crates.io-index" 348 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 349 + dependencies = [ 350 + "libc", 351 + ] 352 + 353 + [[package]] 354 + name = "crunchy" 355 + version = "0.2.4" 356 + source = "registry+https://github.com/rust-lang/crates.io-index" 357 + checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" 358 + 359 + [[package]] 360 + name = "crypto-common" 361 + version = "0.1.6" 362 + source = "registry+https://github.com/rust-lang/crates.io-index" 363 + checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 364 + dependencies = [ 365 + "generic-array", 366 + "typenum", 367 + ] 368 + 369 + [[package]] 370 + name = "deranged" 371 + version = "0.5.4" 372 + source = "registry+https://github.com/rust-lang/crates.io-index" 373 + checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" 374 + dependencies = [ 375 + "powerfmt", 376 + "serde_core", 377 + ] 378 + 379 + [[package]] 380 + name = "digest" 381 + version = "0.10.7" 382 + source = "registry+https://github.com/rust-lang/crates.io-index" 383 + checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 384 + dependencies = [ 385 + "block-buffer", 386 + "crypto-common", 387 + "subtle", 388 + ] 389 + 390 + [[package]] 242 391 name = "displaydoc" 243 392 version = "0.2.5" 244 393 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 247 396 "proc-macro2", 248 397 "quote", 249 398 "syn", 399 + ] 400 + 401 + [[package]] 402 + name = "dlv-list" 403 + version = "0.5.2" 404 + source = "registry+https://github.com/rust-lang/crates.io-index" 405 + checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" 406 + dependencies = [ 407 + "const-random", 250 408 ] 251 409 252 410 [[package]] ··· 435 593 ] 436 594 437 595 [[package]] 596 + name = "generic-array" 597 + version = "0.14.7" 598 + source = "registry+https://github.com/rust-lang/crates.io-index" 599 + checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 600 + dependencies = [ 601 + "typenum", 602 + "version_check", 603 + ] 604 + 605 + [[package]] 438 606 name = "getrandom" 439 607 version = "0.2.16" 440 608 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 484 652 485 653 [[package]] 486 654 name = "hashbrown" 655 + version = "0.14.5" 656 + source = "registry+https://github.com/rust-lang/crates.io-index" 657 + checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 658 + 659 + [[package]] 660 + name = "hashbrown" 487 661 version = "0.16.0" 488 662 source = "registry+https://github.com/rust-lang/crates.io-index" 489 663 checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" ··· 495 669 checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 496 670 497 671 [[package]] 672 + name = "hex" 673 + version = "0.4.3" 674 + source = "registry+https://github.com/rust-lang/crates.io-index" 675 + checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 676 + 677 + [[package]] 678 + name = "hmac" 679 + version = "0.12.1" 680 + source = "registry+https://github.com/rust-lang/crates.io-index" 681 + checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 682 + dependencies = [ 683 + "digest", 684 + ] 685 + 686 + [[package]] 687 + name = "home" 688 + version = "0.5.11" 689 + source = "registry+https://github.com/rust-lang/crates.io-index" 690 + checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" 691 + dependencies = [ 692 + "windows-sys 0.59.0", 693 + ] 694 + 695 + [[package]] 498 696 name = "http" 499 697 version = "1.3.1" 500 698 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 728 926 checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" 729 927 dependencies = [ 730 928 "equivalent", 731 - "hashbrown", 929 + "hashbrown 0.16.0", 732 930 ] 733 931 734 932 [[package]] ··· 839 1037 checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 840 1038 841 1039 [[package]] 1040 + name = "maybe-async" 1041 + version = "0.2.10" 1042 + source = "registry+https://github.com/rust-lang/crates.io-index" 1043 + checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" 1044 + dependencies = [ 1045 + "proc-macro2", 1046 + "quote", 1047 + "syn", 1048 + ] 1049 + 1050 + [[package]] 1051 + name = "md5" 1052 + version = "0.8.0" 1053 + source = "registry+https://github.com/rust-lang/crates.io-index" 1054 + checksum = "ae960838283323069879657ca3de837e9f7bbb4c7bf6ea7f1b290d5e9476d2e0" 1055 + 1056 + [[package]] 842 1057 name = "memchr" 843 1058 version = "2.7.6" 844 1059 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 849 1064 version = "0.3.17" 850 1065 source = "registry+https://github.com/rust-lang/crates.io-index" 851 1066 checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1067 + 1068 + [[package]] 1069 + name = "minidom" 1070 + version = "0.16.0" 1071 + source = "registry+https://github.com/rust-lang/crates.io-index" 1072 + checksum = "e394a0e3c7ccc2daea3dffabe82f09857b6b510cb25af87d54bf3e910ac1642d" 1073 + dependencies = [ 1074 + "rxml", 1075 + ] 852 1076 853 1077 [[package]] 854 1078 name = "miniz_oxide" ··· 888 1112 ] 889 1113 890 1114 [[package]] 1115 + name = "ntapi" 1116 + version = "0.4.1" 1117 + source = "registry+https://github.com/rust-lang/crates.io-index" 1118 + checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" 1119 + dependencies = [ 1120 + "winapi", 1121 + ] 1122 + 1123 + [[package]] 1124 + name = "num-conv" 1125 + version = "0.1.0" 1126 + source = "registry+https://github.com/rust-lang/crates.io-index" 1127 + checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 1128 + 1129 + [[package]] 1130 + name = "objc2-core-foundation" 1131 + version = "0.3.2" 1132 + source = "registry+https://github.com/rust-lang/crates.io-index" 1133 + checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" 1134 + dependencies = [ 1135 + "bitflags", 1136 + ] 1137 + 1138 + [[package]] 1139 + name = "objc2-io-kit" 1140 + version = "0.3.2" 1141 + source = "registry+https://github.com/rust-lang/crates.io-index" 1142 + checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" 1143 + dependencies = [ 1144 + "libc", 1145 + "objc2-core-foundation", 1146 + ] 1147 + 1148 + [[package]] 891 1149 name = "object" 892 1150 version = "0.37.3" 893 1151 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 953 1211 ] 954 1212 955 1213 [[package]] 1214 + name = "ordered-multimap" 1215 + version = "0.7.3" 1216 + source = "registry+https://github.com/rust-lang/crates.io-index" 1217 + checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79" 1218 + dependencies = [ 1219 + "dlv-list", 1220 + "hashbrown 0.14.5", 1221 + ] 1222 + 1223 + [[package]] 956 1224 name = "pds_whatsit_compress_test" 957 1225 version = "0.1.0" 958 1226 dependencies = [ ··· 964 1232 "futures", 965 1233 "log", 966 1234 "reqwest", 1235 + "rust-s3", 967 1236 "tokio", 968 1237 "tokio-stream", 969 1238 "tokio-util", ··· 1018 1287 ] 1019 1288 1020 1289 [[package]] 1290 + name = "powerfmt" 1291 + version = "0.2.0" 1292 + source = "registry+https://github.com/rust-lang/crates.io-index" 1293 + checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 1294 + 1295 + [[package]] 1021 1296 name = "proc-macro2" 1022 1297 version = "1.0.101" 1023 1298 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1027 1302 ] 1028 1303 1029 1304 [[package]] 1305 + name = "quick-xml" 1306 + version = "0.38.3" 1307 + source = "registry+https://github.com/rust-lang/crates.io-index" 1308 + checksum = "42a232e7487fc2ef313d96dde7948e7a3c05101870d8985e4fd8d26aedd27b89" 1309 + dependencies = [ 1310 + "memchr", 1311 + "serde", 1312 + ] 1313 + 1314 + [[package]] 1030 1315 name = "quote" 1031 1316 version = "1.0.41" 1032 1317 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1128 1413 ] 1129 1414 1130 1415 [[package]] 1416 + name = "rust-ini" 1417 + version = "0.21.3" 1418 + source = "registry+https://github.com/rust-lang/crates.io-index" 1419 + checksum = "796e8d2b6696392a43bea58116b667fb4c29727dc5abd27d6acf338bb4f688c7" 1420 + dependencies = [ 1421 + "cfg-if", 1422 + "ordered-multimap", 1423 + ] 1424 + 1425 + [[package]] 1426 + name = "rust-s3" 1427 + version = "0.37.0" 1428 + source = "registry+https://github.com/rust-lang/crates.io-index" 1429 + checksum = "94f9b973bd4097f5bb47e5827dcb9fb5dc17e93879e46badc27d2a4e9a4e5588" 1430 + dependencies = [ 1431 + "async-trait", 1432 + "aws-creds", 1433 + "aws-region", 1434 + "base64", 1435 + "bytes", 1436 + "cfg-if", 1437 + "futures-util", 1438 + "hex", 1439 + "hmac", 1440 + "http", 1441 + "log", 1442 + "maybe-async", 1443 + "md5", 1444 + "minidom", 1445 + "percent-encoding", 1446 + "quick-xml", 1447 + "reqwest", 1448 + "serde", 1449 + "serde_derive", 1450 + "serde_json", 1451 + "sha2", 1452 + "sysinfo", 1453 + "thiserror", 1454 + "time", 1455 + "tokio", 1456 + "tokio-stream", 1457 + "url", 1458 + ] 1459 + 1460 + [[package]] 1131 1461 name = "rustc-demangle" 1132 1462 version = "0.1.26" 1133 1463 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1184 1514 version = "1.0.22" 1185 1515 source = "registry+https://github.com/rust-lang/crates.io-index" 1186 1516 checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 1517 + 1518 + [[package]] 1519 + name = "rxml" 1520 + version = "0.11.1" 1521 + source = "registry+https://github.com/rust-lang/crates.io-index" 1522 + checksum = "65bc94b580d0f5a6b7a2d604e597513d3c673154b52ddeccd1d5c32360d945ee" 1523 + dependencies = [ 1524 + "bytes", 1525 + "rxml_validation", 1526 + ] 1527 + 1528 + [[package]] 1529 + name = "rxml_validation" 1530 + version = "0.11.0" 1531 + source = "registry+https://github.com/rust-lang/crates.io-index" 1532 + checksum = "826e80413b9a35e9d33217b3dcac04cf95f6559d15944b93887a08be5496c4a4" 1533 + dependencies = [ 1534 + "compact_str", 1535 + ] 1187 1536 1188 1537 [[package]] 1189 1538 name = "ryu" ··· 1279 1628 ] 1280 1629 1281 1630 [[package]] 1631 + name = "sha2" 1632 + version = "0.10.9" 1633 + source = "registry+https://github.com/rust-lang/crates.io-index" 1634 + checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 1635 + dependencies = [ 1636 + "cfg-if", 1637 + "cpufeatures", 1638 + "digest", 1639 + ] 1640 + 1641 + [[package]] 1282 1642 name = "shlex" 1283 1643 version = "1.3.0" 1284 1644 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1313 1673 checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" 1314 1674 1315 1675 [[package]] 1676 + name = "static_assertions" 1677 + version = "1.1.0" 1678 + source = "registry+https://github.com/rust-lang/crates.io-index" 1679 + checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 1680 + 1681 + [[package]] 1316 1682 name = "strsim" 1317 1683 version = "0.11.1" 1318 1684 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1356 1722 ] 1357 1723 1358 1724 [[package]] 1725 + name = "sysinfo" 1726 + version = "0.37.2" 1727 + source = "registry+https://github.com/rust-lang/crates.io-index" 1728 + checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f" 1729 + dependencies = [ 1730 + "libc", 1731 + "memchr", 1732 + "ntapi", 1733 + "objc2-core-foundation", 1734 + "objc2-io-kit", 1735 + "windows", 1736 + ] 1737 + 1738 + [[package]] 1359 1739 name = "system-configuration" 1360 1740 version = "0.6.1" 1361 1741 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1390 1770 ] 1391 1771 1392 1772 [[package]] 1773 + name = "thiserror" 1774 + version = "2.0.17" 1775 + source = "registry+https://github.com/rust-lang/crates.io-index" 1776 + checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" 1777 + dependencies = [ 1778 + "thiserror-impl", 1779 + ] 1780 + 1781 + [[package]] 1782 + name = "thiserror-impl" 1783 + version = "2.0.17" 1784 + source = "registry+https://github.com/rust-lang/crates.io-index" 1785 + checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" 1786 + dependencies = [ 1787 + "proc-macro2", 1788 + "quote", 1789 + "syn", 1790 + ] 1791 + 1792 + [[package]] 1793 + name = "time" 1794 + version = "0.3.44" 1795 + source = "registry+https://github.com/rust-lang/crates.io-index" 1796 + checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" 1797 + dependencies = [ 1798 + "deranged", 1799 + "itoa", 1800 + "num-conv", 1801 + "powerfmt", 1802 + "serde", 1803 + "time-core", 1804 + "time-macros", 1805 + ] 1806 + 1807 + [[package]] 1808 + name = "time-core" 1809 + version = "0.1.6" 1810 + source = "registry+https://github.com/rust-lang/crates.io-index" 1811 + checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" 1812 + 1813 + [[package]] 1814 + name = "time-macros" 1815 + version = "0.2.24" 1816 + source = "registry+https://github.com/rust-lang/crates.io-index" 1817 + checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" 1818 + dependencies = [ 1819 + "num-conv", 1820 + "time-core", 1821 + ] 1822 + 1823 + [[package]] 1824 + name = "tiny-keccak" 1825 + version = "2.0.2" 1826 + source = "registry+https://github.com/rust-lang/crates.io-index" 1827 + checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" 1828 + dependencies = [ 1829 + "crunchy", 1830 + ] 1831 + 1832 + [[package]] 1393 1833 name = "tinystr" 1394 1834 version = "0.8.1" 1395 1835 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1544 1984 checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 1545 1985 1546 1986 [[package]] 1987 + name = "typenum" 1988 + version = "1.19.0" 1989 + source = "registry+https://github.com/rust-lang/crates.io-index" 1990 + checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" 1991 + 1992 + [[package]] 1547 1993 name = "unicode-ident" 1548 1994 version = "1.0.19" 1549 1995 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1586 2032 checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 1587 2033 1588 2034 [[package]] 2035 + name = "version_check" 2036 + version = "0.9.5" 2037 + source = "registry+https://github.com/rust-lang/crates.io-index" 2038 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 2039 + 2040 + [[package]] 1589 2041 name = "want" 1590 2042 version = "0.3.1" 1591 2043 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1714 2166 ] 1715 2167 1716 2168 [[package]] 2169 + name = "winapi" 2170 + version = "0.3.9" 2171 + source = "registry+https://github.com/rust-lang/crates.io-index" 2172 + checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2173 + dependencies = [ 2174 + "winapi-i686-pc-windows-gnu", 2175 + "winapi-x86_64-pc-windows-gnu", 2176 + ] 2177 + 2178 + [[package]] 2179 + name = "winapi-i686-pc-windows-gnu" 2180 + version = "0.4.0" 2181 + source = "registry+https://github.com/rust-lang/crates.io-index" 2182 + checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2183 + 2184 + [[package]] 2185 + name = "winapi-x86_64-pc-windows-gnu" 2186 + version = "0.4.0" 2187 + source = "registry+https://github.com/rust-lang/crates.io-index" 2188 + checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2189 + 2190 + [[package]] 2191 + name = "windows" 2192 + version = "0.61.3" 2193 + source = "registry+https://github.com/rust-lang/crates.io-index" 2194 + checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 2195 + dependencies = [ 2196 + "windows-collections", 2197 + "windows-core", 2198 + "windows-future", 2199 + "windows-link 0.1.3", 2200 + "windows-numerics", 2201 + ] 2202 + 2203 + [[package]] 2204 + name = "windows-collections" 2205 + version = "0.2.0" 2206 + source = "registry+https://github.com/rust-lang/crates.io-index" 2207 + checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 2208 + dependencies = [ 2209 + "windows-core", 2210 + ] 2211 + 2212 + [[package]] 2213 + name = "windows-core" 2214 + version = "0.61.2" 2215 + source = "registry+https://github.com/rust-lang/crates.io-index" 2216 + checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 2217 + dependencies = [ 2218 + "windows-implement", 2219 + "windows-interface", 2220 + "windows-link 0.1.3", 2221 + "windows-result", 2222 + "windows-strings", 2223 + ] 2224 + 2225 + [[package]] 2226 + name = "windows-future" 2227 + version = "0.2.1" 2228 + source = "registry+https://github.com/rust-lang/crates.io-index" 2229 + checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 2230 + dependencies = [ 2231 + "windows-core", 2232 + "windows-link 0.1.3", 2233 + "windows-threading", 2234 + ] 2235 + 2236 + [[package]] 2237 + name = "windows-implement" 2238 + version = "0.60.2" 2239 + source = "registry+https://github.com/rust-lang/crates.io-index" 2240 + checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" 2241 + dependencies = [ 2242 + "proc-macro2", 2243 + "quote", 2244 + "syn", 2245 + ] 2246 + 2247 + [[package]] 2248 + name = "windows-interface" 2249 + version = "0.59.3" 2250 + source = "registry+https://github.com/rust-lang/crates.io-index" 2251 + checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" 2252 + dependencies = [ 2253 + "proc-macro2", 2254 + "quote", 2255 + "syn", 2256 + ] 2257 + 2258 + [[package]] 1717 2259 name = "windows-link" 1718 2260 version = "0.1.3" 1719 2261 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1724 2266 version = "0.2.1" 1725 2267 source = "registry+https://github.com/rust-lang/crates.io-index" 1726 2268 checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 2269 + 2270 + [[package]] 2271 + name = "windows-numerics" 2272 + version = "0.2.0" 2273 + source = "registry+https://github.com/rust-lang/crates.io-index" 2274 + checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 2275 + dependencies = [ 2276 + "windows-core", 2277 + "windows-link 0.1.3", 2278 + ] 1727 2279 1728 2280 [[package]] 1729 2281 name = "windows-registry" ··· 1821 2373 "windows_x86_64_gnu 0.53.1", 1822 2374 "windows_x86_64_gnullvm 0.53.1", 1823 2375 "windows_x86_64_msvc 0.53.1", 2376 + ] 2377 + 2378 + [[package]] 2379 + name = "windows-threading" 2380 + version = "0.1.0" 2381 + source = "registry+https://github.com/rust-lang/crates.io-index" 2382 + checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 2383 + dependencies = [ 2384 + "windows-link 0.1.3", 1824 2385 ] 1825 2386 1826 2387 [[package]]
+2 -1
Cargo.toml
··· 14 14 tokio = { version = "1", features = ["macros", "rt-multi-thread"] } 15 15 futures = "0.3.31" 16 16 tokio-util = { version = "0.7.16", features = ["compat"] } 17 - tokio-stream = { version = "0.1.17", features = ["io-util"] } 17 + tokio-stream = { version = "0.1.17", features = ["io-util"] } 18 + rust-s3 = "0.37.0"
+38 -22
src/main.rs
··· 1 - use std::fs; 1 + use std::{env, fs}; 2 2 use std::path::PathBuf; 3 3 4 4 use clap::{Parser, Subcommand}; ··· 9 9 use tokio_util::compat::FuturesAsyncReadCompatExt; 10 10 use tokio_stream::wrappers::LinesStream; 11 11 use std::future::Future; 12 + use s3::{Bucket, Region}; 13 + use s3::creds::Credentials; 12 14 13 15 #[derive(Parser, Debug)] 14 16 #[command(author, version, about = "PDS Whatsit Compress Test CLI", long_about = None)] ··· 22 24 /// Export data from a PDS instance 23 25 Export { 24 26 /// Output directory path (defaults to ./export) 25 - #[arg(short, long)] 26 - out: Option<PathBuf>, 27 + // #[arg(short, long)] 28 + // out: Option<PathBuf>, 27 29 28 30 /// The DID to export 29 31 #[arg(long)] ··· 63 65 let cli = Cli::parse(); 64 66 65 67 match cli.command { 66 - Commands::Export { out, did, pds_url } => { 67 - let out_dir = out.unwrap_or_else(|| PathBuf::from("export")); 68 - 69 - if let Err(e) = ensure_dir(&out_dir) { 70 - error!("Failed to create/export directory {}: {}", out_dir.display(), e); 71 - std::process::exit(1); 72 - } 68 + Commands::Export { did, pds_url } => { 73 69 74 70 info!( 75 - "Export requested: did={}, pds_url={}, out_dir={}", 71 + "Export requested: did={}, pds_url={}", 76 72 did, 77 73 pds_url, 78 - out_dir.display() 79 74 ); 80 75 76 + match do_work(pds_url, did).await{ 77 + Ok(_) => { 78 + info!("Export completed"); 79 + } 80 + Err(err) => { 81 + error!("Export failed: {}", err); 82 + } 83 + } 81 84 // Placeholder for actual export logic. 82 85 // Implement your export functionality here. 83 - println!( 84 - "Export would run here with did={} pds_url={} out_dir={}", 85 - did, 86 - pds_url, 87 - out_dir.display() 88 - ); 86 + // println!( 87 + // "Export would run here with did={} pds_url={} out_dir={}", 88 + // did, 89 + // pds_url, 90 + // out_dir.display() 91 + // ); 89 92 } 90 93 } 91 94 } 92 95 93 96 async fn do_work(pds_url: String, did: String) -> anyhow::Result<()>{ 94 97 use futures::TryStreamExt; 95 - // application/vnd.ipld.car 96 - let mut client = reqwest::Client::new(); 97 - let response = client 98 + let atproto_client = reqwest::Client::new(); 99 + 100 + 101 + // Custom region requires valid region name and endpoint 102 + let region_name = env::var("S3_REGION")?; 103 + let endpoint = env::var("S3_ENDPOINT")?; 104 + let region = Region::Custom { region: region_name, endpoint }; 105 + 106 + let bucket = Bucket::new( 107 + env::var("S3_BUCKET_NAME")?.as_str(), 108 + region, 109 + // Credentials are collected from environment, config, profile or instance metadata 110 + Credentials::new(Some(env::var("S3_ACCESS_KEY")?.as_str()), Some(env::var("S3_SECRET_KEY")?.as_str()), None, None, None)?, 111 + )?; 112 + 113 + let mut response = atproto_client 98 114 .get(format!("{pds_url}/xrpc/com.atproto.sync.getRepo?did={did}")) 99 115 .header(ACCEPT, "application/vnd.ipld.car") 100 116 .send() ··· 104 120 .map_err(|e| futures::io::Error::new(futures::io::ErrorKind::Other, e)) 105 121 .into_async_read() 106 122 .compat(); 107 - 123 + bucket.put_object_stream(&mut response, did.as_str()).await?; 108 124 Ok(()) 109 125 110 126