You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.2 KiB

use std::fmt;
pub trait FlatJoinStrsExt: Sized
{
/// Join an iterator of iterators of strings with a seperator `str`
fn flat_join(self, with: &str) -> String;
}
pub trait JoinStrsExt: Sized
{
/// Join an iterator of strings with a seperator `str`.
fn join(self, with: &str) -> String;
}
impl<T,I> JoinStrsExt for I
where I: IntoIterator<Item=T>,
T: fmt::Display
{
/// Join an iterator of `str` with a seperator
fn join(self, with: &str) -> String
{
let mut output = String::new();
let mut first=true;
for string in self.into_iter()
{
if !first {
output.push_str(with);
}
let string = string.to_string();
output.push_str(&string[..]);
first=false;
}
output
}
}
impl<I, I2, T> FlatJoinStrsExt for I
where I: IntoIterator<Item = I2>,
I2: IntoIterator<Item = T>,
T: fmt::Display
{
fn flat_join(self, with: &str) -> String
{
let mut output = String::new();
let mut first=true;
for string in self.into_iter()
{
if !first {
output.push_str(with);
}
let string: String = string.into_iter().map(|x| x.to_string()).collect();
output.push_str(&string[..]);
first=false;
}
output
}
}