Merge pull request #12478 from zhongwencool/check-duplicated-mapping-key-in-swagger

chore: add duplicated key assert in swagger.json
This commit is contained in:
zhongwencool 2024-02-04 14:44:00 +08:00 committed by GitHub
commit 2614d21a15
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
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};