emqx_bridge_sqlserver_action_info.erl 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. %%--------------------------------------------------------------------
  2. %% Copyright (c) 2024 EMQ Technologies Co., Ltd. All Rights Reserved.
  3. %%--------------------------------------------------------------------
  4. -module(emqx_bridge_sqlserver_action_info).
  5. -behaviour(emqx_action_info).
  6. -elvis([{elvis_style, invalid_dynamic_call, disable}]).
  7. -export([
  8. bridge_v1_type_name/0,
  9. action_type_name/0,
  10. connector_type_name/0,
  11. schema_module/0,
  12. bridge_v1_config_to_action_config/2,
  13. bridge_v1_config_to_connector_config/1,
  14. connector_action_config_to_bridge_v1_config/2
  15. ]).
  16. -import(emqx_utils_conv, [bin/1]).
  17. -define(ACTION_TYPE, sqlserver).
  18. -define(SCHEMA_MODULE, emqx_bridge_sqlserver).
  19. bridge_v1_type_name() -> ?ACTION_TYPE.
  20. action_type_name() -> ?ACTION_TYPE.
  21. connector_type_name() -> ?ACTION_TYPE.
  22. schema_module() -> ?SCHEMA_MODULE.
  23. bridge_v1_config_to_action_config(BridgeV1Config, ConnectorName) ->
  24. ActionTopLevelKeys = schema_keys(sqlserver_action),
  25. ActionParametersKeys = schema_keys(action_parameters),
  26. ActionKeys = ActionTopLevelKeys ++ ActionParametersKeys,
  27. ActionConfig = make_config_map(ActionKeys, ActionParametersKeys, BridgeV1Config),
  28. emqx_utils_maps:update_if_present(
  29. <<"resource_opts">>,
  30. fun emqx_bridge_v2_schema:project_to_actions_resource_opts/1,
  31. ActionConfig#{<<"connector">> => ConnectorName}
  32. ).
  33. bridge_v1_config_to_connector_config(BridgeV1Config) ->
  34. ActionTopLevelKeys = schema_keys(sqlserver_action),
  35. ActionParametersKeys = schema_keys(action_parameters),
  36. ActionKeys = ActionTopLevelKeys ++ ActionParametersKeys,
  37. ConnectorTopLevelKeys = schema_keys("config_connector"),
  38. ConnectorKeys = maps:keys(BridgeV1Config) -- (ActionKeys -- ConnectorTopLevelKeys),
  39. ConnConfig0 = maps:with(ConnectorKeys, BridgeV1Config),
  40. emqx_utils_maps:update_if_present(
  41. <<"resource_opts">>,
  42. fun emqx_connector_schema:project_to_connector_resource_opts/1,
  43. ConnConfig0
  44. ).
  45. connector_action_config_to_bridge_v1_config(ConnectorConfig, ActionConfig) ->
  46. V1Config = emqx_action_info:connector_action_config_to_bridge_v1_config(
  47. ConnectorConfig, ActionConfig
  48. ),
  49. maps:remove(<<"local_topic">>, V1Config).
  50. make_config_map(PickKeys, IndentKeys, Config) ->
  51. Conf0 = maps:with(PickKeys, Config),
  52. emqx_utils_maps:indent(<<"parameters">>, IndentKeys, Conf0).
  53. schema_keys(Name) ->
  54. schema_keys(?SCHEMA_MODULE, Name).
  55. schema_keys(Mod, Name) ->
  56. [bin(Key) || Key <- proplists:get_keys(Mod:fields(Name))].