Packages
gleam_stdlib
0.14.0
1.0.3
1.0.2
1.0.1
1.0.0
0.71.0
0.70.0
0.69.0
0.68.1
0.68.0
0.67.1
0.67.0
0.65.0
0.64.0
0.63.2
0.63.1
0.63.0
0.62.1
0.62.0
0.61.0
0.60.0
0.59.0
0.58.0
0.57.0
0.56.0
0.55.0
0.54.0
0.53.0
0.52.0
0.51.0
0.50.0
0.49.0
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.43.0
0.42.0
0.41.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.1
0.35.0
0.34.0
0.33.1
0.33.0
0.32.1
0.32.0
0.31.0
0.30.2
0.30.1
0.30.0
0.29.2
0.29.1
0.29.0
0.28.2
0.28.1
0.28.0
0.27.0
0.26.1
0.26.0
0.25.0
0.24.0
0.23.0
0.22.3
0.22.2
0.22.1
0.22.0
0.21.0
0.20.0
0.19.3
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.18.0-rc1
0.17.1
0.17.0
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.1
0.10.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.4.0-rc1
0.3.1
0.3.0
0.2.0
retired
A standard library for the Gleam programming language
Current section
Files
Jump to
Current section
Files
gen/src/gleam@dynamic.erl
-module(gleam@dynamic).
-compile(no_auto_import).
-export([from/1, unsafe_coerce/1, bit_string/1, string/1, int/1, float/1, atom/1, bool/1, thunk/1, list/1, result/1, typed_result/3, typed_list/2, option/2, field/2, element/2, tuple2/1, typed_tuple2/3, map/1, any/2]).
-export_type([dynamic/0]).
-type dynamic() :: any().
-spec from(any()) -> dynamic().
from(A) ->
gleam_stdlib:identity(A).
-spec unsafe_coerce(dynamic()) -> any().
unsafe_coerce(A) ->
gleam_stdlib:identity(A).
-spec bit_string(dynamic()) -> {ok, bitstring()} | {error, binary()}.
bit_string(A) ->
gleam_stdlib:decode_bit_string(A).
-spec string(dynamic()) -> {ok, binary()} | {error, binary()}.
string(From) ->
gleam@result:then(
gleam_stdlib:decode_bit_string(From),
fun(Raw) -> case gleam@bit_string:to_string(Raw) of
{ok, String} ->
{ok, String};
{error, nil} ->
{error, <<"Expected a string, got a bit_string"/utf8>>}
end end
).
-spec int(dynamic()) -> {ok, integer()} | {error, binary()}.
int(A) ->
gleam_stdlib:decode_int(A).
-spec float(dynamic()) -> {ok, float()} | {error, binary()}.
float(A) ->
gleam_stdlib:decode_float(A).
-spec atom(dynamic()) -> {ok, gleam@atom:atom_()} | {error, binary()}.
atom(A) ->
gleam_stdlib:decode_atom(A).
-spec bool(dynamic()) -> {ok, boolean()} | {error, binary()}.
bool(A) ->
gleam_stdlib:decode_bool(A).
-spec thunk(dynamic()) -> {ok, fun(() -> dynamic())} | {error, binary()}.
thunk(A) ->
gleam_stdlib:decode_thunk(A).
-spec list(dynamic()) -> {ok, list(dynamic())} | {error, binary()}.
list(A) ->
gleam_stdlib:decode_list(A).
-spec result(dynamic()) -> {ok, {ok, dynamic()} | {error, dynamic()}} |
{error, binary()}.
result(From) ->
case gleam_stdlib:decode_tuple2(From) of
{error, Gleam@try_error} -> {error, Gleam@try_error};
{ok, {Key, Val}} ->
case gleam_stdlib:decode_atom(Key) of
{error, Gleam@try_error@1} -> {error, Gleam@try_error@1};
{ok, Tag} ->
Ok_atom = gleam@atom:create_from_string(<<"ok"/utf8>>),
Error_atom = gleam@atom:create_from_string(<<"error"/utf8>>),
case Tag of
Tag@1 when Tag@1 =:= Ok_atom ->
{ok, {ok, Val}};
Tag@2 when Tag@2 =:= Error_atom ->
{ok, {error, Val}};
Tag@3 ->
{error,
gleam@string_builder:to_string(
gleam@string_builder:append(
gleam@string_builder:append(
gleam@string_builder:from_string(
<<"Expected a tag of \"ok\" or \"error\", got \""/utf8>>
),
gleam@atom:to_string(Tag@3)
),
<<"\""/utf8>>
)
)}
end
end
end.
-spec typed_result(
dynamic(),
fun((dynamic()) -> {ok, EKC} | {error, binary()}),
fun((dynamic()) -> {ok, EKE} | {error, binary()})
) -> {ok, {ok, EKC} | {error, EKE}} | {error, binary()}.
typed_result(Dynamic, Decode_ok, Decode_error) ->
case result(Dynamic) of
{error, Gleam@try_error} -> {error, Gleam@try_error};
{ok, Inner_result} ->
case Inner_result of
{ok, Raw} ->
gleam@result:map(Decode_ok(Raw), fun(A) -> {ok, A} end);
{error, Raw@1} ->
gleam@result:map(
Decode_error(Raw@1),
fun(A) -> {error, A} end
)
end
end.
-spec typed_list(dynamic(), fun((dynamic()) -> {ok, EKK} | {error, binary()})) -> {ok,
list(EKK)} |
{error, binary()}.
typed_list(Dynamic, Decoder_type) ->
gleam@result:then(
gleam_stdlib:decode_list(Dynamic),
fun(Gleam@capture_variable) ->
gleam@list:try_map(Gleam@capture_variable, Decoder_type)
end
).
-spec option(dynamic(), fun((dynamic()) -> {ok, EKQ} | {error, binary()})) -> {ok,
gleam@option:option(EKQ)} |
{error, binary()}.
option(Dynamic, Decoder) ->
{ok, Null} = gleam@atom:from_string(<<"null"/utf8>>),
case {gleam_stdlib:decode_atom(Dynamic), Decoder(Dynamic)} of
{{ok, Atom}, _} when Atom =:= Null ->
{ok, none};
{_, {ok, Result}} ->
{ok, {some, Result}};
{_, {error, Msg}} ->
{error, Msg}
end.
-spec field(dynamic(), any()) -> {ok, dynamic()} | {error, binary()}.
field(A, B) ->
gleam_stdlib:decode_field(A, B).
-spec element(dynamic(), integer()) -> {ok, dynamic()} | {error, binary()}.
element(A, B) ->
gleam_stdlib:decode_element(A, B).
-spec tuple2(dynamic()) -> {ok, {dynamic(), dynamic()}} | {error, binary()}.
tuple2(A) ->
gleam_stdlib:decode_tuple2(A).
-spec typed_tuple2(
dynamic(),
fun((dynamic()) -> {ok, ELC} | {error, binary()}),
fun((dynamic()) -> {ok, ELE} | {error, binary()})
) -> {ok, {ELC, ELE}} | {error, binary()}.
typed_tuple2(Tup, Decode_first, Decode_second) ->
case gleam_stdlib:decode_tuple2(Tup) of
{error, Gleam@try_error} -> {error, Gleam@try_error};
{ok, {First, Second}} ->
case Decode_first(First) of
{error, Gleam@try_error@1} -> {error, Gleam@try_error@1};
{ok, A} ->
case Decode_second(Second) of
{error, Gleam@try_error@2} -> {error, Gleam@try_error@2};
{ok, B} ->
{ok, {A, B}}
end
end
end.
-spec map(dynamic()) -> {ok, gleam@map:map_(dynamic(), dynamic())} |
{error, binary()}.
map(A) ->
gleam_stdlib:decode_map(A).
-spec any(dynamic(), list(fun((dynamic()) -> {ok, ELM} | {error, binary()}))) -> {ok,
ELM} |
{error, binary()}.
any(Data, Decoders) ->
gleam@result:map_error(
gleam@list:find_map(Decoders, fun(Decoder) -> Decoder(Data) end),
fun(_) -> <<"Unexpected value"/utf8>> end
).