Apparently manually implementing an enum helps.
pub struct DropItem<'a> {
bang: &'a mut Bang,
}
pub enum WeightMessages<'a> {
DropItem(DropItem<'a>),
TakeItem(TakeItem),
}
This works, but I have to write everything by hand, so I guess this is something the lib could support in future. I'll file a ticket...