use conn::futures::new_raw_query_result::NewRawQueryResult;
use conn::futures::query_result::TextQueryResult;
use conn::futures::query_result::TextResult;
use conn::futures::write_packet::WritePacket;
use errors::*;
use lib_futures::Async;
use lib_futures::Async::Ready;
use lib_futures::Future;
use lib_futures::Poll;
steps! {
Query {
WriteCommandData(WritePacket),
HandleResultSet(NewRawQueryResult<TextResult>),
}
}
pub struct Query {
step: Step,
}
pub fn new_new(write_packet: WritePacket) -> Query {
Query { step: Step::WriteCommandData(write_packet) }
}
impl Future for Query {
type Item = TextQueryResult;
type Error = Error;
fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
match try_ready!(self.either_poll()) {
Out::WriteCommandData(conn) => {
self.step = Step::HandleResultSet(conn.handle_result_set(None));
self.poll()
},
Out::HandleResultSet(raw_query_result) => Ok(Ready(raw_query_result.into())),
}
}
}