pub trait ApiClient {
    type Error: Error;
    // Required method
    fn request<'life0, 'async_trait>(
        &'life0 self,
        url: String
    ) -> Pin<Box<dyn Future<Output = Result<Value, Self::Error>> + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    // Provided method
    fn torn_api<S>(&self, key: S) -> ApiProvider<'_, Self, DirectExecutor<Self>>
       where Self: Sized,
             S: ToString { ... }
}