2020//// On Erlang this type is compatible with Erlang's iolists.
2121
2222// TODO: pad bit arrays to byte boundaries when adding to a builder.
23- import gleam/bit_array
24- import gleam/list
25- import gleam/string_builder . { type StringBuilder }
23+ import gleam/bytes_tree . { type BytesTree }
24+ import gleam/string_tree . { type StringTree }
2625
2726@ deprecated ( "The `bytes_builder` module has been deprecated, use the `bytes_tree.BytesTree` type instead." )
28- pub opaque type BytesBuilder {
29- Bytes ( BitArray )
30- Text ( StringBuilder )
31- Many ( List ( BytesBuilder ) )
32- }
27+ pub type BytesBuilder =
28+ BytesTree
3329
3430/// Create an empty `BytesBuilder`. Useful as the start of a pipe chaining many
3531/// builders together.
3632///
3733@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.new` instead." )
38- pub fn new ( ) -> BytesBuilder {
39- concat ( [ ] )
34+ pub fn new ( ) -> BytesTree {
35+ bytes_tree . concat ( [ ] )
4036}
4137
4238/// Prepends a bit array to the start of a builder.
4339///
4440/// Runs in constant time.
4541///
4642@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.prepend` instead." )
47- pub fn prepend ( to second : BytesBuilder , prefix first : BitArray ) -> BytesBuilder {
48- append_builder ( from_bit_array ( first ) , second )
43+ pub fn prepend ( to second : BytesTree , prefix first : BitArray ) -> BytesTree {
44+ bytes_tree . append_tree ( bytes_tree . from_bit_array ( first ) , second )
4945}
5046
5147/// Appends a bit array to the end of a builder.
5248///
5349/// Runs in constant time.
5450///
5551@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.append` instead." )
56- pub fn append ( to first : BytesBuilder , suffix second : BitArray ) -> BytesBuilder {
57- append_builder ( first , from_bit_array ( second ) )
52+ pub fn append ( to first : BytesTree , suffix second : BitArray ) -> BytesTree {
53+ bytes_tree . append_tree ( first , bytes_tree . from_bit_array ( second ) )
5854}
5955
6056/// Prepends a builder onto the start of another.
@@ -63,10 +59,10 @@ pub fn append(to first: BytesBuilder, suffix second: BitArray) -> BytesBuilder {
6359///
6460@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.prepend_tree` instead." )
6561pub fn prepend_builder (
66- to second : BytesBuilder ,
67- prefix first : BytesBuilder ,
68- ) -> BytesBuilder {
69- append_builder ( first , second )
62+ to second : BytesTree ,
63+ prefix first : BytesTree ,
64+ ) -> BytesTree {
65+ bytes_tree . append_tree ( first , second )
7066}
7167
7268/// Appends a builder onto the end of another.
@@ -76,13 +72,10 @@ pub fn prepend_builder(
7672@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.append_tree` instead." )
7773@ external ( erlang , "gleam_stdlib" , "iodata_append" )
7874pub fn append_builder (
79- to first : BytesBuilder ,
80- suffix second : BytesBuilder ,
81- ) -> BytesBuilder {
82- case second {
83- Many ( builders ) -> Many ( [ first , .. builders ] )
84- _ -> Many ( [ first , second ] )
85- }
75+ to first : BytesTree ,
76+ suffix second : BytesTree ,
77+ ) -> BytesTree {
78+ bytes_tree . append_tree ( first , second )
8679}
8780
8881/// Prepends a string onto the start of a builder.
@@ -91,11 +84,8 @@ pub fn append_builder(
9184/// Runs in linear time with the length of the string otherwise.
9285///
9386@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.prepend_string` instead." )
94- pub fn prepend_string (
95- to second : BytesBuilder ,
96- prefix first : String ,
97- ) -> BytesBuilder {
98- append_builder ( from_string ( first ) , second )
87+ pub fn prepend_string ( to second : BytesTree , prefix first : String ) -> BytesTree {
88+ bytes_tree . append_tree ( bytes_tree . from_string ( first ) , second )
9989}
10090
10191/// Appends a string onto the end of a builder.
@@ -104,11 +94,8 @@ pub fn prepend_string(
10494/// Runs in linear time with the length of the string otherwise.
10595///
10696@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.append_string` instead." )
107- pub fn append_string (
108- to first : BytesBuilder ,
109- suffix second : String ,
110- ) -> BytesBuilder {
111- append_builder ( first , from_string ( second ) )
97+ pub fn append_string ( to first : BytesTree , suffix second : String ) -> BytesTree {
98+ bytes_tree . append_tree ( first , bytes_tree . from_string ( second ) )
11299}
113100
114101/// Joins a list of builders into a single builder.
@@ -117,8 +104,8 @@ pub fn append_string(
117104///
118105@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.concat` instead." )
119106@ external ( erlang , "gleam_stdlib" , "identity" )
120- pub fn concat ( builders : List ( BytesBuilder ) ) -> BytesBuilder {
121- Many ( builders )
107+ pub fn concat ( builders : List ( BytesTree ) ) -> BytesTree {
108+ bytes_tree . concat ( builders )
122109}
123110
124111/// Joins a list of bit arrays into a single builder.
@@ -127,10 +114,8 @@ pub fn concat(builders: List(BytesBuilder)) -> BytesBuilder {
127114///
128115@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.concat_bit_arrays` instead." )
129116@ external ( erlang , "gleam_stdlib" , "identity" )
130- pub fn concat_bit_arrays ( bits : List ( BitArray ) ) -> BytesBuilder {
131- bits
132- |> list . map ( fn ( b ) { from_bit_array ( b ) } )
133- |> concat ( )
117+ pub fn concat_bit_arrays ( bits : List ( BitArray ) ) -> BytesTree {
118+ bytes_tree . concat_bit_arrays ( bits )
134119}
135120
136121/// Creates a new builder from a string.
@@ -140,8 +125,8 @@ pub fn concat_bit_arrays(bits: List(BitArray)) -> BytesBuilder {
140125///
141126@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.from_string` instead." )
142127@ external ( erlang , "gleam_stdlib" , "wrap_list" )
143- pub fn from_string ( string : String ) -> BytesBuilder {
144- Text ( string_builder . from_string ( string ) )
128+ pub fn from_string ( string : String ) -> BytesTree {
129+ bytes_tree . from_string ( string )
145130}
146131
147132/// Creates a new builder from a string builder.
@@ -151,8 +136,8 @@ pub fn from_string(string: String) -> BytesBuilder {
151136///
152137@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.from_string_tree` instead." )
153138@ external ( erlang , "gleam_stdlib" , "wrap_list" )
154- pub fn from_string_builder ( builder : StringBuilder ) -> BytesBuilder {
155- Text ( builder )
139+ pub fn from_string_builder ( builder : StringTree ) -> BytesTree {
140+ bytes_tree . from_string_tree ( builder )
156141}
157142
158143/// Creates a new builder from a bit array.
@@ -161,8 +146,8 @@ pub fn from_string_builder(builder: StringBuilder) -> BytesBuilder {
161146///
162147@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.from_bit_array` instead." )
163148@ external ( erlang , "gleam_stdlib" , "wrap_list" )
164- pub fn from_bit_array ( bits : BitArray ) -> BytesBuilder {
165- Bytes ( bits )
149+ pub fn from_bit_array ( bits : BitArray ) -> BytesTree {
150+ bytes_tree . from_bit_array ( bits )
166151}
167152
168153/// Turns an builder into a bit array.
@@ -174,33 +159,8 @@ pub fn from_bit_array(bits: BitArray) -> BytesBuilder {
174159///
175160@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.to_bit_array` instead." )
176161@ external ( erlang , "erlang" , "list_to_bitstring" )
177- pub fn to_bit_array ( builder : BytesBuilder ) -> BitArray {
178- [ [ builder ] ]
179- |> to_list ( [ ] )
180- |> list . reverse
181- |> bit_array . concat
182- }
183-
184- fn to_list (
185- stack : List ( List ( BytesBuilder ) ) ,
186- acc : List ( BitArray ) ,
187- ) -> List ( BitArray ) {
188- case stack {
189- [ ] -> acc
190-
191- [ [ ] , .. remaining_stack ] -> to_list ( remaining_stack , acc )
192-
193- [ [ Bytes ( bits ) , .. rest ] , .. remaining_stack ] ->
194- to_list ( [ rest , .. remaining_stack ] , [ bits , .. acc ] )
195-
196- [ [ Text ( builder ) , .. rest ] , .. remaining_stack ] -> {
197- let bits = bit_array . from_string ( string_builder . to_string ( builder ) )
198- to_list ( [ rest , .. remaining_stack ] , [ bits , .. acc ] )
199- }
200-
201- [ [ Many ( builders ) , .. rest ] , .. remaining_stack ] ->
202- to_list ( [ builders , rest , .. remaining_stack ] , acc )
203- }
162+ pub fn to_bit_array ( builder : BytesTree ) -> BitArray {
163+ bytes_tree . to_bit_array ( builder )
204164}
205165
206166/// Returns the size of the builder's content in bytes.
@@ -209,8 +169,6 @@ fn to_list(
209169///
210170@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.byte_size` instead." )
211171@ external ( erlang , "erlang" , "iolist_size" )
212- pub fn byte_size ( builder : BytesBuilder ) -> Int {
213- [ [ builder ] ]
214- |> to_list ( [ ] )
215- |> list . fold ( 0 , fn ( acc , builder ) { bit_array . byte_size ( builder ) + acc } )
172+ pub fn byte_size ( builder : BytesTree ) -> Int {
173+ bytes_tree . byte_size ( builder )
216174}
0 commit comments