-module(datastar_gleam).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/datastar_gleam.gleam").
-export([default_retry/0, to_string/1]).
-export_type([datastar_event/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-type datastar_event() :: {datastar_event,
datastar_gleam@consts:event_type(),
gleam@option:option(binary()),
integer(),
list(binary())}.
-file("src/datastar_gleam.gleam", 29).
?DOC(" The default SSE retry duration used by Datastar (1000 ms).\n").
-spec default_retry() -> integer().
default_retry() ->
1000.
-file("src/datastar_gleam.gleam", 46).
?DOC(
" Serialize a `DatastarEvent` to the SSE wire format.\n"
"\n"
" ```gleam\n"
" import datastar\n"
" import datastar/event\n"
"\n"
" let ev =\n"
" event.new_elements(\"<div>Hello!</div>\")\n"
" |> event.patch_elements_to_datastar_event()\n"
"\n"
" let text = datastar.to_string(ev)\n"
" // => \"event: datastar-patch-elements\\ndata: elements <div>Hello!</div>\\n\\n\"\n"
" ```\n"
).
-spec to_string(datastar_event()) -> binary().
to_string(Ev) ->
Base = <<"event: "/utf8,
(datastar_gleam@consts:event_type_string(erlang:element(2, Ev)))/binary>>,
Base@1 = case erlang:element(3, Ev) of
{some, I} ->
<<<<Base/binary, "\nid: "/utf8>>/binary, I/binary>>;
none ->
Base
end,
Base@2 = case erlang:element(4, Ev) of
1000 ->
Base@1;
N ->
<<<<Base@1/binary, "\nretry: "/utf8>>/binary,
(erlang:integer_to_binary(N))/binary>>
end,
Data_lines = gleam@list:map(
erlang:element(5, Ev),
fun(Line) -> <<"data: "/utf8, Line/binary>> end
),
Body = gleam@string:join(Data_lines, <<"\n"/utf8>>),
<<<<<<Base@2/binary, "\n"/utf8>>/binary, Body/binary>>/binary, "\n\n"/utf8>>.