From c17c7884380313d1b2075da90fa9ec1cada9dc48 Mon Sep 17 00:00:00 2001 From: Andrew Mayorov Date: Thu, 6 Jun 2024 16:27:22 +0200 Subject: [PATCH] feat(connector): allow delegate `pre_config_update` to impls --- apps/emqx_connector/src/emqx_connector.erl | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/apps/emqx_connector/src/emqx_connector.erl b/apps/emqx_connector/src/emqx_connector.erl index 159e05f9b..bf37200db 100644 --- a/apps/emqx_connector/src/emqx_connector.erl +++ b/apps/emqx_connector/src/emqx_connector.erl @@ -126,19 +126,28 @@ pre_config_update([?ROOT_KEY, _Type, _Name], Oper, OldConfig) when -> %% to save the 'enable' to the config files {ok, OldConfig#{<<"enable">> => operation_to_enable(Oper)}}; -pre_config_update([?ROOT_KEY, _Type, Name] = Path, Conf = #{}, _OldConfig) -> +pre_config_update([?ROOT_KEY, _Type, Name] = Path, Conf = #{}, ConfOld) -> case validate_connector_name(Name) of ok -> case emqx_connector_ssl:convert_certs(filename:join(Path), Conf) of - {error, Reason} -> - {error, Reason}; {ok, ConfNew} -> - {ok, ConfNew} + connector_pre_config_update(Path, ConfNew, ConfOld); + {error, Reason} -> + {error, Reason} end; Error -> Error end. +connector_pre_config_update([?ROOT_KEY, Type, Name] = Path, ConfNew, ConfOld) -> + Mod = emqx_connector_info:config_transform_module(Type), + case Mod =/= undefined andalso erlang:function_exported(Mod, pre_config_update, 4) of + true -> + apply(Mod, pre_config_update, [Path, Name, ConfNew, ConfOld]); + false -> + {ok, ConfNew} + end. + operation_to_enable(disable) -> false; operation_to_enable(enable) -> true.