-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.