Current section
Files
Jump to
Current section
Files
src/sparkleplug@sparkplug_b@topic_name.erl
-module(sparkleplug@sparkplug_b@topic_name).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([from_string/1, to_string/1]).
-export_type([topic_name/0, topic_name_parse_error/0]).
-type topic_name() :: {node_message,
sparkleplug@sparkplug_b@topic_namespace:topic_namespace(),
binary(),
sparkleplug@sparkplug_b@node_message_types:node_message_type(),
binary()} |
{device_message,
sparkleplug@sparkplug_b@topic_namespace:topic_namespace(),
binary(),
sparkleplug@sparkplug_b@device_message_types:device_message_type(),
binary(),
binary()} |
{state_message, binary()}.
-type topic_name_parse_error() :: {topic_name_parse_error, binary()}.
-file("src\\sparkleplug\\sparkplug_b\\topic_name.gleam", 26).
-spec from_string(binary()) -> {ok, topic_name()} |
{error, topic_name_parse_error()}.
from_string(Topic_string) ->
case gleam@string:split(Topic_string, <<"/"/utf8>>) of
[Namespace_string, Group_id, Message_type_string, Node_id, Device_id] ->
gleam@result:'try'(
begin
_pipe = sparkleplug@sparkplug_b@topic_namespace:from_string(
Namespace_string
),
gleam@result:map_error(
_pipe,
fun(Err) ->
{topic_name_parse_error,
<<"Couldn't parse topic name: "/utf8,
(erlang:element(2, Err))/binary>>}
end
)
end,
fun(Namespace) ->
gleam@result:'try'(
begin
_pipe@1 = sparkleplug@sparkplug_b@device_message_types:from_string(
Message_type_string
),
gleam@result:map_error(
_pipe@1,
fun(Err@1) ->
{topic_name_parse_error,
<<"Couldn't parse topic name: "/utf8,
(erlang:element(2, Err@1))/binary>>}
end
)
end,
fun(Message_type) ->
{ok,
{device_message,
Namespace,
Group_id,
Message_type,
Node_id,
Device_id}}
end
)
end
);
[Namespace_string@1, Group_id@1, Message_type_string@1, Node_id@1] ->
gleam@result:'try'(
begin
_pipe@2 = sparkleplug@sparkplug_b@topic_namespace:from_string(
Namespace_string@1
),
gleam@result:map_error(
_pipe@2,
fun(Err@2) ->
{topic_name_parse_error,
<<"Couldn't parse topic name: "/utf8,
(erlang:element(2, Err@2))/binary>>}
end
)
end,
fun(Namespace@1) ->
gleam@result:'try'(
begin
_pipe@3 = sparkleplug@sparkplug_b@node_message_types:from_string(
Message_type_string@1
),
gleam@result:map_error(
_pipe@3,
fun(Err@3) ->
{topic_name_parse_error,
<<"Couldn't parse topic name: "/utf8,
(erlang:element(2, Err@3))/binary>>}
end
)
end,
fun(Message_type@1) ->
{ok,
{node_message,
Namespace@1,
Group_id@1,
Message_type@1,
Node_id@1}}
end
)
end
);
[<<"STATE"/utf8>>, Scada_host_id] ->
{ok, {state_message, Scada_host_id}};
_ ->
{error,
{topic_name_parse_error,
<<"Couldn't parse topic name from given string."/utf8>>}}
end.
-file("src\\sparkleplug\\sparkplug_b\\topic_name.gleam", 66).
-spec to_string(topic_name()) -> binary().
to_string(Topic_name) ->
case Topic_name of
{node_message, Namespace, Group_id, Message_type, Node_id} ->
<<<<<<<<<<<<(sparkleplug@sparkplug_b@topic_namespace:to_string(
Namespace
))/binary,
"/"/utf8>>/binary,
Group_id/binary>>/binary,
"/"/utf8>>/binary,
(sparkleplug@sparkplug_b@node_message_types:to_string(
Message_type
))/binary>>/binary,
"/"/utf8>>/binary,
Node_id/binary>>;
{device_message,
Namespace@1,
Group_id@1,
Message_type@1,
Node_id@1,
Device_id} ->
<<<<<<<<<<<<<<<<(sparkleplug@sparkplug_b@topic_namespace:to_string(
Namespace@1
))/binary,
"/"/utf8>>/binary,
Group_id@1/binary>>/binary,
"/"/utf8>>/binary,
(sparkleplug@sparkplug_b@device_message_types:to_string(
Message_type@1
))/binary>>/binary,
"/"/utf8>>/binary,
Node_id@1/binary>>/binary,
"/"/utf8>>/binary,
Device_id/binary>>;
{state_message, Scada_host_id} ->
<<"STATE/"/utf8, Scada_host_id/binary>>
end.