aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2021-09-11 15:00:27 +0100
committerLouis Pilfold <louis@lpil.uk>2021-09-11 15:00:27 +0100
commitfe9aa89e6d595599a8c33b50cb206cb71b4d8a19 (patch)
tree5f951786bd989974bd312f7e69da50e4a0b0bb5c /src
parentff8be8c4e25220e1fae4bbb4cbd20d1f2072aae0 (diff)
downloadgleam_stdlib-fe9aa89e6d595599a8c33b50cb206cb71b4d8a19.tar.gz
gleam_stdlib-fe9aa89e6d595599a8c33b50cb206cb71b4d8a19.zip
JS decode field for maps
Diffstat (limited to 'src')
-rw-r--r--src/gleam_stdlib.js13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/gleam_stdlib.js b/src/gleam_stdlib.js
index b7173c2..158a571 100644
--- a/src/gleam_stdlib.js
+++ b/src/gleam_stdlib.js
@@ -556,7 +556,14 @@ export function decode_option(data, decoder) {
}
export function decode_field(value, name) {
- return name in value
- ? new Ok(value[name])
- : decoder_error(`Value with field ${inspect(name)}`, value);
+ let error = () => decoder_error(`Value with field ${inspect(name)}`, value);
+ if (value instanceof Map) {
+ let entry = value.get(name);
+ return entry.isOk() ? entry : error();
+ }
+ try {
+ return name in value ? new Ok(value[name]) : error();
+ } catch {
+ return error();
+ }
}