diff options
author | mrkutly <mark.sauer.utley@gmail.com> | 2022-05-23 22:14:15 -0400 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2022-06-11 18:39:10 +0100 |
commit | 2a4933b590c5b7377cace94c3f1bb8bb8cec8519 (patch) | |
tree | 6ccb4f83ffc34a4c619bed24397e206ac5abbf48 | |
parent | 46612fb5d02f6b1fa4f97686fe6eed6eb13a0321 (diff) | |
download | gleam_json-2a4933b590c5b7377cace94c3f1bb8bb8cec8519.tar.gz gleam_json-2a4933b590c5b7377cace94c3f1bb8bb8cec8519.zip |
skip bit string conversion for js runtime
-rw-r--r-- | src/gleam/json.gleam | 16 | ||||
-rw-r--r-- | src/gleam_json_ffi.mjs | 15 |
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) { |