use crate::prelude::*;
pub struct CollectUntil<Op: ConcreteParser>(Op);
impl<Op> ConcreteSubparser<Op> for CollectUntil<Op>
where
Op: ConcreteParser
{
fn subparse
(value: Op::Input, parser: &mut Parser) -> Parser
where
Op: concrete_parser::ContainerCp
{
let op = Op::new(value);
let mut tokens: Tokens = Tokens::new_empty();
loop {
if let Some(_token) = op.peek_for_token(parser) {
break;
} else {
if let Some(token) = parser.next() {
tokens.add_token(token);
} else {
break;
}
}
}
Parser::new(tokens)
}
}