reventsource 0.0.2

Rust eventsource implementation.
Documentation
use crate::event::{Event, EventState};
use crate::parser::parse_line;
use std::error::Error;
use std::io::{BufRead, BufReader, Lines, Read};
use std::iter::Enumerate;

pub struct Consumer<T>
where
    T: Read,
{
    response: Enumerate<Lines<BufReader<T>>>
}

impl<'a, T> Consumer<T>
where
    T: Read,
{
    pub fn new(response: T) -> Self {
        Consumer { response: BufReader::new(response).lines().enumerate() }
    }
}

impl<T> Iterator for Consumer<T>
where
    T: Read,
{
    type Item = Result<Event, Box<dyn Error>>;

    fn next(&mut self) -> Option<Result<Event, Box<dyn Error>>> {
        let mut event = Event::new();

        for (_num, line_res) in self.response.by_ref() {
            let line = line_res.unwrap();
            match parse_line(&line, &mut event) {
                EventState::Pending => {}
                EventState::Ready => {
                    return Some(Ok(event));
                }
            }
        }

        Some(Ok(event))
    }
}