1use serde::{Deserialize, Serialize};
5use serde_json::Value;
6
7#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
8pub struct HealthOk {
9 pub status: String,
10}
11
12#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
13pub struct ReadyOk {
14 pub status: String,
15}
16
17#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
18pub struct ReadyNotOk {
19 pub status: String,
20 pub databases: Vec<String>,
21}
22
23#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
24pub struct CreateResult {
25 pub id: String,
26}
27
28#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
29pub struct UpdateResult {
30 pub updated: u64,
31}
32
33#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
34pub struct RestoreResult {
35 pub status: String,
36 pub modified: u64,
37}
38
39#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
40pub struct CountResult {
41 pub count: u64,
42}
43
44#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
45pub struct MessageResponse {
46 pub message: String,
47}
48
49#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
50pub struct SearchRequest {
51 #[serde(default)]
52 pub filter: Value,
53 pub params: Option<Value>,
54 pub skip: Option<u64>,
55 pub limit: Option<u64>,
56}
57
58#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
59pub struct AggregateRequest {
60 pub criteria: Vec<Value>,
61 pub skip: Option<u64>,
62 pub limit: Option<u64>,
63}
64
65#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
66pub struct CountRequest {
67 pub criteria: Option<Value>,
68}
69
70#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
71pub struct PatchCollectionRequest {
72 pub criteria: Value,
73 pub values: Value,
74}
75
76#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
77pub struct RestoreRequest {
78 pub criteria: Value,
79}
80
81#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
82pub struct VersionedUpdateRequest {
83 pub data: Value,
84 pub replace: Option<bool>,
85 #[serde(rename = "maxVersions")]
86 pub max_versions: Option<u64>,
87}
88
89#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
90pub struct VersionedUpdateResult {
91 pub updated: u64,
92 #[serde(rename = "versionSaved")]
93 pub version_saved: u64,
94}
95
96#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
97pub struct VersionInfo {
98 #[serde(rename = "_uuid")]
99 pub uuid: String,
100 #[serde(rename = "_v")]
101 pub version: u64,
102 #[serde(rename = "_at")]
103 pub at: u64,
104}
105
106#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
107pub struct CreateIndexesRequest {
108 #[serde(rename = "indexSpec")]
109 pub index_spec: Value,
110 pub options: Option<Value>,
111}
112
113#[cfg(test)]
114mod tests {
115 use serde_json::json;
116
117 use super::*;
118
119 #[test]
120 fn versioned_update_result_serializes_with_camel_case() {
121 let value = serde_json::to_value(VersionedUpdateResult {
122 updated: 1,
123 version_saved: 7,
124 })
125 .expect("serialize versioned update result");
126
127 assert_eq!(value, json!({ "updated": 1, "versionSaved": 7 }));
128 }
129
130 #[test]
131 fn version_info_serializes_with_legacy_history_field_names() {
132 let value = serde_json::to_value(VersionInfo {
133 uuid: "ABC123".to_owned(),
134 version: 4,
135 at: 1_700_000_000_000,
136 })
137 .expect("serialize version info");
138
139 assert_eq!(
140 value,
141 json!({
142 "_uuid": "ABC123",
143 "_v": 4,
144 "_at": 1_700_000_000_000_u64,
145 })
146 );
147 }
148
149 #[test]
150 fn create_indexes_request_uses_index_spec_key() {
151 let value = serde_json::to_value(CreateIndexesRequest {
152 index_spec: json!({ "name": 1 }),
153 options: Some(json!({ "unique": true })),
154 })
155 .expect("serialize create indexes request");
156
157 assert_eq!(
158 value,
159 json!({
160 "indexSpec": { "name": 1 },
161 "options": { "unique": true },
162 })
163 );
164 }
165}