use super::*;
use helix::RequestPatch;
#[derive(PartialEq, typed_builder::TypedBuilder, Deserialize, Serialize, Clone, Debug)]
#[non_exhaustive]
pub struct UpdateChannelStreamScheduleRequest {
#[builder(setter(into))]
pub broadcaster_id: types::UserId,
#[builder(default, setter(into))]
pub is_vacation_enabled: Option<bool>,
#[builder(default, setter(into))]
pub vacation_start_time: Option<types::Timestamp>,
#[builder(default, setter(into))]
pub vacation_end_time: Option<types::Timestamp>,
#[builder(default, setter(into))]
pub timezone: Option<String>,
}
#[derive(PartialEq, Deserialize, Serialize, Debug, Clone)]
#[cfg_attr(feature = "deny_unknown_fields", serde(deny_unknown_fields))]
#[non_exhaustive]
pub enum UpdateChannelStreamSchedule {
Success,
}
impl Request for UpdateChannelStreamScheduleRequest {
type Response = UpdateChannelStreamSchedule;
const PATH: &'static str = "schedule/settings";
#[cfg(feature = "twitch_oauth2")]
const SCOPE: &'static [twitch_oauth2::Scope] = &[twitch_oauth2::Scope::ChannelManageSchedule];
}
impl RequestPatch for UpdateChannelStreamScheduleRequest {
type Body = helix::EmptyBody;
fn parse_inner_response(
request: Option<Self>,
uri: &http::Uri,
response: &str,
status: http::StatusCode,
) -> Result<helix::Response<Self, Self::Response>, helix::HelixRequestPatchError>
where
Self: Sized,
{
let resp = match status {
http::StatusCode::OK | http::StatusCode::NO_CONTENT => {
UpdateChannelStreamSchedule::Success
}
_ => {
return Err(helix::HelixRequestPatchError::InvalidResponse {
reason: "unexpected status code",
response: response.to_string(),
status,
uri: uri.clone(),
})
}
};
Ok(helix::Response {
data: resp,
pagination: None,
request,
total: None,
other: None,
})
}
}
#[cfg(test)]
#[test]
fn test_request() {
use helix::*;
use std::convert::TryInto;
let req = UpdateChannelStreamScheduleRequest::builder()
.broadcaster_id("141981764")
.is_vacation_enabled(true)
.vacation_start_time(Some("2021-05-16T00:00:00Z".try_into().unwrap()))
.vacation_end_time(Some("2021-05-23T00:00:00Z".try_into().unwrap()))
.timezone("America/New_York".to_string())
.build();
let body = helix::EmptyBody;
dbg!(req.create_request(body, "token", "clientid").unwrap());
let data = br"".to_vec();
let http_response = http::Response::builder().status(204).body(data).unwrap();
let uri = req.get_uri().unwrap();
assert_eq!(
uri.to_string(),
"https://api.twitch.tv/helix/schedule/settings?broadcaster_id=141981764&is_vacation_enabled=true&vacation_start_time=2021-05-16T00%3A00%3A00Z&vacation_end_time=2021-05-23T00%3A00%3A00Z&timezone=America%2FNew_York"
);
dbg!(
UpdateChannelStreamScheduleRequest::parse_response(Some(req), &uri, http_response).unwrap()
);
}