#![warn(unused_import_braces)]
extern crate chrono;
extern crate hyper;
extern crate multipart;
extern crate oauthcli;
extern crate serde;
extern crate serde_json;
extern crate url;
use std::error::Error;
use std::fmt;
use std::io;
use models::TwitterResponse;
use models::ErrorResponse;
pub use clients::TwitterClient;
pub use conn::application_only_authenticator::ApplicationOnlyAuthenticator;
pub use conn::oauth_authenticator::OAuthAuthenticator;
pub mod clients;
pub mod conn;
pub mod models;
pub mod oauth;
pub mod oauth2;
#[derive(Debug)]
pub enum TwitterError {
ErrorResponse(ErrorResponse),
Url(url::ParseError),
InvalidRequest,
Io(io::Error),
Http(hyper::Error),
ParseResponse(Option<serde_json::Error>, TwitterResponse<()>),
}
impl Error for TwitterError {
fn description(&self) -> &str {
"an error occured in your request"
}
fn cause(&self) -> Option<&Error> {
match *self {
TwitterError::ErrorResponse(ref e) => Some(e),
TwitterError::Url(ref e) => Some(e),
TwitterError::InvalidRequest => None,
TwitterError::Io(ref e) => Some(e),
TwitterError::Http(ref e) => Some(e),
TwitterError::ParseResponse(Some(ref e), _) => Some(e),
TwitterError::ParseResponse(None, _) => None,
}
}
}
impl fmt::Display for TwitterError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
TwitterError::ErrorResponse(ref e) => fmt::Display::fmt(e, f),
TwitterError::Url(ref e) => fmt::Display::fmt(e, f),
TwitterError::InvalidRequest => f.write_str("invalid request"),
TwitterError::Io(ref e) => fmt::Display::fmt(e, f),
TwitterError::Http(ref e) => fmt::Display::fmt(e, f),
TwitterError::ParseResponse(_, ref res) => write!(f, "invalid response body: {}", res.raw_response),
}
}
}
impl From<ErrorResponse> for TwitterError {
fn from(err: ErrorResponse) -> TwitterError {
TwitterError::ErrorResponse(err)
}
}
impl From<hyper::Error> for TwitterError {
fn from(err: hyper::Error) -> TwitterError {
TwitterError::Http(err)
}
}
impl From<url::ParseError> for TwitterError {
fn from(err: url::ParseError) -> TwitterError {
TwitterError::Url(err)
}
}
impl From<io::Error> for TwitterError {
fn from(err: io::Error) -> TwitterError {
TwitterError::Io(err)
}
}
pub type TwitterResult<T> = Result<TwitterResponse<T>, TwitterError>;
fn parse_json<T: serde::de::Deserialize>(s: &str) -> serde_json::Result<T> {
serde_json::from_str(s)
}