Packages
gleam_stdlib
0.40.0
1.0.3
1.0.2
1.0.1
1.0.0
0.71.0
0.70.0
0.69.0
0.68.1
0.68.0
0.67.1
0.67.0
0.65.0
0.64.0
0.63.2
0.63.1
0.63.0
0.62.1
0.62.0
0.61.0
0.60.0
0.59.0
0.58.0
0.57.0
0.56.0
0.55.0
0.54.0
0.53.0
0.52.0
0.51.0
0.50.0
0.49.0
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.43.0
0.42.0
0.41.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.1
0.35.0
0.34.0
0.33.1
0.33.0
0.32.1
0.32.0
0.31.0
0.30.2
0.30.1
0.30.0
0.29.2
0.29.1
0.29.0
0.28.2
0.28.1
0.28.0
0.27.0
0.26.1
0.26.0
0.25.0
0.24.0
0.23.0
0.22.3
0.22.2
0.22.1
0.22.0
0.21.0
0.20.0
0.19.3
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.18.0-rc1
0.17.1
0.17.0
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.1
0.10.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.4.0-rc1
0.3.1
0.3.0
0.2.0
retired
A standard library for the Gleam programming language
Current section
Files
Jump to
Current section
Files
src/gleam@bytes_builder.erl
-module(gleam@bytes_builder).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([append_builder/2, prepend_builder/2, concat/1, new/0, from_string/1, prepend_string/2, append_string/2, from_string_builder/1, from_bit_array/1, prepend/2, append/2, concat_bit_arrays/1, to_bit_array/1, byte_size/1]).
-export_type([bytes_builder/0]).
-opaque bytes_builder() :: {bytes, bitstring()} |
{text, gleam@string_builder:string_builder()} |
{many, list(bytes_builder())}.
-spec append_builder(bytes_builder(), bytes_builder()) -> bytes_builder().
append_builder(First, Second) ->
gleam_stdlib:iodata_append(First, Second).
-spec prepend_builder(bytes_builder(), bytes_builder()) -> bytes_builder().
prepend_builder(Second, First) ->
gleam_stdlib:iodata_append(First, Second).
-spec concat(list(bytes_builder())) -> bytes_builder().
concat(Builders) ->
gleam_stdlib:identity(Builders).
-spec new() -> bytes_builder().
new() ->
gleam_stdlib:identity([]).
-spec from_string(binary()) -> bytes_builder().
from_string(String) ->
gleam_stdlib:wrap_list(String).
-spec prepend_string(bytes_builder(), binary()) -> bytes_builder().
prepend_string(Second, First) ->
gleam_stdlib:iodata_append(gleam_stdlib:wrap_list(First), Second).
-spec append_string(bytes_builder(), binary()) -> bytes_builder().
append_string(First, Second) ->
gleam_stdlib:iodata_append(First, gleam_stdlib:wrap_list(Second)).
-spec from_string_builder(gleam@string_builder:string_builder()) -> bytes_builder().
from_string_builder(Builder) ->
gleam_stdlib:wrap_list(Builder).
-spec from_bit_array(bitstring()) -> bytes_builder().
from_bit_array(Bits) ->
gleam_stdlib:wrap_list(Bits).
-spec prepend(bytes_builder(), bitstring()) -> bytes_builder().
prepend(Second, First) ->
gleam_stdlib:iodata_append(gleam_stdlib:wrap_list(First), Second).
-spec append(bytes_builder(), bitstring()) -> bytes_builder().
append(First, Second) ->
gleam_stdlib:iodata_append(First, gleam_stdlib:wrap_list(Second)).
-spec concat_bit_arrays(list(bitstring())) -> bytes_builder().
concat_bit_arrays(Bits) ->
gleam_stdlib:identity(Bits).
-spec to_list(list(list(bytes_builder())), list(bitstring())) -> list(bitstring()).
to_list(Stack, Acc) ->
case Stack of
[] ->
Acc;
[[] | Remaining_stack] ->
to_list(Remaining_stack, Acc);
[[{bytes, Bits} | Rest] | Remaining_stack@1] ->
to_list([Rest | Remaining_stack@1], [Bits | Acc]);
[[{text, Builder} | Rest@1] | Remaining_stack@2] ->
Bits@1 = gleam_stdlib:identity(
gleam@string_builder:to_string(Builder)
),
to_list([Rest@1 | Remaining_stack@2], [Bits@1 | Acc]);
[[{many, Builders} | Rest@2] | Remaining_stack@3] ->
to_list([Builders, Rest@2 | Remaining_stack@3], Acc)
end.
-spec to_bit_array(bytes_builder()) -> bitstring().
to_bit_array(Builder) ->
erlang:list_to_bitstring(Builder).
-spec byte_size(bytes_builder()) -> integer().
byte_size(Builder) ->
erlang:iolist_size(Builder).