aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gleam_stdlib.mjs19
-rw-r--r--test/gleam/dynamic_test.gleam12
-rwxr-xr-xtest/gleam_stdlib_test_ffi.mjs9
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;
+}