aboutsummaryrefslogtreecommitdiff
path: root/src/gleam_stdlib.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/gleam_stdlib.erl')
-rw-r--r--src/gleam_stdlib.erl31
1 files changed, 17 insertions, 14 deletions
diff --git a/src/gleam_stdlib.erl b/src/gleam_stdlib.erl
index ffea232..5c93fd4 100644
--- a/src/gleam_stdlib.erl
+++ b/src/gleam_stdlib.erl
@@ -5,7 +5,7 @@
decode_float/1, decode_list/1, decode_option/2, decode_field/2, parse_int/1,
parse_float/1, less_than/2, string_pop_grapheme/1, string_pop_codeunit/1,
string_starts_with/2, wrap_list/1, string_ends_with/2, string_pad/4,
- decode_map/1, uri_parse/1, bit_array_int_to_u32/1, bit_array_int_from_u32/1,
+ decode_map/1, uri_parse/1,
decode_result/1, bit_array_slice/3, decode_bit_array/1, compile_regex/2,
regex_scan/2, percent_encode/1, percent_decode/1, regex_check/2,
regex_split/2, base_decode64/1, parse_query/1, bit_array_concat/1,
@@ -14,8 +14,8 @@
tuple_get/2, classify_dynamic/1, print/1, println/1, print_error/1,
println_error/1, inspect/1, float_to_string/1, int_from_base_string/2,
utf_codepoint_list_to_string/1, contains_string/2, crop_string/2,
- base16_decode/1, string_replace/3, regex_replace/3, slice/3,
- bit_array_to_int_and_size/1
+ base16_encode/1, base16_decode/1, string_replace/3, regex_replace/3,
+ slice/3, bit_array_to_int_and_size/1, bit_array_pad_to_bytes/1
]).
%% Taken from OTP's uri_string module
@@ -207,12 +207,21 @@ string_pop_grapheme(String) ->
string_pop_codeunit(<<Cp/integer, Rest/binary>>) -> {Cp, Rest};
string_pop_codeunit(Binary) -> {0, Binary}.
+bit_array_pad_to_bytes(Bin) ->
+ case erlang:bit_size(Bin) rem 8 of
+ 0 -> Bin;
+ TrailingBits ->
+ PaddingBits = 8 - TrailingBits,
+ <<Bin/bits, 0:PaddingBits>>
+ end.
+
bit_array_concat(BitArrays) ->
list_to_bitstring(BitArrays).
-if(?OTP_RELEASE >= 26).
bit_array_base64_encode(Bin, Padding) ->
- base64:encode(Bin, #{padding => Padding}).
+ PaddedBin = bit_array_pad_to_bytes(Bin),
+ base64:encode(PaddedBin, #{padding => Padding}).
-else.
bit_array_base64_encode(_Bin, _Padding) ->
erlang:error(<<"Erlang OTP/26 or higher is required to use base64:encode">>).
@@ -223,16 +232,6 @@ bit_array_slice(Bin, Pos, Len) ->
catch error:badarg -> {error, nil}
end.
-bit_array_int_to_u32(I) when 0 =< I, I < 4294967296 ->
- {ok, <<I:32>>};
-bit_array_int_to_u32(_) ->
- {error, nil}.
-
-bit_array_int_from_u32(<<I:32>>) ->
- {ok, I};
-bit_array_int_from_u32(_) ->
- {error, nil}.
-
compile_regex(String, Options) ->
{options, Caseless, Multiline} = Options,
OptionsList = [
@@ -552,6 +551,10 @@ crop_string(String, Prefix) ->
contains_string(String, Substring) ->
is_bitstring(string:find(String, Substring)).
+base16_encode(Bin) ->
+ PaddedBin = bit_array_pad_to_bytes(Bin),
+ binary:encode_hex(PaddedBin).
+
base16_decode(String) ->
try
{ok, binary:decode_hex(String)}