-module(bison@generic). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). -export([to_string/1, to_bit_array/1, from_string/1, from_int_list/1, to_int_list/1, from_bit_array/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_array:to_string(Data) end. -spec to_bit_array(generic()) -> bitstring(). to_bit_array(Generic) -> case Generic of {generic, Data} -> Data end. -spec from_string(binary()) -> generic(). from_string(Data) -> {generic, gleam_stdlib:identity(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_array:append(Acc, <>) end ), {generic, _pipe@1}. -spec to_int_list_internal(bitstring(), gleam@queue:queue(integer())) -> list(integer()). to_int_list_internal(Remaining, Storage) -> <> = Remaining, New_storage = gleam@queue:push_back(Storage, Num), case erlang: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. -spec from_bit_array(bitstring()) -> {ok, generic()} | {error, nil}. from_bit_array(Data) -> case erlang:bit_size(Data) rem 8 of 0 -> {ok, {generic, Data}}; _ -> {error, nil} end.