Allow to call join_strings with a &[WString]

This commit is contained in:
Johannes Altmanninger 2023-04-09 15:56:39 +02:00
parent 8e972dbab0
commit d3a7e3ffd9

View File

@ -59,17 +59,17 @@ fn wcs2string_bad_char(c: char) {
} }
/// Joins strings with a separator. /// Joins strings with a separator.
pub fn join_strings(strs: &[&wstr], sep: char) -> WString { pub fn join_strings<S: AsRef<wstr>>(strs: &[S], sep: char) -> WString {
if strs.is_empty() { if strs.is_empty() {
return WString::new(); return WString::new();
} }
let capacity = strs.iter().fold(0, |acc, s| acc + s.len()) + strs.len() - 1; let capacity = strs.iter().fold(0, |acc, s| acc + s.as_ref().len()) + strs.len() - 1;
let mut result = WString::with_capacity(capacity); let mut result = WString::with_capacity(capacity);
for (i, s) in strs.iter().enumerate() { for (i, s) in strs.iter().enumerate() {
if i > 0 { if i > 0 {
result.push(sep); result.push(sep);
} }
result.push_utfstr(s); result.push_utfstr(&s);
} }
result result
} }
@ -77,7 +77,8 @@ pub fn join_strings(strs: &[&wstr], sep: char) -> WString {
#[test] #[test]
fn test_join_strings() { fn test_join_strings() {
use crate::wchar::L; use crate::wchar::L;
assert_eq!(join_strings(&[], '/'), ""); let empty: &[&wstr] = &[];
assert_eq!(join_strings(empty, '/'), "");
assert_eq!(join_strings(&[L!("foo")], '/'), "foo"); assert_eq!(join_strings(&[L!("foo")], '/'), "foo");
assert_eq!( assert_eq!(
join_strings(&[L!("foo"), L!("bar"), L!("baz")], '/'), join_strings(&[L!("foo"), L!("bar"), L!("baz")], '/'),