Skip to main content

contentstack_api_client_rs/client/
params.rs

1use std::collections::HashMap;
2
3use serde::Serialize;
4use serde_json::Value;
5
6/// A JSON query filter map - keys are field UIDs, values are match conditions.
7///
8/// Contentstack expects this serialized as a JSON string in the `query` param.
9///
10/// # Example
11///
12/// ```
13/// use contentstack_api_client_rs::Query;
14/// use serde_json::json;
15///
16/// let mut q = Query::new();
17/// q.insert("title".into(), json!("Hello World"));       // equals
18/// q.insert("price".into(), json!({ "$gt": 100 }));      // greater than
19/// q.insert("status".into(), json!({ "$in": ["a","b"] })); // in array
20/// ```
21pub type Query = HashMap<String, Value>;
22
23/// Query parameters for fetching multiple entries.
24#[derive(Debug, Default, Clone)]
25pub struct GetManyParams {
26    /// JSON query filter - serialized internally, no need to stringify manually.
27    pub query: Option<Query>,
28    /// Maximum number of entries to return.
29    pub limit: Option<u32>,
30    /// Number of entries to skip (for pagination).
31    pub skip: Option<u32>,
32    /// Field name to sort ascending.
33    pub asc: Option<String>,
34    /// Field name to sort descending.
35    pub desc: Option<String>,
36    /// When `true`, includes the total entry count in the response.
37    pub include_count: Option<bool>,
38    /// When `true`, includes publish details in the response.
39    pub include_publish_details: Option<bool>,
40    /// When `true`, includes entry metadata in the response.
41    pub include_metadata: Option<bool>,
42    /// Locale code to fetch entries for (e.g. `"en-us"`).
43    pub locale: Option<String>,
44    /// Environment name to fetch entries for.
45    pub environment: Option<String>,
46}
47
48#[derive(Serialize, Default)]
49pub(crate) struct SerializedGetManyParams {
50    pub query: Option<String>,
51    pub limit: Option<u32>,
52    pub skip: Option<u32>,
53    pub asc: Option<String>,
54    pub desc: Option<String>,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub include_count: Option<bool>,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub include_publish_details: Option<bool>,
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub include_metadata: Option<bool>,
61    pub locale: Option<String>,
62    pub environment: Option<String>,
63}
64
65impl From<GetManyParams> for SerializedGetManyParams {
66    fn from(p: GetManyParams) -> Self {
67        Self {
68            query: p
69                .query
70                .as_ref()
71                .map(|q| serde_json::to_string(q).expect("Failed to serialize query to JSON")),
72            limit: p.limit,
73            skip: p.skip,
74            asc: p.asc,
75            desc: p.desc,
76            include_count: p.include_count.filter(|&v| v),
77            include_publish_details: p.include_publish_details.filter(|&v| v),
78            include_metadata: p.include_metadata.filter(|&v| v),
79            locale: p.locale,
80            environment: p.environment,
81        }
82    }
83}
84
85/// Query parameters for fetching a single entry by UID.
86#[derive(Debug, Default, Clone)]
87pub struct GetOneParams {
88    /// JSON query filter - serialized internally, no need to stringify manually.
89    pub query: Option<Query>,
90    /// When `true`, includes publish details in the response.
91    pub include_publish_details: Option<bool>,
92    /// When `true`, includes entry metadata in the response.
93    pub include_metadata: Option<bool>,
94    /// Locale code to fetch the entry for (e.g. `"en-us"`).
95    pub locale: Option<String>,
96    /// Environment name to fetch the entry for.
97    pub environment: Option<String>,
98}
99
100#[derive(Serialize, Default)]
101pub(crate) struct SerializedGetOneParams {
102    pub query: Option<String>,
103    #[serde(skip_serializing_if = "Option::is_none")]
104    pub include_publish_details: Option<bool>,
105    #[serde(skip_serializing_if = "Option::is_none")]
106    pub include_metadata: Option<bool>,
107    pub locale: Option<String>,
108    pub environment: Option<String>,
109}
110
111impl From<GetOneParams> for SerializedGetOneParams {
112    fn from(p: GetOneParams) -> Self {
113        Self {
114            query: p
115                .query
116                .as_ref()
117                .map(|q| serde_json::to_string(q).expect("Failed to serialize query to JSON")),
118            include_publish_details: p.include_publish_details.filter(|&v| v),
119            include_metadata: p.include_metadata.filter(|&v| v),
120            locale: p.locale,
121            environment: p.environment,
122        }
123    }
124}