pub async fn run_adapter<D, I, O, E>(
    input: I,
    output: O,
    adapter_factory: impl FnOnce(UnboundedSender<Either<ProtocolMessage, <D as DebugAdapter>::Message>>) -> D
) -> Result<(), DebugAdapterError<E, <O as Sink<ProtocolMessage>>::Error, <D as DebugAdapter>::CustomError>>where
    D: DebugAdapter + Send + 'static,
    I: Stream<Item = Result<ProtocolMessage, E>> + Unpin + Send + 'static,
    O: Sink<ProtocolMessage> + Unpin + Send + 'static,
    E: Send + 'static,
    <O as Sink<ProtocolMessage>>::Error: Send + 'static,
    <D as DebugAdapter>::CustomError: Send + 'static,