refactor(schema_registry): use one func for both encode and decode check
This commit is contained in:
parent
5df1784b49
commit
fa275bf0a2
|
@ -74,24 +74,20 @@ handle_rule_function(schema_encode, [SchemaId, Term | MoreArgs]) ->
|
|||
iolist_to_binary(IOList);
|
||||
handle_rule_function(schema_encode, Args) ->
|
||||
error({args_count_error, {schema_encode, Args}});
|
||||
handle_rule_function(schema_check_decode, [SchemaId, Data | MoreArgs]) ->
|
||||
check_decode(SchemaId, Data, MoreArgs);
|
||||
handle_rule_function(schema_check_encode, [SchemaId, Term | MoreArgs]) ->
|
||||
check_encode(SchemaId, Term, MoreArgs);
|
||||
handle_rule_function(schema_check, [SchemaId, Data | MoreArgs]) ->
|
||||
schema_check(SchemaId, Data, MoreArgs);
|
||||
handle_rule_function(_, _) ->
|
||||
{error, no_match_for_function}.
|
||||
|
||||
-spec check_decode(schema_name(), encoded_data(), [term()]) -> decoded_data().
|
||||
check_decode(SerdeName, Data, VarArgs) ->
|
||||
-spec schema_check(schema_name(), decoded_data() | encoded_data(), [term()]) -> decoded_data().
|
||||
schema_check(SerdeName, Data, VarArgs) when is_list(VarArgs), is_binary(Data) ->
|
||||
with_serde(
|
||||
SerdeName,
|
||||
fun(Serde) ->
|
||||
?BOOL(SerdeName, eval_decode(Serde, [Data | VarArgs]))
|
||||
end
|
||||
).
|
||||
|
||||
-spec check_encode(schema_name(), decoded_data(), [term()]) -> encoded_data().
|
||||
check_encode(SerdeName, Data, VarArgs) when is_list(VarArgs) ->
|
||||
);
|
||||
schema_check(SerdeName, Data, VarArgs) when is_list(VarArgs), is_map(Data) ->
|
||||
with_serde(
|
||||
SerdeName,
|
||||
fun(Serde) ->
|
||||
|
|
|
@ -143,24 +143,26 @@ t_avro_invalid_schema(_Config) ->
|
|||
t_serde_not_found(_Config) ->
|
||||
%% for coverage
|
||||
NonexistentSerde = <<"nonexistent">>,
|
||||
EncodeData = #{},
|
||||
DecodeData = <<"data">>,
|
||||
?assertError(
|
||||
{serde_not_found, NonexistentSerde},
|
||||
emqx_schema_registry_serde:encode(NonexistentSerde, data)
|
||||
emqx_schema_registry_serde:encode(NonexistentSerde, EncodeData)
|
||||
),
|
||||
?assertError(
|
||||
{serde_not_found, NonexistentSerde},
|
||||
emqx_schema_registry_serde:decode(NonexistentSerde, data)
|
||||
emqx_schema_registry_serde:decode(NonexistentSerde, DecodeData)
|
||||
),
|
||||
?assertError(
|
||||
{serde_not_found, NonexistentSerde},
|
||||
emqx_schema_registry_serde:handle_rule_function(schema_check_decode, [
|
||||
NonexistentSerde, data
|
||||
emqx_schema_registry_serde:handle_rule_function(schema_check, [
|
||||
NonexistentSerde, EncodeData
|
||||
])
|
||||
),
|
||||
?assertError(
|
||||
{serde_not_found, NonexistentSerde},
|
||||
emqx_schema_registry_serde:handle_rule_function(schema_check_encode, [
|
||||
NonexistentSerde, data
|
||||
emqx_schema_registry_serde:handle_rule_function(schema_check, [
|
||||
NonexistentSerde, DecodeData
|
||||
])
|
||||
),
|
||||
ok.
|
||||
|
@ -232,9 +234,9 @@ t_json_validation(_Config) ->
|
|||
end,
|
||||
OK = #{<<"foo">> => 1, <<"bar">> => 2},
|
||||
NotOk = #{<<"bar">> => 2},
|
||||
?assert(F(schema_check_encode, OK)),
|
||||
?assert(F(schema_check_decode, <<"{\"foo\": 1, \"bar\": 2}">>)),
|
||||
?assertNot(F(schema_check_encode, NotOk)),
|
||||
?assertNot(F(schema_check_decode, <<"{\"bar\": 2}">>)),
|
||||
?assertNot(F(schema_check_decode, <<"{\"foo\": \"notinteger\", \"bar\": 2}">>)),
|
||||
?assert(F(schema_check, OK)),
|
||||
?assert(F(schema_check, <<"{\"foo\": 1, \"bar\": 2}">>)),
|
||||
?assertNot(F(schema_check, NotOk)),
|
||||
?assertNot(F(schema_check, <<"{\"bar\": 2}">>)),
|
||||
?assertNot(F(schema_check, <<"{\"foo\": \"notinteger\", \"bar\": 2}">>)),
|
||||
ok.
|
||||
|
|
Loading…
Reference in New Issue