Current section

Files

Jump to
gleam_bson src bson@binary.erl
Raw

src/bson@binary.erl

-module(bson@binary).
-compile(no_auto_import).
-export([to_string/1, to_int_list/1, to_bit_string/1, from_string/1, from_int_list/1, from_bit_string/1]).
-export_type([binary_/0]).
-opaque binary_() :: {generic, bitstring()}.
-spec to_string(binary_()) -> {ok, binary()} | {error, nil}.
to_string(Binary) ->
case Binary of
{generic, Data} ->
gleam@bit_string:to_string(Data)
end.
-spec to_int_list(binary_()) -> list(integer()).
to_int_list(Binary) ->
case Binary of
{generic, Data} ->
_pipe = Data,
to_int_list_internal(_pipe, [])
end.
-spec to_bit_string(binary_()) -> bitstring().
to_bit_string(Binary) ->
case Binary of
{generic, Data} ->
Data
end.
-spec from_string(binary()) -> binary_().
from_string(Data) ->
{generic, gleam@bit_string:from_string(Data)}.
-spec from_int_list(list(integer())) -> binary_().
from_int_list(Data) ->
{generic,
begin
_pipe = Data,
gleam@list:fold(
_pipe,
<<>>,
fun(Acc, Code) ->
_pipe@1 = Acc,
gleam@bit_string:append(_pipe@1, <<Code>>)
end
)
end}.
-spec from_bit_string(bitstring()) -> {ok, binary_()} | {error, nil}.
from_bit_string(Data) ->
case erlang:bit_size(Data) rem 8 of
0 ->
{ok, {generic, Data}};
_@1 ->
{error, nil}
end.
-spec to_int_list_internal(bitstring(), list(integer())) -> list(integer()).
to_int_list_internal(Remaining, Storage) ->
<<Num:8, Remaining@1/binary>> = Remaining,
New_storage = begin
_pipe = Storage,
gleam@list:append(_pipe, [Num])
end,
case gleam@bit_string:byte_size(Remaining@1) =:= 0 of
true ->
New_storage;
false ->
to_int_list_internal(Remaining@1, New_storage)
end.