aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRJ Dellecese <rjdellecese@gmail.com>2019-12-18 22:47:10 -0500
committerLouis Pilfold <louis@lpil.uk>2019-12-19 10:35:55 +0000
commit21d2771d72feb740e5408928e0d81f6e0fff513a (patch)
treea5547ff9089acca75551e0c89082fab58ecc44dc
parent4754b04599695064f33ac685ae0f015cf3b36e24 (diff)
downloadgleam_stdlib-21d2771d72feb740e5408928e0d81f6e0fff513a.tar.gz
gleam_stdlib-21d2771d72feb740e5408928e0d81f6e0fff513a.zip
Change Result Error type to String
and add some useful error messages.
-rw-r--r--gen/test/gleam@dynamic_test.erl6
-rw-r--r--src/gleam/dynamic.gleam2
-rw-r--r--src/gleam_stdlib.erl12
-rw-r--r--test/gleam/dynamic_test.gleam3
4 files changed, 9 insertions, 14 deletions
diff --git a/gen/test/gleam@dynamic_test.erl b/gen/test/gleam@dynamic_test.erl
index 9d22b1b..df03621 100644
--- a/gen/test/gleam@dynamic_test.erl
+++ b/gen/test/gleam@dynamic_test.erl
@@ -171,7 +171,6 @@ field_test() ->
element_test() ->
{ok, OkAtom} = gleam@atom:from_string(<<"ok">>),
- {ok, ErrorAtom} = gleam@atom:from_string(<<"ok">>),
OkOneStruct = {OkAtom, 1},
gleam@expect:equal(
gleam@dynamic:element(gleam@dynamic:from(OkOneStruct), 0),
@@ -188,10 +187,9 @@ element_test() ->
gleam@dynamic:element(gleam@dynamic:from(OkOneStruct), -1)
),
gleam@expect:is_error(gleam@dynamic:element(gleam@dynamic:from(1), 0)),
- gleam@expect:equal(
+ gleam@expect:is_error(
gleam@dynamic:element(
gleam@dynamic:from(gleam@map:insert(gleam@map:new(), 1, OkAtom)),
0
- ),
- {error, nil}
+ )
).
diff --git a/src/gleam/dynamic.gleam b/src/gleam/dynamic.gleam
index 4512c8a..0660a67 100644
--- a/src/gleam/dynamic.gleam
+++ b/src/gleam/dynamic.gleam
@@ -49,5 +49,5 @@ pub fn list(from dynamic, containing decoder_type) {
pub external fn field(from: Dynamic, named: a) -> Result(Dynamic, String)
= "gleam_stdlib" "decode_field"
-pub external fn element(from: Dynamic, position: Int) -> Result(Dynamic, Nil)
+pub external fn element(from: Dynamic, position: Int) -> Result(Dynamic, String)
= "gleam_stdlib" "decode_element"
diff --git a/src/gleam_stdlib.erl b/src/gleam_stdlib.erl
index abfdfbb..f963716 100644
--- a/src/gleam_stdlib.erl
+++ b/src/gleam_stdlib.erl
@@ -70,17 +70,15 @@ decode_field(Data, Key) ->
decode_error_msg(io_lib:format("a map with key `~p`", [Key]), Data)
end.
-decode_element(Data, Position) ->
+decode_element(Data, Position) when is_tuple(Data) ->
case catch element(Position + 1, Data) of
{'EXIT', _Reason} ->
- {error, nil};
+ {error, "Element position is out-of-bounds"};
Value ->
- {ok, Value};
-
- _ ->
- {error, nil}
- end.
+ {ok, Value}
+ end;
+decode_element(Data, Position) -> decode_error_msg("a Tuple", Data).
parse_int(String) ->
case string:to_integer(binary:bin_to_list(String)) of
diff --git a/test/gleam/dynamic_test.gleam b/test/gleam/dynamic_test.gleam
index 46b5418..8b57648 100644
--- a/test/gleam/dynamic_test.gleam
+++ b/test/gleam/dynamic_test.gleam
@@ -224,7 +224,6 @@ pub fn field_test() {
pub fn element_test() {
let Ok(ok_atom) = atom.from_string("ok")
- let Ok(error_atom) = atom.from_string("ok")
let ok_one_struct = struct(ok_atom, 1)
ok_one_struct
@@ -256,5 +255,5 @@ pub fn element_test() {
|> map.insert(_, 1, ok_atom)
|> dynamic.from
|> dynamic.element(_, 0)
- |> expect.equal(_, Error(Nil))
+ |> expect.is_error
}