Skip to main content

contentstack_api_client_rs/client/management/
entries.rs

1use 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}