|
1 | 1 | use futures::sync::mpsc;
|
2 |
| -use futures::Poll; |
3 | 2 | use postgres_protocol::message::backend::Message;
|
4 | 3 | use postgres_protocol::message::frontend;
|
5 |
| -use want::Giver; |
6 | 4 |
|
7 | 5 | use disconnected;
|
8 | 6 | use error::Error;
|
9 | 7 | use proto::connection::Request;
|
10 | 8 | use proto::prepare::PrepareFuture;
|
11 | 9 | use types::Type;
|
12 | 10 |
|
13 |
| -pub struct Client { |
| 11 | +pub struct PendingRequest { |
14 | 12 | sender: mpsc::UnboundedSender<Request>,
|
15 |
| - giver: Giver, |
| 13 | + messages: Vec<u8>, |
16 | 14 | }
|
17 | 15 |
|
18 |
| -impl Client { |
19 |
| - pub fn new(sender: mpsc::UnboundedSender<Request>, giver: Giver) -> Client { |
20 |
| - Client { sender, giver } |
| 16 | +impl PendingRequest { |
| 17 | + pub fn send(self) -> Result<mpsc::Receiver<Message>, Error> { |
| 18 | + let (sender, receiver) = mpsc::channel(0); |
| 19 | + self.sender |
| 20 | + .unbounded_send(Request { |
| 21 | + messages: self.messages, |
| 22 | + sender, |
| 23 | + }) |
| 24 | + .map(|_| receiver) |
| 25 | + .map_err(|_| disconnected()) |
21 | 26 | }
|
| 27 | +} |
| 28 | + |
| 29 | +pub struct Client { |
| 30 | + sender: mpsc::UnboundedSender<Request>, |
| 31 | +} |
22 | 32 |
|
23 |
| - pub fn poll_ready(&mut self) -> Poll<(), Error> { |
24 |
| - self.giver.poll_want().map_err(|_| disconnected()) |
| 33 | +impl Client { |
| 34 | + pub fn new(sender: mpsc::UnboundedSender<Request>) -> Client { |
| 35 | + Client { sender } |
25 | 36 | }
|
26 | 37 |
|
27 | 38 | pub fn prepare(&mut self, name: String, query: &str, param_types: &[Type]) -> PrepareFuture {
|
28 | 39 | let mut buf = vec![];
|
29 |
| - let receiver = frontend::parse(&name, query, param_types.iter().map(|t| t.oid()), &mut buf) |
| 40 | + let request = frontend::parse(&name, query, param_types.iter().map(|t| t.oid()), &mut buf) |
30 | 41 | .and_then(|()| frontend::describe(b'S', &name, &mut buf))
|
31 | 42 | .and_then(|()| Ok(frontend::sync(&mut buf)))
|
32 |
| - .map_err(Into::into) |
33 |
| - .and_then(|()| self.send(buf)); |
34 |
| - |
35 |
| - PrepareFuture::new(self.sender.clone(), receiver, name) |
36 |
| - } |
| 43 | + .map(|()| PendingRequest { |
| 44 | + sender: self.sender.clone(), |
| 45 | + messages: buf, |
| 46 | + }) |
| 47 | + .map_err(Into::into); |
37 | 48 |
|
38 |
| - fn send(&mut self, messages: Vec<u8>) -> Result<mpsc::Receiver<Message>, Error> { |
39 |
| - let (sender, receiver) = mpsc::channel(0); |
40 |
| - self.giver.give(); |
41 |
| - self.sender |
42 |
| - .unbounded_send(Request { messages, sender }) |
43 |
| - .map(|_| receiver) |
44 |
| - .map_err(|_| disconnected()) |
| 49 | + PrepareFuture::new(request, self.sender.clone(), name) |
45 | 50 | }
|
46 | 51 | }
|
0 commit comments