mod response;
mod types;
pub use response::{AdScheduleResponse, SnoozeNextAdResponse, StartCommercialResponse};
pub use types::{AdSchedule, SnoozeNextAd, StartCommercial};
use types::StartCommercialBody;
use crate::{
request::TwitchAPIRequest,
types::{
constants::{ADS, BROADCASTER_ID, CHANNELS, COMMERCIAL, SCHEDULE, SNOOZE},
BroadcasterId,
},
TwitchAPI,
};
pub trait AdsAPI {
fn start_commercial(
&self,
broadcaster_id: &BroadcasterId,
length: u8,
) -> TwitchAPIRequest<StartCommercialResponse>;
fn get_ad_schedule(
&self,
broadcaster_id: &BroadcasterId,
) -> TwitchAPIRequest<AdScheduleResponse>;
fn snooze_next_ad(
&self,
broadcaster_id: &BroadcasterId,
) -> TwitchAPIRequest<SnoozeNextAdResponse>;
}
impl AdsAPI for TwitchAPI {
simple_endpoint!(
fn start_commercial(
broadcaster_id: &BroadcasterId [skip],
length: u8 [skip],
) -> StartCommercialResponse;
endpoint: StartCommercial,
method: POST,
path: [CHANNELS, COMMERCIAL],
headers: [json],
body: {serde_json::to_string(&StartCommercialBody{broadcaster_id, length}).ok()}
);
simple_endpoint!(
fn get_ad_schedule(
broadcaster_id: &BroadcasterId [key = BROADCASTER_ID],
) -> AdScheduleResponse;
endpoint: GetAdSchedule,
method: GET,
path: [CHANNELS, ADS],
);
simple_endpoint!(
fn snooze_next_ad(
broadcaster_id: &BroadcasterId,
) -> SnoozeNextAdResponse;
endpoint: SnoozeNextAd,
method: POST,
path: [CHANNELS, ADS, SCHEDULE, SNOOZE],
);
}