pub trait UpstreamOAuthProvider: Send + Sync {
// Required method
fn authenticated_http_client<'a>(
&'a self,
upstream: &'a UpstreamConfig,
subject: &'a str,
http_client: BodyCappedHttpClient,
) -> BoxFuture<'a, Result<UpstreamOAuthHttpClient, UpstreamOAuthError>>;
// Provided methods
fn evict_subject(&self, _upstream: &str, _subject: &str) { ... }
fn evict_upstream(&self, _upstream: &str) { ... }
}