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
16pub struct Management {
29 pub config: ClientConfig,
30 pub client: ClientWithMiddleware,
31}
32
33impl Management {
34 pub fn new(api_key: &str, management_token: &str, opts: Option<ClientOptions>) -> Self {
50 let config = ClientConfig::management(api_key, management_token, opts);
51
52 let mut headers = HeaderMap::new();
53
54 headers.insert(
55 "api_key",
56 HeaderValue::from_str(&config.api_key)
57 .expect("api_key contains invalid header characters"),
58 );
59
60 headers.insert(
61 "authorization",
62 HeaderValue::from_str(&config.management_token)
63 .expect("management_token contains invalid header characters"),
64 );
65
66 let reqwest_client = Client::builder()
67 .default_headers(headers)
68 .timeout(config.timeout)
69 .pool_max_idle_per_host(config.max_connections)
70 .build()
71 .expect("Failed to build HTTP client");
72
73 let client = ClientBuilder::new(reqwest_client)
74 .with(RateLimiterMiddleware {
75 rate_limiter: ClientRateLimiter::new(RateLimitPreset::Management),
76 })
77 .build();
78
79 Self { config, client }
80 }
81
82 pub fn entries(&self) -> Entries<'_> {
84 Entries {
85 client: &self.client,
86 base_url: &self.config.base_url,
87 }
88 }
89}