risq 0.4.1

Re-implementation of Bisq (https://github.com/bisq-network/bisq) in rust
#!/bin/bash

REPO_ROOT_DIR="$(dirname $( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd ))"

echo "Downloading common/src/main/proto/pb.proto from bisq github"
curl -s https://raw.githubusercontent.com/bisq-network/bisq/master/common/src/main/proto/pb.proto | \
  sed 's#\(.*java\)#// \1#' | \
  sed '/^package /a\
import "custom.proto";' | \
  sed 's/map<string, string>/repeated .risq.custom.JavaStringMapEntry/' \
  > ${REPO_ROOT_DIR}/proto/bisq/bisq.proto

# Running the generator code on each build is slow!
cp ${REPO_ROOT_DIR}/gen-proto.rs ${REPO_ROOT_DIR}/build.rs
cargo build
rm ${REPO_ROOT_DIR}/build.rs
rm ${REPO_ROOT_DIR}/src/generated/risq.custom.rs

TMPDIR=$(mktemp -d -t gen-proto.XXXXXX)
trap "rm -rf ${TMPDIR}" INT TERM QUIT EXIT
cat src/generated/io.bisq.protobuffer.rs | \
  sed -n '/^    pub enum Message {$/,$p' | \
  sed '1,/^    }$/!d' | \
  egrep -v '{|}|prost' | \
  sed 's/        \([A-Za-z]*\)(.*/\1/' \
  > ${TMPDIR}/payload_names

function to_snake_case() {
  echo $1 | \
    perl -pe 's/([a-z0-9])([A-Z])/$1_\L$2/g' | \
    perl -pe 's/([A-Z])/\L\1/g'
}

cat <<EOF > ${REPO_ROOT_DIR}/src/generated/payload_macros.rs
macro_rules! for_all_payloads {
    (\$m:ident) => {
EOF
cat ${TMPDIR}/payload_names | while read camlName; do
  echo "        \$m!($camlName,$(to_snake_case $camlName));"
done >> ${REPO_ROOT_DIR}/src/generated/payload_macros.rs
cat <<EOF >> ${REPO_ROOT_DIR}/src/generated/payload_macros.rs
    };
}