pratt_gen_core/
span.rs

1use std::fmt::{Debug, Formatter};
2use crate::*;
3
4#[derive(Clone, Copy)]
5pub struct Span<'a, T: ParserImpl<'a> + Copy> {
6    pub range: (usize, usize),
7    pub value: T,
8    pub phant: PhantomData<&'a ()>
9}
10
11impl<'a, T> ParserImpl<'a> for Span<'a, T> where
12    T: ParserImpl<'a> + Copy
13{
14    fn parser_impl(
15        source: Source<'a>, 
16        out_arena: &'a Arena, 
17        err_arena: &'a Arena,
18        precedence: u16,
19    ) -> Result<(Self, Source<'a>), Error<'a>> {
20        let start = source.split;
21        let (inner, source) = T::parser_impl(source, out_arena, err_arena, precedence)?;
22        Ok((Span {
23            range: (start, source.split), 
24            value: inner,
25            phant: PhantomData
26        }, source))
27    }
28}
29
30impl<'a, T: ParserImpl<'a> + Copy + Debug> Debug for Span<'a, T> {
31    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
32        write!(f, "{:?}", self.value)
33    }
34}