use bytes::Bytes; use http::StatusCode; #[cfg(feature = "requests")] /// Auto-generated api requests definitions. pub mod models; /// A generic api request description. #[derive(Default)] pub struct ApiRequest { /// The relative path relative to "". pub path: String, /// All url parameters. pub parameters: Vec<(&'static str, String)>, } impl ApiRequest { pub fn url(&self) -> String { let mut url = format!("https://api.torn.com/v2{}?", self.path); let mut first = true; for (name, value) in &self.parameters { if first { first = false; } else { url.push('&'); } url.push_str(&format!("{name}={value}")); } url } } /// A generic api response. pub struct ApiResponse { /// The response body as binary blob. pub body: Option, /// The HTTP response code. pub status: StatusCode, } /// Trait for typed api requests pub trait IntoRequest: Send { /// If used in bulk request, the discriminant is used to distinguish the responses. For /// endpoints which have no path parameters this will be `()`. type Discriminant: Send + 'static; /// The response type which shall be deserialised. type Response: for<'de> serde::Deserialize<'de> + Send; fn into_request(self) -> (Self::Discriminant, ApiRequest); } /* #[cfg(feature = "requests")] pub(crate) struct WrappedApiRequest where R: IntoRequest, { discriminant: R::Discriminant, request: ApiRequest, } #[cfg(feature = "requests")] impl IntoRequest for WrappedApiRequest where R: IntoRequest, { type Discriminant = R::Discriminant; type Response = R::Response; fn into_request(self) -> (Self::Discriminant, ApiRequest) { (self.discriminant, self.request) } } */ #[cfg(test)] mod test {}