src/lightspeed@transport.erl

-module(lightspeed@transport).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/lightspeed/transport.gleam").
-export([label/1, bidirectional/1]).
-export_type([transport/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(" Transport abstractions.\n").

-type transport() :: web_socket | server_sent_events | long_polling | in_process.

-file("src/lightspeed/transport.gleam", 12).
?DOC(" Return a stable transport label.\n").
-spec label(transport()) -> binary().
label(Transport) ->
    case Transport of
        web_socket ->
            <<"websocket"/utf8>>;

        server_sent_events ->
            <<"sse"/utf8>>;

        long_polling ->
            <<"long_polling"/utf8>>;

        in_process ->
            <<"in_process"/utf8>>
    end.

-file("src/lightspeed/transport.gleam", 22).
?DOC(" True when the transport can send client and server messages over one channel.\n").
-spec bidirectional(transport()) -> boolean().
bidirectional(Transport) ->
    case Transport of
        web_socket ->
            true;

        in_process ->
            true;

        server_sent_events ->
            false;

        long_polling ->
            false
    end.