diff options
author | Louis Pilfold <louis@lpil.uk> | 2021-09-11 15:00:27 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2021-09-11 15:00:27 +0100 |
commit | fe9aa89e6d595599a8c33b50cb206cb71b4d8a19 (patch) | |
tree | 5f951786bd989974bd312f7e69da50e4a0b0bb5c /src | |
parent | ff8be8c4e25220e1fae4bbb4cbd20d1f2072aae0 (diff) | |
download | gleam_stdlib-fe9aa89e6d595599a8c33b50cb206cb71b4d8a19.tar.gz gleam_stdlib-fe9aa89e6d595599a8c33b50cb206cb71b4d8a19.zip |
JS decode field for maps
Diffstat (limited to 'src')
-rw-r--r-- | src/gleam_stdlib.js | 13 |
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(); + } } |