mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-09 04:39:24 +00:00
Remove tokio dependency from serai-coordinator-p2p
Re-implements tokio::mpsc::oneshot with a thin wrapper around async-channel. Also replaces futures-util with futures-lite.
This commit is contained in:
@@ -3,7 +3,7 @@ use std::time::{Duration, SystemTime};
|
||||
|
||||
use serai_client::validator_sets::primitives::ValidatorSet;
|
||||
|
||||
use futures_util::FutureExt;
|
||||
use futures_lite::FutureExt;
|
||||
|
||||
use tributary::{ReadWrite, TransactionTrait, Block, Tributary, TributaryReader};
|
||||
|
||||
|
||||
@@ -8,10 +8,11 @@ use borsh::{BorshSerialize, BorshDeserialize};
|
||||
|
||||
use serai_client::{primitives::NetworkId, validator_sets::primitives::ValidatorSet};
|
||||
|
||||
use tokio::sync::oneshot;
|
||||
|
||||
use serai_cosign::SignedCosign;
|
||||
|
||||
/// A oneshot channel.
|
||||
pub mod oneshot;
|
||||
|
||||
/// The heartbeat task, effecting sync of Tributaries
|
||||
pub mod heartbeat;
|
||||
|
||||
|
||||
35
coordinator/p2p/src/oneshot.rs
Normal file
35
coordinator/p2p/src/oneshot.rs
Normal file
@@ -0,0 +1,35 @@
|
||||
use core::{
|
||||
pin::Pin,
|
||||
task::{Poll, Context},
|
||||
future::Future,
|
||||
};
|
||||
|
||||
pub use async_channel::{SendError, RecvError};
|
||||
|
||||
/// The sender for a oneshot channel.
|
||||
pub struct Sender<T: Send>(async_channel::Sender<T>);
|
||||
impl<T: Send> Sender<T> {
|
||||
/// Send a value down the channel.
|
||||
///
|
||||
/// Returns an error if the channel's receiver was dropped.
|
||||
pub fn send(self, msg: T) -> Result<(), SendError<T>> {
|
||||
self.0.send_blocking(msg)
|
||||
}
|
||||
}
|
||||
|
||||
/// The receiver for a oneshot channel.
|
||||
pub struct Receiver<T: Send>(async_channel::Receiver<T>);
|
||||
impl<T: Send> Future for Receiver<T> {
|
||||
type Output = Result<T, RecvError>;
|
||||
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
|
||||
let recv = self.0.recv();
|
||||
futures_lite::pin!(recv);
|
||||
recv.poll(cx)
|
||||
}
|
||||
}
|
||||
|
||||
/// Create a new oneshot channel.
|
||||
pub fn channel<T: Send>() -> (Sender<T>, Receiver<T>) {
|
||||
let (send, recv) = async_channel::bounded(1);
|
||||
(Sender(send), Receiver(recv))
|
||||
}
|
||||
Reference in New Issue
Block a user