refactor: avoid make when do serde
This commit is contained in:
parent
e5bd747b32
commit
28e8131984
|
@ -102,15 +102,17 @@ delete_schema(NameVsn) ->
|
||||||
-spec decode(schema_name(), encoded_data()) -> {ok, decoded_data()} | {error, any()}.
|
-spec decode(schema_name(), encoded_data()) -> {ok, decoded_data()} | {error, any()}.
|
||||||
decode(SerdeName, RawData) ->
|
decode(SerdeName, RawData) ->
|
||||||
with_serde(
|
with_serde(
|
||||||
"decode_avro_json",
|
?FUNCTION_NAME,
|
||||||
eval_serde_fun(?FUNCTION_NAME, "bad_avro_binary", SerdeName, [RawData])
|
SerdeName,
|
||||||
|
[RawData]
|
||||||
).
|
).
|
||||||
|
|
||||||
-spec encode(schema_name(), decoded_data()) -> {ok, encoded_data()} | {error, any()}.
|
-spec encode(schema_name(), decoded_data()) -> {ok, encoded_data()} | {error, any()}.
|
||||||
encode(SerdeName, Data) ->
|
encode(SerdeName, Data) ->
|
||||||
with_serde(
|
with_serde(
|
||||||
"encode_avro_json",
|
?FUNCTION_NAME,
|
||||||
eval_serde_fun(?FUNCTION_NAME, "bad_avro_data", SerdeName, [Data])
|
SerdeName,
|
||||||
|
[Data]
|
||||||
).
|
).
|
||||||
|
|
||||||
%%-------------------------------------------------------------------------------------------------
|
%%-------------------------------------------------------------------------------------------------
|
||||||
|
@ -209,9 +211,11 @@ ensure_serde_absent(Name) ->
|
||||||
async_delete_serdes(Names) ->
|
async_delete_serdes(Names) ->
|
||||||
gen_server:cast(?MODULE, {delete_serdes, Names}).
|
gen_server:cast(?MODULE, {delete_serdes, Names}).
|
||||||
|
|
||||||
with_serde(WhichOp, Fun) ->
|
with_serde(Op, SerdeName, Args) ->
|
||||||
|
WhichOp = which_op(Op),
|
||||||
|
ErrMsg = error_msg(Op),
|
||||||
try
|
try
|
||||||
Fun()
|
eval_serde(Op, ErrMsg, SerdeName, Args)
|
||||||
catch
|
catch
|
||||||
throw:Reason ->
|
throw:Reason ->
|
||||||
?SLOG(error, Reason#{
|
?SLOG(error, Reason#{
|
||||||
|
@ -233,18 +237,16 @@ with_serde(WhichOp, Fun) ->
|
||||||
}}
|
}}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
eval_serde_fun(Op, ErrMsg, SerdeName, Args) ->
|
eval_serde(Op, ErrMsg, SerdeName, Args) ->
|
||||||
fun() ->
|
case lookup_serde(SerdeName) of
|
||||||
case lookup_serde(SerdeName) of
|
{ok, Serde} ->
|
||||||
{ok, Serde} ->
|
eval_serde(Op, Serde, Args);
|
||||||
eval_serde(Op, Serde, Args);
|
{error, not_found} ->
|
||||||
{error, not_found} ->
|
throw(#{
|
||||||
throw(#{
|
error_msg => ErrMsg,
|
||||||
error_msg => ErrMsg,
|
reason => plugin_serde_not_found,
|
||||||
reason => plugin_serde_not_found,
|
serde_name => SerdeName
|
||||||
serde_name => SerdeName
|
})
|
||||||
})
|
|
||||||
end
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
eval_serde(decode, #plugin_schema_serde{name = Name, eval_context = Store}, [Data]) ->
|
eval_serde(decode, #plugin_schema_serde{name = Name, eval_context = Store}, [Data]) ->
|
||||||
|
@ -255,6 +257,12 @@ eval_serde(encode, #plugin_schema_serde{name = Name, eval_context = Store}, [Dat
|
||||||
eval_serde(_, _, _) ->
|
eval_serde(_, _, _) ->
|
||||||
throw(#{error_msg => "unexpected_plugin_avro_op"}).
|
throw(#{error_msg => "unexpected_plugin_avro_op"}).
|
||||||
|
|
||||||
|
which_op(Op) ->
|
||||||
|
atom_to_list(Op) ++ "_avro_json".
|
||||||
|
|
||||||
|
error_msg(Op) ->
|
||||||
|
atom_to_list(Op) ++ "_avro_data".
|
||||||
|
|
||||||
read_avsc_file(Path) ->
|
read_avsc_file(Path) ->
|
||||||
case file:read_file(Path) of
|
case file:read_file(Path) of
|
||||||
{ok, Bin} ->
|
{ok, Bin} ->
|
||||||
|
|
Loading…
Reference in New Issue