1
Fork 0
framed-rs/bin/decode_typed

49 lines
1.4 KiB
Bash
Executable file

#!/usr/bin/env bash
set -e
REPO_DIR="$(cd $(dirname ${BASH_SOURCE[0]} )/..; pwd )"
TYPE_CRATE_DIR="${TYPE_CRATE_DIR-${REPO_DIR}/test_type}"
TYPE_NAME="${TYPE_NAME-framed_test_type::Test}"
echo "TYPE_CRATE_DIR = '${TYPE_CRATE_DIR}'"
echo "TYPE_NAME = '${TYPE_NAME}'"
TYPE_CRATE_NAME="$(cargo read-manifest --manifest-path "${TYPE_CRATE_DIR}/Cargo.toml" | jq '.name' -r)"
TMP_DIR="${REPO_DIR}/target/decode_typed/tmp"
mkdir -p "${TMP_DIR}";
rm -f "${TMP_DIR}/"*;
# TODO: Move dynamic.rs to TMP_DIR, both here and in the include! in main.rs.
export FRAMED_DECODE_DYNAMIC_RS="${TMP_DIR}/dynamic_${TYPE_NAME}.rs";
cat > "${FRAMED_DECODE_DYNAMIC_RS}" <<EOF
// Generated by framed-rs/bin/decode_typed, your changes will be overwritten.
extern crate ${TYPE_CRATE_NAME};
use ${TYPE_NAME} as UserType;
static USER_TYPE_NAME: &'static str = "${TYPE_NAME}";
EOF
cargo rustc \
--manifest-path "${TYPE_CRATE_DIR}/Cargo.toml" \
--lib \
-v \
-- \
-o "${TMP_DIR}/${TYPE_CRATE_NAME}.rlib" \
< /dev/null;
TYPE_CRATE_RLIB="$(ls "${TMP_DIR}"/lib${TYPE_CRATE_NAME}*.rlib)";
cargo rustc \
--manifest-path "${REPO_DIR}/decode/Cargo.toml" \
--bin framed_decode \
-v \
-- \
-o "${TMP_DIR}/decode" \
--extern ${TYPE_CRATE_NAME}="${TYPE_CRATE_RLIB}" \
--emit obj \
< /dev/null;
DECODE_PATH="$(find "${TMP_DIR}/decode"* -executable -type f)";
echo "";
echo "";
${DECODE_PATH};