pub trait Policy<Response> {
// Required method
fn decide(&mut self, response: &Response) -> Decision;
// Provided method
fn retry<Request, S>(
self,
stream: S,
request: Request,
) -> impl Future<Output = S::Response> + Send
where Response: Send,
Request: Clone + Send,
S: Stream<Request, Response = Response> + Send,
<S as Stream<Request>>::Function: Send,
Self: Sized + Send { ... }
}