chore: add duplicated key assert in swagger.json

This commit is contained in:
zhongwencool 2024-02-04 11:53:37 +08:00
parent 64d1459e7c
commit f7b0d1bc9d
1 changed files with 18 additions and 5 deletions

View File

@ -833,16 +833,29 @@ parse_object(Other, Module, Options) ->
).
parse_object_loop(PropList0, Module, Options) ->
PropList = lists:filter(
fun({_, Hocon}) ->
PropList = filter_hidden_key(PropList0, Module),
parse_object_loop(PropList, Module, Options, _Props = [], _Required = [], _Refs = []).
filter_hidden_key(PropList0, Module) ->
{PropList1, _} = lists:foldr(
fun({Key, Hocon} = Prop, {PropAcc, KeyAcc}) ->
NewKeyAcc = assert_no_duplicated_key(Key, KeyAcc, Module),
case hoconsc:is_schema(Hocon) andalso is_hidden(Hocon) of
true -> false;
false -> true
true -> {PropAcc, NewKeyAcc};
false -> {[Prop | PropAcc], NewKeyAcc}
end
end,
{[], []},
PropList0
),
parse_object_loop(PropList, Module, Options, _Props = [], _Required = [], _Refs = []).
PropList1.
assert_no_duplicated_key(Key, Keys, Module) ->
KeyBin = emqx_utils_conv:bin(Key),
case lists:member(KeyBin, Keys) of
true -> throw({duplicated_key, #{module => Module, key => KeyBin, keys => Keys}});
false -> [KeyBin | Keys]
end.
parse_object_loop([], _Module, _Options, Props, Required, Refs) ->
{lists:reverse(Props), lists:usort(Required), Refs};