use crate::*;
impl<'code, First> Token<'code> for Vec<First>
where
First: Token<'code>,
{
fn buffer(&self) -> Option<Buffer<'code>> {
let buffers = self
.iter()
.map(|b| <First as Token>::buffer(b));
buffers
.flatten()
.reduce(|acc, current| acc + current)
}
const NAME: &'static str = "Vec";
}
impl<'code, First> Lexer<'code> for Vec<First>
where
First: Lexer<'code>,
{
fn lex(
buffer: &mut Buffer<'code>,
) -> Result<Self, Error<'code>> {
let mut local_buffer = buffer.clone();
let mut result = Vec::new();
while let Ok(token) =
<First as Lexer>::lex(&mut local_buffer)
{
result.push(token);
}
*buffer = local_buffer;
Ok(result)
}
}