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
use serde; use crate::internal::base::*; pub struct ReceiveValue<T, A>(pub(crate) SenderOnce<(Value<T>, SenderOnce<A>)>); impl<T, A> Protocol for ReceiveValue<T, A> where T : Send + 'static, A : Protocol, { } impl<X, T, A> RecApp<X> for ReceiveValue<T, A> where X : Send + 'static, T : Send + 'static, A : RecApp<A>, { type Applied = ReceiveValue<T, A::Applied>; } impl<T, A, X> SharedRecApp<X> for ReceiveValue<T, A> where T : Send + 'static, A : SharedRecApp<X>, { type Applied = ReceiveValue<T, A::Applied>; } impl<T, A> ForwardChannel for ReceiveValue<T, A> where A : ForwardChannel, T : Send + 'static, T : serde::Serialize + for<'de> serde::Deserialize<'de>, { fn forward_to( self, sender : OpaqueSender, receiver : OpaqueReceiver, ) { self.0.forward_to(sender, receiver) } fn forward_from( sender : OpaqueSender, receiver : OpaqueReceiver, ) -> Self { ReceiveValue(<SenderOnce<(Value<T>, SenderOnce<A>)>>::forward_from( sender, receiver, )) } }