diff --git a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq.erl b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq.erl index 6aa2cc038..d9d182aa9 100644 --- a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq.erl +++ b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq.erl @@ -78,7 +78,7 @@ fields("config") -> {local_topic, mk( binary(), - #{desc => ?DESC("local_topic"), default => undefined} + #{desc => ?DESC("local_topic")} )}, {resource_opts, mk( diff --git a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_connector.erl b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_connector.erl index 45d21d8d0..f7a1e533f 100644 --- a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_connector.erl +++ b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_connector.erl @@ -3,7 +3,8 @@ %%-------------------------------------------------------------------- -module(emqx_bridge_rabbitmq_connector). -%-feature(maybe_expr, enable). + +-feature(maybe_expr, enable). -include_lib("emqx_connector/include/emqx_connector.hrl"). -include_lib("emqx_resource/include/emqx_resource.hrl"). -include_lib("typerefl/include/types.hrl"). diff --git a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_connector_schema.erl b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_connector_schema.erl index d36eb463c..02b5ae61c 100644 --- a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_connector_schema.erl +++ b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_connector_schema.erl @@ -106,6 +106,8 @@ fields("get") -> desc("config_connector") -> ?DESC("config_connector"); +desc(connector_resource_opts) -> + ?DESC(connector_resource_opts); desc(_) -> undefined. diff --git a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_pubsub_schema.erl b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_pubsub_schema.erl index b4bb72c22..34c945937 100644 --- a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_pubsub_schema.erl +++ b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_pubsub_schema.erl @@ -27,6 +27,7 @@ -define(ACTION_TYPE, rabbitmq). -define(SOURCE_TYPE, rabbitmq). +-define(CONNECTOR_SCHEMA, emqx_bridge_rabbitmq_connector_schema). %%====================================================================================== %% Hocon Schema Definitions @@ -61,7 +62,7 @@ fields(action_parameters) -> boolean(), #{ default => true, - desc => ?DESC("wait_for_publish_confirmations") + desc => ?DESC(?CONNECTOR_SCHEMA, "wait_for_publish_confirmations") } )}, {publish_confirmation_timeout, @@ -69,7 +70,7 @@ fields(action_parameters) -> emqx_schema:timeout_duration_ms(), #{ default => <<"30s">>, - desc => ?DESC("timeout") + desc => ?DESC(?CONNECTOR_SCHEMA, "timeout") } )}, {exchange, @@ -77,7 +78,7 @@ fields(action_parameters) -> typerefl:binary(), #{ required => true, - desc => ?DESC("exchange") + desc => ?DESC(?CONNECTOR_SCHEMA, "exchange") } )}, {routing_key, @@ -85,7 +86,7 @@ fields(action_parameters) -> typerefl:binary(), #{ required => true, - desc => ?DESC("routing_key") + desc => ?DESC(?CONNECTOR_SCHEMA, "routing_key") } )}, {delivery_mode, @@ -93,15 +94,14 @@ fields(action_parameters) -> hoconsc:enum([non_persistent, persistent]), #{ default => non_persistent, - desc => ?DESC("delivery_mode") + desc => ?DESC(?CONNECTOR_SCHEMA, "delivery_mode") } )}, {payload_template, hoconsc:mk( binary(), #{ - default => <<"${.}">>, - desc => ?DESC("payload_template") + desc => ?DESC(?CONNECTOR_SCHEMA, "payload_template") } )} ]; @@ -117,21 +117,21 @@ fields(source) -> fields(subscriber_source) -> emqx_bridge_v2_schema:make_consumer_action_schema( ?HOCON( - ?R_REF(ingress_parameters), + ?R_REF(source_parameters), #{ required => true, desc => ?DESC("source_parameters") } ) ); -fields(ingress_parameters) -> +fields(source_parameters) -> [ {wait_for_publish_confirmations, hoconsc:mk( boolean(), #{ default => true, - desc => ?DESC("wait_for_publish_confirmations") + desc => ?DESC(?CONNECTOR_SCHEMA, "wait_for_publish_confirmations") } )}, {topic, @@ -140,7 +140,7 @@ fields(ingress_parameters) -> #{ required => true, validator => fun emqx_schema:non_empty_string/1, - desc => ?DESC("ingress_topic") + desc => ?DESC("source_topic") } )}, {qos, @@ -148,7 +148,7 @@ fields(ingress_parameters) -> ?UNION([emqx_schema:qos(), binary()]), #{ default => 0, - desc => ?DESC("ingress_qos") + desc => ?DESC("source_qos") } )}, {payload_template, @@ -156,7 +156,7 @@ fields(ingress_parameters) -> binary(), #{ required => false, - desc => ?DESC("ingress_payload_template") + desc => ?DESC("source_payload_template") } )}, {queue, @@ -164,7 +164,7 @@ fields(ingress_parameters) -> binary(), #{ required => true, - desc => ?DESC("ingress_queue") + desc => ?DESC("source_queue") } )}, {no_ack, @@ -173,7 +173,7 @@ fields(ingress_parameters) -> #{ required => false, default => true, - desc => ?DESC("ingress_no_ack") + desc => ?DESC("source_no_ack") } )} ]; @@ -210,8 +210,8 @@ desc(source_resource_opts) -> ?DESC(emqx_resource_schema, "creation_opts"); desc(action_parameters) -> ?DESC(action_parameters); -desc(ingress_parameters) -> - ?DESC(ingress_parameters); +desc(source_parameters) -> + ?DESC(source_parameters); desc(Method) when Method =:= "get"; Method =:= "put"; Method =:= "post" -> ["Configuration for WebHook using `", string:to_upper(Method), "` method."]; desc("http_action") -> diff --git a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_sup.erl b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_sup.erl index 8cc442ada..b81052269 100644 --- a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_sup.erl +++ b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_sup.erl @@ -15,6 +15,7 @@ %%-------------------------------------------------------------------- -module(emqx_bridge_rabbitmq_sup). +-feature(maybe_expr, enable). -behaviour(supervisor). -export([ensure_started/2]). diff --git a/apps/emqx_connector/src/schema/emqx_connector_schema.erl b/apps/emqx_connector/src/schema/emqx_connector_schema.erl index 53622a828..b803ab9f2 100644 --- a/apps/emqx_connector/src/schema/emqx_connector_schema.erl +++ b/apps/emqx_connector/src/schema/emqx_connector_schema.erl @@ -731,17 +731,17 @@ schema_homogeneous_test() -> is_bad_schema(#{type := ?MAP(_, ?R_REF(Module, TypeName))}) -> Fields = Module:fields(TypeName), ExpectedFieldNames = common_field_names(), - MissingFileds = lists:filter( + MissingFields = lists:filter( fun(Name) -> lists:keyfind(Name, 1, Fields) =:= false end, ExpectedFieldNames ), - case MissingFileds of + case MissingFields of [] -> false; _ -> {true, #{ schema_module => Module, type_name => TypeName, - missing_fields => MissingFileds + missing_fields => MissingFields }} end. diff --git a/rebar.config b/rebar.config index 1d9d082af..5ebe9da15 100644 --- a/rebar.config +++ b/rebar.config @@ -14,7 +14,6 @@ warn_unused_import, warn_obsolete_guard, compressed, - {feature, maybe_expr, enable}, nowarn_unused_import, {d, snk_kind, msg} ]}. diff --git a/rel/i18n/emqx_bridge_rabbitmq_connector.hocon b/rel/i18n/emqx_bridge_rabbitmq_connector_schema.hocon similarity index 89% rename from rel/i18n/emqx_bridge_rabbitmq_connector.hocon rename to rel/i18n/emqx_bridge_rabbitmq_connector_schema.hocon index a0f6161d4..e0574eecb 100644 --- a/rel/i18n/emqx_bridge_rabbitmq_connector.hocon +++ b/rel/i18n/emqx_bridge_rabbitmq_connector_schema.hocon @@ -1,5 +1,5 @@ -emqx_bridge_rabbitmq_connector { +emqx_bridge_rabbitmq_connector_schema { server.desc: """The RabbitMQ server address that you want to connect to (for example, localhost).""" @@ -97,4 +97,15 @@ wait_for_publish_confirmations.desc: wait_for_publish_confirmations.label: """Wait for Publish Confirmations""" +connector_resource_opts.desc: +"""Connector resource options.""" + +connector_resource_opts.label: +"""Connector Resource Options""" + +config_connector.desc: +"""The configuration for the RabbitMQ connector.""" +config_connector.label: +"""RabbitMQ Connector Configuration""" + } diff --git a/rel/i18n/emqx_bridge_rabbitmq_pubsub_schema.hocon b/rel/i18n/emqx_bridge_rabbitmq_pubsub_schema.hocon new file mode 100644 index 000000000..a73394386 --- /dev/null +++ b/rel/i18n/emqx_bridge_rabbitmq_pubsub_schema.hocon @@ -0,0 +1,49 @@ +emqx_bridge_rabbitmq_pubsub_schema { + +publisher_action.desc: +"""Action configs.""" +publisher_action.label: +"""Action""" + +subscriber_source.desc: +"""Source configs.""" +subscriber_source.label: +"""Source""" + + +action_parameters.desc: +"""The action config defines how this bridge send messages to the remote RabbitMQ broker""" +action_parameters.label: +"""Action Parameters""" + +source_parameters.desc: +"""The source config defines how this bridge receive messages from the remote RabbitMQ broker""" +source_parameters.label: +"""Source Parameters""" + +source_topic.desc: +"""Topic used for constructing MQTT messages, supporting templates.""" +source_topic.label: +"""Source Topic""" + +source_qos.desc: +"""The QoS level of the MQTT message, supporting templates.""" +source_qos.label: +"""QoS""" + +source_payload_template.desc: +"""The template used to construct the payload of the MQTT message.""" +source_payload_template.label: +"""Source Payload Template""" + +source_queue.desc: +"""The queue name of the RabbitMQ broker.""" +source_queue.label: +"""Source Queue""" + +source_no_ack.desc: +"""Whether to use no_ack mode when consuming messages from the RabbitMQ broker.""" +source_no_ack.label: +"""Source No Ack""" + +}