nym_bandwidth_controller/requests/
mod.rs1use crate::{
5 error::BandwidthControllerError, EcashTicketRequest, PreparedCredential,
6 PreparedCredentialMetadata,
7};
8
9pub use sender::BandwidthControllerRequestSender;
10use tokio::sync::oneshot;
11
12mod sender;
13
14#[derive(strum::Display)]
15pub enum BandwidthControllerRequest {
16 EcashTicket(ReturnSender<Option<PreparedCredential>>, EcashTicketRequest),
17
18 UpgradeModeToken(ReturnSender<Option<String>>),
19
20 AttemptRevertSpending(ReturnSender<bool>, PreparedCredentialMetadata),
21}
22
23#[derive(Debug)]
24pub struct ReturnSender<T> {
25 sender: oneshot::Sender<Result<T, BandwidthControllerError>>,
26}
27
28impl<T> ReturnSender<T>
29where
30 T: std::fmt::Debug,
31{
32 pub fn new() -> (Self, oneshot::Receiver<Result<T, BandwidthControllerError>>) {
33 let (sender, receiver) = oneshot::channel();
34 (Self { sender }, receiver)
35 }
36
37 pub fn send(self, response: Result<T, BandwidthControllerError>)
38 where
39 T: Send,
40 {
41 self.sender
42 .send(response)
43 .inspect_err(|err| {
44 tracing::error!("Failed to send response: {:#?}", err);
45 })
46 .ok();
47 }
48}