1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use core::{
  future::Future,
  pin::Pin,
};

use crate::internal::base::{
  channel::*,
  protocol::*,
};

pub struct SharedSession<S>
where
  S: SharedProtocol,
{
  pub(crate) executor: Box<
    dyn FnOnce(
        Receiver<(SenderOnce<()>, SenderOnce<S>)>,
      ) -> Pin<Box<dyn Future<Output = ()> + Send>>
      + Send,
  >,
}

pub struct SharedChannel<S>
where
  S: SharedProtocol,
{
  pub(crate) endpoint: Sender<(SenderOnce<()>, SenderOnce<S>)>,
}

impl<S> Clone for SharedChannel<S>
where
  S: SharedProtocol,
{
  fn clone(&self) -> Self
  {
    SharedChannel {
      endpoint: self.endpoint.clone(),
    }
  }
}