Skip to content

Commit

Permalink
deprecate string and bytes builder modules
Browse files Browse the repository at this point in the history
  • Loading branch information
giacomocavalieri committed Nov 12, 2024
1 parent dea324a commit e548f30
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 34 deletions.
14 changes: 14 additions & 0 deletions src/gleam/bytes_builder.gleam
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ pub opaque type BytesBuilder {
/// Create an empty `BytesBuilder`. Useful as the start of a pipe chaining many
/// builders together.
///
@deprecated("This module has been deprecated, use `bytes_tree.new` instead.")
pub fn new() -> BytesBuilder {
concat([])
}
Expand All @@ -41,6 +42,7 @@ pub fn new() -> BytesBuilder {
///
/// Runs in constant time.
///
@deprecated("This module has been deprecated, use `bytes_tree.prepend` instead.")
pub fn prepend(to second: BytesBuilder, prefix first: BitArray) -> BytesBuilder {
append_builder(from_bit_array(first), second)
}
Expand All @@ -49,6 +51,7 @@ pub fn prepend(to second: BytesBuilder, prefix first: BitArray) -> BytesBuilder
///
/// Runs in constant time.
///
@deprecated("This module has been deprecated, use `bytes_tree.append` instead.")
pub fn append(to first: BytesBuilder, suffix second: BitArray) -> BytesBuilder {
append_builder(first, from_bit_array(second))
}
Expand All @@ -57,6 +60,7 @@ pub fn append(to first: BytesBuilder, suffix second: BitArray) -> BytesBuilder {
///
/// Runs in constant time.
///
@deprecated("This module has been deprecated, use `bytes_tree.prepend_tree` instead.")
pub fn prepend_builder(
to second: BytesBuilder,
prefix first: BytesBuilder,
Expand All @@ -68,6 +72,7 @@ pub fn prepend_builder(
///
/// Runs in constant time.
///
@deprecated("This module has been deprecated, use `bytes_tree.append_tree` instead.")
@external(erlang, "gleam_stdlib", "iodata_append")
pub fn append_builder(
to first: BytesBuilder,
Expand All @@ -84,6 +89,7 @@ pub fn append_builder(
/// Runs in constant time when running on Erlang.
/// Runs in linear time with the length of the string otherwise.
///
@deprecated("This module has been deprecated, use `bytes_tree.prepend_string` instead.")
pub fn prepend_string(
to second: BytesBuilder,
prefix first: String,
Expand All @@ -96,6 +102,7 @@ pub fn prepend_string(
/// Runs in constant time when running on Erlang.
/// Runs in linear time with the length of the string otherwise.
///
@deprecated("This module has been deprecated, use `bytes_tree.append_string` instead.")
pub fn append_string(
to first: BytesBuilder,
suffix second: String,
Expand All @@ -107,6 +114,7 @@ pub fn append_string(
///
/// Runs in constant time.
///
@deprecated("This module has been deprecated, use `bytes_tree.concat` instead.")
@external(erlang, "gleam_stdlib", "identity")
pub fn concat(builders: List(BytesBuilder)) -> BytesBuilder {
Many(builders)
Expand All @@ -116,6 +124,7 @@ pub fn concat(builders: List(BytesBuilder)) -> BytesBuilder {
///
/// Runs in constant time.
///
@deprecated("This module has been deprecated, use `bytes_tree.concat_bit_arrays` instead.")
@external(erlang, "gleam_stdlib", "identity")
pub fn concat_bit_arrays(bits: List(BitArray)) -> BytesBuilder {
bits
Expand All @@ -128,6 +137,7 @@ pub fn concat_bit_arrays(bits: List(BitArray)) -> BytesBuilder {
/// Runs in constant time when running on Erlang.
/// Runs in linear time otherwise.
///
@deprecated("This module has been deprecated, use `bytes_tree.from_string` instead.")
@external(erlang, "gleam_stdlib", "wrap_list")
pub fn from_string(string: String) -> BytesBuilder {
Text(string_builder.from_string(string))
Expand All @@ -138,6 +148,7 @@ pub fn from_string(string: String) -> BytesBuilder {
/// Runs in constant time when running on Erlang.
/// Runs in linear time otherwise.
///
@deprecated("This module has been deprecated, use `bytes_tree.from_string_tree` instead.")
@external(erlang, "gleam_stdlib", "wrap_list")
pub fn from_string_builder(builder: StringBuilder) -> BytesBuilder {
Text(builder)
Expand All @@ -147,6 +158,7 @@ pub fn from_string_builder(builder: StringBuilder) -> BytesBuilder {
///
/// Runs in constant time.
///
@deprecated("This module has been deprecated, use `bytes_tree.from_bit_array` instead.")
@external(erlang, "gleam_stdlib", "wrap_list")
pub fn from_bit_array(bits: BitArray) -> BytesBuilder {
Bytes(bits)
Expand All @@ -159,6 +171,7 @@ pub fn from_bit_array(bits: BitArray) -> BytesBuilder {
/// When running on Erlang this function is implemented natively by the
/// virtual machine and is highly optimised.
///
@deprecated("This module has been deprecated, use `bytes_tree.to_bit_array` instead.")
@external(erlang, "erlang", "list_to_bitstring")
pub fn to_bit_array(builder: BytesBuilder) -> BitArray {
[[builder]]
Expand Down Expand Up @@ -193,6 +206,7 @@ fn to_list(
///
/// Runs in linear time.
///
@deprecated("This module has been deprecated, use `bytes_tree.byte_size` instead.")
@external(erlang, "erlang", "iolist_size")
pub fn byte_size(builder: BytesBuilder) -> Int {
[[builder]]
Expand Down
10 changes: 5 additions & 5 deletions src/gleam/dynamic.gleam
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import gleam/int
import gleam/list
import gleam/option.{type Option, Some}
import gleam/result
import gleam/string_builder
import gleam/string_tree

/// `Dynamic` data is data that we don't know the type of yet.
/// We likely get data like this from interop with Erlang, or from
Expand Down Expand Up @@ -498,8 +498,8 @@ fn at_least_decode_tuple_error(
}
let error =
["Tuple of at least ", int.to_string(size), " element", s]
|> string_builder.from_strings
|> string_builder.to_string
|> string_tree.from_strings
|> string_tree.to_string
|> DecodeError(found: classify(data), path: [])
Error([error])
}
Expand Down Expand Up @@ -567,8 +567,8 @@ fn push_path(error: DecodeError, name: t) -> DecodeError {
Ok(name) -> name
Error(_) ->
["<", classify(name), ">"]
|> string_builder.from_strings
|> string_builder.to_string
|> string_tree.from_strings
|> string_tree.to_string
}
DecodeError(..error, path: [name, ..error.path])
}
Expand Down
38 changes: 19 additions & 19 deletions src/gleam/string.gleam
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import gleam/list
import gleam/option.{type Option, None, Some}
import gleam/order
import gleam/string_builder.{type StringBuilder}
import gleam/string_tree.{type StringTree}

/// Determines if a `String` is empty.
///
Expand Down Expand Up @@ -72,9 +72,9 @@ pub fn reverse(string: String) -> String {

fn do_reverse(string: String) -> String {
string
|> string_builder.from_string
|> string_builder.reverse
|> string_builder.to_string
|> string_tree.from_string
|> string_tree.reverse
|> string_tree.to_string
}

/// Creates a new `String` by replacing all occurrences of a given substring.
Expand All @@ -97,9 +97,9 @@ pub fn replace(
with substitute: String,
) -> String {
string
|> string_builder.from_string
|> string_builder.replace(each: pattern, with: substitute)
|> string_builder.to_string
|> string_tree.from_string
|> string_tree.replace(each: pattern, with: substitute)
|> string_tree.to_string
}

/// Creates a new `String` with all the graphemes in the input `String` converted to
Expand Down Expand Up @@ -369,9 +369,9 @@ pub fn split(x: String, on substring: String) -> List(String) {
"" -> to_graphemes(x)
_ ->
x
|> string_builder.from_string
|> string_builder.split(on: substring)
|> list.map(with: string_builder.to_string)
|> string_tree.from_string
|> string_tree.split(on: substring)
|> list.map(with: string_tree.to_string)
}
}

Expand Down Expand Up @@ -415,7 +415,7 @@ fn erl_split(a: String, b: String) -> List(String)
/// Creates a new `String` by joining two `String`s together.
///
/// This function copies both `String`s and runs in linear time. If you find
/// yourself joining `String`s frequently consider using the [`string_builder`](../gleam/string_builder.html)
/// yourself joining `String`s frequently consider using the [`string_tree`](../gleam/string_tree.html)
/// module as it can append `String`s much faster!
///
/// ## Examples
Expand All @@ -427,15 +427,15 @@ fn erl_split(a: String, b: String) -> List(String)
///
pub fn append(to first: String, suffix second: String) -> String {
first
|> string_builder.from_string
|> string_builder.append(second)
|> string_builder.to_string
|> string_tree.from_string
|> string_tree.append(second)
|> string_tree.to_string
}

/// Creates a new `String` by joining many `String`s together.
///
/// This function copies both `String`s and runs in linear time. If you find
/// yourself joining `String`s frequently consider using the [`string_builder`](../gleam/string_builder.html)
/// yourself joining `String`s frequently consider using the [`string_tree`](../gleam/string_tree.html)
/// module as it can append `String`s much faster!
///
/// ## Examples
Expand All @@ -447,8 +447,8 @@ pub fn append(to first: String, suffix second: String) -> String {
///
pub fn concat(strings: List(String)) -> String {
strings
|> string_builder.from_strings
|> string_builder.to_string
|> string_tree.from_strings
|> string_tree.to_string
}

/// Creates a new `String` by repeating a `String` a given number of times.
Expand Down Expand Up @@ -972,12 +972,12 @@ pub fn capitalise(string: String) -> String {
///
pub fn inspect(term: anything) -> String {
do_inspect(term)
|> string_builder.to_string
|> string_tree.to_string
}

@external(erlang, "gleam_stdlib", "inspect")
@external(javascript, "../gleam_stdlib.mjs", "inspect")
fn do_inspect(term: anything) -> StringBuilder
fn do_inspect(term: anything) -> StringTree

/// Returns the number of bytes in a `String`.
///
Expand Down
18 changes: 18 additions & 0 deletions src/gleam/string_builder.gleam
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ pub type StringBuilder
/// Create an empty `StringBuilder`. Useful as the start of a pipe chaining many
/// builders together.
///
@deprecated("This module has been deprecated, use `string_tree.new` instead.")
pub fn new() -> StringBuilder {
do_from_strings([])
}
Expand All @@ -29,6 +30,7 @@ pub fn new() -> StringBuilder {
///
/// Runs in constant time.
///
@deprecated("This module has been deprecated, use `string_tree.prepend` instead.")
pub fn prepend(
to builder: StringBuilder,
prefix prefix: String,
Expand All @@ -40,6 +42,7 @@ pub fn prepend(
///
/// Runs in constant time.
///
@deprecated("This module has been deprecated, use `string_tree.append` instead.")
pub fn append(to builder: StringBuilder, suffix second: String) -> StringBuilder {
append_builder(builder, from_string(second))
}
Expand All @@ -48,6 +51,7 @@ pub fn append(to builder: StringBuilder, suffix second: String) -> StringBuilder
///
/// Runs in constant time.
///
@deprecated("This module has been deprecated, use `string_tree.prepend_tree` instead.")
pub fn prepend_builder(
to builder: StringBuilder,
prefix prefix: StringBuilder,
Expand All @@ -59,6 +63,7 @@ pub fn prepend_builder(
///
/// Runs in constant time.
///
@deprecated("This module has been deprecated, use `string_tree.append_tree` instead.")
pub fn append_builder(
to builder: StringBuilder,
suffix suffix: StringBuilder,
Expand All @@ -74,6 +79,7 @@ fn do_append(a: StringBuilder, b: StringBuilder) -> StringBuilder
///
/// Runs in constant time.
///
@deprecated("This module has been deprecated, use `string_tree.from_strings` instead.")
pub fn from_strings(strings: List(String)) -> StringBuilder {
do_from_strings(strings)
}
Expand All @@ -86,6 +92,7 @@ fn do_from_strings(a: List(String)) -> StringBuilder
///
/// Runs in constant time.
///
@deprecated("This module has been deprecated, use `string_tree.concat` instead.")
pub fn concat(builders: List(StringBuilder)) -> StringBuilder {
do_concat(builders)
}
Expand All @@ -98,6 +105,7 @@ fn do_concat(builders: List(StringBuilder)) -> StringBuilder
///
/// Runs in constant time.
///
@deprecated("This module has been deprecated, use `string_tree.from_string` instead.")
pub fn from_string(string: String) -> StringBuilder {
do_from_string(string)
}
Expand All @@ -111,6 +119,7 @@ fn do_from_string(string: String) -> StringBuilder
/// This function is implemented natively by the virtual machine and is highly
/// optimised.
///
@deprecated("This module has been deprecated, use `string_tree.to_string` instead.")
pub fn to_string(builder: StringBuilder) -> String {
do_to_string(builder)
}
Expand All @@ -121,6 +130,7 @@ fn do_to_string(builder: StringBuilder) -> String

/// Returns the size of the `StringBuilder` in bytes.
///
@deprecated("This module has been deprecated, use `string_tree.byte_size` instead.")
pub fn byte_size(builder: StringBuilder) -> Int {
do_byte_size(builder)
}
Expand All @@ -131,6 +141,7 @@ fn do_byte_size(builder: StringBuilder) -> Int

/// Joins the given builders into a new builder separated with the given string
///
@deprecated("This module has been deprecated, use `string_tree.join` instead.")
pub fn join(builders: List(StringBuilder), with sep: String) -> StringBuilder {
builders
|> list.intersperse(from_string(sep))
Expand All @@ -140,6 +151,7 @@ pub fn join(builders: List(StringBuilder), with sep: String) -> StringBuilder {
/// Converts a builder to a new builder where the contents have been
/// lowercased.
///
@deprecated("This module has been deprecated, use `string_tree.lowercase` instead.")
pub fn lowercase(builder: StringBuilder) -> StringBuilder {
do_lowercase(builder)
}
Expand All @@ -151,6 +163,7 @@ fn do_lowercase(builder: StringBuilder) -> StringBuilder
/// Converts a builder to a new builder where the contents have been
/// uppercased.
///
@deprecated("This module has been deprecated, use `string_tree.uppercase` instead.")
pub fn uppercase(builder: StringBuilder) -> StringBuilder {
do_uppercase(builder)
}
Expand All @@ -161,6 +174,7 @@ fn do_uppercase(builder: StringBuilder) -> StringBuilder

/// Converts a builder to a new builder with the contents reversed.
///
@deprecated("This module has been deprecated, use `string_tree.reverse` instead.")
pub fn reverse(builder: StringBuilder) -> StringBuilder {
do_reverse(builder)
}
Expand All @@ -179,6 +193,7 @@ fn do_to_graphemes(string: String) -> List(String)

/// Splits a builder on a given pattern into a list of builders.
///
@deprecated("This module has been deprecated, use `string_tree.split` instead.")
pub fn split(iodata: StringBuilder, on pattern: String) -> List(StringBuilder) {
do_split(iodata, pattern)
}
Expand All @@ -197,6 +212,7 @@ fn erl_split(a: StringBuilder, b: String, c: Direction) -> List(StringBuilder)

/// Replaces all instances of a pattern with a given string substitute.
///
@deprecated("This module has been deprecated, use `string_tree.replace` instead.")
@external(erlang, "gleam_stdlib", "string_replace")
@external(javascript, "../gleam_stdlib.mjs", "string_replace")
pub fn replace(
Expand All @@ -223,6 +239,7 @@ pub fn replace(
/// // -> True
/// ```
///
@deprecated("This module has been deprecated, use `string_tree.is_equal` instead.")
@external(erlang, "string", "equal")
pub fn is_equal(a: StringBuilder, b: StringBuilder) -> Bool {
a == b
Expand All @@ -247,6 +264,7 @@ pub fn is_equal(a: StringBuilder, b: StringBuilder) -> Bool {
/// // -> True
/// ```
///
@deprecated("This module has been deprecated, use `string_tree.is_empty` instead.")
@external(erlang, "string", "is_empty")
pub fn is_empty(builder: StringBuilder) -> Bool {
from_string("") == builder
Expand Down
Loading

0 comments on commit e548f30

Please sign in to comment.