extern crate websocket; extern crate rustc_serialize; use message::Message; use self::websocket::Sender; use self::websocket::Receiver; use self::websocket::WebSocketStream; use self::websocket::DataFrame; use self::websocket::Client; use self::websocket::client::request::Url; pub struct PBClient { client: websocket::client::Client, websocket::client::receiver::Receiver> } impl PBClient { pub fn new(token: &str) -> PBClient { let wss_url = format!("wss://stream.pushbullet.com/websocket/{}", token); let url = Url::parse(wss_url.as_ref()).unwrap(); let request = Client::connect(url).unwrap(); let response = request.send().unwrap(); response.validate().unwrap(); PBClient { client: response.begin() } } fn process_message(message: Result) -> Option { let message = match message { Ok(m) => m, Err(e) => { println!("Error: {:?}", e); return None; } }; if let websocket::Message::Text(message) = message { Message::parse(message.as_ref()) } else { None } } pub fn messages<'a>(&'a mut self) -> Box + 'a> { let mut receiver = self.client.get_mut_reciever(); // there is a typo in the API Box::new(receiver.incoming_messages().filter_map(PBClient::process_message)) } }