diff options
author | RJ Dellecese <rjdellecese@gmail.com> | 2019-12-18 22:47:10 -0500 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2019-12-19 10:35:55 +0000 |
commit | 21d2771d72feb740e5408928e0d81f6e0fff513a (patch) | |
tree | a5547ff9089acca75551e0c89082fab58ecc44dc | |
parent | 4754b04599695064f33ac685ae0f015cf3b36e24 (diff) | |
download | gleam_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.erl | 6 | ||||
-rw-r--r-- | src/gleam/dynamic.gleam | 2 | ||||
-rw-r--r-- | src/gleam_stdlib.erl | 12 | ||||
-rw-r--r-- | test/gleam/dynamic_test.gleam | 3 |
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 } |