mirror of
https://github.com/teloxide/teloxide.git
synced 2025-01-07 02:59:41 +01:00
Throttle: make comment up to date & add channel fn
This commit is contained in:
parent
72306c39d9
commit
80329f8a1e
1 changed files with 9 additions and 7 deletions
|
@ -13,7 +13,7 @@ use futures::{
|
|||
use never::Never;
|
||||
use tokio::sync::{
|
||||
mpsc,
|
||||
oneshot::{channel, Receiver, Sender},
|
||||
oneshot::{self, Receiver, Sender},
|
||||
};
|
||||
use vecrem::VecExt;
|
||||
|
||||
|
@ -129,7 +129,6 @@ impl Default for Limits {
|
|||
/// ```no_run (throttle fails to spawn task without tokio runtime)
|
||||
/// use teloxide_core::{adaptors::throttle::Limits, requests::RequesterExt, Bot};
|
||||
///
|
||||
/// # #[allow(deprecated)]
|
||||
/// let bot = Bot::new("TOKEN").throttle(Limits::default());
|
||||
///
|
||||
/// /* send many requests here */
|
||||
|
@ -149,7 +148,7 @@ impl Default for Limits {
|
|||
/// wrapper.
|
||||
pub struct Throttle<B> {
|
||||
bot: B,
|
||||
// Sender<Never> is used to pass the signal to unlock by closing the channel.
|
||||
// `RequestLock` allows to unlock requests (allowing them to be sent).
|
||||
queue: mpsc::Sender<(ChatIdHash, RequestLock)>,
|
||||
}
|
||||
|
||||
|
@ -533,8 +532,6 @@ where
|
|||
|
||||
fn send(self) -> Self::Send {
|
||||
let (tx, rx) = channel();
|
||||
let tx = RequestLock(tx);
|
||||
let rx = RequestWaiter(rx);
|
||||
|
||||
let chat_id = (self.chat_id)(self.payload_ref());
|
||||
let send = self.worker.send1((chat_id, tx));
|
||||
|
@ -549,8 +546,6 @@ where
|
|||
|
||||
fn send_ref(&self) -> Self::SendRef {
|
||||
let (tx, rx) = channel();
|
||||
let tx = RequestLock(tx);
|
||||
let rx = RequestWaiter(rx);
|
||||
|
||||
let chat_id = (self.chat_id)(self.payload_ref());
|
||||
let send = self.worker.clone().send1((chat_id, tx));
|
||||
|
@ -745,6 +740,13 @@ impl<R: Request> Future for ThrottlingSendRef<R> {
|
|||
}
|
||||
}
|
||||
|
||||
fn channel() -> (RequestLock, RequestWaiter) {
|
||||
let (tx, rx) = oneshot::channel();
|
||||
let tx = RequestLock(tx);
|
||||
let rx = RequestWaiter(rx);
|
||||
(tx, rx)
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
struct RequestLock(Sender<Never>);
|
||||
|
||||
|
|
Loading…
Reference in a new issue