| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- %%--------------------------------------------------------------------
- %% Copyright (c) 2020-2021 EMQ Technologies Co., Ltd. All Rights Reserved.
- %%
- %% Licensed under the Apache License, Version 2.0 (the "License");
- %% you may not use this file except in compliance with the License.
- %% You may obtain a copy of the License at
- %%
- %% http://www.apache.org/licenses/LICENSE-2.0
- %%
- %% Unless required by applicable law or agreed to in writing, software
- %% distributed under the License is distributed on an "AS IS" BASIS,
- %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- %% See the License for the specific language governing permissions and
- %% limitations under the License.
- %%--------------------------------------------------------------------
- -module(emqx_modules_schema).
- -include_lib("typerefl/include/types.hrl").
- -behaviour(hocon_schema).
- -export([ namespace/0
- , roots/0
- , fields/1]).
- namespace() -> modules.
- roots() ->
- ["delayed",
- "telemetry",
- "event_message",
- array("rewrite"),
- array("topic_metrics")].
- fields("telemetry") ->
- [ {enable, hoconsc:mk(boolean(), #{default => false})}
- ];
- fields("delayed") ->
- [ {enable, hoconsc:mk(boolean(), #{default => false})}
- , {max_delayed_messages, sc(integer(), #{})}
- ];
- fields("rewrite") ->
- [ {action, sc(hoconsc:enum([subscribe, publish, all]), #{desc => "Action", example => publish})}
- , {source_topic, sc(binary(), #{desc => "Origin Topic", example => "x/#"})}
- , {dest_topic, sc(binary(), #{desc => "Destination Topic", example => "z/y/$1"})}
- , {re, fun regular_expression/1 }
- ];
- fields("event_message") ->
- [ {"$event/client_connected", sc(boolean(), #{default => false})}
- , {"$event/client_disconnected", sc(boolean(), #{default => false})}
- , {"$event/client_subscribed", sc(boolean(), #{default => false})}
- , {"$event/client_unsubscribed", sc(boolean(), #{default => false})}
- , {"$event/message_delivered", sc(boolean(), #{default => false})}
- , {"$event/message_acked", sc(boolean(), #{default => false})}
- , {"$event/message_dropped", sc(boolean(), #{default => false})}
- ];
- fields("topic_metrics") ->
- [{topic, sc(binary(), #{})}].
- regular_expression(type) -> binary();
- regular_expression(desc) -> "Regular expressions";
- regular_expression(example) -> "^x/y/(.+)$";
- regular_expression(validator) -> fun is_re/1;
- regular_expression(_) -> undefined.
- is_re(Bin) ->
- case re:compile(Bin) of
- {ok, _} -> ok;
- {error, Reason} -> {error, {Bin, Reason}}
- end.
- array(Name) -> {Name, hoconsc:array(hoconsc:ref(?MODULE, Name))}.
- sc(Type, Meta) -> hoconsc:mk(Type, Meta).
|