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
use crate::internal::base::*;

pub struct ReceiveChannel<P, Q>(
  pub(crate) SenderOnce<(ReceiverOnce<P>, SenderOnce<Q>)>,
);

impl<P, Q> Protocol for ReceiveChannel<P, Q>
where
  P : Protocol,
  Q : Protocol,
{
}

impl<A, P, Q> RecApp<A> for ReceiveChannel<P, Q>
where
  P : RecApp<A>,
  Q : RecApp<A>,
{
  type Applied = ReceiveChannel<P::Applied, Q::Applied>;
}

impl<A, B, X> SharedRecApp<X> for ReceiveChannel<A, B>
where
  B : SharedRecApp<X>,
{
  type Applied = ReceiveChannel<A, B::Applied>;
}