pub trait Request {
type Response: DeserializeOwned + Send + Sync;
// Required methods
fn method(&self) -> Method;
fn path(&self) -> Result<String, Error>;
fn body(&self) -> Result<Option<String>, Error>;
fn query_args(&self) -> Result<Option<HashMap<String, String>>, Error>;
// Provided method
fn url(&self, base_url: &Url) -> Result<Url, Error> { ... }
}