Packages
gleam_bson
0.26.0
0.27.0
retired
0.26.0
retired
0.25.0
retired
0.24.0
retired
0.23.0
retired
0.22.0
retired
0.21.0
retired
0.20.0
retired
0.19.0
retired
0.18.0
retired
0.17.0
retired
0.16.0
retired
0.15.0
retired
0.14.0
retired
0.13.0
retired
0.12.0
retired
0.11.0
retired
0.10.1
retired
0.10.0
retired
0.9.0
retired
0.8.0
retired
0.7.0
retired
0.6.0
retired
0.5.0
retired
0.4.0
retired
0.3.0
retired
0.2.0
retired
0.1.0
retired
bson encoder and decoder for gleam
Retired package: Renamed - Republished as bison
Current section
Files
Jump to
Current section
Files
src/bson@generic.erl
-module(bson@generic).
-compile([no_auto_import, nowarn_unused_vars]).
-export([to_string/1, to_bit_string/1, from_string/1, from_int_list/1, from_bit_string/1, to_int_list/1]).
-export_type([generic/0]).
-opaque generic() :: {generic, bitstring()}.
-spec to_string(generic()) -> {ok, binary()} | {error, nil}.
to_string(Generic) ->
case Generic of
{generic, Data} ->
gleam@bit_string:to_string(Data)
end.
-spec to_bit_string(generic()) -> bitstring().
to_bit_string(Generic) ->
case Generic of
{generic, Data} ->
Data
end.
-spec from_string(binary()) -> generic().
from_string(Data) ->
{generic, gleam@bit_string:from_string(Data)}.
-spec from_int_list(list(integer())) -> generic().
from_int_list(Data) ->
_pipe = Data,
_pipe@1 = gleam@list:fold(
_pipe,
<<>>,
fun(Acc, Code) -> gleam@bit_string:append(Acc, <<Code>>) end
),
{generic, _pipe@1}.
-spec from_bit_string(bitstring()) -> {ok, generic()} | {error, nil}.
from_bit_string(Data) ->
case erlang:bit_size(Data) rem 8 of
0 ->
{ok, {generic, Data}};
_ ->
{error, nil}
end.
-spec to_int_list_internal(bitstring(), gleam@queue:queue(integer())) -> list(integer()).
to_int_list_internal(Remaining, Storage) ->
<<Num:8, Remaining@1/binary>> = Remaining,
New_storage = gleam@queue:push_back(Storage, Num),
case gleam@bit_string:byte_size(Remaining@1) =:= 0 of
true ->
gleam@queue:to_list(New_storage);
false ->
to_int_list_internal(Remaining@1, New_storage)
end.
-spec to_int_list(generic()) -> list(integer()).
to_int_list(Generic) ->
case Generic of
{generic, Data} ->
to_int_list_internal(Data, gleam@queue:new())
end.