aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormrkutly <mark.sauer.utley@gmail.com>2022-05-23 22:14:15 -0400
committerLouis Pilfold <louis@lpil.uk>2022-06-11 18:39:10 +0100
commit2a4933b590c5b7377cace94c3f1bb8bb8cec8519 (patch)
tree6ccb4f83ffc34a4c619bed24397e206ac5abbf48
parent46612fb5d02f6b1fa4f97686fe6eed6eb13a0321 (diff)
downloadgleam_json-2a4933b590c5b7377cace94c3f1bb8bb8cec8519.tar.gz
gleam_json-2a4933b590c5b7377cace94c3f1bb8bb8cec8519.zip
skip bit string conversion for js runtime
-rw-r--r--src/gleam/json.gleam16
-rw-r--r--src/gleam_json_ffi.mjs15
2 files changed, 10 insertions, 21 deletions
diff --git a/src/gleam/json.gleam b/src/gleam/json.gleam
index b8c49f6..ad61a94 100644
--- a/src/gleam/json.gleam
+++ b/src/gleam/json.gleam
@@ -62,7 +62,7 @@ if javascript {
}
external fn decode_string(String) -> Result(Dynamic, DecodeError) =
- "../gleam_json_ffi.mjs" "decode_string"
+ "../gleam_json_ffi.mjs" "decode"
}
/// Decode a JSON bit string into dynamically typed data which can be decoded
@@ -94,18 +94,18 @@ pub fn decode_bits(
|> result.map_error(UnexpectedFormat)
}
-fn decode_to_dynamic(bit_string: BitString) -> Result(Dynamic, DecodeError) {
- do_decode_to_dynamic(bit_string)
-}
-
if erlang {
- external fn do_decode_to_dynamic(BitString) -> Result(Dynamic, DecodeError) =
+ external fn decode_to_dynamic(BitString) -> Result(Dynamic, DecodeError) =
"gleam_json_ffi" "decode"
}
if javascript {
- external fn do_decode_to_dynamic(BitString) -> Result(Dynamic, DecodeError) =
- "../gleam_json_ffi.mjs" "decode"
+ fn decode_to_dynamic(json: BitString) -> Result(Dynamic, DecodeError) {
+ case bit_string.to_string(json) {
+ Ok(string) -> decode_string(string)
+ Error(Nil) -> Error(UnexpectedByte("", 0))
+ }
+ }
}
/// Convert a JSON value into a string.
diff --git a/src/gleam_json_ffi.mjs b/src/gleam_json_ffi.mjs
index 64d90b0..a66a17d 100644
--- a/src/gleam_json_ffi.mjs
+++ b/src/gleam_json_ffi.mjs
@@ -22,18 +22,7 @@ export function do_null() {
return null
}
-export function decode(bit_string) {
- const stringResult = bit_string_to_string(bit_string)
- if (!stringResult.isOk()) return stringResult
- try {
- const result = JSON.parse(stringResult[0])
- return new Ok(result)
- } catch (err) {
- return new Error(getJsonDecodeError(err))
- }
-}
-
-export function decode_string_to_dynamic(string) {
+export function decode(string) {
try {
const result = JSON.parse(string)
return new Ok(result)
@@ -45,7 +34,7 @@ export function decode_string_to_dynamic(string) {
function getJsonDecodeError(stdErr) {
if (isUnexpectedByte(stdErr)) return new toUnexpectedByteError(stdErr)
if (isUnexpectedEndOfInput(stdErr)) return new UnexpectedEndOfInput()
- return undefined
+ return new UnexpectedByte('', 0)
}
function isUnexpectedEndOfInput(err) {