use super::*;
use futures::*;
use hyper;
use hyper_rustls;
use std::marker::PhantomData;
pub type RequestMessages = Request<QueryMessages>;
pub type RequestView = Request<QueryView>;
pub type RequestSend = Request<QuerySend>;
pub struct Request<T> {
future : Box<Future<Item=(),Error=MessageBirdError>>,
phantom : PhantomData<T>,
}
impl<T> Request<T> {
pub fn new(query : Query<T>) -> Self {
let https = hyper_rustls::HttpsConnector::new(4);
let client : hyper::Client<_, hyper::Body> = hyper::Client::builder().build(https);
let future = Box::new(client.get(query.deref().clone()).and_then(|res| {
println!("status: {}", res.status());
res.into_body().concat2()
})
.and_then(|body| {
let s = ::std::str::from_utf8(&body)
.expect("http bin sends utf-8 JSON");
println!("body: {}", s);
Ok(())
})
.map_err(|err| {
println!("error: {}", err);
MessageBirdError::ServiceError{code: 666}
}));
Self {
future,
phantom : PhantomData,
}
}
}
impl<T> Future for Request<T> {
type Item = ();
type Error = MessageBirdError;
fn poll(&mut self) -> Result<Async<Self::Item>,Self::Error> {
self.future.poll()
}
}