1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
use conn::Conn;
use conn::futures::Query;
use conn::futures::query_result::futures::DropResult;
use conn::futures::query_result::TextQueryResult;
use conn::futures::query_result::UnconsumedQueryResult;
use conn::transaction::Transaction;
use errors::*;
use lib_futures::AndThen;
use lib_futures::Future;
use lib_futures::Map;
use lib_futures::Poll;
type DropTextResultFn = fn(TextQueryResult) -> DropResult<TextQueryResult>;
type CleanConnFn = fn(Conn) -> Conn;
type DropTextResult = AndThen<Query, DropResult<TextQueryResult>, DropTextResultFn>;
pub struct Rollback {
fut: Map<DropTextResult, CleanConnFn>,
}
pub fn new(transaction: Transaction) -> Rollback {
let fut = transaction.conn
.query("ROLLBACK")
.and_then(UnconsumedQueryResult::drop_result as DropTextResultFn)
.map(Transaction::clean_conn as CleanConnFn);
Rollback { fut: fut }
}
impl Future for Rollback {
type Item = Conn;
type Error = Error;
fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
self.fut.poll()
}
}