contentstack_api_client_rs/client/management/
entries.rs1use reqwest_middleware::ClientWithMiddleware;
2use serde::Deserialize;
3
4use crate::client::entries::{EntriesResponse, EntryResponse};
5use crate::client::params::{
6 GetManyParams, GetOneParams, SerializedGetManyParams, SerializedGetOneParams,
7};
8use crate::error::Result;
9
10pub struct Entries<'a> {
11 pub(super) client: &'a ClientWithMiddleware,
12 pub(super) base_url: &'a str,
13}
14
15impl<'a> Entries<'a> {
16 fn build_url(&self, content_type: &str, uid: Option<&str>) -> String {
17 let base_url = self.base_url.trim_end_matches('/');
18 match uid {
19 Some(u) => format!("{}/content_types/{}/entries/{}", base_url, content_type, u),
20 None => format!("{}/content_types/{}/entries", base_url, content_type),
21 }
22 }
23
24 pub async fn get_many<T>(
25 &self,
26 content_type: &str,
27 params: Option<GetManyParams>,
28 ) -> Result<EntriesResponse<T>>
29 where
30 T: for<'de> Deserialize<'de>,
31 {
32 let request = self.client.get(self.build_url(content_type, None));
33
34 let request = if let Some(p) = params {
35 let serialized: SerializedGetManyParams = p.into();
36 request.query(&serialized)
37 } else {
38 request
39 };
40
41 Ok(request.send().await?.json::<EntriesResponse<T>>().await?)
42 }
43
44 pub async fn get_one<T>(
45 &self,
46 content_type: &str,
47 uid: &str,
48 params: Option<GetOneParams>,
49 ) -> Result<EntryResponse<T>>
50 where
51 T: for<'de> Deserialize<'de>,
52 {
53 let request = self.client.get(self.build_url(content_type, Some(uid)));
54
55 let request = if let Some(p) = params {
56 let serialized: SerializedGetOneParams = p.into();
57 request.query(&serialized)
58 } else {
59 request
60 };
61
62 Ok(request.send().await?.json::<EntryResponse<T>>().await?)
63 }
64}