1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize, Default)]
4#[serde(rename_all = "camelCase")]
5pub struct SearchContactsParams {
6 pub location_id: String,
7 #[serde(skip_serializing_if = "Option::is_none")]
8 pub query: Option<String>,
9 #[serde(skip_serializing_if = "Option::is_none")]
10 pub limit: Option<u32>,
11 #[serde(skip_serializing_if = "Option::is_none")]
12 pub skip: Option<u32>,
13 #[serde(skip_serializing_if = "Option::is_none")]
14 pub email: Option<String>,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub phone: Option<String>,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub start_after: Option<String>,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 pub start_after_id: Option<String>,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
24#[serde(rename_all = "camelCase")]
25pub struct CustomFieldValue {
26 pub id: String,
27 pub value: serde_json::Value,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize)]
31#[serde(rename_all = "camelCase")]
32pub struct Contact {
33 pub id: String,
34 pub location_id: String,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub first_name: Option<String>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub last_name: Option<String>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub full_name: Option<String>,
41 #[serde(skip_serializing_if = "Option::is_none")]
42 pub email: Option<String>,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 pub phone: Option<String>,
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub address1: Option<String>,
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub city: Option<String>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 pub state: Option<String>,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub postal_code: Option<String>,
53 #[serde(skip_serializing_if = "Option::is_none")]
54 pub country: Option<String>,
55 #[serde(skip_serializing_if = "Option::is_none")]
56 pub company_name: Option<String>,
57 #[serde(skip_serializing_if = "Option::is_none")]
58 pub website: Option<String>,
59 #[serde(default)]
60 pub tags: Vec<String>,
61 #[serde(skip_serializing_if = "Option::is_none")]
62 pub date_of_birth: Option<String>,
63 #[serde(skip_serializing_if = "Option::is_none")]
64 pub date_added: Option<String>,
65 #[serde(skip_serializing_if = "Option::is_none")]
66 pub date_updated: Option<String>,
67 #[serde(skip_serializing_if = "Option::is_none")]
68 pub assigned_to: Option<String>,
69 #[serde(skip_serializing_if = "Option::is_none")]
70 pub source: Option<String>,
71 #[serde(default)]
72 pub custom_fields: Vec<CustomFieldValue>,
73 #[serde(skip_serializing_if = "Option::is_none")]
74 pub business_id: Option<String>,
75 #[serde(default)]
76 pub followers: Vec<String>,
77 #[serde(skip_serializing_if = "Option::is_none")]
78 pub type_: Option<String>,
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize)]
82#[serde(rename_all = "camelCase")]
83pub struct SearchContactsResponse {
84 pub contacts: Vec<Contact>,
85 #[serde(skip_serializing_if = "Option::is_none")]
86 pub total: Option<u64>,
87 #[serde(skip_serializing_if = "Option::is_none")]
88 pub count: Option<u64>,
89 #[serde(skip_serializing_if = "Option::is_none")]
90 pub meta: Option<ContactsMeta>,
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize)]
94#[serde(rename_all = "camelCase")]
95pub struct ContactsMeta {
96 pub total: Option<u64>,
97 pub current_page: Option<u32>,
98 pub next_page_url: Option<String>,
99 pub prev_page_url: Option<String>,
100 pub start_after: Option<String>,
101 pub start_after_id: Option<String>,
102}
103
104#[derive(Debug, Clone, Serialize, Deserialize)]
105pub struct GetContactResponse {
106 pub contact: Contact,
107}
108
109#[derive(Debug, Clone, Serialize, Deserialize, Default)]
110#[serde(rename_all = "camelCase")]
111pub struct CreateContactParams {
112 pub location_id: String,
113 #[serde(skip_serializing_if = "Option::is_none")]
114 pub first_name: Option<String>,
115 #[serde(skip_serializing_if = "Option::is_none")]
116 pub last_name: Option<String>,
117 #[serde(skip_serializing_if = "Option::is_none")]
118 pub email: Option<String>,
119 #[serde(skip_serializing_if = "Option::is_none")]
120 pub phone: Option<String>,
121 #[serde(skip_serializing_if = "Option::is_none")]
122 pub address1: Option<String>,
123 #[serde(skip_serializing_if = "Option::is_none")]
124 pub city: Option<String>,
125 #[serde(skip_serializing_if = "Option::is_none")]
126 pub state: Option<String>,
127 #[serde(skip_serializing_if = "Option::is_none")]
128 pub postal_code: Option<String>,
129 #[serde(skip_serializing_if = "Option::is_none")]
130 pub country: Option<String>,
131 #[serde(skip_serializing_if = "Option::is_none")]
132 pub company_name: Option<String>,
133 #[serde(skip_serializing_if = "Option::is_none")]
134 pub website: Option<String>,
135 #[serde(skip_serializing_if = "Option::is_none")]
136 pub tags: Option<Vec<String>>,
137 #[serde(skip_serializing_if = "Option::is_none")]
138 pub source: Option<String>,
139 #[serde(skip_serializing_if = "Option::is_none")]
140 pub assigned_to: Option<String>,
141 #[serde(skip_serializing_if = "Option::is_none")]
142 pub date_of_birth: Option<String>,
143 #[serde(skip_serializing_if = "Option::is_none")]
144 pub custom_fields: Option<Vec<CustomFieldValue>>,
145 #[serde(skip_serializing_if = "Option::is_none")]
146 pub business_id: Option<String>,
147}
148
149#[derive(Debug, Clone, Serialize, Deserialize, Default)]
150#[serde(rename_all = "camelCase")]
151pub struct UpdateContactParams {
152 #[serde(skip_serializing_if = "Option::is_none")]
153 pub first_name: Option<String>,
154 #[serde(skip_serializing_if = "Option::is_none")]
155 pub last_name: Option<String>,
156 #[serde(skip_serializing_if = "Option::is_none")]
157 pub email: Option<String>,
158 #[serde(skip_serializing_if = "Option::is_none")]
159 pub phone: Option<String>,
160 #[serde(skip_serializing_if = "Option::is_none")]
161 pub address1: Option<String>,
162 #[serde(skip_serializing_if = "Option::is_none")]
163 pub city: Option<String>,
164 #[serde(skip_serializing_if = "Option::is_none")]
165 pub state: Option<String>,
166 #[serde(skip_serializing_if = "Option::is_none")]
167 pub postal_code: Option<String>,
168 #[serde(skip_serializing_if = "Option::is_none")]
169 pub country: Option<String>,
170 #[serde(skip_serializing_if = "Option::is_none")]
171 pub company_name: Option<String>,
172 #[serde(skip_serializing_if = "Option::is_none")]
173 pub website: Option<String>,
174 #[serde(skip_serializing_if = "Option::is_none")]
175 pub tags: Option<Vec<String>>,
176 #[serde(skip_serializing_if = "Option::is_none")]
177 pub source: Option<String>,
178 #[serde(skip_serializing_if = "Option::is_none")]
179 pub assigned_to: Option<String>,
180 #[serde(skip_serializing_if = "Option::is_none")]
181 pub date_of_birth: Option<String>,
182 #[serde(skip_serializing_if = "Option::is_none")]
183 pub custom_fields: Option<Vec<CustomFieldValue>>,
184}
185
186#[derive(Debug, Clone, Serialize, Deserialize)]
187pub struct UpsertContactResponse {
188 pub contact: Contact,
189 pub new: bool,
190 #[serde(rename = "traceId", skip_serializing_if = "Option::is_none")]
191 pub trace_id: Option<String>,
192}
193
194#[derive(Debug, Clone, Serialize, Deserialize)]
195pub struct DeleteContactResponse {
196 pub succeded: bool,
197}
198
199#[derive(Debug, Clone, Serialize, Deserialize)]
202pub struct AddTagsParams {
203 pub tags: Vec<String>,
204}
205
206#[derive(Debug, Clone, Serialize, Deserialize)]
207pub struct TagsResponse {
208 pub tags: Vec<String>,
209}
210
211#[derive(Debug, Clone, Serialize, Deserialize)]
214#[serde(rename_all = "camelCase")]
215pub struct Note {
216 pub id: String,
217 pub body: String,
218 pub contact_id: String,
219 #[serde(skip_serializing_if = "Option::is_none")]
220 pub user_id: Option<String>,
221 #[serde(skip_serializing_if = "Option::is_none")]
222 pub date_added: Option<String>,
223}
224
225#[derive(Debug, Clone, Serialize, Deserialize)]
226pub struct NotesResponse {
227 pub notes: Vec<Note>,
228}
229
230#[derive(Debug, Clone, Serialize, Deserialize)]
231pub struct NoteResponse {
232 pub note: Note,
233}
234
235#[derive(Debug, Clone, Serialize, Deserialize, Default)]
236#[serde(rename_all = "camelCase")]
237pub struct CreateNoteParams {
238 pub body: String,
239 #[serde(skip_serializing_if = "Option::is_none")]
240 pub user_id: Option<String>,
241}
242
243#[derive(Debug, Clone, Serialize, Deserialize)]
246#[serde(rename_all = "camelCase")]
247pub struct Task {
248 pub id: String,
249 pub title: String,
250 #[serde(skip_serializing_if = "Option::is_none")]
251 pub body: Option<String>,
252 pub contact_id: String,
253 #[serde(skip_serializing_if = "Option::is_none")]
254 pub assigned_to: Option<String>,
255 #[serde(skip_serializing_if = "Option::is_none")]
256 pub due_date: Option<String>,
257 #[serde(skip_serializing_if = "Option::is_none")]
258 pub completed: Option<bool>,
259}
260
261#[derive(Debug, Clone, Serialize, Deserialize)]
262pub struct TasksResponse {
263 pub tasks: Vec<Task>,
264}
265
266#[derive(Debug, Clone, Serialize, Deserialize)]
267pub struct TaskResponse {
268 pub task: Task,
269}
270
271#[derive(Debug, Clone, Serialize, Deserialize, Default)]
272#[serde(rename_all = "camelCase")]
273pub struct CreateTaskParams {
274 pub title: String,
275 #[serde(skip_serializing_if = "Option::is_none")]
276 pub body: Option<String>,
277 #[serde(skip_serializing_if = "Option::is_none")]
278 pub assigned_to: Option<String>,
279 #[serde(skip_serializing_if = "Option::is_none")]
280 pub due_date: Option<String>,
281 #[serde(skip_serializing_if = "Option::is_none")]
282 pub completed: Option<bool>,
283}