pub trait Adapter<T> { type Result: Sized; fn process<F>(&self, f: F) -> Self::Result where F: Future<Output = Result<T, CBError>> + Send + 'static; }