Current section

Files

Jump to
ssevents src ssevents.erl
Raw

src/ssevents.erl

-module(ssevents).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/ssevents.gleam").
-export([default_limits/0, name_of/1, data_of/1, id_of/1, retry_of/1, event/2, new/1, from_parts/4, message/1, named/2, id/2, retry/2, retry_clamp/2, data/2, event_item/1, heartbeat/0, comment/1, default_line_ending/0, encode/1, encode_bytes/1, encode_item/1, encode_item_bytes/1, encode_items/1, encode_items_bytes/1, encode_with_line_ending/2, encode_item_with_line_ending/2, encode_items_with_line_ending/2, decode/1, decode_bytes/1, decode_with_limits/2, decode_bytes_with_limits/2, new_decoder/0, new_decoder_with_limits/1, push/2, finish/1, limits/0, new_limits/4, max_line_bytes/1, max_event_bytes/1, max_data_lines/1, max_retry_value/1, validate_event_name/1, validate_id/1, validate_retry/1, max_data_bytes/2, new_reconnect_state/0, update_reconnect/2, last_event_id/1, retry_interval/1, last_event_id_header/1, empty_iterator/0, iterator_from_list/1, iterator_to_list/1, iterator_next/1, encode_stream/1, decode_stream/1, decode_stream_with_limits/2, error_to_string/1, content_type/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(
" Canonical public surface for the `ssevents` package.\n"
"\n"
" The focused modules (`ssevents/event`, `ssevents/encoder`,\n"
" `ssevents/decoder`, `ssevents/reconnect`, `ssevents/validate`,\n"
" `ssevents/limit`, `ssevents/heartbeat`, `ssevents/stream`,\n"
" `ssevents/error`) carry the actual implementation, but they are an\n"
" implementation detail: external code should prefer the spellings\n"
" re-exported here. This is the surface the README and the published\n"
" HexDocs documentation consider authoritative, and it is the surface\n"
" that follows semver — the submodule shapes may be reorganized\n"
" between releases.\n"
"\n"
" Reach into a submodule directly only when the facade does not yet\n"
" expose what you need; in that case, opening an issue so the\n"
" missing entry point can be added at this level is preferred to\n"
" scattering submodule imports across user code.\n"
).
-file("src/ssevents.gleam", 64).
-spec default_limits() -> ssevents@limit:limits().
default_limits() ->
ssevents@limit:default().
-file("src/ssevents.gleam", 89).
-spec name_of(ssevents@event:event()) -> gleam@option:option(binary()).
name_of(Event) ->
ssevents@event:name_of(Event).
-file("src/ssevents.gleam", 93).
-spec data_of(ssevents@event:event()) -> binary().
data_of(Event) ->
ssevents@event:data_of(Event).
-file("src/ssevents.gleam", 97).
-spec id_of(ssevents@event:event()) -> gleam@option:option(binary()).
id_of(Event) ->
ssevents@event:id_of(Event).
-file("src/ssevents.gleam", 101).
-spec retry_of(ssevents@event:event()) -> gleam@option:option(integer()).
retry_of(Event) ->
ssevents@event:retry_of(Event).
-file("src/ssevents.gleam", 105).
-spec event(ssevents@event:event(), binary()) -> ssevents@event:event().
event(Event, Name) ->
ssevents@event:event(Event, Name).
-file("src/ssevents.gleam", 68).
-spec new(binary()) -> ssevents@event:event().
new(Data) ->
ssevents@event:new(Data).
-file("src/ssevents.gleam", 72).
-spec from_parts(
gleam@option:option(binary()),
binary(),
gleam@option:option(binary()),
gleam@option:option(integer())
) -> ssevents@event:event().
from_parts(Event_name, Data, Id, Retry) ->
ssevents@event:from_parts(Event_name, Data, Id, Retry).
-file("src/ssevents.gleam", 81).
-spec message(binary()) -> ssevents@event:event().
message(Data) ->
ssevents@event:message(Data).
-file("src/ssevents.gleam", 85).
-spec named(binary(), binary()) -> ssevents@event:event().
named(Name, Data) ->
ssevents@event:named(Name, Data).
-file("src/ssevents.gleam", 109).
-spec id(ssevents@event:event(), binary()) -> ssevents@event:event().
id(Event, Id) ->
ssevents@event:id(Event, Id).
-file("src/ssevents.gleam", 122).
?DOC(
" Set the SSE `retry:` reconnection time on an event.\n"
"\n"
" `milliseconds` must be `>= 0`. WHATWG SSE §9.2.6 only recognises a\n"
" retry value whose textual form \"consists of only ASCII digits\", so a\n"
" negative value would be either dropped on the wire (the leading `-`\n"
" breaks the digits-only check) or interpreted as `0` and trigger a\n"
" tight reconnect loop against the server. The builder panics on\n"
" `ms < 0`; reach for `retry_clamp/2` when the caller wants the\n"
" lenient (clamp-to-`0`) posture.\n"
).
-spec retry(ssevents@event:event(), integer()) -> ssevents@event:event().
retry(Event, Milliseconds) ->
ssevents@event:retry(Event, Milliseconds).
-file("src/ssevents.gleam", 130).
?DOC(
" Like `retry/2`, but clamps `milliseconds < 0` to `0` instead of\n"
" panicking. Use this when forwarding a value computed from possibly-\n"
" noisy input (e.g. a CLI flag, a deserialised config) and the caller\n"
" would rather \"publish a spec-valid retry\" than crash.\n"
).
-spec retry_clamp(ssevents@event:event(), integer()) -> ssevents@event:event().
retry_clamp(Event, Milliseconds) ->
ssevents@event:retry_clamp(Event, Milliseconds).
-file("src/ssevents.gleam", 134).
-spec data(ssevents@event:event(), binary()) -> ssevents@event:event().
data(Event, Data) ->
ssevents@event:data(Event, Data).
-file("src/ssevents.gleam", 138).
-spec event_item(ssevents@event:event()) -> ssevents@event:item().
event_item(Event) ->
ssevents@event:event_item(Event).
-file("src/ssevents.gleam", 146).
-spec heartbeat() -> ssevents@event:item().
heartbeat() ->
ssevents@heartbeat:heartbeat().
-file("src/ssevents.gleam", 142).
-spec comment(binary()) -> ssevents@event:item().
comment(Text) ->
ssevents@heartbeat:comment(Text).
-file("src/ssevents.gleam", 150).
-spec default_line_ending() -> ssevents@encoder:line_ending().
default_line_ending() ->
ssevents@encoder:default_line_ending().
-file("src/ssevents.gleam", 158).
?DOC(
" Encode one semantic SSE `Event` to its wire-format `String`.\n"
"\n"
" Use this when you want a text representation for logging,\n"
" inspection, fixtures, or a caller that still expects `String`.\n"
).
-spec encode(ssevents@event:event()) -> binary().
encode(Event) ->
ssevents@encoder:encode(Event).
-file("src/ssevents.gleam", 165).
?DOC(
" Encode one semantic SSE `Event` to its wire-format `BitArray`.\n"
"\n"
" Use this for HTTP responses and other byte-oriented transports.\n"
).
-spec encode_bytes(ssevents@event:event()) -> bitstring().
encode_bytes(Event) ->
ssevents@encoder:encode_bytes(Event).
-file("src/ssevents.gleam", 170).
?DOC(" Encode one `Item` (either an event or a comment) to `String`.\n").
-spec encode_item(ssevents@event:item()) -> binary().
encode_item(Item) ->
ssevents@encoder:encode_item(Item).
-file("src/ssevents.gleam", 175).
?DOC(" Encode one `Item` (either an event or a comment) to `BitArray`.\n").
-spec encode_item_bytes(ssevents@event:item()) -> bitstring().
encode_item_bytes(Item) ->
ssevents@encoder:encode_item_bytes(Item).
-file("src/ssevents.gleam", 180).
?DOC(" Encode a whole sequence of SSE items to one `String`.\n").
-spec encode_items(list(ssevents@event:item())) -> binary().
encode_items(Items) ->
ssevents@encoder:encode_items(Items).
-file("src/ssevents.gleam", 185).
?DOC(" Encode a whole sequence of SSE items to one `BitArray`.\n").
-spec encode_items_bytes(list(ssevents@event:item())) -> bitstring().
encode_items_bytes(Items) ->
ssevents@encoder:encode_items_bytes(Items).
-file("src/ssevents.gleam", 189).
-spec encode_with_line_ending(
ssevents@event:event(),
ssevents@encoder:line_ending()
) -> binary().
encode_with_line_ending(Event, Line_ending) ->
ssevents@encoder:encode_with_line_ending(Event, Line_ending).
-file("src/ssevents.gleam", 193).
-spec encode_item_with_line_ending(
ssevents@event:item(),
ssevents@encoder:line_ending()
) -> binary().
encode_item_with_line_ending(Item, Line_ending) ->
ssevents@encoder:encode_item_with_line_ending(Item, Line_ending).
-file("src/ssevents.gleam", 200).
-spec encode_items_with_line_ending(
list(ssevents@event:item()),
ssevents@encoder:line_ending()
) -> binary().
encode_items_with_line_ending(Items, Line_ending) ->
ssevents@encoder:encode_items_with_line_ending(Items, Line_ending).
-file("src/ssevents.gleam", 207).
-spec decode(binary()) -> {ok, list(ssevents@event:item())} |
{error, ssevents@error:sse_error()}.
decode(Input) ->
ssevents@decoder:decode(Input).
-file("src/ssevents.gleam", 211).
-spec decode_bytes(bitstring()) -> {ok, list(ssevents@event:item())} |
{error, ssevents@error:sse_error()}.
decode_bytes(Input) ->
ssevents@decoder:decode_bytes(Input).
-file("src/ssevents.gleam", 215).
-spec decode_with_limits(binary(), ssevents@limit:limits()) -> {ok,
list(ssevents@event:item())} |
{error, ssevents@error:sse_error()}.
decode_with_limits(Input, Limits) ->
ssevents@decoder:decode_with_limits(Input, Limits).
-file("src/ssevents.gleam", 222).
-spec decode_bytes_with_limits(bitstring(), ssevents@limit:limits()) -> {ok,
list(ssevents@event:item())} |
{error, ssevents@error:sse_error()}.
decode_bytes_with_limits(Input, Limits) ->
ssevents@decoder:decode_bytes_with_limits(Input, Limits).
-file("src/ssevents.gleam", 229).
-spec new_decoder() -> ssevents@decoder:decode_state().
new_decoder() ->
ssevents@decoder:new_decoder().
-file("src/ssevents.gleam", 233).
-spec new_decoder_with_limits(ssevents@limit:limits()) -> ssevents@decoder:decode_state().
new_decoder_with_limits(Limits) ->
ssevents@decoder:new_decoder_with_limits(Limits).
-file("src/ssevents.gleam", 237).
-spec push(ssevents@decoder:decode_state(), bitstring()) -> {ok,
{ssevents@decoder:decode_state(), list(ssevents@event:item())}} |
{error, ssevents@error:sse_error()}.
push(State, Chunk) ->
ssevents@decoder:push(State, Chunk).
-file("src/ssevents.gleam", 244).
-spec finish(ssevents@decoder:decode_state()) -> {ok,
list(ssevents@event:item())} |
{error, ssevents@error:sse_error()}.
finish(State) ->
ssevents@decoder:finish(State).
-file("src/ssevents.gleam", 248).
-spec limits() -> ssevents@limit:limits().
limits() ->
ssevents@limit:default().
-file("src/ssevents.gleam", 252).
-spec new_limits(integer(), integer(), integer(), integer()) -> ssevents@limit:limits().
new_limits(Max_line_bytes, Max_event_bytes, Max_data_lines, Max_retry_value) ->
ssevents@limit:new(
Max_line_bytes,
Max_event_bytes,
Max_data_lines,
Max_retry_value
).
-file("src/ssevents.gleam", 266).
-spec max_line_bytes(ssevents@limit:limits()) -> integer().
max_line_bytes(Limits) ->
ssevents@limit:max_line_bytes(Limits).
-file("src/ssevents.gleam", 270).
-spec max_event_bytes(ssevents@limit:limits()) -> integer().
max_event_bytes(Limits) ->
ssevents@limit:max_event_bytes(Limits).
-file("src/ssevents.gleam", 274).
-spec max_data_lines(ssevents@limit:limits()) -> integer().
max_data_lines(Limits) ->
ssevents@limit:max_data_lines(Limits).
-file("src/ssevents.gleam", 278).
-spec max_retry_value(ssevents@limit:limits()) -> integer().
max_retry_value(Limits) ->
ssevents@limit:max_retry_value(Limits).
-file("src/ssevents.gleam", 282).
-spec validate_event_name(binary()) -> {ok, binary()} |
{error, ssevents@error:sse_error()}.
validate_event_name(Name) ->
ssevents@validate:validate_event_name(Name).
-file("src/ssevents.gleam", 286).
-spec validate_id(binary()) -> {ok, binary()} |
{error, ssevents@error:sse_error()}.
validate_id(Id) ->
ssevents@validate:validate_id(Id).
-file("src/ssevents.gleam", 290).
-spec validate_retry(integer()) -> {ok, integer()} |
{error, ssevents@error:sse_error()}.
validate_retry(Milliseconds) ->
ssevents@validate:validate_retry(Milliseconds).
-file("src/ssevents.gleam", 294).
-spec max_data_bytes(ssevents@event:event(), integer()) -> {ok,
ssevents@event:event()} |
{error, ssevents@error:sse_error()}.
max_data_bytes(Event, Max) ->
ssevents@validate:max_data_bytes(Event, Max).
-file("src/ssevents.gleam", 298).
-spec new_reconnect_state() -> ssevents@reconnect:reconnect_state().
new_reconnect_state() ->
ssevents@reconnect:new().
-file("src/ssevents.gleam", 302).
-spec update_reconnect(
ssevents@reconnect:reconnect_state(),
ssevents@event:item()
) -> ssevents@reconnect:reconnect_state().
update_reconnect(State, Item) ->
ssevents@reconnect:update(State, Item).
-file("src/ssevents.gleam", 306).
-spec last_event_id(ssevents@reconnect:reconnect_state()) -> gleam@option:option(binary()).
last_event_id(State) ->
ssevents@reconnect:last_event_id(State).
-file("src/ssevents.gleam", 310).
-spec retry_interval(ssevents@reconnect:reconnect_state()) -> gleam@option:option(integer()).
retry_interval(State) ->
ssevents@reconnect:retry(State).
-file("src/ssevents.gleam", 314).
-spec last_event_id_header(ssevents@reconnect:reconnect_state()) -> gleam@option:option({binary(),
binary()}).
last_event_id_header(State) ->
ssevents@reconnect:last_event_id_header(State).
-file("src/ssevents.gleam", 318).
-spec empty_iterator() -> ssevents@stream:iterator(any()).
empty_iterator() ->
ssevents@stream:empty().
-file("src/ssevents.gleam", 322).
-spec iterator_from_list(list(EMP)) -> ssevents@stream:iterator(EMP).
iterator_from_list(Items) ->
ssevents@stream:from_list(Items).
-file("src/ssevents.gleam", 326).
-spec iterator_to_list(ssevents@stream:iterator(EMS)) -> list(EMS).
iterator_to_list(Iterator) ->
ssevents@stream:to_list(Iterator).
-file("src/ssevents.gleam", 330).
-spec iterator_next(ssevents@stream:iterator(EMV)) -> ssevents@stream:step(EMV).
iterator_next(Iterator) ->
ssevents@stream:next(Iterator).
-file("src/ssevents.gleam", 334).
-spec encode_stream(ssevents@stream:iterator(ssevents@event:item())) -> ssevents@stream:iterator(bitstring()).
encode_stream(Items) ->
ssevents@stream:encode_stream(Items).
-file("src/ssevents.gleam", 338).
-spec decode_stream(ssevents@stream:iterator(bitstring())) -> ssevents@stream:iterator({ok,
ssevents@event:item()} |
{error, ssevents@error:sse_error()}).
decode_stream(Chunks) ->
ssevents@stream:decode_stream(Chunks).
-file("src/ssevents.gleam", 344).
-spec decode_stream_with_limits(
ssevents@stream:iterator(bitstring()),
ssevents@limit:limits()
) -> ssevents@stream:iterator({ok, ssevents@event:item()} |
{error, ssevents@error:sse_error()}).
decode_stream_with_limits(Chunks, Limits) ->
ssevents@stream:decode_stream_with_limits(Chunks, Limits).
-file("src/ssevents.gleam", 351).
-spec error_to_string(ssevents@error:sse_error()) -> binary().
error_to_string(Error) ->
ssevents@error:to_string(Error).
-file("src/ssevents.gleam", 60).
-spec content_type() -> binary().
content_type() ->
<<"text/event-stream"/utf8>>.