pub trait OfferExt<P: HasDual, E> {
type C: RawChan;
type OfferChan;
type OfferFuture: Future<Output = Result<Self::OfferChan, Error>> + 'static
where Self: 'static;
// Required method
fn offer(self) -> Self::OfferFuture;
}