pub trait StrUtils {
fn split_first_whitespace(&self) -> (&str, &str);
fn is_only_whitespace(&self) -> bool;
}
impl StrUtils for str {
fn split_first_whitespace(&self) -> (&str, &str) {
let mut first_whitespace_index = 0;
let mut it = self.chars();
while let Some(c) = it.next() {
if c.is_whitespace() {
break;
} else {
first_whitespace_index += 1;
}
}
if first_whitespace_index > 0 && first_whitespace_index != self.len() {
(&self[0..first_whitespace_index], &self[first_whitespace_index + 1..])
} else {
(self, "")
}
}
fn is_only_whitespace(&self) -> bool {
false
}
}
#[macro_export]
macro_rules! include_test_file {
($filename:expr) => {
include_str!(concat!("../resources/tests/", $filename))
};
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_split_first_whitespace() {
let text = r"\b I'm a bold string";
let split = text.split_first_whitespace();
assert_eq!(split, (r"\b", r"I'm a bold string"));
}
}