aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2022-01-01 23:39:51 +0000
committerLouis Pilfold <louis@lpil.uk>2022-01-01 23:39:51 +0000
commit7b89700cb2c854ee2af74980c04fbf568958f496 (patch)
tree7923675dbd56edb7271787e40e1ee785689c0db1
parent98277883177ae6531bc68bb799d103e516c2006b (diff)
downloadgleam_stdlib-7b89700cb2c854ee2af74980c04fbf568958f496.tar.gz
gleam_stdlib-7b89700cb2c854ee2af74980c04fbf568958f496.zip
List pushes path
-rw-r--r--src/gleam/dynamic.gleam7
-rw-r--r--test/gleam/dynamic_test.gleam16
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() {