diff options
-rw-r--r-- | src/gleam/int.gleam | 17 | ||||
-rw-r--r-- | src/gleam_stdlib.mjs | 9 |
2 files changed, 26 insertions, 0 deletions
diff --git a/src/gleam/int.gleam b/src/gleam/int.gleam index d806fe1..785e8c0 100644 --- a/src/gleam/int.gleam +++ b/src/gleam/int.gleam @@ -183,6 +183,23 @@ if javascript { "../gleam_stdlib.mjs" "int_to_base_string" } +pub fn from_base_string(string: String, base: Int) -> Result(Int, Nil) { + case base >= 2 && base <= 36 { + True -> do_from_base_string(string, base) + False -> Error(Nil) + } +} + +if erlang { + external fn do_from_base_string(String, Int) -> Result(Int, Nil) = + "erlang" "binary_to_integer" +} + +if javascript { + external fn do_from_base_string(Int, Int) -> Result(Int, Nil) = + "../gleam_stdlib.mjs" "int_from_base_string" +} + /// Prints a given int to a string using base2. /// /// ## Examples diff --git a/src/gleam_stdlib.mjs b/src/gleam_stdlib.mjs index cde1052..2fafcd9 100644 --- a/src/gleam_stdlib.mjs +++ b/src/gleam_stdlib.mjs @@ -57,6 +57,15 @@ export function int_to_base_string(int, base) { return int.toString(base).toUpperCase(); } +export function int_from_base_string(string, base) { + const result = parseInt(string, base) + if (isNaN(result)) { + return new Error(Nil) + } else { + return new Ok(result) + } +} + export function string_replace(string, target, substitute) { if (typeof string.replaceAll !== "undefined") { return string.replaceAll(target, substitute); |