aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortynanbe <contact@tynan.be>2022-06-27 15:49:50 -0500
committerLouis Pilfold <louis@lpil.uk>2022-06-27 22:19:30 +0100
commit4cdbf54237feb9b7fb855599173528deb0313c16 (patch)
tree65d7cc7e54d5b2959d31371fe1fd4af894119db3
parent402040ddad97b046e6d215d1efc49b6920315a87 (diff)
downloadgleam_stdlib-4cdbf54237feb9b7fb855599173528deb0313c16.tar.gz
gleam_stdlib-4cdbf54237feb9b7fb855599173528deb0313c16.zip
Let `decode_list` succeed with arrays
-rw-r--r--CHANGELOG.md3
-rw-r--r--src/gleam_stdlib.mjs3
-rw-r--r--test/gleam/dynamic_test.gleam14
3 files changed, 20 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d7edea9..b21f991 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
# Changelog
+## Unreleased
+- Fixed a bug where decoding a `List` from a `Dynamic` `Array` would fail.
+
## v0.22.1 - 2022-06-27
- Fixed a bug where `big_string.concat` could crash.
diff --git a/src/gleam_stdlib.mjs b/src/gleam_stdlib.mjs
index dac8d58..a612367 100644
--- a/src/gleam_stdlib.mjs
+++ b/src/gleam_stdlib.mjs
@@ -576,6 +576,9 @@ export function tuple_get(data, index) {
}
export function decode_list(data) {
+ if (Array.isArray(data)) {
+ return new Ok(List.fromArray(data));
+ }
return List.isList(data) ? new Ok(data) : decoder_error("List", data);
}
diff --git a/test/gleam/dynamic_test.gleam b/test/gleam/dynamic_test.gleam
index a1c15fe..8e9d4f7 100644
--- a/test/gleam/dynamic_test.gleam
+++ b/test/gleam/dynamic_test.gleam
@@ -756,6 +756,20 @@ pub fn shallow_list_test() {
|> should.equal(Error([DecodeError(expected: "List", found: "Int", path: [])]))
}
+if javascript {
+ pub fn array_on_js_is_also_list_test() {
+ #()
+ |> dynamic.from
+ |> dynamic.shallow_list
+ |> should.equal(Ok([]))
+
+ #(1, 2)
+ |> dynamic.from
+ |> dynamic.list(of: dynamic.int)
+ |> should.equal(Ok([1, 2]))
+ }
+}
+
pub fn result_test() {
Ok(1)
|> dynamic.from