Trait twitch_api::helix::request::RequestPut
source · [−]pub trait RequestPut: Request {
type Body: HelixRequestBody;
fn parse_inner_response(
request: Option<Self>,
uri: &Uri,
response: &str,
status: StatusCode
) -> Result<Response<Self, <Self as Request>::Response>, HelixRequestPutError>
where
Self: Sized;
fn create_request(
&self,
body: Self::Body,
token: &str,
client_id: &str
) -> Result<Request<Bytes>, CreateRequestError> { ... }
fn parse_response<B: Into<Bytes>>(
request: Option<Self>,
uri: &Uri,
response: Response<B>
) -> Result<Response<Self, <Self as Request>::Response>, HelixRequestPutError>
where
Self: Sized,
{ ... }
}
Available on crate feature
helix
only.Expand description
Helix endpoint PUTs information
Required Associated Types
sourcetype Body: HelixRequestBody
type Body: HelixRequestBody
Body parameters
Required Methods
sourcefn parse_inner_response(
request: Option<Self>,
uri: &Uri,
response: &str,
status: StatusCode
) -> Result<Response<Self, <Self as Request>::Response>, HelixRequestPutError>where
Self: Sized,
fn parse_inner_response(
request: Option<Self>,
uri: &Uri,
response: &str,
status: StatusCode
) -> Result<Response<Self, <Self as Request>::Response>, HelixRequestPutError>where
Self: Sized,
Parse a response string into the response.
Provided Methods
sourcefn create_request(
&self,
body: Self::Body,
token: &str,
client_id: &str
) -> Result<Request<Bytes>, CreateRequestError>
fn create_request(
&self,
body: Self::Body,
token: &str,
client_id: &str
) -> Result<Request<Bytes>, CreateRequestError>
Create a http::Request
from this Request
in your client
Examples found in repository?
src/helix/client.rs (line 227)
214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
pub async fn req_put<R, B, D, T>(
&'a self,
request: R,
body: B,
token: &T,
) -> Result<Response<R, D>, ClientRequestError<<C as crate::HttpClient<'a>>::Error>>
where
R: Request<Response = D> + Request + RequestPut<Body = B>,
B: HelixRequestBody,
D: serde::de::DeserializeOwned + PartialEq,
T: TwitchToken + ?Sized,
{
let req =
request.create_request(body, token.token().secret(), token.client_id().as_str())?;
let uri = req.uri().clone();
let response = self
.client
.req(req)
.await
.map_err(ClientRequestError::RequestError)?
.into_response_vec()
.await?;
<R>::parse_response(Some(request), &uri, response).map_err(Into::into)
}
More examples
src/helix/client/custom.rs (line 321)
305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368
pub async fn req_put_custom<'d, R, B, D, T, F>(
&'a self,
request: R,
body: B,
token: &T,
function: F,
) -> Result<CustomResponse<'d, R, D>, ClientRequestError<<C as crate::HttpClient<'a>>::Error>>
where
R: Request + RequestPut + RequestPut<Body = B>,
B: HelixRequestBody,
D: serde::de::Deserialize<'d> + 'd,
T: TwitchToken + ?Sized,
C: Send,
F: Fn(&R, &http::Uri, &str, http::StatusCode) -> Result<(), HelixRequestDeleteError>,
{
let req =
request.create_request(body, token.token().secret(), token.client_id().as_str())?;
let uri = req.uri().clone();
let response = self
.client
.req(req)
.await
.map_err(ClientRequestError::RequestError)?
.into_response_bytes()
.await?;
{
let uri = &uri;
let text = std::str::from_utf8(response.body()).map_err(|e| {
HelixRequestPutError::Utf8Error(response.body().clone(), e, uri.clone())
})?;
if let Ok(HelixRequestError {
error,
status,
message,
}) = parse_json::<HelixRequestError>(text, false)
{
return Err(HelixRequestPutError::Error {
error,
status: status.try_into().unwrap_or(http::StatusCode::BAD_REQUEST),
message,
uri: uri.clone(),
body: response.body().clone(),
}
.into());
}
function(&request, uri, text, response.status())?;
let response: CustomInnerResponse<'_> = crate::parse_json(text, true).map_err(|e| {
HelixRequestPatchError::DeserializeError(
text.to_owned(),
e,
uri.clone(),
response.status(),
)
})?;
Ok(CustomResponse {
pagination: response.pagination.cursor,
request: Some(request),
total: response.total,
other: response.other,
raw_data: response.data.to_owned(),
pd: <_>::default(),
})
}
}
sourcefn parse_response<B: Into<Bytes>>(
request: Option<Self>,
uri: &Uri,
response: Response<B>
) -> Result<Response<Self, <Self as Request>::Response>, HelixRequestPutError>where
Self: Sized,
fn parse_response<B: Into<Bytes>>(
request: Option<Self>,
uri: &Uri,
response: Response<B>
) -> Result<Response<Self, <Self as Request>::Response>, HelixRequestPutError>where
Self: Sized,
Examples found in repository?
src/helix/client.rs (line 236)
214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
pub async fn req_put<R, B, D, T>(
&'a self,
request: R,
body: B,
token: &T,
) -> Result<Response<R, D>, ClientRequestError<<C as crate::HttpClient<'a>>::Error>>
where
R: Request<Response = D> + Request + RequestPut<Body = B>,
B: HelixRequestBody,
D: serde::de::DeserializeOwned + PartialEq,
T: TwitchToken + ?Sized,
{
let req =
request.create_request(body, token.token().secret(), token.client_id().as_str())?;
let uri = req.uri().clone();
let response = self
.client
.req(req)
.await
.map_err(ClientRequestError::RequestError)?
.into_response_vec()
.await?;
<R>::parse_response(Some(request), &uri, response).map_err(Into::into)
}