Improve the state management framework

This commit is contained in:
Nick Chambers 2021-11-22 02:00:12 -06:00
parent 1524b56fae
commit 0e15cedf53
1 changed files with 25 additions and 12 deletions

37
rowbot
View File

@ -14,24 +14,26 @@ stty -echoctl
# cerealizers
put_assoc_array() {
local key put_name=RB_AA_${1^^}
declare -n assoc_array=$1
declare -n scalar=RB_AA_${1^^}
local key
declare -n scalar=$put_name
for key in "${!assoc_array[@]}"; do
scalar+=${#key},${#assoc_array[$key]}:$key${assoc_array[$key]}
done
export "RB_AA_${1^^}"
log_trace "storing %s as %s=%s" "$1" "$put_name" "${scalar@Q}"
export "${put_name?}"
}
get_assoc_array() {
if [[ ! -v $1 ]]; then
if [[ $1 && ! -v $1 ]]; then
declare -gA "$1"
fi
local key_len val_len key debug_str get_name=RB_AA_${1^^}
declare -n assoc_array=$1
declare -n scalar=RB_AA_${1^^}
declare -n scalar=$get_name
while [[ $scalar ]]; do
key_len=${scalar%%,*} val_len=${scalar#*,}
@ -40,27 +42,33 @@ get_assoc_array() {
scalar=${scalar:key_len + val_len}
done
unset "RB_AA_${1^^}"
for key in "${!assoc_array[@]}"; do
debug_str+="[$key]=${assoc_array[$key]@Q} "
done
log_trace "retreiving %s as %s=(%s)" "$get_name" "$1" "$debug_str"
unset "$get_name"
}
put_array() {
local val put_name=RB_A_${1^^}
# The variable named array is a nameref to an array
# shellcheck disable=SC2178
declare -n array=$1
declare -n scalar=RB_A_${1^^}
local val
declare -n scalar=$put_name
for val in "${array[@]}"; do
scalar+=${#val}:$val
done
export "RB_A_${1^^}"
log_trace "storing %s as %s=%s" "$1" "$put_name" "${scalar@Q}"
export "${put_name?}"
}
get_array() {
local len val get_name=RB_A_${1^^}
declare -n array=$1
declare -n scalar=RB_A_${1^^}
local len val
declare -n scalar=$get_name
while [[ $scalar ]]; do
len=${scalar%%:*} scalar=${scalar#"$len":}
@ -68,7 +76,8 @@ get_array() {
array+=( "$val" )
done
unset "RB_A_${1^^}"
log_trace "retreiving %s as %s=(%s)" "$get_name" "$1" "${array[*]@Q}"
unset "$get_name"
}
b64_encode() {
@ -343,8 +352,12 @@ state_resolve() {
declare -n ns_config=__rowbot_state_store_"$ns"
state_manage "$ns"
# This is a false positive.
# shellcheck disable=SC2102
if [[ -v config[$1] ]]; then
ns_config[$1]=${config[$1]}
elif [[ -v config[$ns-$1] ]]; then
ns_config[$1]=${config[$ns-$1]}
elif [[ -v DEFAULT ]]; then
ns_config[$1]=$DEFAULT
else