Просмотр исходного кода

refactor: avoid make when do serde

JimMoen 1 год назад
Родитель
Сommit
28e8131984
1 измененных файлов с 26 добавлено и 18 удалено
  1. 26 18
      apps/emqx_plugins/src/emqx_plugins_serde.erl

+ 26 - 18
apps/emqx_plugins/src/emqx_plugins_serde.erl

@@ -102,15 +102,17 @@ delete_schema(NameVsn) ->
 -spec decode(schema_name(), encoded_data()) -> {ok, decoded_data()} | {error, any()}.
 decode(SerdeName, RawData) ->
     with_serde(
-        "decode_avro_json",
-        eval_serde_fun(?FUNCTION_NAME, "bad_avro_binary", SerdeName, [RawData])
+        ?FUNCTION_NAME,
+        SerdeName,
+        [RawData]
     ).
 
 -spec encode(schema_name(), decoded_data()) -> {ok, encoded_data()} | {error, any()}.
 encode(SerdeName, Data) ->
     with_serde(
-        "encode_avro_json",
-        eval_serde_fun(?FUNCTION_NAME, "bad_avro_data", SerdeName, [Data])
+        ?FUNCTION_NAME,
+        SerdeName,
+        [Data]
     ).
 
 %%-------------------------------------------------------------------------------------------------
@@ -209,9 +211,11 @@ ensure_serde_absent(Name) ->
 async_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
-        Fun()
+        eval_serde(Op, ErrMsg, SerdeName, Args)
     catch
         throw:Reason ->
             ?SLOG(error, Reason#{
@@ -233,18 +237,16 @@ with_serde(WhichOp, Fun) ->
             }}
     end.
 
-eval_serde_fun(Op, ErrMsg, SerdeName, Args) ->
-    fun() ->
-        case lookup_serde(SerdeName) of
-            {ok, Serde} ->
-                eval_serde(Op, Serde, Args);
-            {error, not_found} ->
-                throw(#{
-                    error_msg => ErrMsg,
-                    reason => plugin_serde_not_found,
-                    serde_name => SerdeName
-                })
-        end
+eval_serde(Op, ErrMsg, SerdeName, Args) ->
+    case lookup_serde(SerdeName) of
+        {ok, Serde} ->
+            eval_serde(Op, Serde, Args);
+        {error, not_found} ->
+            throw(#{
+                error_msg => ErrMsg,
+                reason => plugin_serde_not_found,
+                serde_name => SerdeName
+            })
     end.
 
 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(_, _, _) ->
     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) ->
     case file:read_file(Path) of
         {ok, Bin} ->