feat(schema): support qos type.
This commit is contained in:
parent
2605eac4b1
commit
36cf00108c
|
@ -38,7 +38,9 @@
|
||||||
-type ip_port() :: tuple().
|
-type ip_port() :: tuple().
|
||||||
-type cipher() :: map().
|
-type cipher() :: map().
|
||||||
-type rfc3339_system_time() :: integer().
|
-type rfc3339_system_time() :: integer().
|
||||||
|
-type qos():: integer().
|
||||||
|
|
||||||
|
-typerefl_from_string({qos/0, emqx_schema, to_qos}).
|
||||||
-typerefl_from_string({duration/0, emqx_schema, to_duration}).
|
-typerefl_from_string({duration/0, emqx_schema, to_duration}).
|
||||||
-typerefl_from_string({duration_s/0, emqx_schema, to_duration_s}).
|
-typerefl_from_string({duration_s/0, emqx_schema, to_duration_s}).
|
||||||
-typerefl_from_string({duration_ms/0, emqx_schema, to_duration_ms}).
|
-typerefl_from_string({duration_ms/0, emqx_schema, to_duration_ms}).
|
||||||
|
@ -62,7 +64,7 @@
|
||||||
mk_duration/2, to_bytesize/1, to_wordsize/1,
|
mk_duration/2, to_bytesize/1, to_wordsize/1,
|
||||||
to_percent/1, to_comma_separated_list/1,
|
to_percent/1, to_comma_separated_list/1,
|
||||||
to_bar_separated_list/1, to_ip_port/1,
|
to_bar_separated_list/1, to_ip_port/1,
|
||||||
to_erl_cipher_suite/1,
|
to_erl_cipher_suite/1, to_qos/1,
|
||||||
to_comma_separated_atoms/1,
|
to_comma_separated_atoms/1,
|
||||||
rfc3339_to_system_time/1]).
|
rfc3339_to_system_time/1]).
|
||||||
|
|
||||||
|
@ -71,7 +73,7 @@
|
||||||
-reflect_type([ duration/0, duration_s/0, duration_ms/0,
|
-reflect_type([ duration/0, duration_s/0, duration_ms/0,
|
||||||
bytesize/0, wordsize/0, percent/0, file/0,
|
bytesize/0, wordsize/0, percent/0, file/0,
|
||||||
comma_separated_list/0, bar_separated_list/0, ip_port/0,
|
comma_separated_list/0, bar_separated_list/0, ip_port/0,
|
||||||
cipher/0,
|
cipher/0, qos/0,
|
||||||
comma_separated_atoms/0,
|
comma_separated_atoms/0,
|
||||||
rfc3339_system_time/0]).
|
rfc3339_system_time/0]).
|
||||||
|
|
||||||
|
@ -312,7 +314,7 @@ message within this interval."""
|
||||||
desc => "Maximum topic levels allowed."
|
desc => "Maximum topic levels allowed."
|
||||||
})}
|
})}
|
||||||
, {"max_qos_allowed",
|
, {"max_qos_allowed",
|
||||||
sc(range(0, 2),
|
sc(qos(),
|
||||||
#{ default => 2,
|
#{ default => 2,
|
||||||
desc => "Maximum QoS allowed."
|
desc => "Maximum QoS allowed."
|
||||||
})}
|
})}
|
||||||
|
@ -1529,6 +1531,12 @@ rfc3339_to_system_time(DateTime) ->
|
||||||
to_bar_separated_list(Str) ->
|
to_bar_separated_list(Str) ->
|
||||||
{ok, string:tokens(Str, "| ")}.
|
{ok, string:tokens(Str, "| ")}.
|
||||||
|
|
||||||
|
to_qos(Str) ->
|
||||||
|
case string:to_integer(Str) of
|
||||||
|
{Num, []} when Num >= 0 andalso Num =< 2 -> {ok, Num};
|
||||||
|
_ -> {error, Str}
|
||||||
|
end.
|
||||||
|
|
||||||
to_ip_port(Str) ->
|
to_ip_port(Str) ->
|
||||||
case string:tokens(Str, ": ") of
|
case string:tokens(Str, ": ") of
|
||||||
[Ip, Port] ->
|
[Ip, Port] ->
|
||||||
|
|
|
@ -453,6 +453,7 @@ typename_to_spec("timeout()", _Mod) -> #{<<"oneOf">> => [#{type => string, examp
|
||||||
typename_to_spec("bytesize()", _Mod) -> #{type => string, example => <<"32MB">>};
|
typename_to_spec("bytesize()", _Mod) -> #{type => string, example => <<"32MB">>};
|
||||||
typename_to_spec("wordsize()", _Mod) -> #{type => string, example => <<"1024KB">>};
|
typename_to_spec("wordsize()", _Mod) -> #{type => string, example => <<"1024KB">>};
|
||||||
typename_to_spec("map()", _Mod) -> #{type => object, example => #{}};
|
typename_to_spec("map()", _Mod) -> #{type => object, example => #{}};
|
||||||
|
typename_to_spec("qos()", _Mod) -> #{type => string, enum => [0, 1, 2], example => 0};
|
||||||
typename_to_spec("{binary(), binary()}", _Mod) -> #{type => object, example => #{}};
|
typename_to_spec("{binary(), binary()}", _Mod) -> #{type => object, example => #{}};
|
||||||
typename_to_spec("comma_separated_list()", _Mod) ->
|
typename_to_spec("comma_separated_list()", _Mod) ->
|
||||||
#{type => string, example => <<"item1,item2">>};
|
#{type => string, example => <<"item1,item2">>};
|
||||||
|
|
|
@ -40,7 +40,9 @@ t_in_query(_Config) ->
|
||||||
Expect =
|
Expect =
|
||||||
[#{description => <<"results per page (max 100)">>,
|
[#{description => <<"results per page (max 100)">>,
|
||||||
example => 1, in => query, name => per_page,
|
example => 1, in => query, name => per_page,
|
||||||
schema => #{example => 1, maximum => 100, minimum => 1, type => integer}}],
|
schema => #{example => 1, maximum => 100, minimum => 1, type => integer}},
|
||||||
|
#{description => <<"QOS">>, in => query, name => qos,
|
||||||
|
schema => #{enum => [0, 1, 2], example => 0, type => string}}],
|
||||||
validate("/test/in/query", Expect),
|
validate("/test/in/query", Expect),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
|
@ -148,8 +150,8 @@ t_in_path_trans(_Config) ->
|
||||||
t_in_query_trans(_Config) ->
|
t_in_query_trans(_Config) ->
|
||||||
Path = "/test/in/query",
|
Path = "/test/in/query",
|
||||||
Expect = {ok, #{bindings => #{},body => #{},
|
Expect = {ok, #{bindings => #{},body => #{},
|
||||||
query_string => #{<<"per_page">> => 100}}},
|
query_string => #{<<"per_page">> => 100, <<"qos">> => 1}}},
|
||||||
?assertEqual(Expect, trans_parameters(Path, #{}, #{<<"per_page">> => 100})),
|
?assertEqual(Expect, trans_parameters(Path, #{}, #{<<"per_page">> => 100, <<"qos">> => 1})),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
t_ref_trans(_Config) ->
|
t_ref_trans(_Config) ->
|
||||||
|
@ -286,7 +288,8 @@ schema("/test/in/query") ->
|
||||||
parameters => [
|
parameters => [
|
||||||
{per_page,
|
{per_page,
|
||||||
mk(range(1, 100),
|
mk(range(1, 100),
|
||||||
#{in => query, desc => <<"results per page (max 100)">>, example => 1})}
|
#{in => query, desc => <<"results per page (max 100)">>, example => 1})},
|
||||||
|
{qos, mk(emqx_schema:qos(), #{in => query, desc => <<"QOS">>})}
|
||||||
],
|
],
|
||||||
responses => #{200 => <<"ok">>}
|
responses => #{200 => <<"ok">>}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue