mod builder;
mod response;
mod types;
pub use builder::{
GetConduitShardsBuilder, ShardUpdate, TransportConfig, UpdateConduitShardsBuilder,
};
pub use response::{
ConduitResponse, GetConduitShardsResponse, UpdateConduitShardsResponse, UpdateShardError,
};
pub use types::{Conduit, ConduitShard, Transport};
use types::{CreateConduitsBody, UpdateConduitsBody};
use crate::{
request::{NoContent, TwitchAPIRequest},
types::{
constants::{CONDUITS, EVENTSUB, ID},
ConduitId,
},
TwitchAPI,
};
pub trait ConduitsAPI {
fn get_conduits(&self) -> TwitchAPIRequest<ConduitResponse>;
fn create_conduits(&self, shard_count: u64) -> TwitchAPIRequest<ConduitResponse>;
fn update_conduits(
&self,
conduit_id: &ConduitId,
shard_count: u64,
) -> TwitchAPIRequest<ConduitResponse>;
fn delete_conduits(&self, conduit_id: &ConduitId) -> TwitchAPIRequest<NoContent>;
fn get_conduit_shards<'a>(&'a self, conduit_id: &'a ConduitId) -> GetConduitShardsBuilder<'a>;
fn update_conduit_shards<'a>(&'a self, conduit_id: ConduitId)
-> UpdateConduitShardsBuilder<'a>;
}
impl ConduitsAPI for TwitchAPI {
fn get_conduits(&self) -> TwitchAPIRequest<ConduitResponse> {
let mut url = self.build_url();
url.path_segments_mut()
.unwrap()
.extend(&[EVENTSUB, CONDUITS]);
TwitchAPIRequest::new(
crate::request::EndpointType::GetConduits,
url,
reqwest::Method::GET,
self.default_headers(),
None,
self.client.clone(),
)
}
fn create_conduits(&self, shard_count: u64) -> TwitchAPIRequest<ConduitResponse> {
let mut url = self.build_url();
url.path_segments_mut()
.unwrap()
.extend(&[EVENTSUB, CONDUITS]);
let body = serde_json::to_string(&CreateConduitsBody { shard_count }).ok();
TwitchAPIRequest::new(
crate::request::EndpointType::CreateConduits,
url,
reqwest::Method::POST,
self.header_json(),
body,
self.client.clone(),
)
}
fn update_conduits(
&self,
conduit_id: &ConduitId,
shard_count: u64,
) -> TwitchAPIRequest<ConduitResponse> {
let mut url = self.build_url();
url.path_segments_mut()
.unwrap()
.extend(&[EVENTSUB, CONDUITS]);
let body = serde_json::to_string(&UpdateConduitsBody {
conduit_id,
shard_count,
})
.ok();
TwitchAPIRequest::new(
crate::request::EndpointType::UpdateConduits,
url,
reqwest::Method::PATCH,
self.header_json(),
body,
self.client.clone(),
)
}
fn delete_conduits(&self, conduit_id: &ConduitId) -> TwitchAPIRequest<NoContent> {
let mut url = self.build_url();
url.path_segments_mut()
.unwrap()
.extend(&[EVENTSUB, CONDUITS]);
let mut query = url.query_pairs_mut();
query.append_pair(ID, conduit_id);
drop(query);
TwitchAPIRequest::new(
crate::request::EndpointType::DeleteConduit,
url,
reqwest::Method::DELETE,
self.default_headers(),
None,
self.client.clone(),
)
}
fn get_conduit_shards<'a>(&'a self, conduit_id: &'a ConduitId) -> GetConduitShardsBuilder<'a> {
GetConduitShardsBuilder::new(self, conduit_id)
}
fn update_conduit_shards<'a>(
&'a self,
conduit_id: ConduitId,
) -> UpdateConduitShardsBuilder<'a> {
UpdateConduitShardsBuilder::new(self, conduit_id)
}
}