diff options
-rw-r--r-- | src/gleam_stdlib.mjs | 19 | ||||
-rw-r--r-- | test/gleam/dynamic_test.gleam | 12 | ||||
-rwxr-xr-x | test/gleam_stdlib_test_ffi.mjs | 9 |
3 files changed, 31 insertions, 9 deletions
diff --git a/src/gleam_stdlib.mjs b/src/gleam_stdlib.mjs index 69644dc..112007f 100644 --- a/src/gleam_stdlib.mjs +++ b/src/gleam_stdlib.mjs @@ -350,21 +350,18 @@ export function codepoint(int) { } export function string_to_codepoint_integer_list(string) { - return List.fromArray( - Array.from(string) - .map(item => item.codePointAt(0)) - ); + return List.fromArray(Array.from(string).map((item) => item.codePointAt(0))); } export function utf_codepoint_list_to_string(utf_codepoint_integer_list) { return utf_codepoint_integer_list .toArray() - .map(x => String.fromCodePoint(x.value)) + .map((x) => String.fromCodePoint(x.value)) .join(""); } export function utf_codepoint_to_int(utf_codepoint) { - return utf_codepoint.value; + return utf_codepoint.value; } export function regex_check(regex, string) { @@ -646,9 +643,13 @@ export function decode_bool(data) { } export function decode_bit_string(data) { - return BitString.isBitString(data) - ? new Ok(data) - : decoder_error("BitString", data); + if (BitString.isBitString(data)) { + return new Ok(data); + } + if (data instanceof Uint8Array) { + return new Ok(new BitString(data)); + } + return decoder_error("BitString", data); } export function decode_tuple(data) { diff --git a/test/gleam/dynamic_test.gleam b/test/gleam/dynamic_test.gleam index 104c1fa..9d1aeba 100644 --- a/test/gleam/dynamic_test.gleam +++ b/test/gleam/dynamic_test.gleam @@ -39,6 +39,18 @@ if erlang { } } +if javascript { + external fn uint8array(List(Int)) -> dynamic.Dynamic = + "../gleam_stdlib_test_ffi.mjs" "uint8array" + + pub fn bit_string_erlang_test() { + [1, 1, 2, 3, 5, 8] + |> uint8array + |> dynamic.bit_string + |> should.equal(Ok(<<1, 1, 2, 3, 5, 8>>)) + } +} + pub fn string_test() { "" |> dynamic.from diff --git a/test/gleam_stdlib_test_ffi.mjs b/test/gleam_stdlib_test_ffi.mjs index 90eeaf0..cbf0382 100755 --- a/test/gleam_stdlib_test_ffi.mjs +++ b/test/gleam_stdlib_test_ffi.mjs @@ -33,3 +33,12 @@ ${passes} passes ${failures} failures`); process.exit(failures ? 1 : 0); } + +export function uint8array(list) { + let ints = list.toArray(); + let array = new Uint8Array(ints.length); + for (let i = 0; i < ints.length; i++) { + array[i] = ints[i]; + } + return array; +} |