object_rainbow/
parse_extra.rs1use crate::*;
2
3#[derive(Debug, Tagged, ListHashes, Topological, Clone, Copy, Default, ParseAsInline)]
4pub struct ParseExtra<T>(pub T);
5
6impl<T: ToOutput> ToOutput for ParseExtra<T> {
7 fn to_output(&self, output: &mut impl Output) {
8 if output.is_mangling() {
9 self.0.to_output(output);
10 }
11 }
12}
13
14impl<T: ToOutput> InlineOutput for ParseExtra<T> {}
15
16impl<
17 T: ParseSliceExtra<B>,
18 I: PointInput<Extra = (A, B)>,
19 A: 'static + Clone + AsRef<[u8]>,
20 B: 'static + Clone,
21> ParseInline<I> for ParseExtra<T>
22{
23 fn parse_inline(input: &mut I) -> crate::Result<Self> {
24 T::parse_slice_extra(
25 input.extra().0.as_ref(),
26 &input.resolve(),
27 &input.extra().1.clone(),
28 )
29 .map(Self)
30 }
31}