Mercurial > public > mercurial-scm > hg
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"); + } +}