Index: head/net/Makefile =================================================================== --- head/net/Makefile +++ head/net/Makefile @@ -1185,6 +1185,7 @@ SUBDIR += queso SUBDIR += quiterss SUBDIR += quoted + SUBDIR += rabbiteer SUBDIR += rabbitmq SUBDIR += rabbitmq-c SUBDIR += rabbitmq-c-devel Index: head/net/rabbiteer/Makefile =================================================================== --- head/net/rabbiteer/Makefile +++ head/net/rabbiteer/Makefile @@ -0,0 +1,103 @@ +# $FreeBSD$ + +PORTNAME= rabbiteer +DISTVERSION= 1.4.1 +CATEGORIES= net + +MAINTAINER= dch@FreeBSD.org +COMMENT= AMQP & RabbitMQ command-line tool + +LICENSE= MIT +LICENSE_FILE= ${WRKSRC}/LICENCE-MIT + +USES= cargo ssl +USE_GITHUB= yes + +GH_ACCOUNT= algesten +GH_PROJECT= ${PORTNAME}-rs +GH_TAGNAME= c881238 + +CARGO_CRATES= aho-corasick-0.5.3 \ + amq-proto-0.1.0 \ + amqp-0.1.1 \ + ansi_term-0.11.0 \ + atty-0.2.11 \ + backtrace-0.3.9 \ + backtrace-sys-0.1.24 \ + bit-vec-0.4.4 \ + bitflags-0.7.1 \ + bitflags-1.0.4 \ + byteorder-0.5.3 \ + cc-1.0.24 \ + cfg-if-0.1.5 \ + clap-2.32.0 \ + cloudabi-0.0.3 \ + conduit-mime-types-0.7.3 \ + enum_primitive-0.1.1 \ + env_logger-0.3.5 \ + error-chain-0.10.0 \ + fuchsia-zircon-0.3.3 \ + fuchsia-zircon-sys-0.3.3 \ + gcc-0.3.55 \ + gdi32-sys-0.2.0 \ + idna-0.1.5 \ + kernel32-sys-0.2.2 \ + lazy_static-0.2.11 \ + libc-0.2.43 \ + libressl-pnacl-sys-2.1.6 \ + log-0.3.9 \ + log-0.4.5 \ + matches-0.1.8 \ + memchr-0.1.11 \ + num-traits-0.1.43 \ + num-traits-0.2.5 \ + openssl-0.7.14 \ + openssl-sys-0.7.17 \ + openssl-sys-extras-0.7.14 \ + percent-encoding-1.0.1 \ + pkg-config-0.3.14 \ + pnacl-build-helper-1.4.11 \ + rand-0.4.3 \ + rand-0.5.5 \ + rand_core-0.2.1 \ + redox_syscall-0.1.40 \ + redox_termios-0.1.1 \ + regex-0.1.80 \ + regex-syntax-0.3.9 \ + remove_dir_all-0.5.1 \ + rustc-demangle-0.1.9 \ + rustc-serialize-0.3.24 \ + same-file-0.1.3 \ + strsim-0.7.0 \ + tempdir-0.3.7 \ + termion-1.5.1 \ + textwrap-0.10.0 \ + thread-id-2.0.0 \ + thread_local-0.2.7 \ + unicode-bidi-0.3.4 \ + unicode-normalization-0.1.7 \ + unicode-width-0.1.5 \ + url-1.7.1 \ + user32-sys-0.2.0 \ + utf8-ranges-0.1.3 \ + vec_map-0.8.1 \ + walkdir-1.0.7 \ + winapi-0.2.8 \ + winapi-0.3.5 \ + winapi-build-0.1.1 \ + winapi-i686-pc-windows-gnu-0.4.0 \ + winapi-x86_64-pc-windows-gnu-0.4.0 + +PLIST_FILES= bin/rabbiteer + +PORTDOCS= README.md + +OPTIONS_DEFINE= DOCS + +post-install: + @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/rabbiteer + +post-install-DOCS-on: + (cd ${WRKSRC} && ${COPYTREE_SHARE} README.md ${STAGEDIR}${DOCSDIR}) + +.include Index: head/net/rabbiteer/distinfo =================================================================== --- head/net/rabbiteer/distinfo +++ head/net/rabbiteer/distinfo @@ -0,0 +1,143 @@ +TIMESTAMP = 1539546799 +SHA256 (rust/crates/aho-corasick-0.5.3.tar.gz) = ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66 +SIZE (rust/crates/aho-corasick-0.5.3.tar.gz) = 252052 +SHA256 (rust/crates/amq-proto-0.1.0.tar.gz) = 66d79639b71f74c7006c12683cc2ff221615a51a741688fa7798ccd080dc54d3 +SIZE (rust/crates/amq-proto-0.1.0.tar.gz) = 14517 +SHA256 (rust/crates/amqp-0.1.1.tar.gz) = e1a60ccc700b6a79480c8ee0140f231db4a23b7b6ff18581f84f7091f6bbcce4 +SIZE (rust/crates/amqp-0.1.1.tar.gz) = 19709 +SHA256 (rust/crates/ansi_term-0.11.0.tar.gz) = ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b +SIZE (rust/crates/ansi_term-0.11.0.tar.gz) = 17087 +SHA256 (rust/crates/atty-0.2.11.tar.gz) = 9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652 +SIZE (rust/crates/atty-0.2.11.tar.gz) = 5916 +SHA256 (rust/crates/backtrace-0.3.9.tar.gz) = 89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a +SIZE (rust/crates/backtrace-0.3.9.tar.gz) = 31054 +SHA256 (rust/crates/backtrace-sys-0.1.24.tar.gz) = c66d56ac8dabd07f6aacdaf633f4b8262f5b3601a810a0dcddffd5c22c69daa0 +SIZE (rust/crates/backtrace-sys-0.1.24.tar.gz) = 522332 +SHA256 (rust/crates/bit-vec-0.4.4.tar.gz) = 02b4ff8b16e6076c3e14220b39fbc1fabb6737522281a388998046859400895f +SIZE (rust/crates/bit-vec-0.4.4.tar.gz) = 17895 +SHA256 (rust/crates/bitflags-0.7.1.tar.gz) = ab1c7dc97f39523ffa63f3096291612e630cf3ed75aa6b9fad436bac4c700274 +SIZE (rust/crates/bitflags-0.7.1.tar.gz) = 11121 +SHA256 (rust/crates/bitflags-1.0.4.tar.gz) = 228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12 +SIZE (rust/crates/bitflags-1.0.4.tar.gz) = 15282 +SHA256 (rust/crates/byteorder-0.5.3.tar.gz) = 0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855 +SIZE (rust/crates/byteorder-0.5.3.tar.gz) = 8643 +SHA256 (rust/crates/cc-1.0.24.tar.gz) = 70f2a88c2e69ceee91c209d8ef25b81fc1a65f42c7f14dfd59d1fed189e514d1 +SIZE (rust/crates/cc-1.0.24.tar.gz) = 43132 +SHA256 (rust/crates/cfg-if-0.1.5.tar.gz) = 0c4e7bb64a8ebb0d856483e1e682ea3422f883c5f5615a90d51a2c82fe87fdd3 +SIZE (rust/crates/cfg-if-0.1.5.tar.gz) = 7363 +SHA256 (rust/crates/clap-2.32.0.tar.gz) = b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e +SIZE (rust/crates/clap-2.32.0.tar.gz) = 196073 +SHA256 (rust/crates/cloudabi-0.0.3.tar.gz) = ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f +SIZE (rust/crates/cloudabi-0.0.3.tar.gz) = 22156 +SHA256 (rust/crates/conduit-mime-types-0.7.3.tar.gz) = 95ca30253581af809925ef68c2641cc140d6183f43e12e0af4992d53768bd7b8 +SIZE (rust/crates/conduit-mime-types-0.7.3.tar.gz) = 15889 +SHA256 (rust/crates/enum_primitive-0.1.1.tar.gz) = be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180 +SIZE (rust/crates/enum_primitive-0.1.1.tar.gz) = 4186 +SHA256 (rust/crates/env_logger-0.3.5.tar.gz) = 15abd780e45b3ea4f76b4e9a26ff4843258dd8a3eed2775a0e7368c2e7936c2f +SIZE (rust/crates/env_logger-0.3.5.tar.gz) = 5950 +SHA256 (rust/crates/error-chain-0.10.0.tar.gz) = d9435d864e017c3c6afeac1654189b06cdb491cf2ff73dbf0d73b0f292f42ff8 +SIZE (rust/crates/error-chain-0.10.0.tar.gz) = 18432 +SHA256 (rust/crates/fuchsia-zircon-0.3.3.tar.gz) = 2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82 +SIZE (rust/crates/fuchsia-zircon-0.3.3.tar.gz) = 22565 +SHA256 (rust/crates/fuchsia-zircon-sys-0.3.3.tar.gz) = 3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7 +SIZE (rust/crates/fuchsia-zircon-sys-0.3.3.tar.gz) = 7191 +SHA256 (rust/crates/gcc-0.3.55.tar.gz) = 8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2 +SIZE (rust/crates/gcc-0.3.55.tar.gz) = 37262 +SHA256 (rust/crates/gdi32-sys-0.2.0.tar.gz) = 0912515a8ff24ba900422ecda800b52f4016a56251922d397c576bf92c690518 +SIZE (rust/crates/gdi32-sys-0.2.0.tar.gz) = 7643 +SHA256 (rust/crates/idna-0.1.5.tar.gz) = 38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e +SIZE (rust/crates/idna-0.1.5.tar.gz) = 258735 +SHA256 (rust/crates/kernel32-sys-0.2.2.tar.gz) = 7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d +SIZE (rust/crates/kernel32-sys-0.2.2.tar.gz) = 24537 +SHA256 (rust/crates/lazy_static-0.2.11.tar.gz) = 76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73 +SIZE (rust/crates/lazy_static-0.2.11.tar.gz) = 12361 +SHA256 (rust/crates/libc-0.2.43.tar.gz) = 76e3a3ef172f1a0b9a9ff0dd1491ae5e6c948b94479a3021819ba7d860c8645d +SIZE (rust/crates/libc-0.2.43.tar.gz) = 353810 +SHA256 (rust/crates/libressl-pnacl-sys-2.1.6.tar.gz) = cbc058951ab6a3ef35ca16462d7642c4867e6403520811f28537a4e2f2db3e71 +SIZE (rust/crates/libressl-pnacl-sys-2.1.6.tar.gz) = 2697179 +SHA256 (rust/crates/log-0.3.9.tar.gz) = e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b +SIZE (rust/crates/log-0.3.9.tar.gz) = 16686 +SHA256 (rust/crates/log-0.4.5.tar.gz) = d4fcce5fa49cc693c312001daf1d13411c4a5283796bac1084299ea3e567113f +SIZE (rust/crates/log-0.4.5.tar.gz) = 22221 +SHA256 (rust/crates/matches-0.1.8.tar.gz) = 7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08 +SIZE (rust/crates/matches-0.1.8.tar.gz) = 2216 +SHA256 (rust/crates/memchr-0.1.11.tar.gz) = d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20 +SIZE (rust/crates/memchr-0.1.11.tar.gz) = 6977 +SHA256 (rust/crates/num-traits-0.1.43.tar.gz) = 92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31 +SIZE (rust/crates/num-traits-0.1.43.tar.gz) = 7659 +SHA256 (rust/crates/num-traits-0.2.5.tar.gz) = 630de1ef5cc79d0cdd78b7e33b81f083cbfe90de0f4b2b2f07f905867c70e9fe +SIZE (rust/crates/num-traits-0.2.5.tar.gz) = 39136 +SHA256 (rust/crates/openssl-0.7.14.tar.gz) = c4117b6244aac42ed0150a6019b4d953d28247c5dd6ae6f46ae469b5f2318733 +SIZE (rust/crates/openssl-0.7.14.tar.gz) = 63824 +SHA256 (rust/crates/openssl-sys-0.7.17.tar.gz) = 89c47ee94c352eea9ddaf8e364be7f978a3bb6d66d73176572484238dd5a5c3f +SIZE (rust/crates/openssl-sys-0.7.17.tar.gz) = 12097 +SHA256 (rust/crates/openssl-sys-extras-0.7.14.tar.gz) = 11c5e1dba7d3d03d80f045bf0d60111dc69213b67651e7c889527a3badabb9fa +SIZE (rust/crates/openssl-sys-extras-0.7.14.tar.gz) = 3871 +SHA256 (rust/crates/percent-encoding-1.0.1.tar.gz) = 31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831 +SIZE (rust/crates/percent-encoding-1.0.1.tar.gz) = 10057 +SHA256 (rust/crates/pkg-config-0.3.14.tar.gz) = 676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c +SIZE (rust/crates/pkg-config-0.3.14.tar.gz) = 13565 +SHA256 (rust/crates/pnacl-build-helper-1.4.11.tar.gz) = dfbe13ee77c06fb633d71c72438bd983286bb3521863a753ade8e951c7efb090 +SIZE (rust/crates/pnacl-build-helper-1.4.11.tar.gz) = 5447 +SHA256 (rust/crates/rand-0.4.3.tar.gz) = 8356f47b32624fef5b3301c1be97e5944ecdd595409cc5da11d05f211db6cfbd +SIZE (rust/crates/rand-0.4.3.tar.gz) = 76094 +SHA256 (rust/crates/rand-0.5.5.tar.gz) = e464cd887e869cddcae8792a4ee31d23c7edd516700695608f5b98c67ee0131c +SIZE (rust/crates/rand-0.5.5.tar.gz) = 137359 +SHA256 (rust/crates/rand_core-0.2.1.tar.gz) = edecf0f94da5551fc9b492093e30b041a891657db7940ee221f9d2f66e82eef2 +SIZE (rust/crates/rand_core-0.2.1.tar.gz) = 19262 +SHA256 (rust/crates/redox_syscall-0.1.40.tar.gz) = c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1 +SIZE (rust/crates/redox_syscall-0.1.40.tar.gz) = 14745 +SHA256 (rust/crates/redox_termios-0.1.1.tar.gz) = 7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76 +SIZE (rust/crates/redox_termios-0.1.1.tar.gz) = 3227 +SHA256 (rust/crates/regex-0.1.80.tar.gz) = 4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f +SIZE (rust/crates/regex-0.1.80.tar.gz) = 185806 +SHA256 (rust/crates/regex-syntax-0.3.9.tar.gz) = f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957 +SIZE (rust/crates/regex-syntax-0.3.9.tar.gz) = 117427 +SHA256 (rust/crates/remove_dir_all-0.5.1.tar.gz) = 3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5 +SIZE (rust/crates/remove_dir_all-0.5.1.tar.gz) = 8726 +SHA256 (rust/crates/rustc-demangle-0.1.9.tar.gz) = bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395 +SIZE (rust/crates/rustc-demangle-0.1.9.tar.gz) = 11463 +SHA256 (rust/crates/rustc-serialize-0.3.24.tar.gz) = dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda +SIZE (rust/crates/rustc-serialize-0.3.24.tar.gz) = 45926 +SHA256 (rust/crates/same-file-0.1.3.tar.gz) = d931a44fdaa43b8637009e7632a02adc4f2b2e0733c08caa4cf00e8da4a117a7 +SIZE (rust/crates/same-file-0.1.3.tar.gz) = 7078 +SHA256 (rust/crates/strsim-0.7.0.tar.gz) = bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550 +SIZE (rust/crates/strsim-0.7.0.tar.gz) = 8435 +SHA256 (rust/crates/tempdir-0.3.7.tar.gz) = 15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8 +SIZE (rust/crates/tempdir-0.3.7.tar.gz) = 11468 +SHA256 (rust/crates/termion-1.5.1.tar.gz) = 689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096 +SIZE (rust/crates/termion-1.5.1.tar.gz) = 20659 +SHA256 (rust/crates/textwrap-0.10.0.tar.gz) = 307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6 +SIZE (rust/crates/textwrap-0.10.0.tar.gz) = 15986 +SHA256 (rust/crates/thread-id-2.0.0.tar.gz) = a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03 +SIZE (rust/crates/thread-id-2.0.0.tar.gz) = 6108 +SHA256 (rust/crates/thread_local-0.2.7.tar.gz) = 8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5 +SIZE (rust/crates/thread_local-0.2.7.tar.gz) = 10954 +SHA256 (rust/crates/unicode-bidi-0.3.4.tar.gz) = 49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5 +SIZE (rust/crates/unicode-bidi-0.3.4.tar.gz) = 32228 +SHA256 (rust/crates/unicode-normalization-0.1.7.tar.gz) = 6a0180bc61fc5a987082bfa111f4cc95c4caff7f9799f3e46df09163a937aa25 +SIZE (rust/crates/unicode-normalization-0.1.7.tar.gz) = 330545 +SHA256 (rust/crates/unicode-width-0.1.5.tar.gz) = 882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526 +SIZE (rust/crates/unicode-width-0.1.5.tar.gz) = 15761 +SHA256 (rust/crates/url-1.7.1.tar.gz) = 2a321979c09843d272956e73700d12c4e7d3d92b2ee112b31548aef0d4efc5a6 +SIZE (rust/crates/url-1.7.1.tar.gz) = 68266 +SHA256 (rust/crates/user32-sys-0.2.0.tar.gz) = 4ef4711d107b21b410a3a974b1204d9accc8b10dad75d8324b5d755de1617d47 +SIZE (rust/crates/user32-sys-0.2.0.tar.gz) = 10624 +SHA256 (rust/crates/utf8-ranges-0.1.3.tar.gz) = a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f +SIZE (rust/crates/utf8-ranges-0.1.3.tar.gz) = 8422 +SHA256 (rust/crates/vec_map-0.8.1.tar.gz) = 05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a +SIZE (rust/crates/vec_map-0.8.1.tar.gz) = 14959 +SHA256 (rust/crates/walkdir-1.0.7.tar.gz) = bb08f9e670fab86099470b97cd2b252d6527f0b3cc1401acdb595ffc9dd288ff +SIZE (rust/crates/walkdir-1.0.7.tar.gz) = 17883 +SHA256 (rust/crates/winapi-0.2.8.tar.gz) = 167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a +SIZE (rust/crates/winapi-0.2.8.tar.gz) = 455145 +SHA256 (rust/crates/winapi-0.3.5.tar.gz) = 773ef9dcc5f24b7d850d0ff101e542ff24c3b090a9768e03ff889fdef41f00fd +SIZE (rust/crates/winapi-0.3.5.tar.gz) = 997942 +SHA256 (rust/crates/winapi-build-0.1.1.tar.gz) = 2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc +SIZE (rust/crates/winapi-build-0.1.1.tar.gz) = 669 +SHA256 (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.tar.gz) = ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6 +SIZE (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.tar.gz) = 2918815 +SHA256 (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.tar.gz) = 712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f +SIZE (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.tar.gz) = 2947998 +SHA256 (algesten-rabbiteer-rs-1.4.1-c881238_GH0.tar.gz) = 882450472ee00e5848c59c75c0eba1b07ffb2dc0d1ab494608930c474e457123 +SIZE (algesten-rabbiteer-rs-1.4.1-c881238_GH0.tar.gz) = 14909 Index: head/net/rabbiteer/files/patch-Cargo.lock =================================================================== --- head/net/rabbiteer/files/patch-Cargo.lock +++ head/net/rabbiteer/files/patch-Cargo.lock @@ -0,0 +1,282 @@ +--- Cargo.lock.orig 2018-10-14 19:59:45 UTC ++++ Cargo.lock +@@ -27,6 +27,7 @@ dependencies = [ + "amq-proto 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ++ "openssl 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + ] + +@@ -76,6 +77,11 @@ source = "registry+https://github.com/rust-lang/crates + + [[package]] + name = "bitflags" ++version = "0.7.1" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++ ++[[package]] ++name = "bitflags" + version = "1.0.4" + source = "registry+https://github.com/rust-lang/crates.io-index" + +@@ -164,6 +170,20 @@ version = "0.3.3" + source = "registry+https://github.com/rust-lang/crates.io-index" + + [[package]] ++name = "gcc" ++version = "0.3.55" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++ ++[[package]] ++name = "gdi32-sys" ++version = "0.2.0" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++dependencies = [ ++ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ++ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ++] ++ ++[[package]] + name = "idna" + version = "0.1.5" + source = "registry+https://github.com/rust-lang/crates.io-index" +@@ -183,11 +203,24 @@ dependencies = [ + ] + + [[package]] ++name = "lazy_static" ++version = "0.2.11" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++ ++[[package]] + name = "libc" + version = "0.2.43" + source = "registry+https://github.com/rust-lang/crates.io-index" + + [[package]] ++name = "libressl-pnacl-sys" ++version = "2.1.6" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++dependencies = [ ++ "pnacl-build-helper 1.4.11 (registry+https://github.com/rust-lang/crates.io-index)", ++] ++ ++[[package]] + name = "log" + version = "0.3.9" + source = "registry+https://github.com/rust-lang/crates.io-index" +@@ -230,11 +263,60 @@ version = "0.2.5" + source = "registry+https://github.com/rust-lang/crates.io-index" + + [[package]] ++name = "openssl" ++version = "0.7.14" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++dependencies = [ ++ "bitflags 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", ++ "gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)", ++ "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", ++ "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ++ "openssl-sys 0.7.17 (registry+https://github.com/rust-lang/crates.io-index)", ++ "openssl-sys-extras 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)", ++] ++ ++[[package]] ++name = "openssl-sys" ++version = "0.7.17" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++dependencies = [ ++ "gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ++ "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ++ "libressl-pnacl-sys 2.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ++ "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", ++ "user32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ++] ++ ++[[package]] ++name = "openssl-sys-extras" ++version = "0.7.14" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++dependencies = [ ++ "gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)", ++ "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ++ "openssl-sys 0.7.17 (registry+https://github.com/rust-lang/crates.io-index)", ++] ++ ++[[package]] + name = "percent-encoding" + version = "1.0.1" + source = "registry+https://github.com/rust-lang/crates.io-index" + + [[package]] ++name = "pkg-config" ++version = "0.3.14" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++ ++[[package]] ++name = "pnacl-build-helper" ++version = "1.4.11" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++dependencies = [ ++ "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ++ "walkdir 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", ++] ++ ++[[package]] + name = "rabbiteer" + version = "1.4.1" + dependencies = [ +@@ -248,6 +330,16 @@ dependencies = [ + + [[package]] + name = "rand" ++version = "0.4.3" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++dependencies = [ ++ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ++ "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ++ "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ++] ++ ++[[package]] ++name = "rand" + version = "0.5.5" + source = "registry+https://github.com/rust-lang/crates.io-index" + dependencies = [ +@@ -294,6 +386,14 @@ version = "0.3.9" + source = "registry+https://github.com/rust-lang/crates.io-index" + + [[package]] ++name = "remove_dir_all" ++version = "0.5.1" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++dependencies = [ ++ "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ++] ++ ++[[package]] + name = "rustc-demangle" + version = "0.1.9" + source = "registry+https://github.com/rust-lang/crates.io-index" +@@ -304,11 +404,29 @@ version = "0.3.24" + source = "registry+https://github.com/rust-lang/crates.io-index" + + [[package]] ++name = "same-file" ++version = "0.1.3" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++dependencies = [ ++ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ++ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ++] ++ ++[[package]] + name = "strsim" + version = "0.7.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + + [[package]] ++name = "tempdir" ++version = "0.3.7" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++dependencies = [ ++ "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ++ "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ++] ++ ++[[package]] + name = "termion" + version = "1.5.1" + source = "registry+https://github.com/rust-lang/crates.io-index" +@@ -372,6 +490,15 @@ dependencies = [ + ] + + [[package]] ++name = "user32-sys" ++version = "0.2.0" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++dependencies = [ ++ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ++ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ++] ++ ++[[package]] + name = "utf8-ranges" + version = "0.1.3" + source = "registry+https://github.com/rust-lang/crates.io-index" +@@ -382,6 +509,16 @@ version = "0.8.1" + source = "registry+https://github.com/rust-lang/crates.io-index" + + [[package]] ++name = "walkdir" ++version = "1.0.7" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++dependencies = [ ++ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ++ "same-file 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ++ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ++] ++ ++[[package]] + name = "winapi" + version = "0.2.8" + source = "registry+https://github.com/rust-lang/crates.io-index" +@@ -419,6 +556,7 @@ source = "registry+https://github.com/rust-lang/crates + "checksum backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a" + "checksum backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)" = "c66d56ac8dabd07f6aacdaf633f4b8262f5b3601a810a0dcddffd5c22c69daa0" + "checksum bit-vec 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "02b4ff8b16e6076c3e14220b39fbc1fabb6737522281a388998046859400895f" ++"checksum bitflags 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab1c7dc97f39523ffa63f3096291612e630cf3ed75aa6b9fad436bac4c700274" + "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" + "checksum byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855" + "checksum cc 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)" = "70f2a88c2e69ceee91c209d8ef25b81fc1a65f42c7f14dfd59d1fed189e514d1" +@@ -431,25 +569,38 @@ source = "registry+https://github.com/rust-lang/crates + "checksum error-chain 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d9435d864e017c3c6afeac1654189b06cdb491cf2ff73dbf0d73b0f292f42ff8" + "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" + "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" ++"checksum gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)" = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" ++"checksum gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0912515a8ff24ba900422ecda800b52f4016a56251922d397c576bf92c690518" + "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" + "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" ++"checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" + "checksum libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)" = "76e3a3ef172f1a0b9a9ff0dd1491ae5e6c948b94479a3021819ba7d860c8645d" ++"checksum libressl-pnacl-sys 2.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "cbc058951ab6a3ef35ca16462d7642c4867e6403520811f28537a4e2f2db3e71" + "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" + "checksum log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fcce5fa49cc693c312001daf1d13411c4a5283796bac1084299ea3e567113f" + "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" + "checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" + "checksum num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" + "checksum num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "630de1ef5cc79d0cdd78b7e33b81f083cbfe90de0f4b2b2f07f905867c70e9fe" ++"checksum openssl 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)" = "c4117b6244aac42ed0150a6019b4d953d28247c5dd6ae6f46ae469b5f2318733" ++"checksum openssl-sys 0.7.17 (registry+https://github.com/rust-lang/crates.io-index)" = "89c47ee94c352eea9ddaf8e364be7f978a3bb6d66d73176572484238dd5a5c3f" ++"checksum openssl-sys-extras 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)" = "11c5e1dba7d3d03d80f045bf0d60111dc69213b67651e7c889527a3badabb9fa" + "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" ++"checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c" ++"checksum pnacl-build-helper 1.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "dfbe13ee77c06fb633d71c72438bd983286bb3521863a753ade8e951c7efb090" ++"checksum rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8356f47b32624fef5b3301c1be97e5944ecdd595409cc5da11d05f211db6cfbd" + "checksum rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e464cd887e869cddcae8792a4ee31d23c7edd516700695608f5b98c67ee0131c" + "checksum rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "edecf0f94da5551fc9b492093e30b041a891657db7940ee221f9d2f66e82eef2" + "checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1" + "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" + "checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" + "checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" ++"checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" + "checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395" + "checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" ++"checksum same-file 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d931a44fdaa43b8637009e7632a02adc4f2b2e0733c08caa4cf00e8da4a117a7" + "checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550" ++"checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" + "checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" + "checksum textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6" + "checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +@@ -458,8 +609,10 @@ source = "registry+https://github.com/rust-lang/crates + "checksum unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6a0180bc61fc5a987082bfa111f4cc95c4caff7f9799f3e46df09163a937aa25" + "checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526" + "checksum url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2a321979c09843d272956e73700d12c4e7d3d92b2ee112b31548aef0d4efc5a6" ++"checksum user32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4ef4711d107b21b410a3a974b1204d9accc8b10dad75d8324b5d755de1617d47" + "checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" + "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" ++"checksum walkdir 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "bb08f9e670fab86099470b97cd2b252d6527f0b3cc1401acdb595ffc9dd288ff" + "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + "checksum winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "773ef9dcc5f24b7d850d0ff101e542ff24c3b090a9768e03ff889fdef41f00fd" + "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" Index: head/net/rabbiteer/files/patch-Cargo.toml =================================================================== --- head/net/rabbiteer/files/patch-Cargo.toml +++ head/net/rabbiteer/files/patch-Cargo.toml @@ -0,0 +1,17 @@ +--- Cargo.toml.orig 2018-10-14 19:59:53 UTC ++++ Cargo.toml +@@ -1,6 +1,6 @@ + [package] + name = "rabbiteer" +-version = "1.4.1" ++version = "1.4.1" + authors = ["Martin Algesten "] + description = "AMQP/RabbitMQ input/output CLI tool" + repository = "https://github.com/algesten/rabbiteer-rs" +@@ -20,4 +20,5 @@ url = "1" + #branch = "rabbiteer" + #path = "/Users/martin/dev/_dist/rust-amqp" + version = "0.1" +-default-features = false ++# commented out so we have TLS-enabled AMQP via OpenSSL ++# default-features = false Index: head/net/rabbiteer/files/patch-README.md =================================================================== --- head/net/rabbiteer/files/patch-README.md +++ head/net/rabbiteer/files/patch-README.md @@ -0,0 +1,20 @@ +--- README.md.orig 2018-10-14 19:59:57 UTC ++++ README.md +@@ -77,7 +77,7 @@ Publishing pushes data from stdin or a file to an exch + OPTIONS: + -c, --content-type Content type such as application/json. Inferred from filename if + possible. +- -e, --exchange Exchange to publish to [default ] ++ -e, --exchange Exchange to publish to [default ""] + -f, --file Filename (- is stdin) [default: -] + -H, --header
... Header on the form "My-Header: Value" + -r, --routing-key Routing key [default: ] +@@ -120,7 +120,7 @@ stdout or as files to a directory. + FLAGS: + -i, --info Include delivery info (and headers). + OPTIONS: +- -e, --exchange Exchange to subscribe to ++ -e, --exchange Exchange to subscribe to [default ""] + -o, --output Output directory (- is stdout) [default: -] + -r, --routing-key Routing key [default: #] + Index: head/net/rabbiteer/files/patch-src_client.rs =================================================================== --- head/net/rabbiteer/files/patch-src_client.rs +++ head/net/rabbiteer/files/patch-src_client.rs @@ -0,0 +1,266 @@ +--- src/client.rs.orig 2018-10-14 20:00:28 UTC ++++ src/client.rs +@@ -1,14 +1,14 @@ +-use std::io; +-use error::RbtError; +-use amqp::{self, Session, Options, Channel}; +-use amqp::protocol::basic::{Deliver, BasicProperties}; ++use amqp::protocol::basic::{BasicProperties, Deliver}; + use amqp::Basic; ++use amqp::{self, Channel, Options, Session}; + use amqp::{Table, TableEntry}; ++use error::RbtError; ++use std::io; + ++use std::error::Error; ++use std::sync::mpsc; + use std::thread; + use std::time::Duration; +-use std::sync::mpsc; +-use std::error::Error; + + pub struct Sendable { + pub exchange: String, +@@ -18,21 +18,20 @@ pub struct Sendable { + pub file_name: String, + pub reader: Box, + pub priority: u8, +- pub rpctimeout: u64 ++ pub rpctimeout: u64, + } + +-pub type ReceiveCb = FnMut(&mut Channel, Deliver, BasicProperties, Vec) -> Result<(), RbtError> + Send; ++pub type ReceiveCb = ++ FnMut(&mut Channel, Deliver, BasicProperties, Vec) -> Result<(), RbtError> + Send; + + pub struct Receiver { +- pub exchange:String, ++ pub exchange: String, + pub routing_key: Option, + pub auto_ack: bool, +- pub callback:Box, ++ pub callback: Box, + } + +- +-pub fn open_send(o:Options, s:Sendable, r:Option) -> Result<(),RbtError> { +- ++pub fn open_send(o: Options, s: Sendable, r: Option) -> Result<(), RbtError> { + // open the channel + let (mut session, mut channel) = _open(o)?; + +@@ -49,7 +48,10 @@ pub fn open_send(o:Options, s:Sendable, r:Option false ++ } ++ None => false, + }; + + // read input input buffer +@@ -87,12 +89,14 @@ pub fn open_send(o:Options, s:Sendable, r:Option { + ch.close(200, "Bye")?; +- } ++ } + Err(err) => { + if err.description() == "timed out waiting on channel".to_string() { + println!("Error timeout"); +@@ -121,10 +125,9 @@ pub fn open_send(o:Options, s:Sendable, r:Option TableEntry { ++fn narrow(str: &str) -> TableEntry { + let boolv = str.parse::(); + if !boolv.is_err() { + TableEntry::Bool(boolv.unwrap()) +@@ -138,19 +141,22 @@ fn narrow(str:&str) -> TableEntry { + } + } + +- +-fn _open(o:Options) -> Result<(Session, Channel),RbtError> { +-// errln!("Connecting to amqp://{}:{}@{}:{}/{}", +-// o.login, o.password, o.host, o.port, o.vhost); ++fn _open(o: Options) -> Result<(Session, Channel), RbtError> { ++ // errln!("Connecting to amqp://{}:{}@{}:{}/{}", ++ // o.login, o.password, o.host, o.port, o.vhost); + let mut session = Session::new(o)?; + let channel = session.open_channel(1)?; + Ok((session, channel)) + } + + impl amqp::Consumer for Receiver { +- fn handle_delivery(&mut self, channel:&mut Channel, deliver:Deliver, +- headers:BasicProperties, body:Vec){ +- ++ fn handle_delivery( ++ &mut self, ++ channel: &mut Channel, ++ deliver: Deliver, ++ headers: BasicProperties, ++ body: Vec, ++ ) { + let delivery_tag = deliver.delivery_tag.clone(); + + if self.auto_ack { +@@ -160,12 +166,15 @@ impl amqp::Consumer for Receiver { + + // and deliver to callback + ((self.callback)(channel, deliver, headers, body)).unwrap_or_else(::error::handle); +- + } + } + +-pub fn open_receive(o:Options, q:Option, force_declare: bool, r:Receiver) -> Result<(),RbtError> { +- ++pub fn open_receive( ++ o: Options, ++ q: Option, ++ force_declare: bool, ++ r: Receiver, ++) -> Result<(), RbtError> { + // open session/channel + let (_, mut channel) = _open(o)?; + +@@ -178,22 +187,33 @@ pub fn open_receive(o:Options, q:Option, force + Ok(()) + } + +- +-fn do_open_receive(channel:&mut Channel, q:Option, force_declare: bool, r:Receiver) -> Result { +- ++fn do_open_receive( ++ channel: &mut Channel, ++ q: Option, ++ force_declare: bool, ++ r: Receiver, ++) -> Result { + let mut auto_delete = false; + let mut bind_routing_key = r.routing_key.clone(); +- ++ + let queue_name = match q { + Some(q) => { + // Force the declaration of this queue + if force_declare { + // queue, passive, durable, exclusive, auto_delete, nowait, arguments +- let queue_declare = channel.queue_declare(q, false, false, auto_delete, auto_delete, false, Table::new())?; ++ let queue_declare = channel.queue_declare( ++ q, ++ false, ++ false, ++ auto_delete, ++ auto_delete, ++ false, ++ Table::new(), ++ )?; + + // name is auto generated + queue_declare.queue +- }else{ ++ } else { + q + } + } +@@ -205,25 +225,33 @@ fn do_open_receive(channel:&mut Channel, q:Option fmt::Result { + match *self { + RbtError::Message(ref s) => write!(f, "Error: {}", s), +- RbtError::AMQP(ref e) => write!(f, "{}", e), +- RbtError::IO(ref e) => write!(f, "{}", e), +- RbtError::UTF8(ref e) => write!(f, "{}", e), +- RbtError::JSON(ref e) => write!(f, "{}", e), +- RbtError::Clap(ref e) => write!(f, "{}", e), ++ RbtError::AMQP(ref e) => write!(f, "{}", e), ++ RbtError::IO(ref e) => write!(f, "{}", e), ++ RbtError::UTF8(ref e) => write!(f, "{}", e), ++ RbtError::JSON(ref e) => write!(f, "{}", e), ++ RbtError::Clap(ref e) => write!(f, "{}", e), + } + } + } + +- +-pub fn handle(e:RbtError) { ++pub fn handle(e: RbtError) { + errln!("{}", e); + ::std::process::exit(1); + } + +- + macro_rules! from( + ($t:ty, $p:tt) => { + impl From<$t> for RbtError { +@@ -70,7 +66,7 @@ from!(clap::Error, Clap); + from!(String, Message); + + impl From<&'static str> for RbtError { +- fn from(s:&str) -> RbtError { ++ fn from(s: &str) -> RbtError { + RbtError::Message(String::from(s)) + } + } Index: head/net/rabbiteer/files/patch-src_main.rs =================================================================== --- head/net/rabbiteer/files/patch-src_main.rs +++ head/net/rabbiteer/files/patch-src_main.rs @@ -0,0 +1,171 @@ +--- src/main.rs.orig 2018-10-14 20:00:28 UTC ++++ src/main.rs +@@ -1,36 +1,41 @@ +-extern crate rustc_serialize; + extern crate amqp; +-extern crate rand; + extern crate conduit_mime_types as mime; ++extern crate rand; ++extern crate rustc_serialize; + extern crate url; +-#[macro_use] extern crate clap; ++#[macro_use] ++extern crate clap; + +-#[macro_use] mod error; ++#[macro_use] ++mod error; + mod client; + mod output; + mod publish; + mod subscribe; + ++use clap::{App, Arg, SubCommand}; ++use error::RbtError; ++use rustc_serialize::json::Json; + use std::env; + use std::fs; +-use clap::{Arg, App, SubCommand}; ++use std::panic; + use url::Url; +-use rustc_serialize::json::Json; +-use error::RbtError; + +- + fn main() { ++ panic::set_hook(Box::new(|_panic| { ++ // chill ++ })); ++ + _main().unwrap_or_else(error::handle); + } + +-static HOST:&'static str = "127.0.0.1"; +-static PORT:&'static str = "5672"; +-static USER:&'static str = "guest"; +-static PASS:&'static str = "guest"; +-static VHST:&'static str = ""; ++static HOST: &'static str = "127.0.0.1"; ++static PORT: &'static str = "5672"; ++static USER: &'static str = "guest"; ++static PASS: &'static str = "guest"; ++static VHST: &'static str = ""; + +-fn _main() -> Result<(),RbtError> { +- ++fn _main() -> Result<(), RbtError> { + let matches = App::new("Rabbiteer") + .version(crate_version!()) + .author("Martin Algesten ") +@@ -124,7 +129,7 @@ fn _main() -> Result<(),RbtError> { + .short("e") + .long("exchange") + .takes_value(true) +- .required(true)) ++ .default_value("")) + .arg(Arg::with_name("routing_key") + .help("Routing key") + .short("r") +@@ -167,11 +172,11 @@ fn _main() -> Result<(),RbtError> { + + // start with defaults. + let mut opts = amqp::Options { +- host: value_t!(matches, "host", String)?, +- port: value_t!(matches, "port", u16)?, +- login: value_t!(matches, "user", String)?, ++ host: value_t!(matches, "host", String)?, ++ port: value_t!(matches, "port", u16)?, ++ login: value_t!(matches, "user", String)?, + password: value_t!(matches, "password", String)?, +- vhost: value_t!(matches, "vhost", String)?, ++ vhost: value_t!(matches, "vhost", String)?, + ..Default::default() + }; + +@@ -183,7 +188,7 @@ fn _main() -> Result<(),RbtError> { + parse_url(&mut opts, urlstr)?; + } + +- fn if_differs(opt:Option<&str>, def:&str, set:&mut FnMut(String) -> ()) { ++ fn if_differs(opt: Option<&str>, def: &str, set: &mut FnMut(String) -> ()) { + if let Some(v) = opt { + if v != def { + set(v.to_string()); +@@ -191,44 +196,46 @@ fn _main() -> Result<(),RbtError> { + } + } + +- if_differs(matches.value_of("host"), HOST, &mut|v|{ opts.host = v }); +- if_differs(matches.value_of("port"), PORT, &mut|v|{ opts.port = v.parse::().unwrap() }); +- if_differs(matches.value_of("user"), USER, &mut|v|{ opts.login = v }); +- if_differs(matches.value_of("password"), PASS, &mut|v|{ opts.password = v }); +- if_differs(matches.value_of("vhost"), VHST, &mut|v|{ opts.vhost = v }); ++ if_differs(matches.value_of("host"), HOST, &mut |v| { ++ opts.host = v ++ }); ++ if_differs(matches.value_of("port"), PORT, &mut |v| { ++ opts.port = v.parse::().unwrap() ++ }); ++ if_differs(matches.value_of("user"), USER, &mut |v| { ++ opts.login = v ++ }); ++ if_differs(matches.value_of("password"), PASS, &mut |v| { ++ opts.password = v ++ }); ++ if_differs(matches.value_of("vhost"), VHST, &mut |v| { ++ opts.vhost = v ++ }); + + // depending on subcommand, we do one or the other + match matches.subcommand_name() { +- + // execute publish command + Some("publish") => { +- + // the args after the "publish command + let subm = matches.subcommand_matches("publish").unwrap(); + + publish::do_publish(opts, subm) ++ } + +- }, +- + // execute subscribe command + Some("subscribe") => { +- + // the args after the "subscribe" command + let subm = matches.subcommand_matches("subscribe").unwrap(); + + subscribe::do_subscribe(opts, subm) ++ } + +- }, +- + _ => rbterr!("Need subcommand. Try --help"), + } +- + } + +- +- + // update the opts object with the given url +-fn parse_url(opts:&mut amqp::Options, urlstr:String) -> Result<(),RbtError> { ++fn parse_url(opts: &mut amqp::Options, urlstr: String) -> Result<(), RbtError> { + if let Ok(url) = Url::parse(urlstr.as_ref()) { + if url.scheme() != "amqp" { + rbterr!("Unknown scheme: {}", url); +@@ -256,12 +263,9 @@ fn parse_url(opts:&mut amqp::Options, urlstr:String) - + } + } + +- +- + // update the opts object with the conf +-fn parse_conf(opts:&mut amqp::Options) -> bool { +- +- let mut update = |connopt:Option<&Json>| -> bool { ++fn parse_conf(opts: &mut amqp::Options) -> bool { ++ let mut update = |connopt: Option<&Json>| -> bool { + if let Some(conn) = connopt { + if conn.is_object() { + if let Json::String(ref v) = conn["host"] { Index: head/net/rabbiteer/files/patch-src_output.rs =================================================================== --- head/net/rabbiteer/files/patch-src_output.rs +++ head/net/rabbiteer/files/patch-src_output.rs @@ -0,0 +1,173 @@ +--- src/output.rs.orig 2018-10-14 20:00:28 UTC ++++ src/output.rs +@@ -1,10 +1,9 @@ +-use rustc_serialize::json::{self, Json, Object}; +-use rustc_serialize::base64::{self, ToBase64}; +-use amqp::protocol::basic::{Deliver, BasicProperties}; ++use amqp::protocol::basic::{BasicProperties, Deliver}; + use amqp::{Table, TableEntry}; + use error::RbtError; ++use rustc_serialize::base64::{self, ToBase64}; ++use rustc_serialize::json::{self, Json, Object}; + +- + #[derive(RustcEncodable)] + struct MsgDeliver { + consumer_tag: String, +@@ -27,24 +26,27 @@ struct Msg { + data: Json, + } + +-pub fn build_output(info:bool, deliver:&Deliver, +- props:&BasicProperties, body:Vec) -> Result,RbtError> { ++pub fn build_output( ++ info: bool, ++ deliver: &Deliver, ++ props: &BasicProperties, ++ body: Vec, ++) -> Result, RbtError> { + if info { +- + // delivery info + let mdel = MsgDeliver { +- consumer_tag:deliver.consumer_tag.clone(), +- delivery_tag:deliver.delivery_tag.clone(), +- redelivered:deliver.redelivered.clone(), +- exchange:deliver.exchange.clone(), +- routing_key:deliver.routing_key.clone(), ++ consumer_tag: deliver.consumer_tag.clone(), ++ delivery_tag: deliver.delivery_tag.clone(), ++ redelivered: deliver.redelivered.clone(), ++ exchange: deliver.exchange.clone(), ++ routing_key: deliver.routing_key.clone(), + }; + + let content_type = props.content_type.clone().unwrap_or(String::from("")); + + // properties + let mut mprops = MsgProps { +- content_type:content_type.clone(), ++ content_type: content_type.clone(), + headers: Object::new(), + }; + +@@ -57,9 +59,9 @@ pub fn build_output(info:bool, deliver:&Deliver, + + // and put it together + let msg = Msg { +- deliver:mdel, +- props:mprops, +- data:data, ++ deliver: mdel, ++ props: mprops, ++ data: data, + }; + + // encode +@@ -67,9 +69,7 @@ pub fn build_output(info:bool, deliver:&Deliver, + + // convert to bytes + Ok(js.to_string().as_bytes().to_owned()) +- + } else { +- + let content_type = props.content_type.clone().unwrap_or(String::from("")); + + match content_type.as_ref() { +@@ -82,32 +82,26 @@ pub fn build_output(info:bool, deliver:&Deliver, + + // convert to bytes + Ok(js.to_string().as_bytes().to_owned()) +- }, ++ } + + // just return untranslated bytes +- _ => Ok(body) ++ _ => Ok(body), + } +- + } + } + +- +-fn figure_out_body(content_type:String, body:Vec) -> Result { +- ++fn figure_out_body(content_type: String, body: Vec) -> Result { + // depending on content type, do something + match content_type.as_ref() { + "application/json" => Ok(Json::from_str(&String::from_utf8(body)?)?), + _ => Ok(match content_type.find("text/") { + Some(_) => Json::String(String::from_utf8(body)?), +- _ => Json::String(body.to_base64(base64::STANDARD)) +- }) ++ _ => Json::String(body.to_base64(base64::STANDARD)), ++ }), + } +- + } + +- +- +-fn table_to_json(table:&Table) -> Object { ++fn table_to_json(table: &Table) -> Object { + let mut ret = Object::new(); + for (skey, entry) in table { + ret.insert(skey.clone().to_string(), entry_to_json(&entry)); +@@ -115,33 +109,35 @@ fn table_to_json(table:&Table) -> Object { + ret + } + +-fn entry_to_json(entry:&TableEntry) -> Json { ++fn entry_to_json(entry: &TableEntry) -> Json { + match *entry { +- TableEntry::Bool(v) => Json::Boolean(v), +- TableEntry::ShortShortInt(v) => Json::I64(v as i64), +- TableEntry::ShortShortUint(v) => Json::U64(v as u64), +- TableEntry::ShortInt(v) => Json::I64(v as i64), +- TableEntry::ShortUint(v) => Json::U64(v as u64), +- TableEntry::LongInt(v) => Json::I64(v as i64), +- TableEntry::LongUint(v) => Json::U64(v as u64), +- TableEntry::LongLongInt(v) => Json::I64(v), +- TableEntry::LongLongUint(v) => Json::U64(v), +- TableEntry::Float(v) => Json::F64(v as f64), +- TableEntry::Double(v) => Json::F64(v), +- TableEntry::LongString(ref v) => Json::String(v.clone()), +- TableEntry::Void => Json::Null, +- TableEntry::FieldTable(ref v) => Json::Object(table_to_json(&v)), +- TableEntry::Timestamp(v) => Json::U64(v as u64), // maybe string date? ++ TableEntry::Bool(v) => Json::Boolean(v), ++ TableEntry::ShortShortInt(v) => Json::I64(v as i64), ++ TableEntry::ShortShortUint(v) => Json::U64(v as u64), ++ TableEntry::ShortInt(v) => Json::I64(v as i64), ++ TableEntry::ShortUint(v) => Json::U64(v as u64), ++ TableEntry::LongInt(v) => Json::I64(v as i64), ++ TableEntry::LongUint(v) => Json::U64(v as u64), ++ TableEntry::LongLongInt(v) => Json::I64(v), ++ TableEntry::LongLongUint(v) => Json::U64(v), ++ TableEntry::Float(v) => Json::F64(v as f64), ++ TableEntry::Double(v) => Json::F64(v), ++ TableEntry::LongString(ref v) => Json::String(v.clone()), ++ TableEntry::Void => Json::Null, ++ TableEntry::FieldTable(ref v) => Json::Object(table_to_json(&v)), ++ TableEntry::Timestamp(v) => Json::U64(v as u64), // maybe string date? + TableEntry::FieldArray(ref vs) => { +- let mut ret:Vec = Vec::new(); +- for v in vs { ret.push(entry_to_json(v)) } ++ let mut ret: Vec = Vec::new(); ++ for v in vs { ++ ret.push(entry_to_json(v)) ++ } + Json::Array(ret) +- }, ++ } + TableEntry::DecimalValue(decimals, v) => { +- let ten:f64 = (10 as u64).pow(decimals as u32) as f64; +- let dec:f64 = (v as f64) / ten; ++ let ten: f64 = (10 as u64).pow(decimals as u32) as f64; ++ let dec: f64 = (v as f64) / ten; + Json::F64(dec) +- }, ++ } + //_ => Err(format!("Cant translate {:?}", entry)), + // TableEntry::ShortString(ref v) => Ok(Json::String(v.clone())), + } Index: head/net/rabbiteer/files/patch-src_publish.rs =================================================================== --- head/net/rabbiteer/files/patch-src_publish.rs +++ head/net/rabbiteer/files/patch-src_publish.rs @@ -0,0 +1,137 @@ +--- src/publish.rs.orig 2018-10-14 20:00:28 UTC ++++ src/publish.rs +@@ -1,41 +1,38 @@ +-use std::io::{self, Write}; + use amqp; +-use amqp::protocol::basic::{Deliver, BasicProperties}; ++use amqp::protocol::basic::{BasicProperties, Deliver}; ++use amqp::Channel; + use clap::ArgMatches; +-use std::fs; +-use std::path::Path; +-use mime; + use client; + use error::RbtError; ++use mime; + use output; +-use amqp::{Channel}; ++use std::fs; ++use std::io::{self, Write}; + use std::panic; ++use std::path::Path; + +- + // helper function to turn a filename + // into a mime-type +-fn type_from_file(file:&String) -> Result { ++fn type_from_file(file: &String) -> Result { + let t = mime::Types::new().or(Err("Failed to read mime types"))?; + let path = Path::new(&file); + let mime = t.mime_for_path(&path); + Ok(mime.to_owned()) + } + +- +-pub fn do_publish(opts:amqp::Options, matches:&ArgMatches) -> Result<(),RbtError> { +- ++pub fn do_publish(opts: amqp::Options, matches: &ArgMatches) -> Result<(), RbtError> { + // either stdin or a file + let file = value_t!(matches, "file", String)?; +- let rpc = matches.is_present("rpc"); ++ let rpc = matches.is_present("rpc"); + let reader: Box = match file.as_ref() { + "-" => Box::new(io::stdin()), +- _ => Box::new(fs::File::open(&file)?), ++ _ => Box::new(fs::File::open(&file)?), + }; + + // either - or the name of the file +- let file_name:&str = match file.as_ref() { ++ let file_name: &str = match file.as_ref() { + "-" => "-", +- _ => { ++ _ => { + // XXX fix unwrapping + let ostr = Path::new(&file).file_name().unwrap(); + ostr.to_str().unwrap() +@@ -48,51 +45,49 @@ pub fn do_publish(opts:amqp::Options, matches:&ArgMatc + let c = matches.value_of("content_type").unwrap_or("-").to_string(); + match c.as_ref() { + "-" => type_from_file(&file)?, +- _ => c, ++ _ => c, + } + }; + +- + // the sendable wraps up the parsed parts + let sendable = client::Sendable { +- exchange: value_t!(matches, "exchange", String)?, +- routing_key: value_t!(matches, "routing_key", String)?, ++ exchange: value_t!(matches, "exchange", String)?, ++ routing_key: value_t!(matches, "routing_key", String)?, + content_type: content_type, +- headers: values_t!(matches, "header", String).unwrap_or(vec![]), +- file_name: file_name.to_owned(), +- reader: reader, +- priority: value_t!(matches, "priority", u8).unwrap_or(0), +- rpctimeout: value_t!(matches, "rpctimeout", u64).unwrap_or(0) ++ headers: values_t!(matches, "header", String).unwrap_or(vec![]), ++ file_name: file_name.to_owned(), ++ reader: reader, ++ priority: value_t!(matches, "priority", u8).unwrap_or(0), ++ rpctimeout: value_t!(matches, "rpctimeout", u64).unwrap_or(0), + }; + + // if we are doing an rpc with replyTo/correlationId, we set up a receiver + let rpc_receive = match rpc { + false => None, +- true => { +- let receive = +- move |channel: &mut Channel, deliver:Deliver, props:BasicProperties, body:Vec| -> +- Result<(),RbtError> { +- let msg = output::build_output(false, &deliver, &props, body)?; ++ true => { ++ let receive = move |channel: &mut Channel, ++ deliver: Deliver, ++ props: BasicProperties, ++ body: Vec| ++ -> Result<(), RbtError> { ++ let msg = output::build_output(false, &deliver, &props, body)?; + +- // just write to stdout +- let stdout = io::stdout(); ++ // just write to stdout ++ let stdout = io::stdout(); + +- // lock until end of scope +- let mut handle = stdout.lock(); ++ // lock until end of scope ++ let mut handle = stdout.lock(); + +- handle.write(&msg)?; +- handle.write(b"\n")?; +- handle.flush()?; +- +- // closing the channel +- channel.close(200, "Bye")?; +- panic::set_hook(Box::new(|_| { +- })); +- // Until amqp library finds a way to exit consumer, terminate consumer_thread here. +- panic!(); +- +- +- }; ++ handle.write(&msg)?; ++ handle.write(b"\n")?; ++ handle.flush()?; ++ ++ // closing the channel ++ channel.close(200, "Bye")?; ++ panic::set_hook(Box::new(|_| {})); ++ // Until amqp library finds a way to exit consumer, terminate consumer_thread here. ++ panic!(); ++ }; + + let receiver = client::Receiver { + exchange: "".to_owned(), Index: head/net/rabbiteer/files/patch-src_subscribe.rs =================================================================== --- head/net/rabbiteer/files/patch-src_subscribe.rs +++ head/net/rabbiteer/files/patch-src_subscribe.rs @@ -0,0 +1,147 @@ +--- src/subscribe.rs.orig 2018-10-14 20:00:28 UTC ++++ src/subscribe.rs +@@ -1,23 +1,21 @@ +-use std::io::{self, Write}; +-use rand::{thread_rng, Rng, distributions::Alphanumeric}; +-use amqp::protocol::basic::{Deliver, BasicProperties}; +-use amqp::{self, TableEntry, Channel}; ++use amqp::protocol::basic::{BasicProperties, Deliver}; ++use amqp::{self, Channel, TableEntry}; + use clap::ArgMatches; +-use std::fs; +-use std::path::Path; +-use mime; + use client; +-use output; + use error::RbtError; ++use mime; ++use output; ++use rand::{distributions::Alphanumeric, thread_rng, Rng}; ++use std::fs; ++use std::io::{self, Write}; + use std::panic; ++use std::path::Path; + +- +-pub fn do_subscribe(opts:amqp::Options, matches:&ArgMatches) -> Result<(),RbtError> { +- ++pub fn do_subscribe(opts: amqp::Options, matches: &ArgMatches) -> Result<(), RbtError> { + let output = value_t!(matches, "output", String)?; +- let queue : Option = matches.value_of("queue").map(str::to_owned); +- let force_declare : bool = matches.is_present("declare"); +- let info = matches.is_present("info"); ++ let queue: Option = matches.value_of("queue").map(str::to_owned); ++ let force_declare: bool = matches.is_present("declare"); ++ let info = matches.is_present("info"); + let single = matches.is_present("single"); + + // type lookup map +@@ -33,14 +31,15 @@ pub fn do_subscribe(opts:amqp::Options, matches:&ArgMa + } + } + +- let receive = move |channel: &mut Channel, deliver:Deliver, props:BasicProperties, body:Vec| -> +- Result<(),RbtError> { +- ++ let receive = move |channel: &mut Channel, ++ deliver: Deliver, ++ props: BasicProperties, ++ body: Vec| ++ -> Result<(), RbtError> { + let msg = output::build_output(info, &deliver, &props, body)?; + + match output.as_ref() { + "-" => { +- + // just write to stdout + let stdout = io::stdout(); + +@@ -50,10 +49,8 @@ pub fn do_subscribe(opts:amqp::Options, matches:&ArgMa + handle.write(&msg)?; + handle.write(b"\n")?; + handle.flush()?; +- +- }, +- _ => { +- ++ } ++ _ => { + // extract file name from headers, or fall back on random + let file_name = file_name_of(&props, &types); + +@@ -70,60 +67,60 @@ pub fn do_subscribe(opts:amqp::Options, matches:&ArgMa + + let mut f = fs::File::create(path)?; + f.write_all(&msg)?; +- + } +- + } + + // maybe end here? + if single { + // closing the channel + channel.close(200, "Bye")?; +- panic::set_hook(Box::new(|_| { +- })); ++ panic::set_hook(Box::new(|_| {})); + // Until amqp library finds a way to exit consumer, terminate consumer_thread here. + panic!(); + } + + Ok(()) +- + }; + + let receiver = client::Receiver { + exchange: value_t!(matches, "exchange", String)?, + routing_key: matches.value_of("routing_key").map(str::to_owned), +- auto_ack: ! matches.is_present("noack"), ++ auto_ack: !matches.is_present("noack"), + callback: Box::new(receive), + }; + + client::open_receive(opts, queue, force_declare, receiver) + } + +-fn file_name_of(props:&BasicProperties, types:&mime::Types) -> String { ++fn file_name_of(props: &BasicProperties, types: &mime::Types) -> String { ++ let content_type = props ++ .content_type ++ .clone() ++ .unwrap_or("application/octet-stream".to_owned()); + +- let content_type = +- props.content_type.clone().unwrap_or("application/octet-stream".to_owned()); +- + // figure out a good extension for this content type +- let ext = types.get_extension(&content_type) ++ let ext = types ++ .get_extension(&content_type) + .and_then(|x| Some(x[0].clone())) + .or_else(|| Some("bin".to_owned())) + .unwrap(); + + // prefer a fileName from headers, but fall back on + // a random name. +- props.headers.clone() ++ props ++ .headers ++ .clone() + .and_then(|x| match x.get("fileName") { + Some(&TableEntry::LongString(ref f)) => Some((*f).clone()), +- _ => None ++ _ => None, + }) + .or_else(|| Some(gen_rand_name(ext))) + .unwrap() + } + +-fn gen_rand_name(ext:String) -> String { ++fn gen_rand_name(ext: String) -> String { + // generate 16 ascii chars +- let mut rand:String = thread_rng().sample_iter(&Alphanumeric).take(16).collect(); ++ let mut rand: String = thread_rng().sample_iter(&Alphanumeric).take(16).collect(); + rand.push_str("."); + rand.push_str(&ext); + rand Index: head/net/rabbiteer/pkg-descr =================================================================== --- head/net/rabbiteer/pkg-descr +++ head/net/rabbiteer/pkg-descr @@ -0,0 +1,4 @@ +Command-line tool for publishing and subscribing to RabbitMQ, including +support for publish, subscribe, and RabbitMQ-style rpc calls. + +WWW: https://github.com/algesten/rabbiteer