contentstack_api_client_rs/client/
management.rs1use http::{HeaderMap, HeaderValue};
2use reqwest::Client;
3use reqwest_middleware::{ClientBuilder, ClientWithMiddleware};
4
5use crate::{
6 ClientOptions,
7 client::config::ClientConfig,
8 middleware::rate_limiter::RateLimiterMiddleware,
9 rate_limiter::{ClientRateLimiter, RateLimitPreset},
10};
11
12pub mod entries;
13
14use entries::Entries;
15
16#[derive(Clone, Debug)]
29pub struct Management {
30 pub config: ClientConfig,
31 pub client: ClientWithMiddleware,
32}
33
34impl Management {
35 pub fn new(api_key: &str, management_token: &str, opts: Option<ClientOptions>) -> Self {
51 let config = ClientConfig::management(api_key, management_token, opts);
52
53 let mut headers = HeaderMap::new();
54
55 headers.insert(
56 "api_key",
57 HeaderValue::from_str(&config.api_key)
58 .expect("api_key contains invalid header characters"),
59 );
60
61 headers.insert(
62 "authorization",
63 HeaderValue::from_str(&config.management_token)
64 .expect("management_token contains invalid header characters"),
65 );
66
67 let reqwest_client = Client::builder()
68 .default_headers(headers)
69 .timeout(config.timeout)
70 .pool_max_idle_per_host(config.max_connections)
71 .build()
72 .expect("Failed to build HTTP client");
73
74 let client = ClientBuilder::new(reqwest_client)
75 .with(RateLimiterMiddleware {
76 rate_limiter: ClientRateLimiter::new(RateLimitPreset::Management),
77 })
78 .build();
79
80 Self { config, client }
81 }
82
83 pub fn entries(&self) -> Entries<'_> {
85 Entries {
86 client: &self.client,
87 base_url: &self.config.base_url,
88 }
89 }
90}