function bos-args/build-parser-code-into() {
local -n parser_result_var="$1"; shift
local -A argvar argtype assignment
while [[ "${#@}" -gt 0 ]]; do
case "$1" in
-scalar|-array|-assoc)
argtype["$2"]="${1#-}";
argvar["$2"]="$3";
shift 3
;;
-assignment-*)
assignment["${1#-assignment-}"]="$2";
shift 2
;;
*)
>&2 echo "bad argument <$1>";
return 1
;;
esac
done
parser_result_var="while [[ \"\${#@}\" -gt 0 ]]; do
case \"\$1\" in
"
local argassign
for argname in "${!argvar[@]}"; do
argassign="${assignment["${argtype["$argname"]}"]}"
argassign="${argassign//\$\{name\}/${argvar["$argname"]}}"
if [[ "${argtype["$argname"]}" == scalar || "${argtype["$argname"]}" == array ]]; then
argassign="${argassign//\$\{value/\$\{2}"
parser_result_var+="-${argname}) $argassign; shift 2 ;;
"
elif [[ "${argtype["$argname"]}" == assoc ]]; then
argassign="${argassign//\$\{key/\$\{2}"
argassign="${argassign//\$\{value/\$\{3}"
parser_result_var+="-${argname}) $argassign; shift 3 ;;
"
fi
done
parser_result_var+="*) shift ;;
esac
done
"
return 0
}