use meslin::{
mpmc, priority, DynFromInto, DynSender, DynSendsExt, From, MappedWithSender, SendsExt, TryInto,
WithValueSender,
};
#[derive(Debug, From, TryInto, DynFromInto)]
enum P1 {
A(i32),
B(i64),
C(i128),
}
#[derive(Debug, From, TryInto, DynFromInto)]
enum P2 {
A(i16),
B(i32),
C(i64),
}
#[tokio::main]
async fn main() {
let (sender1, _receiver) = mpmc::unbounded::<P1>(); let (sender2, _receiver) = priority::unbounded::<P2, u32>();
sender1.send::<i32>(8).await.unwrap(); sender2.send::<i32>(8).await.unwrap(); sender2.send_with::<i32>(8, 15).await.unwrap();
let senders: Vec<DynSender![i32, i64]> = vec![
sender1.into_dyn(),
sender2.clone().with(15).into_dyn(),
sender2.map_with(|_| 15, |_| ()).into_dyn(),
];
senders[0].send::<i32>(8).await.unwrap();
senders[1].send::<i64>(8).await.unwrap();
senders[2].send::<i32>(8).await.unwrap();
let _sender1 = senders[0].downcast_ref::<mpmc::Sender<P1>>().unwrap();
let _sender2 = senders[1]
.downcast_ref::<WithValueSender<priority::Sender<P2, u32>>>()
.unwrap();
let _sender3 = senders[2]
.downcast_ref::<MappedWithSender<priority::Sender<P2, u32>, ()>>()
.unwrap();
}