-module(gleam@bit_string). -compile(no_auto_import). -export([from_string/1, byte_size/1, append/2, part/3, int_to_u32/1, int_from_u32/1, is_utf8/1, to_string/1]). -spec from_string(binary()) -> bitstring(). from_string(A) -> gleam_stdlib:identity(A). -spec byte_size(bitstring()) -> integer(). byte_size(A) -> erlang:byte_size(A). -spec append(bitstring(), bitstring()) -> bitstring(). append(A, B) -> gleam_stdlib:bit_string_append(A, B). -spec part(bitstring(), integer(), integer()) -> {ok, bitstring()} | {error, nil}. part(A, B, C) -> gleam_stdlib:bit_string_part_(A, B, C). -spec int_to_u32(integer()) -> {ok, bitstring()} | {error, nil}. int_to_u32(A) -> gleam_stdlib:bit_string_int_to_u32(A). -spec int_from_u32(bitstring()) -> {ok, integer()} | {error, nil}. int_from_u32(A) -> gleam_stdlib:bit_string_int_from_u32(A). -spec is_utf8(bitstring()) -> boolean(). is_utf8(Bits) -> case Bits of <<>> -> true; <<_/utf8, Rest/binary>> -> is_utf8(Rest); _ -> false end. -spec to_string(bitstring()) -> {ok, binary()} | {error, nil}. to_string(Bits) -> case is_utf8(Bits) of true -> {ok, gleam_stdlib:identity(Bits)}; false -> {error, nil} end.