diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/glv8/database.gleam | 7 | ||||
-rw-r--r-- | src/glv8/util.gleam | 6 | ||||
-rw-r--r-- | src/glv8_ffi.mjs | 4 |
3 files changed, 14 insertions, 3 deletions
diff --git a/src/glv8/database.gleam b/src/glv8/database.gleam index a31ef88..3f0a6a8 100644 --- a/src/glv8/database.gleam +++ b/src/glv8/database.gleam @@ -3,6 +3,7 @@ import gleam/dynamic/decode.{type Decoder} import gleam/javascript/array.{type Array} import gleam/result import glv8.{type DBError, type DecodeErrors} +import glv8/util.{from} pub type Row { Row @@ -39,7 +40,7 @@ pub fn shift_as( shift(rs) |> result.try(fn(t) { t.0 - |> dynamic.from + |> from |> f |> result.map_error(glv8.DBErrorDecode) }) @@ -66,7 +67,7 @@ pub fn decode( ) -> Result(Array(a), DBError) { rs |> array.to_list - |> dynamic.from + |> from |> decode.run(decode.list(f)) |> result.map(array.from_list) |> result.map_error(glv8.DBErrorDecode) @@ -137,7 +138,7 @@ pub fn decode0( decoder f: fn(Dynamic) -> Result(a, DecodeErrors), ) -> Result(a, DBError) { r - |> dynamic.from + |> from |> f |> result.map_error(glv8.DBErrorDecode) } diff --git a/src/glv8/util.gleam b/src/glv8/util.gleam index d869358..a3029b4 100644 --- a/src/glv8/util.gleam +++ b/src/glv8/util.gleam @@ -8,6 +8,12 @@ import glv8.{ /// /// /// +@external(javascript, "../glv8_ffi.mjs", "identity") +pub fn from(a: anything) -> Dynamic + +/// +/// +/// @external(javascript, "../glv8_ffi.mjs", "object") pub fn object() -> JsObject diff --git a/src/glv8_ffi.mjs b/src/glv8_ffi.mjs index 5ed6fac..d84e739 100644 --- a/src/glv8_ffi.mjs +++ b/src/glv8_ffi.mjs @@ -2,6 +2,10 @@ import { Ok, Error } from "./gleam.mjs" import { DBErrorJson } from "./glv8.mjs" import { NilRow } from "./glv8/database.mjs" +export function identity(x) { + return x; +} + export function object() { return {}; } |