diff options
author | Louis Pilfold <louis@lpil.uk> | 2022-01-01 22:01:49 +0000 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2022-01-01 22:01:49 +0000 |
commit | 6a56aa5fe1f69b54b1b2ab4a9a32a818d5128f86 (patch) | |
tree | 482e13f680b2237e95c3d90140fba78239541213 | |
parent | 5237f401b775e7d3381663babcaf0b8ecfcaf672 (diff) | |
download | gleam_stdlib-6a56aa5fe1f69b54b1b2ab4a9a32a818d5128f86.tar.gz gleam_stdlib-6a56aa5fe1f69b54b1b2ab4a9a32a818d5128f86.zip |
Field requires a type
-rw-r--r-- | src/gleam/dynamic.gleam | 9 | ||||
-rw-r--r-- | test/gleam/dynamic_test.gleam | 26 |
2 files changed, 26 insertions, 9 deletions
diff --git a/src/gleam/dynamic.gleam b/src/gleam/dynamic.gleam index ff040db..fa1b69e 100644 --- a/src/gleam/dynamic.gleam +++ b/src/gleam/dynamic.gleam @@ -386,8 +386,13 @@ if javascript { /// > field(from(123), "Hello") /// Error(DecodeError(expected: "Map", found: "Int")) /// -pub fn field(from value: Dynamic, named name: a) -> Result(Dynamic, DecodeError) { - decode_field(value, name) +pub fn field( + from value: Dynamic, + named name: a, + of inner_type: Decoder(t), +) -> Result(t, DecodeError) { + try value = decode_field(value, name) + inner_type(value) } if erlang { diff --git a/test/gleam/dynamic_test.gleam b/test/gleam/dynamic_test.gleam index ea40190..54eca0c 100644 --- a/test/gleam/dynamic_test.gleam +++ b/test/gleam/dynamic_test.gleam @@ -246,29 +246,41 @@ pub fn field_test() { map.new() |> map.insert("ok", 1) |> dynamic.from - |> dynamic.field("ok") - |> should.equal(Ok(dynamic.from(1))) + |> dynamic.field(named: "ok", of: dynamic.int) + |> should.equal(Ok(1)) + + map.new() + |> map.insert("ok", 1.0) + |> dynamic.from + |> dynamic.field(named: "ok", of: dynamic.float) + |> should.equal(Ok(1.0)) map.new() |> map.insert("ok", 3) |> map.insert("error", 1) |> dynamic.from - |> dynamic.field("ok") - |> should.equal(Ok(dynamic.from(3))) + |> dynamic.field("ok", dynamic.int) + |> should.equal(Ok(3)) + + map.new() + |> map.insert("ok", 3) + |> dynamic.from + |> dynamic.field("ok", dynamic.float) + |> should.be_error map.new() |> dynamic.from - |> dynamic.field("ok") + |> dynamic.field("ok", dynamic.int) |> should.be_error 1 |> dynamic.from - |> dynamic.field("ok") + |> dynamic.field("ok", dynamic.int) |> should.be_error [] |> dynamic.from - |> dynamic.field([]) + |> dynamic.field("ok", dynamic.int) |> should.be_error } |