Current section
Files
Jump to
Current section
Files
src/testcontainer@port.erl
-module(testcontainer@port).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/testcontainer/port.gleam").
-export([tcp/1, udp/1, try_tcp/1, try_udp/1, number/1, protocol/1]).
-export_type([port_/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.
-opaque port_() :: {tcp, integer()} | {udp, integer()}.
-file("src/testcontainer/port.gleam", 13).
?DOC(
" Creates a TCP port. Numbers outside `1..=65535` will be rejected later\n"
" by `start/1`. For up-front validation, prefer `try_tcp/1`.\n"
).
-spec tcp(integer()) -> port_().
tcp(Number) ->
{tcp, Number}.
-file("src/testcontainer/port.gleam", 18).
?DOC(" Creates a UDP port. See `tcp/1` for validation notes.\n").
-spec udp(integer()) -> port_().
udp(Number) ->
{udp, Number}.
-file("src/testcontainer/port.gleam", 23).
?DOC(" Validated TCP port constructor.\n").
-spec try_tcp(integer()) -> {ok, port_()} | {error, testcontainer@error:error()}.
try_tcp(Number) ->
case (Number >= 1) andalso (Number =< 65535) of
true ->
{ok, {tcp, Number}};
false ->
{error, {invalid_port, Number}}
end.
-file("src/testcontainer/port.gleam", 31).
?DOC(" Validated UDP port constructor.\n").
-spec try_udp(integer()) -> {ok, port_()} | {error, testcontainer@error:error()}.
try_udp(Number) ->
case (Number >= 1) andalso (Number =< 65535) of
true ->
{ok, {udp, Number}};
false ->
{error, {invalid_port, Number}}
end.
-file("src/testcontainer/port.gleam", 39).
?DOC(" Returns the port number.\n").
-spec number(port_()) -> integer().
number(Port) ->
case Port of
{tcp, N} ->
N;
{udp, N@1} ->
N@1
end.
-file("src/testcontainer/port.gleam", 47).
?DOC(" Returns `\"tcp\"` or `\"udp\"`.\n").
-spec protocol(port_()) -> binary().
protocol(Port) ->
case Port of
{tcp, _} ->
<<"tcp"/utf8>>;
{udp, _} ->
<<"udp"/utf8>>
end.