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
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
};
}