aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gleam/dynamic.gleam23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/gleam/dynamic.gleam b/src/gleam/dynamic.gleam
index 1157014..496667d 100644
--- a/src/gleam/dynamic.gleam
+++ b/src/gleam/dynamic.gleam
@@ -841,8 +841,27 @@ pub fn tuple6(
/// Error(DecodeError(expected: "Map", found: "String", path: []))
/// ```
///
-pub fn map(from value: Dynamic) -> Result(Map(Dynamic, Dynamic), DecodeErrors) {
- decode_map(value)
+pub fn map(
+ of key_type: Decoder(k),
+ to value_type: Decoder(v),
+) -> Decoder(Map(k, v)) {
+ fn(value) {
+ try map = decode_map(value)
+ try pairs =
+ map
+ |> map.to_list
+ |> list.try_map(fn(pair) {
+ let #(k, v) = pair
+ try k =
+ key_type(k)
+ |> map_errors(push_path(_, "keys"))
+ try v =
+ value_type(v)
+ |> map_errors(push_path(_, "values"))
+ Ok(#(k, v))
+ })
+ Ok(map.from_list(pairs))
+ }
}
if erlang {