Current section

Files

Jump to
ssevents src ssevents@encoder.erl
Raw

src/ssevents@encoder.erl

-module(ssevents@encoder).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/ssevents/encoder.gleam").
-export([default_line_ending/0, encode_with_line_ending/2, encode/1, encode_bytes/1, encode_item_with_line_ending/2, encode_item/1, encode_item_bytes/1, encode_items_with_line_ending/2, encode_items/1, encode_items_bytes/1]).
-export_type([line_ending/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.
?MODULEDOC(
" Deterministic Server-Sent Events encoding.\n"
"\n"
" The default line ending is LF. Call the `*_with_line_ending`\n"
" variants to emit CRLF instead.\n"
).
-type line_ending() :: lf | crlf.
-file("src/ssevents/encoder.gleam", 18).
-spec default_line_ending() -> line_ending().
default_line_ending() ->
lf.
-file("src/ssevents/encoder.gleam", 127).
-spec comment_line(binary()) -> binary().
comment_line(Text) ->
case Text of
<<""/utf8>> ->
<<":"/utf8>>;
_ ->
<<": "/utf8, Text/binary>>
end.
-file("src/ssevents/encoder.gleam", 134).
-spec prefixed_line(binary(), binary()) -> binary().
prefixed_line(Field, Value) ->
case Value of
<<""/utf8>> ->
<<Field/binary, ":"/utf8>>;
_ ->
<<<<Field/binary, ": "/utf8>>/binary, Value/binary>>
end.
-file("src/ssevents/encoder.gleam", 91).
-spec prepend_optional(list(binary()), binary(), gleam@option:option(binary())) -> list(binary()).
prepend_optional(Lines, Field, Maybe_value) ->
case Maybe_value of
{some, Value} ->
[prefixed_line(Field, Value) | Lines];
none ->
Lines
end.
-file("src/ssevents/encoder.gleam", 102).
-spec prepend_optional_int(
list(binary()),
binary(),
gleam@option:option(integer())
) -> list(binary()).
prepend_optional_int(Lines, Field, Maybe_value) ->
case Maybe_value of
{some, Value} ->
[prefixed_line(Field, erlang:integer_to_binary(Value)) | Lines];
none ->
Lines
end.
-file("src/ssevents/encoder.gleam", 141).
-spec line_ending_to_string(line_ending()) -> binary().
line_ending_to_string(Line_ending) ->
case Line_ending of
lf ->
<<"\n"/utf8>>;
crlf ->
<<"\r\n"/utf8>>
end.
-file("src/ssevents/encoder.gleam", 148).
-spec normalise_newlines(binary()) -> binary().
normalise_newlines(Text) ->
_pipe = Text,
_pipe@1 = gleam@string:replace(_pipe, <<"\r\n"/utf8>>, <<"\n"/utf8>>),
gleam@string:replace(_pipe@1, <<"\r"/utf8>>, <<"\n"/utf8>>).
-file("src/ssevents/encoder.gleam", 74).
-spec event_lines(ssevents@event:event()) -> list(binary()).
event_lines(Ev) ->
Prefix_lines = begin
_pipe = [],
_pipe@1 = prepend_optional(
_pipe,
<<"event"/utf8>>,
ssevents@event:name_of(Ev)
),
_pipe@2 = prepend_optional(
_pipe@1,
<<"id"/utf8>>,
ssevents@event:id_of(Ev)
),
_pipe@3 = prepend_optional_int(
_pipe@2,
<<"retry"/utf8>>,
ssevents@event:retry_of(Ev)
),
lists:reverse(_pipe@3)
end,
Data_lines = begin
_pipe@4 = ssevents@event:data_of(Ev),
_pipe@5 = normalise_newlines(_pipe@4),
_pipe@6 = gleam@string:split(_pipe@5, <<"\n"/utf8>>),
gleam@list:map(
_pipe@6,
fun(Line) -> prefixed_line(<<"data"/utf8>>, Line) end
)
end,
lists:append(Prefix_lines, Data_lines).
-file("src/ssevents/encoder.gleam", 46).
-spec encode_with_line_ending(ssevents@event:event(), line_ending()) -> binary().
encode_with_line_ending(Event, Line_ending) ->
Newline = line_ending_to_string(Line_ending),
Lines = event_lines(Event),
<<(erlang:list_to_binary(
gleam@list:map(
Lines,
fun(Line) -> <<Line/binary, Newline/binary>> end
)
))/binary,
Newline/binary>>.
-file("src/ssevents/encoder.gleam", 22).
-spec encode(ssevents@event:event()) -> binary().
encode(Event) ->
encode_with_line_ending(Event, lf).
-file("src/ssevents/encoder.gleam", 26).
-spec encode_bytes(ssevents@event:event()) -> bitstring().
encode_bytes(Event) ->
_pipe = encode(Event),
gleam_stdlib:identity(_pipe).
-file("src/ssevents/encoder.gleam", 113).
-spec encode_comment_with_line_ending(binary(), line_ending()) -> binary().
encode_comment_with_line_ending(Text, Line_ending) ->
Newline = line_ending_to_string(Line_ending),
_pipe = Text,
_pipe@1 = normalise_newlines(_pipe),
_pipe@2 = gleam@string:split(_pipe@1, <<"\n"/utf8>>),
_pipe@3 = gleam@list:map(_pipe@2, fun comment_line/1),
_pipe@4 = gleam@list:map(
_pipe@3,
fun(Line) -> <<Line/binary, Newline/binary>> end
),
erlang:list_to_binary(_pipe@4).
-file("src/ssevents/encoder.gleam", 55).
-spec encode_item_with_line_ending(ssevents@event:item(), line_ending()) -> binary().
encode_item_with_line_ending(Item, Line_ending) ->
case Item of
{event_item, Ev} ->
encode_with_line_ending(Ev, Line_ending);
{comment, Text} ->
encode_comment_with_line_ending(Text, Line_ending)
end.
-file("src/ssevents/encoder.gleam", 30).
-spec encode_item(ssevents@event:item()) -> binary().
encode_item(Item) ->
encode_item_with_line_ending(Item, lf).
-file("src/ssevents/encoder.gleam", 34).
-spec encode_item_bytes(ssevents@event:item()) -> bitstring().
encode_item_bytes(Item) ->
_pipe = encode_item(Item),
gleam_stdlib:identity(_pipe).
-file("src/ssevents/encoder.gleam", 65).
-spec encode_items_with_line_ending(list(ssevents@event:item()), line_ending()) -> binary().
encode_items_with_line_ending(Items, Line_ending) ->
_pipe = Items,
_pipe@1 = gleam@list:map(
_pipe,
fun(Item) -> encode_item_with_line_ending(Item, Line_ending) end
),
erlang:list_to_binary(_pipe@1).
-file("src/ssevents/encoder.gleam", 38).
-spec encode_items(list(ssevents@event:item())) -> binary().
encode_items(Items) ->
encode_items_with_line_ending(Items, lf).
-file("src/ssevents/encoder.gleam", 42).
-spec encode_items_bytes(list(ssevents@event:item())) -> bitstring().
encode_items_bytes(Items) ->
_pipe = encode_items(Items),
gleam_stdlib:identity(_pipe).