1use core::fmt::*;
2
3pub(crate) mod types {
4 #[allow(unused)]
5 use super::*;
6
7 #[derive(Clone, Copy)]
9 pub struct Repeat<T> {
10 pub(super) value: T,
11 pub(super) n: usize,
12 }
13
14 #[derive(Clone, Copy)]
16 pub struct RepeatWith<F> {
17 pub(super) f: F,
20 pub(super) n: usize,
21 }
22}
23
24use types::*;
25
26pub fn repeat<T>(value: T, n: usize) -> Repeat<T> {
39 Repeat { value, n }
40}
41
42pub fn repeat_with<F>(n: usize, f: F) -> RepeatWith<F> {
60 RepeatWith { n, f }
61}
62
63impl<T: Debug> Debug for Repeat<T> {
64 fn fmt(&self, f: &mut Formatter) -> Result {
65 for _ in 0..self.n {
66 write!(f, "{:?}", self.value)?;
67 }
68 Ok(())
69 }
70}
71
72impl<T: Display> Display for Repeat<T> {
73 fn fmt(&self, f: &mut Formatter) -> Result {
74 for _ in 0..self.n {
75 write!(f, "{}", self.value)?;
76 }
77 Ok(())
78 }
79}
80
81impl<F, R> Debug for RepeatWith<F>
82where
83 F: Fn() -> R,
84 R: Debug,
85{
86 fn fmt(&self, f: &mut Formatter) -> Result {
87 for _ in 0..self.n {
88 write!(f, "{:?}", (self.f)())?;
89 }
90 Ok(())
91 }
92}
93
94impl<F, R> Display for RepeatWith<F>
95where
96 F: Fn() -> R,
97 R: Display,
98{
99 fn fmt(&self, f: &mut Formatter) -> Result {
100 for _ in 0..self.n {
101 write!(f, "{}", (self.f)())?;
102 }
103 Ok(())
104 }
105}