eventsource_threaded/
eventsource.rs

1use super::event::Event;
2use crate::reqwest::{Client, Result};
3use crossbeam::channel::{unbounded, Receiver};
4use reqwest::header::HeaderMap;
5use std::thread;
6
7/// The type of the `Receiver` which sends back event from the EventSource
8/// client.
9pub type ReceiverSource = Receiver<Result<Event>>;
10
11pub struct EventSource {}
12
13impl EventSource {
14    /// Constructs a new EventSource client for the given URL on
15    /// a separate thread and sends all events through a channel
16    /// through a `Receiver`.
17    ///
18    pub fn new(url: reqwest::Url, headers: HeaderMap) -> ReceiverSource {
19        let (s, r) = unbounded();
20
21        thread::spawn(move || {
22            let client = Client::new(url, headers);
23            for event in client.into_iter() {
24                let _ = s.send(event);
25            }
26        });
27        r
28    }
29}