flix_tmdb/api/
collections.rs

1//! Collections API
2
3use core::time::Duration;
4use std::rc::Rc;
5
6use governor::Jitter;
7
8use crate::Config;
9use crate::model::Collection;
10use crate::model::id::CollectionId;
11
12use super::{Error, make_request};
13
14/// TMDB Collections API client
15pub struct Client {
16	config: Rc<Config>,
17}
18
19impl Client {
20	/// Create a new client with the given configuration
21	pub fn new(config: Rc<Config>) -> Self {
22		Self { config }
23	}
24}
25
26impl Client {
27	/// Fetch the details of the collection refered to by ID
28	pub async fn get_details(
29		&self,
30		id: impl Into<CollectionId>,
31		language: Option<&str>,
32	) -> Result<Collection, Error> {
33		self.config
34			.limiter
35			.until_ready_with_jitter(Jitter::new(
36				Duration::from_millis(0),
37				Duration::from_millis(50),
38			))
39			.await;
40
41		Ok(self
42			.config
43			.client
44			.execute(make_request(
45				&self.config,
46				&format!("/3/collection/{}", id.into().into_raw()),
47				language,
48			)?)
49			.await?
50			.error_for_status()?
51			.json()
52			.await?)
53	}
54}