1mod pigeon {
2 pub(crate) use pigeon_core::*;
3 pub(crate) use pigeon_macs::*;
4}
5
6use core::fmt::Debug;
7use alloc::vec::Vec;
8use pigeon::*;
9
10#[derive(PrependAstImpl)]
12pub struct RVec<T>(Vec<T>);
13
14impl<T, Extra: Copy> Prepend<Extra> for RVec<T> {
15 type Item = T;
16 fn empty(_: Extra) -> Self {
17 Self(Vec::new())
18 }
19 fn prepend(&mut self, value: Self::Item, _: Extra) {
20 let Self(inner) = self;
21 inner.push(value);
22 }
23}
24
25impl<T: Debug> Debug for RVec<T> {
26 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
27 f.debug_list().entries(self.0.iter().rev()).finish()
28 }
29}
30
31impl<T> IntoIterator for RVec<T> {
32 type Item = T;
33 type IntoIter = core::iter::Rev<alloc::vec::IntoIter<T>>;
34 fn into_iter(self) -> Self::IntoIter {
35 let Self(inner) = self;
36 inner.into_iter().rev()
37 }
38}