Skip to content

Commit b19f32b

Browse files
giacomocavalierilpil
authored andcommitted
make string/bytes_builder aliases of tree counterparts
1 parent ec9cc3f commit b19f32b

File tree

2 files changed

+78
-180
lines changed

2 files changed

+78
-180
lines changed

src/gleam/bytes_builder.gleam

Lines changed: 36 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -20,41 +20,37 @@
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.")
6561
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)
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")
7874
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)
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

Comments
 (0)