-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, <>) 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) -> <> = 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.