Packages
gleam_stdlib
0.16.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/bit_string.gleam
//// Working with raw bit string data.
//// The BitString type should be used instead of a String type when not utf8
//// encoded.
pub type BitString =
BitString
/// Converts a UTF-8 String type into a raw BitString type.
///
pub external fn from_string(String) -> BitString =
"gleam_stdlib" "identity"
/// Returns an integer which is the number of bytes in the bit string.
///
pub external fn byte_size(BitString) -> Int =
"erlang" "byte_size"
/// Creates a new bit string by joining two binaries.
///
/// ## Examples
///
/// > append(to: from_string("butter"), suffix: from_string("fly"))
/// from_string("butterfly")
///
pub external fn append(first: BitString, second: BitString) -> BitString =
"gleam_stdlib" "bit_string_append"
/// Extracts part of a bit string.
///
/// BitString part will start at given position and continue up to specified
/// length.
/// A negative length can be used to extract bytes at the end of a bit string.
///
pub external fn part(
string: BitString,
position: Int,
length: Int,
) -> Result(BitString, Nil) =
"gleam_stdlib" "bit_string_part_"
/// Converts an integer to unsigned 32 bits.
///
/// Returns an error if integer is less than zero or equal to or larger than
/// 2^32.
///
pub external fn int_to_u32(Int) -> Result(BitString, Nil) =
"gleam_stdlib" "bit_string_int_to_u32"
/// Converts unsigned 32 bits to an integer.
///
/// Returns an error if the bit string is not 32 bits in length.
///
pub external fn int_from_u32(BitString) -> Result(Int, Nil) =
"gleam_stdlib" "bit_string_int_from_u32"
/// Tests to see whether a bit string is valid UTF-8.
///
pub fn is_utf8(bits: BitString) -> Bool {
case bits {
<<>> -> True
<<_:utf8, rest:binary>> -> is_utf8(rest)
_ -> False
}
}
external fn unsafe_to_string(BitString) -> String =
"gleam_stdlib" "identity"
/// Converts a bit string to a string.
///
/// Returns an error if the bit string is invalid UTF-8 data.
///
pub fn to_string(bits: BitString) -> Result(String, Nil) {
case is_utf8(bits) {
True -> Ok(unsafe_to_string(bits))
False -> Error(Nil)
}
}