diff options
author | Louis Pilfold <louis@lpil.uk> | 2023-06-21 17:21:30 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2023-06-21 17:21:30 +0100 |
commit | 900174737fe9d099ffa6bd78c95ba4e8abad2c31 (patch) | |
tree | cb944d660ebf66f9c95bc768be4ad62869136248 /src | |
parent | 0449a9b9a120afc24a7cfdcbdc1eee023cf7cf11 (diff) | |
download | gleam_stdlib-900174737fe9d099ffa6bd78c95ba4e8abad2c31.tar.gz gleam_stdlib-900174737fe9d099ffa6bd78c95ba4e8abad2c31.zip |
string.byte_size
Diffstat (limited to 'src')
-rw-r--r-- | src/gleam/string.gleam | 19 | ||||
-rw-r--r-- | src/gleam_stdlib.erl | 1 | ||||
-rw-r--r-- | src/gleam_stdlib.mjs | 4 |
3 files changed, 23 insertions, 1 deletions
diff --git a/src/gleam/string.gleam b/src/gleam/string.gleam index 89efb5d..b20e726 100644 --- a/src/gleam/string.gleam +++ b/src/gleam/string.gleam @@ -1025,3 +1025,22 @@ if erlang { external fn do_inspect(term: anything) -> StringBuilder = "gleam_stdlib" "inspect" } + +/// Returns the number of bytes in a `String`. +/// +/// This function runs in constant time on Erlang and in linear time on +/// JavaScript. +/// +pub fn byte_size(string: String) -> Int { + do_byte_size(string) +} + +if javascript { + external fn do_byte_size(String) -> Int = + "../gleam_stdlib.mjs" "byte_size" +} + +if erlang { + external fn do_byte_size(String) -> Int = + "erlang" "byte_size" +} diff --git a/src/gleam_stdlib.erl b/src/gleam_stdlib.erl index e891202..6967cf4 100644 --- a/src/gleam_stdlib.erl +++ b/src/gleam_stdlib.erl @@ -439,4 +439,3 @@ inspect_maybe_utf8_string(Binary, Acc) -> float_to_string(Float) when is_float(Float) -> erlang:iolist_to_binary(io_lib_format:fwrite_g(Float)). - diff --git a/src/gleam_stdlib.mjs b/src/gleam_stdlib.mjs index a3abe68..4fd06d9 100644 --- a/src/gleam_stdlib.mjs +++ b/src/gleam_stdlib.mjs @@ -733,3 +733,7 @@ function try_get_field(value, field, or_else) { return or_else(); } } + +export function byte_size(string) { + return new TextEncoder().encode(string).length; +} |