1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use std::fmt::{self, Display};
#[derive(Copy, Clone, Debug)]
pub struct Show<T>(pub T);
impl<T: Display> Display for Show<Option<T>> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match &self.0 {
Some(x) => write!(f, "{}", x),
None => Ok(()),
}
}
}
impl<'a, T, F: Fn(&mut fmt::Formatter, &'a T) -> fmt::Result> Display for Show<(&'a [T], F)> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
for x in self.0.0 {
(self.0.1)(f, x)?;
}
Ok(())
}
}
impl<T: Display> Display for Show<(T, usize)> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
for _ in 0..self.0.1 {
write!(f, "{}", self.0.0)?;
}
Ok(())
}
}