1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use crate::parser::ast::AstInfo;
use crate::parser::peg::parse_pair::ParsePairSort;
use thiserror::Error;
pub trait GenerateAstInfo {
type Result: AstInfo;
fn generate(&mut self, pair: &ParsePairSort) -> Self::Result;
}
impl<F, M: AstInfo> GenerateAstInfo for F
where
F: FnMut(&ParsePairSort) -> M,
{
type Result = M;
fn generate(&mut self, pair: &ParsePairSort) -> Self::Result {
(self)(pair)
}
}
#[derive(Debug, Error)]
pub enum FromPairsError {}
pub trait FromPairs<M: AstInfo> {
fn from_pairs<G: GenerateAstInfo<Result = M>>(pair: &ParsePairSort, generator: &mut G) -> Self
where
Self: Sized;
}