Files
flix/crates/tmdb/src/config.rs
T

40 lines
1.1 KiB
Rust

//! Client configuration.
use governor::clock::MonotonicClock;
use governor::state::{InMemoryState, NotKeyed};
use governor::{Quota, RateLimiter};
use nonzero_ext::nonzero;
use url::Url;
use url_macro::url;
/// The client configuration.
#[derive(Debug)]
#[expect(clippy::exhaustive_structs, reason = "must be constructed in full")]
pub struct Config {
/// The base URL of the API.
pub base_url: Url,
/// The reqwest client that is used for every request.
pub client: reqwest::Client,
/// The rate limiter to use for the client.
pub limiter: RateLimiter<NotKeyed, InMemoryState, MonotonicClock>,
/// The bearer token for readonly access to the API.
pub bearer_token: String,
/// An optional user agent string to provide to the API.
pub user_agent: Option<String>,
}
impl Config {
/// Create a new configuration using the provided bearer token.
#[inline]
#[must_use]
pub fn new(bearer_token: String) -> Self {
Self {
base_url: url!("https://api.themoviedb.org"),
client: reqwest::Client::new(),
limiter: RateLimiter::direct(Quota::per_second(nonzero!(30_u32))),
bearer_token,
user_agent: None,
}
}
}