From a7ff9fb24fcb33390b3c35e02c8018838ab6c817 Mon Sep 17 00:00:00 2001 From: Stephen Chung Date: Sun, 7 Mar 2021 22:33:02 +0800 Subject: [PATCH] Add bytes method for strings. --- CHANGELOG.md | 1 + src/packages/string_more.rs | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 85615fb3..2c0f4af9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ Enhancements * More information is provided to the error variable captured by the `catch` statement in an _object map_. * Previously, `private` functions in an `AST` cannot be called with `call_fn` etc. This is inconvenient when trying to call a function inside a script which also serves as a loadable module exporting part (but not all) of the functions. Now, all functions (`private` or not) can be called in an `AST`. The `private` keyword is relegated to preventing a function from being exported. * `Dynamic::as_unit` just for completeness sake. +* `bytes` method added for strings to get length quickly (if the string is ASCII-only). Version 0.19.13 diff --git a/src/packages/string_more.rs b/src/packages/string_more.rs index b800d90d..783dc2c4 100644 --- a/src/packages/string_more.rs +++ b/src/packages/string_more.rs @@ -12,7 +12,7 @@ def_package!(crate:MoreStringPackage:"Additional string utilities, including str // Register string iterator lib.set_iter( TypeId::of::(), - |string: Dynamic| Box::new(string.cast::().chars().collect::>().into_iter().map(Into::into)) + |string| Box::new(string.cast::().chars().collect::>().into_iter().map(Into::into)) ); }); @@ -42,6 +42,10 @@ mod string_functions { pub fn len(string: &str) -> INT { string.chars().count() as INT } + #[rhai_fn(name = "bytes", get = "bytes")] + pub fn bytes(string: &str) -> INT { + string.len() as INT + } pub fn remove(string: &mut ImmutableString, sub_string: ImmutableString) { *string -= sub_string; }