diff rust/hg-core/src/utils/strings.rs @ 52759:36d39726c0af

rust: add utils::strings module This is intended for code similar to stringutil.py. This commit adds one method, short_user, which will be needed for rhg annotate.
author Mitchell Kember <mkember@janestreet.com>
date Fri, 03 Jan 2025 10:50:17 -0500
parents
children 94e2547e6f3d
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hg-core/src/utils/strings.rs	Fri Jan 03 10:50:17 2025 -0500
@@ -0,0 +1,31 @@
+/// Returns a short representation of a user name or email address.
+pub fn short_user(user: &[u8]) -> &[u8] {
+    let mut str = user;
+    if let Some(i) = memchr::memchr(b'@', str) {
+        str = &str[..i];
+    }
+    if let Some(i) = memchr::memchr(b'<', str) {
+        str = &str[i + 1..];
+    }
+    if let Some(i) = memchr::memchr(b' ', str) {
+        str = &str[..i];
+    }
+    if let Some(i) = memchr::memchr(b'.', str) {
+        str = &str[..i];
+    }
+    str
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn test_short_user() {
+        assert_eq!(short_user(b""), b"");
+        assert_eq!(short_user(b"Name"), b"Name");
+        assert_eq!(short_user(b"First Last"), b"First");
+        assert_eq!(short_user(b"First Last <user@example.com>"), b"user");
+        assert_eq!(short_user(b"First Last <user.name@example.com>"), b"user");
+    }
+}