aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2022-01-01 23:33:58 +0000
committerLouis Pilfold <louis@lpil.uk>2022-01-01 23:33:58 +0000
commit98277883177ae6531bc68bb799d103e516c2006b (patch)
tree5b2e3b1a1b7f54c3af77e995bac17f4b697e546c /src
parent9d40cdf444e0c73c192561658855f259cab6b507 (diff)
downloadgleam_stdlib-98277883177ae6531bc68bb799d103e516c2006b.tar.gz
gleam_stdlib-98277883177ae6531bc68bb799d103e516c2006b.zip
Set path in element and field functions
Diffstat (limited to 'src')
-rw-r--r--src/gleam/dynamic.gleam2
-rw-r--r--src/gleam_stdlib.erl2
-rw-r--r--src/gleam_stdlib.mjs2
3 files changed, 4 insertions, 2 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();