pub async fn retry_determinate<R, F, WorkFn>(
    metrics: &RetryMetrics,
    work_fn: WorkFn
) -> Result<R, Indeterminate> where
    F: Future<Output = Result<R, ExternalError>>,
    WorkFn: FnMut() -> F,