Struct twitch_api::TwitchClient
source · [−]#[non_exhaustive]pub struct TwitchClient<'a, C>where
C: HttpClient<'a>,{
pub helix: HelixClient<'a, C>,
pub tmi: TmiClient<'a, C>,
}
Available on crate feature
client
and (crate features helix
or tmi
) only.Expand description
Client for Twitch APIs.
Most http clients will be able to use the 'static
lifetime
pub struct MyStruct {
twitch: TwitchClient<'static, reqwest::Client>,
token: twitch_oauth2::AppAccessToken,
}
// etc
See client
for implemented clients, you can also define your own if needed.
Fields (Non-exhaustive)
This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional
Struct { .. }
syntax; cannot be matched against without a wildcard ..
; and struct update syntax will not work.helix: HelixClient<'a, C>
Available on crate feature
helix
only.Helix endpoint. See helix
tmi: TmiClient<'a, C>
Available on crate feature
tmi
only.TMI endpoint. See tmi
Implementations
sourceimpl<C: HttpClient<'static>> TwitchClient<'static, C>
impl<C: HttpClient<'static>> TwitchClient<'static, C>
sourcepub fn new() -> TwitchClient<'static, C>where
C: Clone + ClientDefault<'static>,
pub fn new() -> TwitchClient<'static, C>where
C: Clone + ClientDefault<'static>,
Create a new TwitchClient
Examples found in repository?
More examples
examples/get_streams_and_chatters.rs (line 9)
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
async fn main() {
let _ = dotenvy::dotenv();
let mut args = std::env::args().skip(1);
let client: TwitchClient<reqwest::Client> = TwitchClient::new();
let token = UserToken::from_existing(
&client,
std::env::var("TWITCH_TOKEN")
.ok()
.or_else(|| args.next())
.map(AccessToken::new)
.expect("Please set env: TWITCH_TOKEN or pass token as first argument"),
None,
None,
)
.await
.unwrap();
let streams: Vec<String> = args.collect();
let req = GetStreamsRequest::default();
let response = client.helix.req_get(req, &token).await.unwrap();
// Note: This will fetch chatters in the current most viewed stream, might spam your console a bit.
println!("GetStreams:\n\t{:?}", response.data);
if let Some(stream) = streams.get(0) {
println!(
"{:?}",
client.tmi.get_chatters(stream.as_str().into()).await
);
} else if let Some(stream) = response.data.get(0).map(|stream| &stream.user_login) {
println!("{:?}", client.tmi.get_chatters(stream).await);
}
}
sourceimpl<'a, C: HttpClient<'a>> TwitchClient<'a, C>
impl<'a, C: HttpClient<'a>> TwitchClient<'a, C>
sourcepub fn with_client(client: C) -> TwitchClient<'a, C>where
C: Clone,
pub fn with_client(client: C) -> TwitchClient<'a, C>where
C: Clone,
Create a new TwitchClient
with an existing HttpClient
sourcepub fn get_client(&self) -> &C
pub fn get_client(&self) -> &C
Retrieve a reference of the HttpClient
inside this TwitchClient
Examples found in repository?
src/client.rs (line 336)
329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352
fn req(
&'a self,
request: http::Request<Vec<u8>>,
) -> BoxedFuture<
'a,
Result<http::Response<Vec<u8>>, <Self as twitch_oauth2::client::Client>::Error>,
> {
let client = self.get_client();
{
let request = request.map(Bytes::from);
let resp = client.req(request);
Box::pin(async {
let resp = resp.await?;
let (parts, mut body) = resp.into_parts();
Ok(http::Response::from_parts(
parts,
hyper::body::to_bytes(&mut body)
.await
.map_err(CompatError::BodyError)?
.to_vec(),
))
})
}
}
Trait Implementations
sourceimpl<'a, C: Client<'a> + Sync> Client<'a> for TwitchClient<'a, C>
Available on crate features tmi
or helix
only.
impl<'a, C: Client<'a> + Sync> Client<'a> for TwitchClient<'a, C>
Available on crate features
tmi
or helix
only.sourceimpl<'a, C: Clone> Clone for TwitchClient<'a, C>where
C: HttpClient<'a>,
impl<'a, C: Clone> Clone for TwitchClient<'a, C>where
C: HttpClient<'a>,
sourcefn clone(&self) -> TwitchClient<'a, C>
fn clone(&self) -> TwitchClient<'a, C>
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresourceimpl<C: HttpClient<'static> + ClientDefault<'static>> Default for TwitchClient<'static, C>
impl<C: HttpClient<'static> + ClientDefault<'static>> Default for TwitchClient<'static, C>
Auto Trait Implementations
impl<'a, C> RefUnwindSafe for TwitchClient<'a, C>where
C: RefUnwindSafe,
impl<'a, C> Send for TwitchClient<'a, C>
impl<'a, C> Sync for TwitchClient<'a, C>
impl<'a, C> Unpin for TwitchClient<'a, C>where
C: Unpin,
impl<'a, C> UnwindSafe for TwitchClient<'a, C>where
C: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more