Packages
gleam_stdlib
0.17.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, classify/1, int/1, float/1, bool/1, list/1, result/1, typed_result/3, typed_list/2, optional/2, field/2, element/2, tuple2/1, typed_tuple2/3, tuple3/1, typed_tuple3/4, tuple4/1, typed_tuple4/5, tuple5/1, typed_tuple5/6, tuple6/1, typed_tuple6/7, map/1, any/2]).
-export_type([dynamic/0, decode_error/0, unknown_tuple/0]).
-type dynamic() :: any().
-type decode_error() :: {decode_error, binary(), binary()}.
-type unknown_tuple() :: 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, decode_error()}.
bit_string(Data) ->
gleam_stdlib:decode_bit_string(Data).
-spec string(dynamic()) -> {ok, binary()} | {error, decode_error()}.
string(Data) ->
decode_string(Data).
-spec decode_string(dynamic()) -> {ok, binary()} | {error, decode_error()}.
decode_string(Data) ->
_pipe = bit_string(Data),
_pipe@1 = gleam@result:map_error(
_pipe,
fun(Error) -> erlang:setelement(2, Error, <<"String"/utf8>>) end
),
gleam@result:then(
_pipe@1,
fun(Raw) -> case gleam@bit_string:to_string(Raw) of
{ok, String} ->
{ok, String};
{error, nil} ->
{error,
{decode_error, <<"String"/utf8>>, <<"BitString"/utf8>>}}
end end
).
-spec classify(dynamic()) -> binary().
classify(Data) ->
gleam_stdlib:classify_dynamic(Data).
-spec int(dynamic()) -> {ok, integer()} | {error, decode_error()}.
int(Data) ->
gleam_stdlib:decode_int(Data).
-spec float(dynamic()) -> {ok, float()} | {error, decode_error()}.
float(Data) ->
gleam_stdlib:decode_float(Data).
-spec bool(dynamic()) -> {ok, boolean()} | {error, decode_error()}.
bool(Data) ->
gleam_stdlib:decode_bool(Data).
-spec list(dynamic()) -> {ok, list(dynamic())} | {error, decode_error()}.
list(Value) ->
gleam_stdlib:decode_list(Value).
-spec result(dynamic()) -> {ok, {ok, dynamic()} | {error, dynamic()}} |
{error, decode_error()}.
result(Value) ->
gleam_stdlib:decode_result(Value).
-spec typed_result(
dynamic(),
fun((dynamic()) -> {ok, FJS} | {error, decode_error()}),
fun((dynamic()) -> {ok, FJU} | {error, decode_error()})
) -> {ok, {ok, FJS} | {error, FJU}} | {error, decode_error()}.
typed_result(Dynamic, Decode_ok, Decode_error) ->
case result(Dynamic) of
{error, _try} -> {error, _try};
{ok, Inner_result} ->
case Inner_result of
{ok, Raw} ->
_pipe = Raw,
_pipe@1 = Decode_ok(_pipe),
gleam@result:map(_pipe@1, fun(A) -> {ok, A} end);
{error, Raw@1} ->
_pipe@2 = Raw@1,
_pipe@3 = Decode_error(_pipe@2),
gleam@result:map(_pipe@3, fun(A) -> {error, A} end)
end
end.
-spec typed_list(
dynamic(),
fun((dynamic()) -> {ok, FKA} | {error, decode_error()})
) -> {ok, list(FKA)} | {error, decode_error()}.
typed_list(Dynamic, Decoder_type) ->
_pipe = Dynamic,
_pipe@1 = list(_pipe),
gleam@result:then(
_pipe@1,
fun(_capture) -> gleam@list:try_map(_capture, Decoder_type) end
).
-spec optional(
dynamic(),
fun((dynamic()) -> {ok, FKG} | {error, decode_error()})
) -> {ok, gleam@option:option(FKG)} | {error, decode_error()}.
optional(Value, Decode) ->
gleam_stdlib:decode_option(Value, Decode).
-spec field(dynamic(), any()) -> {ok, dynamic()} | {error, decode_error()}.
field(Value, Name) ->
gleam_stdlib:decode_field(Value, Name).
-spec element(dynamic(), integer()) -> {ok, dynamic()} | {error, decode_error()}.
element(Data, Index) ->
case gleam_stdlib:decode_tuple(Data) of
{error, _try} -> {error, _try};
{ok, Tuple} ->
Size = gleam_stdlib:size_of_tuple(Tuple),
case Index >= 0 of
true ->
case Index < Size of
true ->
gleam_stdlib:tuple_get(Tuple, Index);
false ->
at_least_decode_tuple_error(Index + 1, Data)
end;
false ->
case gleam@int:absolute_value(Index) =< Size of
true ->
gleam_stdlib:tuple_get(Tuple, Size + Index);
false ->
at_least_decode_tuple_error(
gleam@int:absolute_value(Index),
Data
)
end
end
end.
-spec exact_decode_tuple_error(integer(), dynamic()) -> {ok, any()} |
{error, decode_error()}.
exact_decode_tuple_error(Size, Data) ->
S = case Size of
0 ->
<<""/utf8>>;
_@1 ->
<<"s"/utf8>>
end,
_pipe = [<<"Tuple of "/utf8>>,
gleam@int:to_string(Size),
<<" element"/utf8>>,
S],
_pipe@1 = gleam@string_builder:from_strings(_pipe),
_pipe@2 = gleam@string_builder:to_string(_pipe@1),
_pipe@3 = {decode_error, _pipe@2, classify(Data)},
{error, _pipe@3}.
-spec at_least_decode_tuple_error(integer(), dynamic()) -> {ok, any()} |
{error, decode_error()}.
at_least_decode_tuple_error(Size, Data) ->
S = case Size of
0 ->
<<""/utf8>>;
_@1 ->
<<"s"/utf8>>
end,
_pipe = [<<"Tuple of at least "/utf8>>,
gleam@int:to_string(Size),
<<" element"/utf8>>,
S],
_pipe@1 = gleam@string_builder:from_strings(_pipe),
_pipe@2 = gleam@string_builder:to_string(_pipe@1),
_pipe@3 = {decode_error, _pipe@2, classify(Data)},
{error, _pipe@3}.
-spec tuple2(dynamic()) -> {ok, {dynamic(), dynamic()}} |
{error, decode_error()}.
tuple2(Value) ->
case assert_is_tuple(Value, 2) of
{error, _try} -> {error, _try};
{ok, _@1} ->
{ok, unsafe_coerce(Value)}
end.
-spec assert_is_tuple(dynamic(), integer()) -> {ok, nil} |
{error, decode_error()}.
assert_is_tuple(Value, Desired_size) ->
Expected = gleam@string_builder:to_string(
gleam@string_builder:from_strings(
[<<"Tuple of "/utf8>>,
gleam@int:to_string(Desired_size),
<<" elements"/utf8>>]
)
),
case put_expected(gleam_stdlib:decode_tuple(Value), Expected) of
{error, _try} -> {error, _try};
{ok, Tuple} ->
case gleam_stdlib:size_of_tuple(Tuple) of
Size when Size =:= Desired_size ->
{ok, nil};
_@1 ->
exact_decode_tuple_error(Desired_size, Value)
end
end.
-spec put_expected({ok, FLM} | {error, decode_error()}, binary()) -> {ok, FLM} |
{error, decode_error()}.
put_expected(Result, Expected) ->
case Result of
{ok, _@1} ->
Result;
{error, E} ->
{error, erlang:setelement(2, E, Expected)}
end.
-spec typed_tuple2(
dynamic(),
fun((dynamic()) -> {ok, FLR} | {error, decode_error()}),
fun((dynamic()) -> {ok, FLT} | {error, decode_error()})
) -> {ok, {FLR, FLT}} | {error, decode_error()}.
typed_tuple2(Tup, Decode_first, Decode_second) ->
case tuple2(Tup) of
{error, _try} -> {error, _try};
{ok, {First, Second}} ->
case Decode_first(First) of
{error, _try@1} -> {error, _try@1};
{ok, A} ->
case Decode_second(Second) of
{error, _try@2} -> {error, _try@2};
{ok, B} ->
{ok, {A, B}}
end
end
end.
-spec tuple3(dynamic()) -> {ok, {dynamic(), dynamic(), dynamic()}} |
{error, decode_error()}.
tuple3(Value) ->
case assert_is_tuple(Value, 3) of
{error, _try} -> {error, _try};
{ok, _@1} ->
{ok, unsafe_coerce(Value)}
end.
-spec typed_tuple3(
dynamic(),
fun((dynamic()) -> {ok, FLZ} | {error, decode_error()}),
fun((dynamic()) -> {ok, FMB} | {error, decode_error()}),
fun((dynamic()) -> {ok, FMD} | {error, decode_error()})
) -> {ok, {FLZ, FMB, FMD}} | {error, decode_error()}.
typed_tuple3(Tup, Decode_first, Decode_second, Decode_third) ->
case tuple3(Tup) of
{error, _try} -> {error, _try};
{ok, {First, Second, Third}} ->
case Decode_first(First) of
{error, _try@1} -> {error, _try@1};
{ok, A} ->
case Decode_second(Second) of
{error, _try@2} -> {error, _try@2};
{ok, B} ->
case Decode_third(Third) of
{error, _try@3} -> {error, _try@3};
{ok, C} ->
{ok, {A, B, C}}
end
end
end
end.
-spec tuple4(dynamic()) -> {ok, {dynamic(), dynamic(), dynamic(), dynamic()}} |
{error, decode_error()}.
tuple4(Value) ->
case assert_is_tuple(Value, 4) of
{error, _try} -> {error, _try};
{ok, _@1} ->
{ok, unsafe_coerce(Value)}
end.
-spec typed_tuple4(
dynamic(),
fun((dynamic()) -> {ok, FMJ} | {error, decode_error()}),
fun((dynamic()) -> {ok, FML} | {error, decode_error()}),
fun((dynamic()) -> {ok, FMN} | {error, decode_error()}),
fun((dynamic()) -> {ok, FMP} | {error, decode_error()})
) -> {ok, {FMJ, FML, FMN, FMP}} | {error, decode_error()}.
typed_tuple4(Tup, Decode_first, Decode_second, Decode_third, Decode_fourth) ->
case tuple4(Tup) of
{error, _try} -> {error, _try};
{ok, {First, Second, Third, Fourth}} ->
case Decode_first(First) of
{error, _try@1} -> {error, _try@1};
{ok, A} ->
case Decode_second(Second) of
{error, _try@2} -> {error, _try@2};
{ok, B} ->
case Decode_third(Third) of
{error, _try@3} -> {error, _try@3};
{ok, C} ->
case Decode_fourth(Fourth) of
{error, _try@4} -> {error, _try@4};
{ok, D} ->
{ok, {A, B, C, D}}
end
end
end
end
end.
-spec tuple5(dynamic()) -> {ok,
{dynamic(),
dynamic(),
dynamic(),
dynamic(),
dynamic()}} |
{error, decode_error()}.
tuple5(Value) ->
case assert_is_tuple(Value, 5) of
{error, _try} -> {error, _try};
{ok, _@1} ->
{ok, unsafe_coerce(Value)}
end.
-spec typed_tuple5(
dynamic(),
fun((dynamic()) -> {ok, FMV} | {error, decode_error()}),
fun((dynamic()) -> {ok, FMX} | {error, decode_error()}),
fun((dynamic()) -> {ok, FMZ} | {error, decode_error()}),
fun((dynamic()) -> {ok, FNB} | {error, decode_error()}),
fun((dynamic()) -> {ok, FND} | {error, decode_error()})
) -> {ok, {FMV, FMX, FMZ, FNB, FND}} | {error, decode_error()}.
typed_tuple5(
Tup,
Decode_first,
Decode_second,
Decode_third,
Decode_fourth,
Decode_fifth
) ->
case tuple5(Tup) of
{error, _try} -> {error, _try};
{ok, {First, Second, Third, Fourth, Fifth}} ->
case Decode_first(First) of
{error, _try@1} -> {error, _try@1};
{ok, A} ->
case Decode_second(Second) of
{error, _try@2} -> {error, _try@2};
{ok, B} ->
case Decode_third(Third) of
{error, _try@3} -> {error, _try@3};
{ok, C} ->
case Decode_fourth(Fourth) of
{error, _try@4} -> {error, _try@4};
{ok, D} ->
case Decode_fifth(Fifth) of
{error, _try@5} -> {error, _try@5};
{ok, E} ->
{ok, {A, B, C, D, E}}
end
end
end
end
end
end.
-spec tuple6(dynamic()) -> {ok,
{dynamic(),
dynamic(),
dynamic(),
dynamic(),
dynamic(),
dynamic()}} |
{error, decode_error()}.
tuple6(Value) ->
case assert_is_tuple(Value, 6) of
{error, _try} -> {error, _try};
{ok, _@1} ->
{ok, unsafe_coerce(Value)}
end.
-spec typed_tuple6(
dynamic(),
fun((dynamic()) -> {ok, FNJ} | {error, decode_error()}),
fun((dynamic()) -> {ok, FNL} | {error, decode_error()}),
fun((dynamic()) -> {ok, FNN} | {error, decode_error()}),
fun((dynamic()) -> {ok, FNP} | {error, decode_error()}),
fun((dynamic()) -> {ok, FNR} | {error, decode_error()}),
fun((dynamic()) -> {ok, FNT} | {error, decode_error()})
) -> {ok, {FNJ, FNL, FNN, FNP, FNR, FNT}} | {error, decode_error()}.
typed_tuple6(
Tup,
Decode_first,
Decode_second,
Decode_third,
Decode_fourth,
Decode_fifth,
Decode_sixth
) ->
case tuple6(Tup) of
{error, _try} -> {error, _try};
{ok, {First, Second, Third, Fourth, Fifth, Sixth}} ->
case Decode_first(First) of
{error, _try@1} -> {error, _try@1};
{ok, A} ->
case Decode_second(Second) of
{error, _try@2} -> {error, _try@2};
{ok, B} ->
case Decode_third(Third) of
{error, _try@3} -> {error, _try@3};
{ok, C} ->
case Decode_fourth(Fourth) of
{error, _try@4} -> {error, _try@4};
{ok, D} ->
case Decode_fifth(Fifth) of
{error, _try@5} -> {error, _try@5};
{ok, E} ->
case Decode_sixth(Sixth) of
{error, _try@6} -> {error, _try@6};
{ok, F} ->
{ok,
{A, B, C, D, E, F}}
end
end
end
end
end
end
end.
-spec map(dynamic()) -> {ok, gleam@map:map_(dynamic(), dynamic())} |
{error, decode_error()}.
map(Value) ->
gleam_stdlib:decode_map(Value).
-spec any(
dynamic(),
list(fun((dynamic()) -> {ok, FOF} | {error, decode_error()}))
) -> {ok, FOF} | {error, decode_error()}.
any(Data, Decoders) ->
_pipe = Decoders,
_pipe@1 = gleam@list:find_map(_pipe, fun(Decoder) -> Decoder(Data) end),
gleam@result:map_error(
_pipe@1,
fun(_) -> {decode_error, <<"unknown"/utf8>>, <<"unknown"/utf8>>} end
).