Skip to main content

object_rainbow/
parse_extra.rs

1use 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}