-module(glats@internal@decoder). -compile([no_auto_import, nowarn_unused_vars]). -export([headers/1, reply_to/1, decode_msg/1, decode_mandatory_server_info/1, decode_optional_server_info/1, decode_server_info/1]). -export_type([mandatory_fields/0, optional_fields/0]). -type mandatory_fields() :: {mandatory_fields, binary(), binary(), binary(), binary(), binary(), integer(), boolean(), integer(), integer()}. -type optional_fields() :: {optional_fields, boolean(), gleam@option:option(boolean())}. -spec atom_field( binary(), fun((gleam@dynamic:dynamic()) -> {ok, GHX} | {error, list(gleam@dynamic:decode_error())}) ) -> fun((gleam@dynamic:dynamic()) -> {ok, GHX} | {error, list(gleam@dynamic:decode_error())}). atom_field(Key, Value) -> gleam@dynamic:field(erlang:binary_to_atom(Key), Value). -spec headers(gleam@dynamic:dynamic()) -> {ok, gleam@map:map_(binary(), binary())} | {error, list(gleam@dynamic:decode_error())}. headers(Data) -> _pipe = Data, _pipe@1 = (atom_field( <<"headers"/utf8>>, gleam@dynamic:list( gleam@dynamic:tuple2( fun gleam@dynamic:string/1, fun gleam@dynamic:string/1 ) ) ))(_pipe), _pipe@2 = gleam@result:map(_pipe@1, fun gleam@map:from_list/1), gleam@result:'or'(_pipe@2, {ok, gleam@map:new()}). -spec reply_to(gleam@dynamic:dynamic()) -> {ok, gleam@option:option(binary())} | {error, list(gleam@dynamic:decode_error())}. reply_to(Data) -> _pipe = Data, _pipe@1 = (gleam@dynamic:optional( atom_field(<<"reply_to"/utf8>>, fun gleam@dynamic:string/1) ))(_pipe), gleam@result:'or'(_pipe@1, {ok, none}). -spec decode_msg(gleam@dynamic:dynamic()) -> {ok, glats@message:message()} | {error, list(gleam@dynamic:decode_error())}. decode_msg(Data) -> _pipe = Data, (gleam@dynamic:decode4( fun(Field@0, Field@1, Field@2, Field@3) -> {message, Field@0, Field@1, Field@2, Field@3} end, atom_field(<<"topic"/utf8>>, fun gleam@dynamic:string/1), fun headers/1, fun reply_to/1, atom_field(<<"body"/utf8>>, fun gleam@dynamic:string/1) ))(_pipe). -spec decode_mandatory_server_info(gleam@dynamic:dynamic()) -> {ok, mandatory_fields()} | {error, list(gleam@dynamic:decode_error())}. decode_mandatory_server_info(Data) -> _pipe = Data, (gleam@dynamic:decode9( fun(Field@0, Field@1, Field@2, Field@3, Field@4, Field@5, Field@6, Field@7, Field@8) -> {mandatory_fields, Field@0, Field@1, Field@2, Field@3, Field@4, Field@5, Field@6, Field@7, Field@8} end, atom_field(<<"server_id"/utf8>>, fun gleam@dynamic:string/1), atom_field(<<"server_name"/utf8>>, fun gleam@dynamic:string/1), atom_field(<<"version"/utf8>>, fun gleam@dynamic:string/1), atom_field(<<"go"/utf8>>, fun gleam@dynamic:string/1), atom_field(<<"host"/utf8>>, fun gleam@dynamic:string/1), atom_field(<<"port"/utf8>>, fun gleam@dynamic:int/1), atom_field(<<"headers"/utf8>>, fun gleam@dynamic:bool/1), atom_field(<<"max_payload"/utf8>>, fun gleam@dynamic:int/1), atom_field(<<"proto"/utf8>>, fun gleam@dynamic:int/1) ))(_pipe). -spec jetstream(gleam@dynamic:dynamic()) -> {ok, boolean()} | {error, list(gleam@dynamic:decode_error())}. jetstream(Data) -> _pipe = Data, _pipe@1 = (atom_field(<<"jetstream"/utf8>>, fun gleam@dynamic:bool/1))( _pipe ), gleam@result:'or'(_pipe@1, {ok, false}). -spec optional_field( binary(), fun((gleam@dynamic:dynamic()) -> {ok, GKG} | {error, list(gleam@dynamic:decode_error())}) ) -> fun((gleam@dynamic:dynamic()) -> {ok, gleam@option:option(GKG)} | {error, list(gleam@dynamic:decode_error())}). optional_field(Key, Value) -> fun(Data) -> _pipe = Data, _pipe@1 = (gleam@dynamic:optional(atom_field(Key, Value)))(_pipe), gleam@result:'or'(_pipe@1, {ok, none}) end. -spec decode_optional_server_info(gleam@dynamic:dynamic()) -> {ok, optional_fields()} | {error, list(gleam@dynamic:decode_error())}. decode_optional_server_info(Data) -> _pipe = Data, (gleam@dynamic:decode2( fun(Field@0, Field@1) -> {optional_fields, Field@0, Field@1} end, fun jetstream/1, optional_field(<<"auth_required"/utf8>>, fun gleam@dynamic:bool/1) ))(_pipe). -spec decode_server_info(gleam@dynamic:dynamic()) -> {ok, glats@protocol:server_info()} | {error, list(gleam@dynamic:decode_error())}. decode_server_info(Data) -> gleam@result:then( decode_mandatory_server_info(Data), fun(Mandatory) -> gleam@result:then( decode_optional_server_info(Data), fun(Optional) -> {ok, {server_info, erlang:element(2, Mandatory), erlang:element(3, Mandatory), erlang:element(4, Mandatory), erlang:element(5, Mandatory), erlang:element(6, Mandatory), erlang:element(7, Mandatory), erlang:element(8, Mandatory), erlang:element(9, Mandatory), erlang:element(10, Mandatory), erlang:element(2, Optional), erlang:element(3, Optional)}} end ) end ).