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
47
48
49
50
51
52
53
54
use crate::{
api::error::Error,
frame::{Frame, Select, SelectOk},
};
use super::{Channel, Result};
#[derive(Debug, Clone, Default)]
pub struct ConfirmSelectArguments {
pub no_wait: bool,
}
impl ConfirmSelectArguments {
pub fn new(no_wait: bool) -> Self {
Self { no_wait }
}
}
impl Channel {
pub async fn confirm_select(&self, args: ConfirmSelectArguments) -> Result<()> {
let select = Select::new(args.no_wait);
if args.no_wait {
self.shared
.outgoing_tx
.send((self.shared.channel_id, select.into_frame()))
.await?;
Ok(())
} else {
let responder_rx = self.register_responder(SelectOk::header()).await?;
let _method = synchronous_request!(
self.shared.outgoing_tx,
(self.shared.channel_id, select.into_frame()),
responder_rx,
Frame::SelectOk,
Error::ChannelUseError
)?;
Ok(())
}
}
}