Improve the state management framework
This commit is contained in:
parent
1524b56fae
commit
0e15cedf53
37
rowbot
37
rowbot
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue