Skip to main content

nym_bandwidth_controller/requests/
mod.rs

1// Copyright 2026 - Nym Technologies SA <contact@nymtech.net>
2// SPDX-License-Identifier: Apache-2.0
3
4use 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}