fix(config_api): improve the schema for config update APIs

This commit is contained in:
Shawn 2021-08-18 18:53:53 +08:00
parent f01b77e4fe
commit 213b7c2501
2 changed files with 14 additions and 4 deletions

View File

@ -24,6 +24,7 @@
, safe_atom_key_map/1
, unsafe_atom_key_map/1
, jsonable_map/1
, jsonable_value/1
, deep_convert/2
]).

View File

@ -24,6 +24,8 @@
, config_reset/2
]).
-export([get_conf_schema/2]).
-define(PARAM_CONF_PATH, [#{
name => conf_path,
in => query,
@ -171,15 +173,19 @@ get_conf_schema(BasePath, [{Key, Conf} | Confs], Result, MaxDepth) ->
%% TODO: generate from hocon schema
gen_schema(Conf) when is_boolean(Conf) ->
#{type => boolean};
with_default_value(#{type => boolean}, Conf);
gen_schema(Conf) when is_binary(Conf); is_atom(Conf) ->
#{type => string};
with_default_value(#{type => string}, Conf);
gen_schema(Conf) when is_number(Conf) ->
#{type => number};
with_default_value(#{type => number}, Conf);
gen_schema(Conf) when is_list(Conf) ->
#{type => array, items => case Conf of
[] -> #{}; %% don't know the type
_ -> gen_schema(hd(Conf))
_ ->
case io_lib:printable_unicode_list(Conf) of
true -> gen_schema(unicode:characters_to_binary(Conf));
false -> gen_schema(hd(Conf))
end
end};
gen_schema(Conf) when is_map(Conf) ->
#{type => object, properties =>
@ -189,6 +195,9 @@ gen_schema(_Conf) ->
%% by the hocon schema
#{type => string}.
with_default_value(Type, Value) ->
Type#{example => emqx_map_lib:jsonable_value(Value)}.
path_join(Path) ->
path_join(Path, "/").