1use crate::serde_helpers::double_option;
4
5use super::*;
6
7#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
8pub struct SignRequest {
9 #[serde(default, skip_serializing_if = "Option::is_none")]
10 pub is_document_preparation_needed: Option<bool>,
11 #[serde(
12 default,
13 skip_serializing_if = "Option::is_none",
14 deserialize_with = "double_option"
15 )]
16 pub redirect_url: Option<Option<String>>,
17 #[serde(
18 default,
19 skip_serializing_if = "Option::is_none",
20 deserialize_with = "double_option"
21 )]
22 pub declined_redirect_url: Option<Option<String>>,
23 #[serde(default, skip_serializing_if = "Option::is_none")]
24 pub are_text_signatures_enabled: Option<bool>,
25 #[serde(
26 default,
27 skip_serializing_if = "Option::is_none",
28 deserialize_with = "double_option"
29 )]
30 pub email_subject: Option<Option<String>>,
31 #[serde(
32 default,
33 skip_serializing_if = "Option::is_none",
34 deserialize_with = "double_option"
35 )]
36 pub email_message: Option<Option<String>>,
37 #[serde(default, skip_serializing_if = "Option::is_none")]
38 pub are_reminders_enabled: Option<bool>,
39 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub name: Option<String>,
41 #[serde(default, skip_serializing_if = "Option::is_none")]
42 pub prefill_tags: Option<Vec<SignRequestPrefillTag>>,
43 #[serde(
44 default,
45 skip_serializing_if = "Option::is_none",
46 deserialize_with = "double_option"
47 )]
48 pub days_valid: Option<Option<i64>>,
49 #[serde(
50 default,
51 skip_serializing_if = "Option::is_none",
52 deserialize_with = "double_option"
53 )]
54 pub external_id: Option<Option<String>>,
55 #[serde(
56 default,
57 skip_serializing_if = "Option::is_none",
58 deserialize_with = "double_option"
59 )]
60 pub template_id: Option<Option<String>>,
61 #[serde(
62 default,
63 skip_serializing_if = "Option::is_none",
64 deserialize_with = "double_option"
65 )]
66 pub external_system_name: Option<Option<String>>,
67 #[serde(
68 default,
69 skip_serializing_if = "Option::is_none",
70 deserialize_with = "double_option"
71 )]
72 pub request_flow: Option<Option<String>>,
73 #[serde(default, skip_serializing_if = "Option::is_none")]
74 pub r#type: Option<SignRequestType>,
75 #[serde(default, skip_serializing_if = "Option::is_none")]
76 pub source_files: Option<Vec<FileBase>>,
77 #[serde(default, skip_serializing_if = "Option::is_none")]
78 pub signers: Option<Vec<SignRequestSigner>>,
79 #[serde(
80 default,
81 skip_serializing_if = "Option::is_none",
82 deserialize_with = "double_option"
83 )]
84 pub signature_color: Option<Option<String>>,
85 #[serde(default, skip_serializing_if = "Option::is_none")]
86 pub id: Option<String>,
87 #[serde(
88 default,
89 skip_serializing_if = "Option::is_none",
90 deserialize_with = "double_option"
91 )]
92 pub prepare_url: Option<Option<String>>,
93 #[serde(default, skip_serializing_if = "Option::is_none")]
94 pub signing_log: Option<FileMini>,
95 #[serde(default, skip_serializing_if = "Option::is_none")]
96 pub status: Option<SignRequestStatus>,
97 #[serde(default, skip_serializing_if = "Option::is_none")]
98 pub sign_files: Option<SignRequestSignFiles>,
99 #[serde(
100 default,
101 skip_serializing_if = "Option::is_none",
102 deserialize_with = "double_option"
103 )]
104 pub auto_expire_at: Option<Option<chrono::DateTime<chrono::Utc>>>,
105 #[serde(default, skip_serializing_if = "Option::is_none")]
106 pub parent_folder: Option<FolderMini>,
107 #[serde(
108 default,
109 skip_serializing_if = "Option::is_none",
110 deserialize_with = "double_option"
111 )]
112 pub collaborator_level: Option<Option<String>>,
113 #[serde(default, skip_serializing_if = "Option::is_none")]
114 pub short_id: Option<String>,
115 #[serde(default, skip_serializing_if = "Option::is_none")]
116 pub created_at: Option<chrono::DateTime<chrono::Utc>>,
117 #[serde(
118 default,
119 skip_serializing_if = "Option::is_none",
120 deserialize_with = "double_option"
121 )]
122 pub finished_at: Option<Option<chrono::DateTime<chrono::Utc>>>,
123 #[serde(
124 default,
125 skip_serializing_if = "Option::is_none",
126 deserialize_with = "double_option"
127 )]
128 pub error_code: Option<Option<String>>,
129 #[serde(
130 default,
131 skip_serializing_if = "Option::is_none",
132 deserialize_with = "double_option"
133 )]
134 pub sender_email: Option<Option<String>>,
135 #[serde(
136 default,
137 skip_serializing_if = "Option::is_none",
138 deserialize_with = "double_option"
139 )]
140 pub sender_id: Option<Option<i64>>,
141}
142
143#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
144pub struct SignRequestCancelRequest {
145 #[serde(default, skip_serializing_if = "Option::is_none")]
146 pub reason: Option<String>,
147}
148
149#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
150pub struct SignRequestCreateRequest {
151 #[serde(default, skip_serializing_if = "Option::is_none")]
152 pub is_document_preparation_needed: Option<bool>,
153 #[serde(
154 default,
155 skip_serializing_if = "Option::is_none",
156 deserialize_with = "double_option"
157 )]
158 pub redirect_url: Option<Option<String>>,
159 #[serde(
160 default,
161 skip_serializing_if = "Option::is_none",
162 deserialize_with = "double_option"
163 )]
164 pub declined_redirect_url: Option<Option<String>>,
165 #[serde(default, skip_serializing_if = "Option::is_none")]
166 pub are_text_signatures_enabled: Option<bool>,
167 #[serde(
168 default,
169 skip_serializing_if = "Option::is_none",
170 deserialize_with = "double_option"
171 )]
172 pub email_subject: Option<Option<String>>,
173 #[serde(
174 default,
175 skip_serializing_if = "Option::is_none",
176 deserialize_with = "double_option"
177 )]
178 pub email_message: Option<Option<String>>,
179 #[serde(default, skip_serializing_if = "Option::is_none")]
180 pub are_reminders_enabled: Option<bool>,
181 #[serde(default, skip_serializing_if = "Option::is_none")]
182 pub name: Option<String>,
183 #[serde(default, skip_serializing_if = "Option::is_none")]
184 pub prefill_tags: Option<Vec<SignRequestPrefillTag>>,
185 #[serde(
186 default,
187 skip_serializing_if = "Option::is_none",
188 deserialize_with = "double_option"
189 )]
190 pub days_valid: Option<Option<i64>>,
191 #[serde(
192 default,
193 skip_serializing_if = "Option::is_none",
194 deserialize_with = "double_option"
195 )]
196 pub external_id: Option<Option<String>>,
197 #[serde(
198 default,
199 skip_serializing_if = "Option::is_none",
200 deserialize_with = "double_option"
201 )]
202 pub template_id: Option<Option<String>>,
203 #[serde(
204 default,
205 skip_serializing_if = "Option::is_none",
206 deserialize_with = "double_option"
207 )]
208 pub external_system_name: Option<Option<String>>,
209 #[serde(
210 default,
211 skip_serializing_if = "Option::is_none",
212 deserialize_with = "double_option"
213 )]
214 pub request_flow: Option<Option<String>>,
215 #[serde(
216 default,
217 skip_serializing_if = "Option::is_none",
218 deserialize_with = "double_option"
219 )]
220 pub source_files: Option<Option<Vec<FileBase>>>,
221 #[serde(
222 default,
223 skip_serializing_if = "Option::is_none",
224 deserialize_with = "double_option"
225 )]
226 pub signature_color: Option<Option<SignRequestCreateRequestSignatureColor>>,
227 pub signers: Vec<SignRequestCreateSigner>,
228 #[serde(default, skip_serializing_if = "Option::is_none")]
229 pub parent_folder: Option<FolderMini>,
230}
231
232#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
233pub struct SignRequestCreateSigner {
234 #[serde(
235 default,
236 skip_serializing_if = "Option::is_none",
237 deserialize_with = "double_option"
238 )]
239 pub email: Option<Option<String>>,
240 #[serde(default, skip_serializing_if = "Option::is_none")]
241 pub role: Option<SignRequestCreateSignerRole>,
242 #[serde(default, skip_serializing_if = "Option::is_none")]
243 pub is_in_person: Option<bool>,
244 #[serde(default, skip_serializing_if = "Option::is_none")]
245 pub order: Option<i64>,
246 #[serde(
247 default,
248 skip_serializing_if = "Option::is_none",
249 deserialize_with = "double_option"
250 )]
251 pub embed_url_external_user_id: Option<Option<String>>,
252 #[serde(
253 default,
254 skip_serializing_if = "Option::is_none",
255 deserialize_with = "double_option"
256 )]
257 pub redirect_url: Option<Option<String>>,
258 #[serde(
259 default,
260 skip_serializing_if = "Option::is_none",
261 deserialize_with = "double_option"
262 )]
263 pub declined_redirect_url: Option<Option<String>>,
264 #[serde(
265 default,
266 skip_serializing_if = "Option::is_none",
267 deserialize_with = "double_option"
268 )]
269 pub login_required: Option<Option<bool>>,
270 #[serde(
271 default,
272 skip_serializing_if = "Option::is_none",
273 deserialize_with = "double_option"
274 )]
275 pub verification_phone_number: Option<Option<String>>,
276 #[serde(
277 default,
278 skip_serializing_if = "Option::is_none",
279 deserialize_with = "double_option"
280 )]
281 pub password: Option<Option<String>>,
282 #[serde(
283 default,
284 skip_serializing_if = "Option::is_none",
285 deserialize_with = "double_option"
286 )]
287 pub signer_group_id: Option<Option<String>>,
288 #[serde(
289 default,
290 skip_serializing_if = "Option::is_none",
291 deserialize_with = "double_option"
292 )]
293 pub suppress_notifications: Option<Option<bool>>,
294 #[serde(
295 default,
296 skip_serializing_if = "Option::is_none",
297 deserialize_with = "double_option"
298 )]
299 pub language: Option<Option<String>>,
300}
301
302#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
303pub struct SignRequestPrefillTag {
304 #[serde(
305 default,
306 skip_serializing_if = "Option::is_none",
307 deserialize_with = "double_option"
308 )]
309 pub document_tag_id: Option<Option<String>>,
310 #[serde(
311 default,
312 skip_serializing_if = "Option::is_none",
313 deserialize_with = "double_option"
314 )]
315 pub text_value: Option<Option<String>>,
316 #[serde(
317 default,
318 skip_serializing_if = "Option::is_none",
319 deserialize_with = "double_option"
320 )]
321 pub checkbox_value: Option<Option<bool>>,
322 #[serde(
323 default,
324 skip_serializing_if = "Option::is_none",
325 deserialize_with = "double_option"
326 )]
327 pub date_value: Option<Option<chrono::NaiveDate>>,
328}
329
330#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
331pub struct SignRequests {
332 #[serde(default, skip_serializing_if = "Option::is_none")]
333 pub limit: Option<i64>,
334 #[serde(
335 default,
336 skip_serializing_if = "Option::is_none",
337 deserialize_with = "double_option"
338 )]
339 pub next_marker: Option<Option<String>>,
340 #[serde(default, skip_serializing_if = "Option::is_none")]
341 pub entries: Option<Vec<SignRequest>>,
342}
343
344#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
345pub struct SignRequestSigner {
346 pub email: Option<String>,
347 #[serde(default, skip_serializing_if = "Option::is_none")]
348 pub role: Option<SignRequestCreateSignerRole>,
349 #[serde(default, skip_serializing_if = "Option::is_none")]
350 pub is_in_person: Option<bool>,
351 #[serde(default, skip_serializing_if = "Option::is_none")]
352 pub order: Option<i64>,
353 #[serde(
354 default,
355 skip_serializing_if = "Option::is_none",
356 deserialize_with = "double_option"
357 )]
358 pub embed_url_external_user_id: Option<Option<String>>,
359 #[serde(
360 default,
361 skip_serializing_if = "Option::is_none",
362 deserialize_with = "double_option"
363 )]
364 pub redirect_url: Option<Option<String>>,
365 #[serde(
366 default,
367 skip_serializing_if = "Option::is_none",
368 deserialize_with = "double_option"
369 )]
370 pub declined_redirect_url: Option<Option<String>>,
371 #[serde(
372 default,
373 skip_serializing_if = "Option::is_none",
374 deserialize_with = "double_option"
375 )]
376 pub login_required: Option<Option<bool>>,
377 #[serde(
378 default,
379 skip_serializing_if = "Option::is_none",
380 deserialize_with = "double_option"
381 )]
382 pub verification_phone_number: Option<Option<String>>,
383 #[serde(
384 default,
385 skip_serializing_if = "Option::is_none",
386 deserialize_with = "double_option"
387 )]
388 pub password: Option<Option<String>>,
389 #[serde(
390 default,
391 skip_serializing_if = "Option::is_none",
392 deserialize_with = "double_option"
393 )]
394 pub signer_group_id: Option<Option<String>>,
395 #[serde(
396 default,
397 skip_serializing_if = "Option::is_none",
398 deserialize_with = "double_option"
399 )]
400 pub suppress_notifications: Option<Option<bool>>,
401 #[serde(
402 default,
403 skip_serializing_if = "Option::is_none",
404 deserialize_with = "double_option"
405 )]
406 pub language: Option<Option<String>>,
407 #[serde(default, skip_serializing_if = "Option::is_none")]
408 pub has_viewed_document: Option<bool>,
409 #[serde(
410 default,
411 skip_serializing_if = "Option::is_none",
412 deserialize_with = "double_option"
413 )]
414 pub signer_decision: Option<Option<SignRequestSignerSignerDecision>>,
415 #[serde(default, skip_serializing_if = "Option::is_none")]
416 pub inputs: Option<Vec<SignRequestSignerInput>>,
417 #[serde(
418 default,
419 skip_serializing_if = "Option::is_none",
420 deserialize_with = "double_option"
421 )]
422 pub embed_url: Option<Option<String>>,
423 #[serde(
424 default,
425 skip_serializing_if = "Option::is_none",
426 deserialize_with = "double_option"
427 )]
428 pub iframeable_embed_url: Option<Option<String>>,
429 #[serde(
430 default,
431 skip_serializing_if = "Option::is_none",
432 deserialize_with = "double_option"
433 )]
434 pub attachments: Option<Option<Vec<SignRequestSignerAttachment>>>,
435}
436
437#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
438pub struct SignRequestSignerAttachment {
439 #[serde(
440 default,
441 skip_serializing_if = "Option::is_none",
442 deserialize_with = "double_option"
443 )]
444 pub id: Option<Option<String>>,
445 #[serde(
446 default,
447 skip_serializing_if = "Option::is_none",
448 deserialize_with = "double_option"
449 )]
450 pub name: Option<Option<String>>,
451}
452
453#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
454pub struct SignRequestSignerInput {
455 #[serde(
456 default,
457 skip_serializing_if = "Option::is_none",
458 deserialize_with = "double_option"
459 )]
460 pub document_tag_id: Option<Option<String>>,
461 #[serde(
462 default,
463 skip_serializing_if = "Option::is_none",
464 deserialize_with = "double_option"
465 )]
466 pub text_value: Option<Option<String>>,
467 #[serde(
468 default,
469 skip_serializing_if = "Option::is_none",
470 deserialize_with = "double_option"
471 )]
472 pub checkbox_value: Option<Option<bool>>,
473 #[serde(
474 default,
475 skip_serializing_if = "Option::is_none",
476 deserialize_with = "double_option"
477 )]
478 pub date_value: Option<Option<chrono::NaiveDate>>,
479 #[serde(default, skip_serializing_if = "Option::is_none")]
480 pub r#type: Option<SignRequestSignerInputType>,
481 #[serde(default, skip_serializing_if = "Option::is_none")]
482 pub content_type: Option<SignRequestSignerInputContentType>,
483 pub page_index: i64,
484 #[serde(default, skip_serializing_if = "Option::is_none")]
485 pub read_only: Option<bool>,
486 #[serde(
487 default,
488 skip_serializing_if = "Option::is_none",
489 deserialize_with = "double_option"
490 )]
491 pub validation: Option<Option<SignRequestSignerInputValidation>>,
492 #[serde(
493 default,
494 skip_serializing_if = "Option::is_none",
495 deserialize_with = "double_option"
496 )]
497 pub reason: Option<Option<String>>,
498 #[serde(
499 default,
500 skip_serializing_if = "Option::is_none",
501 deserialize_with = "double_option"
502 )]
503 pub is_validated: Option<Option<bool>>,
504}
505
506#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
507#[serde(transparent)]
508pub struct SignRequestType(pub String);
509
510impl SignRequestType {
511 pub const SIGN_REQUEST: &'static str = "sign-request";
512}
513
514#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
515#[serde(transparent)]
516pub struct SignRequestStatus(pub String);
517
518impl SignRequestStatus {
519 pub const CONVERTING: &'static str = "converting";
520 pub const CREATED: &'static str = "created";
521 pub const SENT: &'static str = "sent";
522 pub const VIEWED: &'static str = "viewed";
523 pub const SIGNED: &'static str = "signed";
524 pub const CANCELLED: &'static str = "cancelled";
525 pub const DECLINED: &'static str = "declined";
526 pub const ERROR: &'static str = "error";
527 pub const ERROR_CONVERTING: &'static str = "error_converting";
528 pub const ERROR_SENDING: &'static str = "error_sending";
529 pub const EXPIRED: &'static str = "expired";
530 pub const FINALIZING: &'static str = "finalizing";
531 pub const ERROR_FINALIZING: &'static str = "error_finalizing";
532}
533
534#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
535pub struct SignRequestSignFiles {
536 #[serde(default, skip_serializing_if = "Option::is_none")]
537 pub files: Option<Vec<FileMini>>,
538 #[serde(default, skip_serializing_if = "Option::is_none")]
539 pub is_ready_for_download: Option<bool>,
540}
541
542#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
543#[serde(transparent)]
544pub struct SignRequestCreateRequestSignatureColor(pub String);
545
546impl SignRequestCreateRequestSignatureColor {
547 pub const BLUE: &'static str = "blue";
548 pub const BLACK: &'static str = "black";
549 pub const RED: &'static str = "red";
550}
551
552#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
553#[serde(transparent)]
554pub struct SignerDecisionType(pub String);
555
556impl SignerDecisionType {
557 pub const SIGNED: &'static str = "signed";
558 pub const DECLINED: &'static str = "declined";
559}
560
561#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
562pub struct SignRequestSignerSignerDecision {
563 #[serde(default, skip_serializing_if = "Option::is_none")]
564 pub r#type: Option<SignerDecisionType>,
565 #[serde(default, skip_serializing_if = "Option::is_none")]
566 pub finalized_at: Option<chrono::DateTime<chrono::Utc>>,
567 #[serde(
568 default,
569 skip_serializing_if = "Option::is_none",
570 deserialize_with = "double_option"
571 )]
572 pub additional_info: Option<Option<String>>,
573}
574
575#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
576#[serde(transparent)]
577pub struct SignRequestSignerInputType(pub String);
578
579impl SignRequestSignerInputType {
580 pub const SIGNATURE: &'static str = "signature";
581 pub const DATE: &'static str = "date";
582 pub const TEXT: &'static str = "text";
583 pub const CHECKBOX: &'static str = "checkbox";
584 pub const RADIO: &'static str = "radio";
585 pub const DROPDOWN: &'static str = "dropdown";
586}