20
20
//// On Erlang this type is compatible with Erlang's iolists.
21
21
22
22
// 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 }
26
25
27
26
@ 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
33
29
34
30
/// Create an empty `BytesBuilder`. Useful as the start of a pipe chaining many
35
31
/// builders together.
36
32
///
37
33
@ 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 ( [ ] )
40
36
}
41
37
42
38
/// Prepends a bit array to the start of a builder.
43
39
///
44
40
/// Runs in constant time.
45
41
///
46
42
@ 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 )
49
45
}
50
46
51
47
/// Appends a bit array to the end of a builder.
52
48
///
53
49
/// Runs in constant time.
54
50
///
55
51
@ 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 ) )
58
54
}
59
55
60
56
/// Prepends a builder onto the start of another.
@@ -63,10 +59,10 @@ pub fn append(to first: BytesBuilder, suffix second: BitArray) -> BytesBuilder {
63
59
///
64
60
@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.prepend_tree` instead." )
65
61
pub 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 )
70
66
}
71
67
72
68
/// Appends a builder onto the end of another.
@@ -76,13 +72,10 @@ pub fn prepend_builder(
76
72
@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.append_tree` instead." )
77
73
@ external ( erlang , "gleam_stdlib" , "iodata_append" )
78
74
pub 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 )
86
79
}
87
80
88
81
/// Prepends a string onto the start of a builder.
@@ -91,11 +84,8 @@ pub fn append_builder(
91
84
/// Runs in linear time with the length of the string otherwise.
92
85
///
93
86
@ 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 )
99
89
}
100
90
101
91
/// Appends a string onto the end of a builder.
@@ -104,11 +94,8 @@ pub fn prepend_string(
104
94
/// Runs in linear time with the length of the string otherwise.
105
95
///
106
96
@ 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 ) )
112
99
}
113
100
114
101
/// Joins a list of builders into a single builder.
@@ -117,8 +104,8 @@ pub fn append_string(
117
104
///
118
105
@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.concat` instead." )
119
106
@ 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 )
122
109
}
123
110
124
111
/// Joins a list of bit arrays into a single builder.
@@ -127,10 +114,8 @@ pub fn concat(builders: List(BytesBuilder)) -> BytesBuilder {
127
114
///
128
115
@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.concat_bit_arrays` instead." )
129
116
@ 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 )
134
119
}
135
120
136
121
/// Creates a new builder from a string.
@@ -140,8 +125,8 @@ pub fn concat_bit_arrays(bits: List(BitArray)) -> BytesBuilder {
140
125
///
141
126
@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.from_string` instead." )
142
127
@ 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 )
145
130
}
146
131
147
132
/// Creates a new builder from a string builder.
@@ -151,8 +136,8 @@ pub fn from_string(string: String) -> BytesBuilder {
151
136
///
152
137
@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.from_string_tree` instead." )
153
138
@ 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 )
156
141
}
157
142
158
143
/// Creates a new builder from a bit array.
@@ -161,8 +146,8 @@ pub fn from_string_builder(builder: StringBuilder) -> BytesBuilder {
161
146
///
162
147
@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.from_bit_array` instead." )
163
148
@ 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 )
166
151
}
167
152
168
153
/// Turns an builder into a bit array.
@@ -174,33 +159,8 @@ pub fn from_bit_array(bits: BitArray) -> BytesBuilder {
174
159
///
175
160
@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.to_bit_array` instead." )
176
161
@ 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 )
204
164
}
205
165
206
166
/// Returns the size of the builder's content in bytes.
@@ -209,8 +169,6 @@ fn to_list(
209
169
///
210
170
@ deprecated ( "The `bytes_builder` module has been deprecated, use `bytes_tree.byte_size` instead." )
211
171
@ 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 )
216
174
}
0 commit comments