aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Saxton <peterhsaxton@gmail.com>2023-08-12 16:25:16 +0200
committerGitHub <noreply@github.com>2023-08-12 15:25:16 +0100
commitd5ba78077556b4d2554d31f8a190192a9a7100f4 (patch)
tree0b11fc82cadb6d31b5859506ef642995c8b057c8 /src
parent6cbbfcb60bde93682c3cb7289b92f3f9d0a3891c (diff)
downloadjavascript-d5ba78077556b4d2554d31f8a190192a9a7100f4.tar.gz
javascript-d5ba78077556b4d2554d31f8a190192a9a7100f4.zip
add ffi bindings for maps (#5)
Diffstat (limited to 'src')
-rw-r--r--src/ffi.mjs19
-rw-r--r--src/gleam/javascript/map.gleam13
2 files changed, 32 insertions, 0 deletions
diff --git a/src/ffi.mjs b/src/ffi.mjs
index 4d76d2d..6f667c0 100644
--- a/src/ffi.mjs
+++ b/src/ffi.mjs
@@ -134,3 +134,22 @@ export function all_promises(...promises) {
return Promise.all(promises);
}
}
+
+export function map_new() {
+ return new Map();
+}
+
+export function map_set(map, key, value) {
+ return map.set(key, value);
+}
+
+export function map_get(map, key) {
+ if (map.has(key)) {
+ return new Ok(map.get(key));
+ }
+ return new Error(undefined);
+}
+
+export function map_size(map) {
+ return map.size;
+}
diff --git a/src/gleam/javascript/map.gleam b/src/gleam/javascript/map.gleam
new file mode 100644
index 0000000..a2fa282
--- /dev/null
+++ b/src/gleam/javascript/map.gleam
@@ -0,0 +1,13 @@
+pub type Map(key, value)
+
+@external(javascript, "../../ffi.mjs", "map_new")
+pub fn new() -> Map(key, value)
+
+@external(javascript, "../../ffi.mjs", "map_set")
+pub fn set(a: Map(key, value), b: key, c: value) -> Map(key, value)
+
+@external(javascript, "../../ffi.mjs", "map_get")
+pub fn get(a: Map(key, value), b: key) -> Result(value, Nil)
+
+@external(javascript, "../../ffi.mjs", "map_size")
+pub fn size(a: Map(key, value)) -> Int