-module(datastar_gleam@mist).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/datastar_gleam/mist.gleam").
-export([to_mist_event/1, send_event/2]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-file("src/datastar_gleam/mist.gleam", 55).
-spec data_string(datastar_gleam:datastar_event()) -> binary().
data_string(Ev) ->
gleam@string:join(erlang:element(5, Ev), <<"\n"/utf8>>).
-file("src/datastar_gleam/mist.gleam", 23).
?DOC(
" Convert a `DatastarEvent` into a `mist.SSEEvent` for use with\n"
" `mist.server_sent_events`.\n"
"\n"
" ```gleam\n"
" let ev =\n"
" event.new_elements(\"<div>Updated!</div>\")\n"
" |> event.patch_elements_to_datastar_event()\n"
"\n"
" let mist_ev = datastar_mist.to_mist_event(ev)\n"
" ```\n"
).
-spec to_mist_event(datastar_gleam:datastar_event()) -> mist:s_s_e_event().
to_mist_event(Ev) ->
Data_string = gleam_stdlib:identity(data_string(Ev)),
Sse = mist:event(Data_string),
Sse@1 = mist:event_name(
Sse,
datastar_gleam@consts:event_type_string(erlang:element(2, Ev))
),
Sse@2 = case erlang:element(3, Ev) of
{some, Id} ->
mist:event_id(Sse@1, Id);
none ->
Sse@1
end,
Sse@3 = case erlang:element(4, Ev) of
1000 ->
Sse@2;
N ->
mist:event_retry(Sse@2, N)
end,
Sse@3.
-file("src/datastar_gleam/mist.gleam", 45).
?DOC(
" Send a `DatastarEvent` over an established `mist.SSEConnection`.\n"
"\n"
" ```gleam\n"
" let patch = event.new_elements(\"<div>Hello!</div>\")\n"
" let ev = event.patch_elements_to_datastar_event(patch)\n"
" let _ = datastar_mist.send_event(conn, ev)\n"
" ```\n"
).
-spec send_event(mist:s_s_e_connection(), datastar_gleam:datastar_event()) -> {ok,
nil} |
{error, nil}.
send_event(Conn, Ev) ->
_pipe = to_mist_event(Ev),
mist:send_event(Conn, _pipe).