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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
use crate::internal::{ base::*, functional::*, }; pub struct InternalChoice<Row> where Row : RowCon, { pub(crate) field : AppSum<Row, ReceiverF>, } impl<Row> Protocol for InternalChoice<Row> where Row : Send + 'static, Row : RowCon, { } impl<Row, A> RecApp<A> for InternalChoice<Row> where Row : RowCon, Row : RecApp<A>, Row::Applied : RowCon, { type Applied = InternalChoice<Row::Applied>; } impl<Row, A> SharedRecApp<A> for InternalChoice<Row> where Row : SumApp<ReceiverF>, Row : SharedRecApp<A>, <Row as SharedRecApp<A>>::Applied : SumApp<ReceiverF>, { type Applied = InternalChoice<<Row as SharedRecApp<A>>::Applied>; } impl<Row> ForwardChannel for InternalChoice<Row> where Row : RowCon, AppSum<Row, ReceiverF> : ForwardChannel, { fn forward_to( self, sender : OpaqueSender, receiver : OpaqueReceiver, ) { self.field.forward_to(sender, receiver) } fn forward_from( sender : OpaqueSender, receiver : OpaqueReceiver, ) -> Self { InternalChoice { field : <AppSum<Row, ReceiverF>>::forward_from(sender, receiver), } } }