aboutsummaryrefslogtreecommitdiff
path: root/src/gleam_stdlib.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/gleam_stdlib.erl')
-rw-r--r--src/gleam_stdlib.erl38
1 files changed, 21 insertions, 17 deletions
diff --git a/src/gleam_stdlib.erl b/src/gleam_stdlib.erl
index 98b4a4b..c52e694 100644
--- a/src/gleam_stdlib.erl
+++ b/src/gleam_stdlib.erl
@@ -108,35 +108,39 @@ decode_list(Data) -> decode_error_msg(<<"List">>, Data).
decode_field(Data, Key) ->
case Data of
- #{Key := Value} ->
- {ok, Value};
-
- _ ->
- decode_error_msg(io_lib:format("a map with key `~p`", [Key]), Data)
+ #{Key := Value} -> {ok, Value};
+ _ -> decode_error_msg(io_lib:format("a map with key `~p`", [Key]), Data)
end.
-decode_element(Data, Index) when is_tuple(Data) ->
- Error = fun(Size) ->
- S = case Size of
- 1 -> "s";
- _ -> ""
- end,
- Msg = list_to_binary(["Tuple of at least ", integer_to_list(Size), S, " elements"]),
- decode_error_msg(Msg, Data)
+
+decode_tuple_error(Size, Data) ->
+ S = case Size of
+ 1 -> "";
+ _ -> "s"
end,
+ Msg = list_to_binary([
+ "Tuple of at least ", integer_to_list(Size), " element", S
+ ]),
+ decode_error_msg(Msg, Data).
+
+decode_element(Data, Index) when is_tuple(Data) ->
Size = tuple_size(Data),
case Index >= 0 of
true -> case Index < Size of
true -> {ok, element(Index + 1, Data)};
- false -> Error(Index + 1)
+ false -> decode_tuple_error(Index + 1, Data)
end;
false -> case abs(Index) < Size of
true -> {ok, element(Size + Index + 1, Data)};
- false -> Error(abs(Index))
+ false -> decode_tuple_error(abs(Index), Data)
end
end;
-decode_element(Data, _Position) ->
- decode_error_msg(<<"Tuple of at least 1 element">>, Data).
+decode_element(Data, Index) ->
+ Size = case Index < 0 of
+ true -> abs(Index);
+ false -> Index + 1
+ end,
+ decode_tuple_error(Size, Data).
decode_optional(Term, F) ->
Decode = fun(Inner) ->