pub fn session_channel_dyn<P, R>() -> ChanDynPair<P, R> {
    let (tx1, rx1) = unbounded_channel();
    let (tx2, rx2) = unbounded_channel();

    let c = Chan::new(tx1, rx2);

    (c, (tx2, rx1))
}
/// Similar to `session_channel`; create a typed channel for a protocol `P`,
/// but instead of creating a channel for its dual, return the raw sender
/// and receiver that can be used to communicate with the channel created.
///
/// These can be used in multiplexers to dispatch messages to/from the network.
Similar to `session_channel`; create a typed channel for a protocol `P`,
but instead of creating a channel for its dual, return the raw sender
and receiver that can be used to communicate with the channel created.

These can be used in multiplexers to dispatch messages to/from the network.
Similar to ` session_channel ` ; create a typed channel for a protocol ` P ` but instead of creating a channel for its dual return the raw sender and receiver that can be used to communicate with the channel created . These can be used in multiplexers to dispatch messages to / from the network .
pub fn session_channel_dyn<P, R>() -> ChanDynPair<P, R> {
    let (tx1, rx1) = unbounded_channel();
    let (tx2, rx2) = unbounded_channel();
    let c = Chan::new(tx1, rx2);
    (c, (tx2, rx1))
}
pub fn session_channel_dyn < P , R > ( ) -> ChanDynPair < P , R > { let ( tx1 , rx1 ) = unbounded_channel ( ) ; let ( tx2 , rx2 ) = unbounded_channel ( ) ; let c = Chan :: new ( tx1 , rx2 ) ; ( c , ( tx2 , rx1 ) ) }
Similar to `session_channel`; create a typed channel for a protocol `P`,
but instead of creating a channel for its dual, return the raw sender
and receiver that can be used to communicate with the channel created.
Similar to ` session_channel ` ; create a typed channel for a protocol ` P ` but instead of creating a channel for its dual return the raw sender and receiver that can be used to communicate with the channel created .