mod builder;
mod response;
mod types;
pub use builder::{
DeleteGuestStarSlot, UpdateChannelGuestStarSettings, UpdateGuestStarSlot,
UpdateGuestStarSlotSettings,
};
pub use response::{GuestStarSettingsResponse, GustStarInvitesResponse, GustStarSessionResponse};
pub use types::{
GroupLayout, Guest, GuestSetting, GuestStarInvite, GuestStarStatus, GustStarSession,
GustStarSetting,
};
use std::future::Future;
use crate::{
Client, Error,
types::{
BroadcasterId, ModeratorId, SessionId, UserId,
constants::{
BROADCASTER_ID, CHANNEL_SETTINGS, GUEST_ID, GUEST_STAR, INVITES, MODERATOR_ID, SESSION,
SESSION_ID, SLOT, SLOT_ID,
},
},
};
pub trait GuestStarAPI {
fn get_channel_guest_star_settings(
&self,
broadcaster_id: &BroadcasterId,
moderator_id: &ModeratorId,
) -> impl Future<Output = Result<GuestStarSettingsResponse, Error>> + Send;
fn update_channel_guest_star_settings<'a>(
&'a self,
broadcaster_id: &'a BroadcasterId,
) -> UpdateChannelGuestStarSettings<'a>;
fn get_guest_star_session(
&self,
broadcaster_id: &BroadcasterId,
moderator_id: &ModeratorId,
) -> impl Future<Output = Result<GustStarSessionResponse, Error>> + Send;
fn create_guest_star_session(
&self,
broadcaster_id: &BroadcasterId,
) -> impl Future<Output = Result<GustStarSessionResponse, Error>> + Send;
fn end_guest_star_session(
&self,
broadcaster_id: &BroadcasterId,
session_id: &SessionId,
) -> impl Future<Output = Result<GustStarSessionResponse, Error>> + Send;
fn get_guest_star_invites(
&self,
broadcaster_id: &BroadcasterId,
moderator_id: &ModeratorId,
session_id: &SessionId,
) -> impl Future<Output = Result<GustStarInvitesResponse, Error>> + Send;
fn send_guest_star_invite(
&self,
broadcaster_id: &BroadcasterId,
moderator_id: &ModeratorId,
session_id: &SessionId,
guest_id: &UserId,
) -> impl Future<Output = Result<(), Error>> + Send;
fn delete_guest_star_invite(
&self,
broadcaster_id: &BroadcasterId,
moderator_id: &ModeratorId,
session_id: &SessionId,
guest_id: &UserId,
) -> impl Future<Output = Result<(), Error>> + Send;
fn assign_guest_star_slot(
&self,
broadcaster_id: &BroadcasterId,
moderator_id: &ModeratorId,
session_id: &SessionId,
guest_id: &UserId,
slot_id: &str,
) -> impl Future<Output = Result<(), Error>> + Send;
fn update_guest_star_slot<'a>(
&'a self,
broadcaster_id: &'a BroadcasterId,
moderator_id: &'a ModeratorId,
session_id: &'a SessionId,
source_slot_id: &'a str,
) -> UpdateGuestStarSlot<'a>;
fn delete_guest_star_slot<'a>(
&'a self,
broadcaster_id: &'a BroadcasterId,
moderator_id: &'a ModeratorId,
session_id: &'a SessionId,
guest_id: &'a UserId,
slot_id: &'a str,
) -> DeleteGuestStarSlot<'a>;
fn update_guest_star_slot_settings<'a>(
&'a self,
broadcaster_id: &'a BroadcasterId,
moderator_id: &'a ModeratorId,
session_id: &'a SessionId,
slot_id: &'a str,
) -> UpdateGuestStarSlotSettings<'a>;
}
impl GuestStarAPI for Client {
async fn get_channel_guest_star_settings(
&self,
broadcaster_id: &BroadcasterId,
moderator_id: &ModeratorId,
) -> Result<GuestStarSettingsResponse, Error> {
let mut url = self.base_url();
url.path_segments_mut()
.unwrap()
.extend([GUEST_STAR, CHANNEL_SETTINGS]);
url.query_pairs_mut()
.append_pair(BROADCASTER_ID, broadcaster_id)
.append_pair(MODERATOR_ID, moderator_id);
self.json(self.http_client().get(url)).await
}
fn update_channel_guest_star_settings<'a>(
&'a self,
broadcaster_id: &'a BroadcasterId,
) -> UpdateChannelGuestStarSettings<'a> {
UpdateChannelGuestStarSettings::new(self, broadcaster_id)
}
async fn get_guest_star_session(
&self,
broadcaster_id: &BroadcasterId,
moderator_id: &ModeratorId,
) -> Result<GustStarSessionResponse, Error> {
let mut url = self.base_url();
url.path_segments_mut()
.unwrap()
.extend([GUEST_STAR, SESSION]);
url.query_pairs_mut()
.append_pair(BROADCASTER_ID, broadcaster_id)
.append_pair(MODERATOR_ID, moderator_id);
self.json(self.http_client().get(url)).await
}
async fn create_guest_star_session(
&self,
broadcaster_id: &BroadcasterId,
) -> Result<GustStarSessionResponse, Error> {
let mut url = self.base_url();
url.path_segments_mut()
.unwrap()
.extend([GUEST_STAR, SESSION]);
url.query_pairs_mut()
.append_pair(BROADCASTER_ID, broadcaster_id);
self.json(self.http_client().post(url)).await
}
async fn end_guest_star_session(
&self,
broadcaster_id: &BroadcasterId,
session_id: &SessionId,
) -> Result<GustStarSessionResponse, Error> {
let mut url = self.base_url();
url.path_segments_mut()
.unwrap()
.extend([GUEST_STAR, SESSION]);
url.query_pairs_mut()
.append_pair(BROADCASTER_ID, broadcaster_id)
.append_pair(SESSION_ID, session_id);
self.json(self.http_client().delete(url)).await
}
async fn get_guest_star_invites(
&self,
broadcaster_id: &BroadcasterId,
moderator_id: &ModeratorId,
session_id: &SessionId,
) -> Result<GustStarInvitesResponse, Error> {
let mut url = self.base_url();
url.path_segments_mut()
.unwrap()
.extend([GUEST_STAR, INVITES]);
url.query_pairs_mut()
.append_pair(BROADCASTER_ID, broadcaster_id)
.append_pair(MODERATOR_ID, moderator_id)
.append_pair(SESSION_ID, session_id);
let req = self.http_client().get(url);
self.json(req).await
}
async fn send_guest_star_invite(
&self,
broadcaster_id: &BroadcasterId,
moderator_id: &ModeratorId,
session_id: &SessionId,
guest_id: &UserId,
) -> Result<(), Error> {
let mut url = self.base_url();
url.path_segments_mut()
.unwrap()
.extend([GUEST_STAR, INVITES]);
url.query_pairs_mut()
.append_pair(BROADCASTER_ID, broadcaster_id)
.append_pair(MODERATOR_ID, moderator_id)
.append_pair(SESSION_ID, session_id)
.append_pair(GUEST_ID, guest_id);
self.no_content(self.http_client().post(url)).await
}
async fn delete_guest_star_invite(
&self,
broadcaster_id: &BroadcasterId,
moderator_id: &ModeratorId,
session_id: &SessionId,
guest_id: &UserId,
) -> Result<(), Error> {
let mut url = self.base_url();
url.path_segments_mut()
.unwrap()
.extend([GUEST_STAR, INVITES]);
url.query_pairs_mut()
.append_pair(BROADCASTER_ID, broadcaster_id)
.append_pair(MODERATOR_ID, moderator_id)
.append_pair(SESSION_ID, session_id)
.append_pair(GUEST_ID, guest_id);
self.no_content(self.http_client().delete(url)).await
}
async fn assign_guest_star_slot(
&self,
broadcaster_id: &BroadcasterId,
moderator_id: &ModeratorId,
session_id: &SessionId,
guest_id: &UserId,
slot_id: &str,
) -> Result<(), Error> {
let mut url = self.base_url();
url.path_segments_mut().unwrap().extend([GUEST_STAR, SLOT]);
url.query_pairs_mut()
.append_pair(BROADCASTER_ID, broadcaster_id)
.append_pair(MODERATOR_ID, moderator_id)
.append_pair(SESSION_ID, session_id)
.append_pair(GUEST_ID, guest_id)
.append_pair(SLOT_ID, slot_id);
self.no_content(self.http_client().post(url)).await
}
fn update_guest_star_slot<'a>(
&'a self,
broadcaster_id: &'a BroadcasterId,
moderator_id: &'a ModeratorId,
session_id: &'a SessionId,
source_slot_id: &'a str,
) -> UpdateGuestStarSlot<'a> {
UpdateGuestStarSlot::new(
self,
broadcaster_id,
moderator_id,
session_id,
source_slot_id,
)
}
fn delete_guest_star_slot<'a>(
&'a self,
broadcaster_id: &'a BroadcasterId,
moderator_id: &'a ModeratorId,
session_id: &'a SessionId,
guest_id: &'a UserId,
slot_id: &'a str,
) -> DeleteGuestStarSlot<'a> {
DeleteGuestStarSlot::new(
self,
broadcaster_id,
moderator_id,
session_id,
guest_id,
slot_id,
)
}
fn update_guest_star_slot_settings<'a>(
&'a self,
broadcaster_id: &'a BroadcasterId,
moderator_id: &'a ModeratorId,
session_id: &'a SessionId,
slot_id: &'a str,
) -> UpdateGuestStarSlotSettings<'a> {
UpdateGuestStarSlotSettings::new(self, broadcaster_id, moderator_id, session_id, slot_id)
}
}