extern crate hyper_pkg as hyper;
use std::error::Error;
use std::io;
use std::time::Duration;
use futures::prelude::*;
use twitter_stream::Token;
const TIMEOUT: Duration = Duration::from_secs(90);
#[tokio::main]
async fn main() {
let token = Token::from_parts(
"consumer_key",
"consumer_secret",
"access_key",
"access_secret",
);
let mut conn = hyper::client::HttpConnector::new();
conn.set_connect_timeout(Some(TIMEOUT));
let mut conn = hyper_timeout::TimeoutConnector::new(conn);
conn.set_read_timeout(Some(TIMEOUT));
let tls = native_tls::TlsConnector::new().unwrap();
let conn = hyper_tls::HttpsConnector::from((conn, tls.into()));
let client = hyper::Client::builder().build::<_, hyper::Body>(conn);
let result = twitter_stream::Builder::new(token)
.track("@Twitter")
.listen_with_client(client)
.try_flatten_stream()
.try_for_each(|json| {
println!("{}", json);
future::ok(())
})
.await;
match result {
Ok(()) => {}
Err(twitter_stream::Error::Service(e)) => {
if let Some(e) = e.source() {
if let Some(e) = e.downcast_ref::<io::Error>() {
if e.kind() == io::ErrorKind::TimedOut {
eprintln!("timed out");
return;
}
}
}
eprintln!("error: {:?}", e);
}
Err(e) => {
eprintln!("error: {:?}", e);
}
}
}