aboutsummaryrefslogtreecommitdiffstats
path: root/src/string_helper.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/string_helper.rs')
-rw-r--r--src/string_helper.rs70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/string_helper.rs b/src/string_helper.rs
new file mode 100644
index 0000000..e5af42b
--- /dev/null
+++ b/src/string_helper.rs
@@ -0,0 +1,70 @@
+#[cfg(not(feature = "std"))]
+use arraystring::{ArrayString, typenum::{U32, U160}};
+
+#[cfg(feature = "std")]
+pub(crate) type NameString = String;
+
+#[cfg(feature = "std")]
+pub(crate) fn name_string_from_slice(s: &[u8]) -> NameString {
+ match String::from_utf8(s.to_vec()) {
+ Ok(s) => s,
+ Err(_) => "Unable to create string".to_string()
+ }
+}
+
+#[cfg(not(feature = "std"))]
+pub(crate) type NameString = ArrayString<U32>;
+
+#[cfg(not(feature = "std"))]
+pub(crate) fn name_string_from_slice(s: &[u8]) -> NameString {
+ NameString::from_str_truncate(s)
+}
+
+#[cfg(feature = "std")]
+pub(crate) type MessageString = String;
+
+#[cfg(not(feature = "std"))]
+pub(crate) type MessageString = ArrayString<U160>;
+
+#[cfg(feature = "std")]
+pub(crate) fn message_string_from_slice(s: &[u8]) -> MessageString {
+ let mut split = s.split(|c| *c == 0);
+
+ if let Some(s) = split.next() {
+ match String::from_utf8(s.to_vec()) {
+ Ok(s) => {
+ s.trim().to_string()
+ }
+ Err(_) => "Unable to create string".to_string()
+ }
+ } else {
+ "".to_string()
+ }
+}
+
+#[cfg(not(feature = "std"))]
+pub(crate) fn message_string_from_slice(s: &[u8]) -> MessageString {
+ MessageString::from_str_truncate(s)
+}
+
+#[cfg(feature = "std")]
+pub(crate) type PasswordString = String;
+
+// I believe that a password can only be 141 characters,
+// but given it's close enough to 160, let's just round
+// up so it's the same as MessageString.
+#[cfg(not(feature = "std"))]
+pub(crate) type PasswordString = ArrayString<U160>;
+
+#[cfg(feature = "std")]
+pub(crate) fn password_string_from_slice(s: &[u8]) -> PasswordString {
+ match String::from_utf8(s.to_vec()) {
+ Ok(s) => s,
+ Err(_) => "".to_string()
+ }
+}
+
+#[cfg(not(feature = "std"))]
+pub(crate) fn password_string_from_slice(s: &[u8]) -> PasswordString {
+ PasswordString::from_str_truncate(s)
+}