aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gleam_stdlib.mjs2
-rw-r--r--test/gleam/dynamic_test.gleam10
2 files changed, 12 insertions, 0 deletions
diff --git a/src/gleam_stdlib.mjs b/src/gleam_stdlib.mjs
index 92e872e..22ca8c3 100644
--- a/src/gleam_stdlib.mjs
+++ b/src/gleam_stdlib.mjs
@@ -673,6 +673,8 @@ export function decode_field(value, name) {
) {
const entry = map_get(value, name);
return new Ok(entry.isOk() ? new Some(entry[0]) : new None());
+ } else if (value === null) {
+ return not_a_map_error()
} else if (Object.getPrototypeOf(value) == Object.prototype) {
return try_get_field(value, name, () => new Ok(new None()));
} else {
diff --git a/test/gleam/dynamic_test.gleam b/test/gleam/dynamic_test.gleam
index 4b6fc53..2e36777 100644
--- a/test/gleam/dynamic_test.gleam
+++ b/test/gleam/dynamic_test.gleam
@@ -79,6 +79,16 @@ pub fn dict_from_null_test() {
)
}
+@target(javascript)
+pub fn null_for_field_test() {
+ get_null()
+ |> dynamic.from
+ |> dynamic.field("x", dynamic.string)
+ |> should.equal(
+ Error([DecodeError(expected: "Dict", found: "Null", path: [])]),
+ )
+}
+
pub fn string_test() {
""
|> dynamic.from