pub async fn interruptible<T, E: From<InterruptError>>(
    rx: Receiver<()>,
    f: impl Future<Output = Result<T, E>> + Unpin
) -> Result<T, E>