mirror of
https://github.com/zerotier/sequential-exchange.git
synced 2026-05-22 16:28:28 -07:00
added to_components
This commit is contained in:
@@ -26,6 +26,13 @@ impl<'a, TL: TransportLayer<SendData>, SendData, RecvData, const CAP: usize> Rep
|
||||
packet_data(seq_no, self.reply_no),
|
||||
);
|
||||
}
|
||||
|
||||
pub fn to_components(mut self) -> (TL, SeqNo, bool) {
|
||||
(self.app.take().unwrap(), self.reply_no, self.is_holding_lock)
|
||||
}
|
||||
pub unsafe fn from_components(seq: &'a mut SeqEx<SendData, RecvData, CAP>, app: TL, reply_no: SeqNo, is_holding_lock: bool) -> Self {
|
||||
ReplyGuard { seq, app: Some(app), reply_no, is_holding_lock }
|
||||
}
|
||||
}
|
||||
impl<'a, TL: TransportLayer<SendData>, SendData, RecvData, const CAP: usize> Drop for ReplyGuard<'a, TL, SendData, RecvData, CAP> {
|
||||
fn drop(&mut self) {
|
||||
@@ -179,7 +186,7 @@ impl<SendData, RecvData, const CAP: usize> SeqEx<SendData, RecvData, CAP> {
|
||||
&mut self,
|
||||
mut app: impl TransportLayer<SendData>,
|
||||
packet: Packet<P>,
|
||||
) -> Result<crate::seq_queue::RecvOkRaw<SendData, P>, RecvError> {
|
||||
) -> Result<RecvOkRaw<SendData, P>, RecvError> {
|
||||
match self.receive_raw_and_direct(packet) {
|
||||
Ok(a) => Ok(a),
|
||||
Err(DirectRecvError::DroppedDuplicateResendAck(reply_no)) => {
|
||||
|
||||
@@ -43,6 +43,13 @@ impl<'a, TL: TransportLayer<SendData>, SendData, RecvData, const CAP: usize> Rep
|
||||
pub fn reply(self, seq_cst: bool, packet_data: SendData) {
|
||||
self.reply_with(seq_cst, |_, _| packet_data)
|
||||
}
|
||||
|
||||
pub fn to_components(mut self) -> (TL, SeqNo, bool) {
|
||||
(self.app.take().unwrap(), self.reply_no, self.is_holding_lock)
|
||||
}
|
||||
pub unsafe fn from_components(seq: &'a SeqExSync<SendData, RecvData, CAP>, app: TL, reply_no: SeqNo, is_holding_lock: bool) -> Self {
|
||||
ReplyGuard { seq, app: Some(app), reply_no, is_holding_lock }
|
||||
}
|
||||
}
|
||||
impl<'a, TL: TransportLayer<SendData>, SendData, RecvData, const CAP: usize> Drop for ReplyGuard<'a, TL, SendData, RecvData, CAP> {
|
||||
fn drop(&mut self) {
|
||||
|
||||
+9
-2
@@ -22,8 +22,8 @@ pub struct ReplyGuard<'a, TL: TokioLayer<Payload = Payload>, Payload, const CAP:
|
||||
is_holding_lock: bool,
|
||||
}
|
||||
impl<'a, TL: TokioLayer<Payload = Payload>, Payload, const CAP: usize> ReplyGuard<'a, TL, Payload, CAP> {
|
||||
fn new(seq: &'a SeqExTokio<Payload, CAP>, app: TL, reply_no: SeqNo, seq_cst: bool) -> Self {
|
||||
ReplyGuard { seq, app: Some(app), reply_no, is_holding_lock: seq_cst }
|
||||
fn new(seq: &'a SeqExTokio<Payload, CAP>, app: TL, reply_no: SeqNo, is_holding_lock: bool) -> Self {
|
||||
ReplyGuard { seq, app: Some(app), reply_no, is_holding_lock }
|
||||
}
|
||||
fn try_reply_with_inner(&mut self, app: TL, seq_cst: bool, packet_data: impl FnOnce(SeqNo, SeqNo) -> SendData<Payload>) -> Option<i64> {
|
||||
let mut seq = self.seq.seq_ex.lock().unwrap();
|
||||
@@ -64,6 +64,13 @@ impl<'a, TL: TokioLayer<Payload = Payload>, Payload, const CAP: usize> ReplyGuar
|
||||
let (reply_no, seq_cst, recv_data) = rx.await.map_err(|_| AsyncError::SeqExClosed)?.ok_or(AsyncError::ReceivedAck)?;
|
||||
Ok((Self::new(self.seq, app, reply_no, seq_cst), recv_data))
|
||||
}
|
||||
|
||||
pub fn to_components(mut self) -> (TL, SeqNo, bool) {
|
||||
(self.app.take().unwrap(), self.reply_no, self.is_holding_lock)
|
||||
}
|
||||
pub unsafe fn from_components(seq: &'a SeqExTokio<Payload, CAP>, app: TL, reply_no: SeqNo, is_holding_lock: bool) -> Self {
|
||||
Self::new(seq, app, reply_no, is_holding_lock)
|
||||
}
|
||||
}
|
||||
impl<'a, TL: TokioLayer<Payload = Payload>, Payload, const CAP: usize> Drop for ReplyGuard<'a, TL, Payload, CAP> {
|
||||
fn drop(&mut self) {
|
||||
|
||||
Reference in New Issue
Block a user