Current section

Files

Jump to
roundabout src roundabout@parameter.erl
Raw

src/roundabout@parameter.erl

-module(roundabout@parameter).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/roundabout/parameter.gleam").
-export([new/2, unsafe/2, unsafe_int/1, name/1, kind/1, type_name/1, full/1]).
-export_type([kind/0, parameter/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.
-type kind() :: int | str.
-opaque parameter() :: {parameter, binary(), kind()}.
-file("src/roundabout/parameter.gleam", 16).
?DOC(false).
-spec new(binary(), kind()) -> {ok, parameter()} | {error, binary()}.
new(Name, Kind) ->
Re@1 = case gleam@regexp:from_string(<<"^[a-z][a-z0-9 _-]*$"/utf8>>) of
{ok, Re} -> Re;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"roundabout/parameter"/utf8>>,
function => <<"new"/utf8>>,
line => 17,
value => _assert_fail,
start => 235,
'end' => 296,
pattern_start => 246,
pattern_end => 252})
end,
Candidate = justin:snake_case(Name),
case gleam@regexp:check(Re@1, Candidate) of
true ->
{ok, {parameter, justin:snake_case(Name), Kind}};
false ->
{error, <<"Invalid parameter name "/utf8, Name/binary>>}
end.
-file("src/roundabout/parameter.gleam", 28).
?DOC(false).
-spec unsafe(binary(), kind()) -> parameter().
unsafe(Name, Kind) ->
{parameter, Name, Kind}.
-file("src/roundabout/parameter.gleam", 33).
?DOC(false).
-spec unsafe_int(binary()) -> parameter().
unsafe_int(Name) ->
{parameter, Name, int}.
-file("src/roundabout/parameter.gleam", 38).
?DOC(false).
-spec name(parameter()) -> binary().
name(P) ->
erlang:element(2, P).
-file("src/roundabout/parameter.gleam", 43).
?DOC(false).
-spec kind(parameter()) -> kind().
kind(P) ->
erlang:element(3, P).
-file("src/roundabout/parameter.gleam", 48).
?DOC(false).
-spec type_name(parameter()) -> binary().
type_name(P) ->
case erlang:element(3, P) of
str ->
<<"String"/utf8>>;
int ->
<<"Int"/utf8>>
end.
-file("src/roundabout/parameter.gleam", 56).
?DOC(false).
-spec full(parameter()) -> binary().
full(P) ->
<<<<(erlang:element(2, P))/binary, ": "/utf8>>/binary,
(type_name(P))/binary>>.