Skip to content
This repository was archived by the owner on Dec 26, 2024. It is now read-only.

Commit 4e3c1bd

Browse files
authored
feat(network): add implementation from SqmrClientPayload to SqmrClientPayloadForNetwork (#2232)
1 parent fa2d312 commit 4e3c1bd

File tree

1 file changed

+20
-13
lines changed
  • crates/papyrus_network/src/network_manager

1 file changed

+20
-13
lines changed

crates/papyrus_network/src/network_manager/mod.rs

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -613,7 +613,7 @@ pub fn dummy_report_sender() -> ReportSender {
613613
Box::new(|| {})
614614
}
615615

616-
pub type GenericSender<T> = Box<dyn Sink<T, Error = SendError>>;
616+
pub type GenericSender<T> = Box<dyn Sink<T, Error = SendError> + Unpin>;
617617
// Box<S> implements Stream only if S: Stream + Unpin
618618
pub type GenericReceiver<T> = Box<dyn Stream<Item = T> + Unpin>;
619619

@@ -631,7 +631,14 @@ pub struct SqmrServerPayload<Query, Response: TryFrom<Bytes>> {
631631
#[allow(dead_code)]
632632
struct SqmrClientPayloadForNetwork {
633633
pub query: Bytes,
634-
pub report_receiver: BoxFuture<'static, SessionId>,
634+
pub report_receiver: oneshot::Receiver<()>,
635+
pub responses_sender: GenericSender<Bytes>,
636+
}
637+
638+
#[allow(dead_code)]
639+
struct SqmrServerPayloadForNetwork {
640+
pub query: Bytes,
641+
pub report_sender: oneshot::Sender<()>,
635642
pub responses_sender: GenericSender<Bytes>,
636643
}
637644

@@ -645,11 +652,18 @@ pub type SqmrServerReceiver<Query, Response> = GenericReceiver<SqmrServerPayload
645652
#[allow(dead_code)]
646653
type SqmrServerSender = GenericSender<SqmrServerPayloadForNetwork>;
647654

648-
impl<Query, Response: TryFrom<Bytes>> From<SqmrClientPayload<Query, Response>>
649-
for SqmrClientPayloadForNetwork
655+
impl<Query, Response> From<SqmrClientPayload<Query, Response>> for SqmrClientPayloadForNetwork
656+
where
657+
Bytes: From<Query>,
658+
Response: TryFrom<Bytes> + 'static,
659+
<Response as TryFrom<Bytes>>::Error: 'static,
650660
{
651-
fn from(_query: SqmrClientPayload<Query, Response>) -> Self {
652-
unimplemented!()
661+
fn from(payload: SqmrClientPayload<Query, Response>) -> Self {
662+
let SqmrClientPayload { query, report_receiver, responses_sender } = payload;
663+
let query = Bytes::from(query);
664+
let responses_sender =
665+
Box::new(responses_sender.with(|response| ready(Ok(Response::try_from(response)))));
666+
Self { query, report_receiver, responses_sender }
653667
}
654668
}
655669

@@ -661,13 +675,6 @@ impl<Query, Response: TryFrom<Bytes>> From<SqmrServerPayloadForNetwork>
661675
}
662676
}
663677

664-
#[allow(dead_code)]
665-
struct SqmrServerPayloadForNetwork {
666-
pub query: Bytes,
667-
pub report_sender: oneshot::Sender<()>,
668-
pub responses_sender: GenericSender<Bytes>,
669-
}
670-
671678
// TODO(shahak): Create a custom struct if Box dyn becomes an overhead.
672679
// TODO(eitan): Change type to oneshot::Sender<()>
673680
pub type ReportSender = Box<dyn FnOnce() + Send>;

0 commit comments

Comments
 (0)