mod builder;
mod response;
mod types;
pub use builder::GetCharityCampaignDonations;
pub use response::{CharityCampaignDonationResponse, CharityCampaignResponse};
pub use types::{CharityCampaign, CharityCampaignDonation};
use std::future::Future;
use crate::{
types::{
constants::{BROADCASTER_ID, CHARITY},
BroadcasterId,
},
Client, Error,
};
pub trait CharityAPI {
fn get_charity_campaign(
&self,
broadcaster_id: &BroadcasterId,
) -> impl Future<Output = Result<CharityCampaignResponse, Error>> + Send;
fn get_charity_campaign_donations<'a>(
&'a self,
broadcaster_id: &'a BroadcasterId,
) -> GetCharityCampaignDonations<'a>;
}
impl CharityAPI for Client {
async fn get_charity_campaign(
&self,
broadcaster_id: &BroadcasterId,
) -> Result<CharityCampaignResponse, Error> {
let mut url = self.base_url();
url.path_segments_mut()
.unwrap()
.extend([CHARITY, "campaigns"]);
url.query_pairs_mut()
.append_pair(BROADCASTER_ID, broadcaster_id);
self.json(self.http_client().get(url)).await
}
fn get_charity_campaign_donations<'a>(
&'a self,
broadcaster_id: &'a BroadcasterId,
) -> GetCharityCampaignDonations<'a> {
GetCharityCampaignDonations::new(self, broadcaster_id)
}
}