You've already forked flix
40 lines
1.1 KiB
Rust
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,
|
|
}
|
|
}
|
|
}
|