mod builder;
mod response;
mod types;
pub use builder::{BitsLeaderboardRequest, GetExtensionTransactionsBuilder};
pub use response::{BitsLeaderboardResponse, CheermotesResponse, ExtensionTransactionsResponse};
pub use types::{
BitsLeaderboard, Cheermotes, Dark, ExtensionTransaction, Images, Imagess, Light, Period,
ProductType, Tier, TierLevel, TransactionProductData, Type,
};
use crate::{
request::TwitchAPIRequest,
types::{
constants::{BITS, BROADCASTER_ID, CHEERMOTES},
BroadcasterId, ExtensionId,
},
};
pub trait BitsAPI {
fn get_bits_leaderboard<'a>(&'a self) -> BitsLeaderboardRequest<'a>;
fn get_cheermotes(
&self,
broadcaster_id: Option<&BroadcasterId>,
) -> TwitchAPIRequest<CheermotesResponse>;
fn get_extension_transactions<'a>(
&'a self,
extension_id: &'a ExtensionId,
) -> GetExtensionTransactionsBuilder<'a>;
}
impl BitsAPI for crate::TwitchAPI {
fn get_bits_leaderboard<'a>(&'a self) -> BitsLeaderboardRequest<'a> {
BitsLeaderboardRequest::new(self)
}
fn get_cheermotes(
&self,
broadcaster_id: Option<&BroadcasterId>,
) -> TwitchAPIRequest<CheermotesResponse> {
let mut url = self.build_url();
url.path_segments_mut().unwrap().extend([BITS, CHEERMOTES]);
let mut query = url.query_pairs_mut();
if let Some(broadcaster_id) = broadcaster_id {
query.append_pair(BROADCASTER_ID, broadcaster_id);
}
drop(query);
TwitchAPIRequest::new(
crate::request::EndpointType::GetCheermotes,
url,
reqwest::Method::GET,
self.default_headers(),
None,
self.client.clone(),
)
}
fn get_extension_transactions<'a>(
&'a self,
extension_id: &'a ExtensionId,
) -> GetExtensionTransactionsBuilder<'a> {
GetExtensionTransactionsBuilder::new(self, extension_id)
}
}