diff options
author | Louis Pilfold <louis@lpil.uk> | 2022-01-01 23:33:58 +0000 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2022-01-01 23:33:58 +0000 |
commit | 98277883177ae6531bc68bb799d103e516c2006b (patch) | |
tree | 5b2e3b1a1b7f54c3af77e995bac17f4b697e546c | |
parent | 9d40cdf444e0c73c192561658855f259cab6b507 (diff) | |
download | gleam_stdlib-98277883177ae6531bc68bb799d103e516c2006b.tar.gz gleam_stdlib-98277883177ae6531bc68bb799d103e516c2006b.zip |
Set path in element and field functions
-rw-r--r-- | src/gleam/dynamic.gleam | 2 | ||||
-rw-r--r-- | src/gleam_stdlib.erl | 2 | ||||
-rw-r--r-- | src/gleam_stdlib.mjs | 2 | ||||
-rw-r--r-- | test/gleam/dynamic_test.gleam | 8 |
4 files changed, 10 insertions, 4 deletions
diff --git a/src/gleam/dynamic.gleam b/src/gleam/dynamic.gleam index 9a626dc..04a01ae 100644 --- a/src/gleam/dynamic.gleam +++ b/src/gleam/dynamic.gleam @@ -404,6 +404,7 @@ pub fn field( ) -> Result(t, DecodeErrors) { try value = decode_field(value, name) inner_type(value) + |> map_errors(push_path(_, name)) } if erlang { @@ -450,6 +451,7 @@ pub fn element( } } inner_type(data) + |> map_errors(push_path(_, index)) } fn exact_decode_tuple_error(size: Int, data: Dynamic) -> Result(a, DecodeErrors) { diff --git a/src/gleam_stdlib.erl b/src/gleam_stdlib.erl index d88b964..3228b18 100644 --- a/src/gleam_stdlib.erl +++ b/src/gleam_stdlib.erl @@ -94,7 +94,7 @@ 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("Value with field `~p`", [Key]), Data) + _ -> decode_error_msg("object", Data) end. size_of_tuple(Data) -> tuple_size(Data). diff --git a/src/gleam_stdlib.mjs b/src/gleam_stdlib.mjs index 4d8f65e..8340cd6 100644 --- a/src/gleam_stdlib.mjs +++ b/src/gleam_stdlib.mjs @@ -558,7 +558,7 @@ export function decode_option(data, decoder) { } export function decode_field(value, name) { - let error = () => decoder_error(`Value with field ${inspect(name)}`, value); + let error = () => decoder_error("object", value); if (value instanceof Map) { let entry = value.get(name); return entry.isOk() ? entry : error(); diff --git a/test/gleam/dynamic_test.gleam b/test/gleam/dynamic_test.gleam index 7d490dc..902cc92 100644 --- a/test/gleam/dynamic_test.gleam +++ b/test/gleam/dynamic_test.gleam @@ -254,7 +254,11 @@ if javascript { |> dynamic.from |> dynamic.field("Nope", dynamic.int) |> should.equal(Error([ - DecodeError(expected: "Value with field \"Nope\"", found: "Result"), + DecodeError( + expected: "Value with field \"Nope\"", + found: "Result", + path: [], + ), ])) } } @@ -318,7 +322,7 @@ pub fn element_test() { |> dynamic.from |> dynamic.element(1, dynamic.string) |> should.equal(Error([ - DecodeError(expected: "String", found: "Int", path: []), + DecodeError(expected: "String", found: "Int", path: ["1"]), ])) ok_one_tuple |