. /usr/share/libubox/jshn.sh proto_config_add_generic() { json_add_array "" json_add_string "" "$1" json_add_int "" "$2" json_close_array } proto_config_add_int() { proto_config_add_generic "$1" 5 } proto_config_add_string() { proto_config_add_generic "$1" 3 } proto_config_add_boolean() { proto_config_add_generic "$1" 7 } add_default_handler() { case "$(type $1 2>/dev/null)" in *function*) return;; *) eval "$1() { return; }" esac } proto="$1" cmd="$2" data="$3" case "$cmd" in dump) add_protocol() { immediate=0 add_default_handler "$1_init_config" json_init json_add_string "name" "$1" eval "$1_init" json_add_boolean immediate "$immediate" json_add_array "config" eval "$1_init_config" json_close_array json_dump } ;; *) add_protocol() { [[ "$proto" == "$1" ]] || return 0 case "$cmd" in setup) eval "$1_setup \"\$data\"" ;; teardown) eval "$1_teardown \"\$data\"" ;; *) return 1 ;; esac } ;; esac