ferrite_session/internal/protocol/shared/
shared_to_linear.rs1use core::{
2 future::Future,
3 pin::Pin,
4};
5use std::marker::PhantomData;
6
7use super::linear_to_shared::LinearToShared;
8use crate::internal::base::*;
9
10pub struct SharedToLinear<F>(PhantomData<F>);
11
12impl<F> SealedProtocol for SharedToLinear<LinearToShared<F>> {}
13
14impl<F> Protocol for SharedToLinear<LinearToShared<F>>
15where
16 F: Send + 'static,
17 F: SharedRecApp<SharedToLinear<LinearToShared<F>>>,
18{
19 type ClientEndpoint = SenderOnce<()>;
20 type ProviderEndpoint = ReceiverOnce<()>;
21
22 fn create_endpoints() -> (Self::ProviderEndpoint, Self::ClientEndpoint)
23 {
24 let (sender, receiver) = once_channel();
25 (receiver, sender)
26 }
27
28 fn forward(
29 client_end: Self::ClientEndpoint,
30 provider_end: Self::ProviderEndpoint,
31 ) -> Pin<Box<dyn Future<Output = ()> + Send + 'static>>
32 {
33 Box::pin(async {
34 let payload = provider_end.recv().await.unwrap();
35 client_end.send(payload).unwrap();
36 })
37 }
38}