added to_components

This commit is contained in:
Monica Moniot
2023-08-21 14:16:12 -04:00
parent 4dc0be1686
commit 2b7b5b15e6
3 changed files with 24 additions and 3 deletions
+8 -1
View File
@@ -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)) => {
+7
View File
@@ -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
View File
@@ -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) {