use crate::{
Character,
TextInput
};
use pups_core::{
Input,
Mode,
ParseResult::{
self,
Failure,
Success,
},
Parser
};
pub struct Newline;
impl<C, I> Parser<I> for Newline
where
C: Character,
I: Input<Item = C> + TextInput,
{
type Output = ();
type Error = ();
type Message = ();
fn apply<_Mode: Mode>(
&self,
input: &mut I
) -> ParseResult<(), (), (), _Mode> {
let cursor: usize = input.cursor();
if let Some (character) = input.next() && character.is_newline() {
Success (_Mode::convert_output(()), _Mode::new_message_container())
} else {
input.set_cursor(cursor);
Failure (_Mode::convert_error(()), _Mode::new_message_container())
}
}
}