diff options
author | Peter Saxton <peterhsaxton@gmail.com> | 2023-01-12 12:16:47 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2023-01-18 15:05:13 +0000 |
commit | a9d03207752a9a1fa6bace2b35c06cf14962d91f (patch) | |
tree | 68f12c68b531fb6dadb88fbccc8803feacbafc6e | |
parent | 6cd12632d0a67a1fb239a75592e420b20dfed7a7 (diff) | |
download | gleam_stdlib-a9d03207752a9a1fa6bace2b35c06cf14962d91f.tar.gz gleam_stdlib-a9d03207752a9a1fa6bace2b35c06cf14962d91f.zip |
decode javascript object as maps
-rw-r--r-- | src/gleam_stdlib.mjs | 8 | ||||
-rw-r--r-- | test/gleam/dynamic_test.gleam | 12 |
2 files changed, 19 insertions, 1 deletions
diff --git a/src/gleam_stdlib.mjs b/src/gleam_stdlib.mjs index 112007f..4f54c4d 100644 --- a/src/gleam_stdlib.mjs +++ b/src/gleam_stdlib.mjs @@ -673,8 +673,14 @@ export function decode_result(data) { return Result.isResult(data) ? new Ok(data) : decoder_error("Result", data); } +function decode_object_to_map(data) { + return typeof data === 'object' && data !== null && !Array.isArray(data) + ? new Ok(new Map(Object.entries(data))) + : decoder_error("Map", data); +} + export function decode_map(data) { - return data instanceof Map ? new Ok(data) : decoder_error("Map", data); + return data instanceof Map ? new Ok(data) : decode_object_to_map(data); } export function decode_option(data, decoder) { diff --git a/test/gleam/dynamic_test.gleam b/test/gleam/dynamic_test.gleam index 0caf8c5..fb425f5 100644 --- a/test/gleam/dynamic_test.gleam +++ b/test/gleam/dynamic_test.gleam @@ -744,6 +744,18 @@ pub fn map_test() { |> dynamic.from |> dynamic.map(dynamic.string, dynamic.int) |> should.equal(Error([DecodeError(expected: "Map", found: "Int", path: [])])) + + [] + |> dynamic.from + |> dynamic.map(dynamic.string, dynamic.int) + |> should.equal(Error([DecodeError(expected: "Map", found: "List", path: [])])) + + fn() { Nil } + |> dynamic.from + |> dynamic.map(dynamic.string, dynamic.int) + |> should.equal(Error([ + DecodeError(expected: "Map", found: "Function", path: []), + ])) } pub fn shallow_list_test() { |