binator/utils/
and_drop.rs1use crate::{
2 Parse,
3 Parsed,
4 Success,
5};
6
7#[derive(Clone)]
9pub struct AndDrop<ParserA, ParserB> {
10 parser_a: ParserA,
11 parser_b: ParserB,
12}
13
14impl<Stream, Context, ParserA, ParserB> Parse<Stream, Context> for AndDrop<ParserA, ParserB>
15where
16 ParserA: Parse<Stream, Context>,
17 ParserB: Parse<Stream, Context>,
18{
19 type Token = ParserA::Token;
20
21 fn parse(&mut self, stream: Stream) -> Parsed<Self::Token, Stream, Context> {
22 let Success {
23 token: token_a,
24 stream,
25 } = self.parser_a.parse(stream)?;
26
27 self.parser_b.parse(stream).map_token(|_| token_a)
28 }
29}
30
31pub fn and_drop<Stream, Context, ParserA, ParserB>(
33 parser_a: ParserA, parser_b: ParserB,
34) -> AndDrop<ParserA, ParserB>
35where
36 ParserA: Parse<Stream, Context>,
37 ParserB: Parse<Stream, Context>,
38{
39 AndDrop { parser_a, parser_b }
40}