diff options
author | Louis Pilfold <louis@lpil.uk> | 2022-01-01 23:39:51 +0000 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2022-01-01 23:39:51 +0000 |
commit | 7b89700cb2c854ee2af74980c04fbf568958f496 (patch) | |
tree | 7923675dbd56edb7271787e40e1ee785689c0db1 | |
parent | 98277883177ae6531bc68bb799d103e516c2006b (diff) | |
download | gleam_stdlib-7b89700cb2c854ee2af74980c04fbf568958f496.tar.gz gleam_stdlib-7b89700cb2c854ee2af74980c04fbf568958f496.zip |
List pushes path
-rw-r--r-- | src/gleam/dynamic.gleam | 7 | ||||
-rw-r--r-- | test/gleam/dynamic_test.gleam | 16 |
2 files changed, 15 insertions, 8 deletions
diff --git a/src/gleam/dynamic.gleam b/src/gleam/dynamic.gleam index 04a01ae..57cc7b5 100644 --- a/src/gleam/dynamic.gleam +++ b/src/gleam/dynamic.gleam @@ -332,9 +332,10 @@ pub fn list( from dynamic: Dynamic, of decoder_type: fn(Dynamic) -> Result(inner, DecodeErrors), ) -> Result(List(inner), DecodeErrors) { - dynamic - |> shallow_list - |> result.then(list.try_map(_, decoder_type)) + try list = shallow_list(dynamic) + list + |> list.try_map(decoder_type) + |> map_errors(push_path(_, "*")) } /// Checks to see if a `Dynamic` value is a nullable version of a particular diff --git a/test/gleam/dynamic_test.gleam b/test/gleam/dynamic_test.gleam index 902cc92..9301017 100644 --- a/test/gleam/dynamic_test.gleam +++ b/test/gleam/dynamic_test.gleam @@ -198,22 +198,28 @@ pub fn list_test() { 1 |> dynamic.from |> dynamic.list(dynamic.string) - |> should.be_error + |> should.equal(Error([DecodeError(expected: "List", found: "Int", path: [])])) - 1.0 + 1.1 |> dynamic.from |> dynamic.list(dynamic.int) - |> should.be_error + |> should.equal(Error([ + DecodeError(expected: "List", found: "Float", path: []), + ])) [""] |> dynamic.from |> dynamic.list(dynamic.int) - |> should.be_error + |> should.equal(Error([ + DecodeError(expected: "Int", found: "String", path: ["*"]), + ])) [dynamic.from(1), dynamic.from("not an int")] |> dynamic.from |> dynamic.list(dynamic.int) - |> should.be_error + |> should.equal(Error([ + DecodeError(expected: "Int", found: "String", path: ["*"]), + ])) } pub fn optional_test() { |