nym_bandwidth_controller/requests/
mod.rs1use crate::{
5 error::BandwidthControllerError, ticketbooks::AvailableTicketbooks, traits::CredentialFetcher,
6 CredentialPublicDataFetcher, EcashTicketRequest, PreparedCredential,
7 PreparedCredentialMetadata,
8};
9use nym_credentials_interface::TicketType;
10use std::sync::Arc;
11
12pub use sender::BandwidthControllerRequestSender;
13use tokio::sync::oneshot;
14
15mod sender;
16
17#[derive(strum::Display)]
18pub enum BandwidthControllerRequest {
19 EcashTicket(ReturnSender<Option<PreparedCredential>>, EcashTicketRequest),
20
21 UpgradeModeToken(ReturnSender<Option<String>>),
22
23 AttemptRevertSpending(ReturnSender<bool>, PreparedCredentialMetadata),
24
25 SetCredentialFetcher(ReturnSender<()>, Option<Arc<dyn CredentialFetcher>>),
27 SetPublicDataFetcher(
29 ReturnSender<()>,
30 Option<Arc<dyn CredentialPublicDataFetcher>>,
31 ),
32 Reset(ReturnSender<()>),
35 ClearEmergencyCredentials(ReturnSender<()>),
37 GetAvailableTicketbooks(ReturnSender<AvailableTicketbooks>),
39
40 RestockTicketbooks(ReturnSender<()>, Vec<TicketType>),
46
47 WaitForTicketbooks(ReturnSender<()>, Vec<TicketType>),
50}
51
52#[derive(Debug)]
53pub struct ReturnSender<T> {
54 sender: oneshot::Sender<Result<T, BandwidthControllerError>>,
55}
56
57impl<T> ReturnSender<T>
58where
59 T: std::fmt::Debug,
60{
61 pub fn new() -> (Self, oneshot::Receiver<Result<T, BandwidthControllerError>>) {
62 let (sender, receiver) = oneshot::channel();
63 (Self { sender }, receiver)
64 }
65
66 pub fn send(self, response: Result<T, BandwidthControllerError>)
67 where
68 T: Send,
69 {
70 self.sender
71 .send(response)
72 .inspect_err(|_| {
73 tracing::warn!("Failed to send response, receiver is gone already");
74 })
75 .ok();
76 }
77}