1#![allow(
6 missing_docs,
7 clippy::doc_lazy_continuation,
8 clippy::doc_overindented_list_items
9)]
10
11use serde::{Deserialize, Serialize};
12
13#[derive(Debug, Clone, Default, Serialize, Deserialize)]
15pub struct A2PComplianceDTO {
16 #[serde(
18 rename = "enableA2PCompliance",
19 default,
20 skip_serializing_if = "Option::is_none"
21 )]
22 pub enable_a2_p_compliance: Option<bool>,
23 #[serde(
25 rename = "a2pOptInForm1",
26 default,
27 skip_serializing_if = "Option::is_none"
28 )]
29 pub a2p_opt_in_form1: Option<String>,
30 #[serde(
32 rename = "a2pOptInForm1ShowCheckbox",
33 default,
34 skip_serializing_if = "Option::is_none"
35 )]
36 pub a2p_opt_in_form1_show_checkbox: Option<bool>,
37 #[serde(
39 rename = "a2pOptInForm1PreChecked",
40 default,
41 skip_serializing_if = "Option::is_none"
42 )]
43 pub a2p_opt_in_form1_pre_checked: Option<bool>,
44 #[serde(
46 rename = "isA2POptInForm2",
47 default,
48 skip_serializing_if = "Option::is_none"
49 )]
50 pub is_a2_p_opt_in_form2: Option<bool>,
51 #[serde(
53 rename = "a2pOptInForm2",
54 default,
55 skip_serializing_if = "Option::is_none"
56 )]
57 pub a2p_opt_in_form2: Option<String>,
58 #[serde(
60 rename = "a2pOptInForm2ShowCheckbox",
61 default,
62 skip_serializing_if = "Option::is_none"
63 )]
64 pub a2p_opt_in_form2_show_checkbox: Option<bool>,
65 #[serde(
67 rename = "a2pOptInForm2PreChecked",
68 default,
69 skip_serializing_if = "Option::is_none"
70 )]
71 pub a2p_opt_in_form2_pre_checked: Option<bool>,
72 #[serde(
74 rename = "privacyPolicyLink",
75 default,
76 skip_serializing_if = "Option::is_none"
77 )]
78 pub privacy_policy_link: Option<String>,
79 #[serde(
81 rename = "termsOfServiceLink",
82 default,
83 skip_serializing_if = "Option::is_none"
84 )]
85 pub terms_of_service_link: Option<String>,
86 #[serde(
88 rename = "isA2POptInForm1",
89 default,
90 skip_serializing_if = "Option::is_none"
91 )]
92 pub is_a2_p_opt_in_form1: Option<bool>,
93 #[serde(
95 rename = "messageType",
96 default,
97 skip_serializing_if = "Option::is_none"
98 )]
99 pub message_type: Option<String>,
100}
101
102#[derive(Debug, Clone, Default, Serialize, Deserialize)]
104pub struct AcknowledgementDetailsDTO {
105 #[serde(default, skip_serializing_if = "Option::is_none")]
107 pub icon: Option<String>,
108 #[serde(
110 rename = "placeholderColor",
111 default,
112 skip_serializing_if = "Option::is_none"
113 )]
114 pub placeholder_color: Option<String>,
115 #[serde(
117 rename = "liveChatIcon",
118 default,
119 skip_serializing_if = "Option::is_none"
120 )]
121 pub live_chat_icon: Option<String>,
122 #[serde(
124 rename = "liveChatPlaceholderColor",
125 default,
126 skip_serializing_if = "Option::is_none"
127 )]
128 pub live_chat_placeholder_color: Option<String>,
129}
130
131#[derive(Debug, Clone, Default, Serialize, Deserialize)]
133pub struct AdvanceSettingsDTO {
134 #[serde(
136 rename = "brandingTitle",
137 default,
138 skip_serializing_if = "Option::is_none"
139 )]
140 pub branding_title: Option<String>,
141 #[serde(default, skip_serializing_if = "Option::is_none")]
143 pub redirect: Option<RedirectDTO>,
144 #[serde(
146 rename = "enableContactForm",
147 default,
148 skip_serializing_if = "Option::is_none"
149 )]
150 pub enable_contact_form: Option<bool>,
151 #[serde(
153 rename = "defaultConsentCheck",
154 default,
155 skip_serializing_if = "Option::is_none"
156 )]
157 pub default_consent_check: Option<bool>,
158 #[serde(
160 rename = "businessOfficeHours",
161 default,
162 skip_serializing_if = "Option::is_none"
163 )]
164 pub business_office_hours: Option<BusinessOfficeHoursDTO>,
165 #[serde(
167 rename = "contactFormOptions",
168 default,
169 skip_serializing_if = "Vec::is_empty"
170 )]
171 pub contact_form_options: Vec<String>,
172 #[serde(
176 rename = "allInOneChatTypes",
177 default,
178 skip_serializing_if = "Vec::is_empty"
179 )]
180 pub all_in_one_chat_types: Vec<String>,
181 #[serde(
183 rename = "allInOneInitialMsg",
184 default,
185 skip_serializing_if = "Option::is_none"
186 )]
187 pub all_in_one_initial_msg: Option<String>,
188 #[serde(
190 rename = "contactFormIntroMessage",
191 default,
192 skip_serializing_if = "Option::is_none"
193 )]
194 pub contact_form_intro_message: Option<String>,
195 #[serde(
197 rename = "contactFormSystemMessage",
198 default,
199 skip_serializing_if = "Option::is_none"
200 )]
201 pub contact_form_system_message: Option<String>,
202 #[serde(
204 rename = "prefilledMessageText",
205 default,
206 skip_serializing_if = "Option::is_none"
207 )]
208 pub prefilled_message_text: Option<String>,
209 #[serde(
211 rename = "voiceAiAgent",
212 default,
213 skip_serializing_if = "Option::is_none"
214 )]
215 pub voice_ai_agent: Option<serde_json::Value>,
216 #[serde(rename = "fbPage", default, skip_serializing_if = "Option::is_none")]
218 pub fb_page: Option<FBPageDTO>,
219 #[serde(
221 rename = "instagramPage",
222 default,
223 skip_serializing_if = "Option::is_none"
224 )]
225 pub instagram_page: Option<InstagramPageDTO>,
226 #[serde(
228 rename = "playNotificationSound",
229 default,
230 skip_serializing_if = "Option::is_none"
231 )]
232 pub play_notification_sound: Option<bool>,
233 #[serde(
235 rename = "voiceAiSendActionText",
236 default,
237 skip_serializing_if = "Option::is_none"
238 )]
239 pub voice_ai_send_action_text: Option<String>,
240 #[serde(
242 rename = "aTwoPCompliance",
243 default,
244 skip_serializing_if = "Option::is_none"
245 )]
246 pub a_two_p_compliance: Option<A2PComplianceDTO>,
247}
248
249#[derive(Debug, Clone, Default, Serialize, Deserialize)]
251pub struct BusinessOfficeHoursDTO {
252 #[serde(
254 rename = "enableBusinessHours",
255 default,
256 skip_serializing_if = "Option::is_none"
257 )]
258 pub enable_business_hours: Option<bool>,
259 #[serde(rename = "openHours", default, skip_serializing_if = "Vec::is_empty")]
261 pub open_hours: Vec<String>,
262 #[serde(default, skip_serializing_if = "Option::is_none")]
264 pub timezone: Option<String>,
265 #[serde(
267 rename = "outsideOfficeHoursWelcomeMsg",
268 default,
269 skip_serializing_if = "Option::is_none"
270 )]
271 pub outside_office_hours_welcome_msg: Option<String>,
272}
273
274#[derive(Debug, Clone, Default, Serialize, Deserialize)]
276pub struct CloneChatWidgetDTO {
277 #[serde(rename = "locationId")]
280 pub location_id: String,
281 #[serde(rename = "chatWidgetId")]
284 pub chat_widget_id: String,
285 #[serde(default, skip_serializing_if = "Option::is_none")]
287 pub name: Option<String>,
288}
289
290#[derive(Debug, Clone, Default, Serialize, Deserialize)]
292pub struct CreateWidgetDTO {
293 pub version: f64,
296 #[serde(rename = "chatType")]
300 pub chat_type: String,
301 pub name: String,
304 #[serde(rename = "locationId")]
307 pub location_id: String,
308 #[serde(default, skip_serializing_if = "Option::is_none")]
310 pub deleted: Option<bool>,
311 #[serde(default, skip_serializing_if = "Option::is_none")]
313 pub default: Option<bool>,
314 #[serde(default, skip_serializing_if = "Option::is_none")]
316 pub settings: Option<WidgetSettingsDTO>,
317}
318
319#[derive(Debug, Clone, Default, Serialize, Deserialize)]
321pub struct FBPageDTO {
322 #[serde(
324 rename = "facebookPageId",
325 default,
326 skip_serializing_if = "Option::is_none"
327 )]
328 pub facebook_page_id: Option<String>,
329 #[serde(
331 rename = "facebookPageName",
332 default,
333 skip_serializing_if = "Option::is_none"
334 )]
335 pub facebook_page_name: Option<String>,
336}
337
338#[derive(Debug, Clone, Default, Serialize, Deserialize)]
340pub struct InstagramPageDTO {
341 #[serde(
343 rename = "facebookPageId",
344 default,
345 skip_serializing_if = "Option::is_none"
346 )]
347 pub facebook_page_id: Option<String>,
348 #[serde(
350 rename = "facebookPageName",
351 default,
352 skip_serializing_if = "Option::is_none"
353 )]
354 pub facebook_page_name: Option<String>,
355 #[serde(
357 rename = "instagramPageId",
358 default,
359 skip_serializing_if = "Option::is_none"
360 )]
361 pub instagram_page_id: Option<String>,
362 #[serde(
364 rename = "instagramUsername",
365 default,
366 skip_serializing_if = "Option::is_none"
367 )]
368 pub instagram_username: Option<String>,
369}
370
371#[derive(Debug, Clone, Default, Serialize, Deserialize)]
373pub struct RedirectDTO {
374 #[serde(
376 rename = "redirectAction",
377 default,
378 skip_serializing_if = "Option::is_none"
379 )]
380 pub redirect_action: Option<bool>,
381 #[serde(
383 rename = "redirectWebsite",
384 default,
385 skip_serializing_if = "Option::is_none"
386 )]
387 pub redirect_website: Option<String>,
388 #[serde(
390 rename = "redirectText",
391 default,
392 skip_serializing_if = "Option::is_none"
393 )]
394 pub redirect_text: Option<String>,
395}
396
397#[derive(Debug, Clone, Default, Serialize, Deserialize)]
399pub struct UpdateWidgetDTO {
400 #[serde(default, skip_serializing_if = "Option::is_none")]
402 pub version: Option<f64>,
403 #[serde(rename = "chatType", default, skip_serializing_if = "Option::is_none")]
406 pub chat_type: Option<String>,
407 #[serde(default, skip_serializing_if = "Option::is_none")]
409 pub name: Option<String>,
410 #[serde(default, skip_serializing_if = "Option::is_none")]
412 pub default: Option<bool>,
413 #[serde(default, skip_serializing_if = "Option::is_none")]
415 pub settings: Option<WidgetSettingsDTO>,
416}
417
418#[derive(Debug, Clone, Default, Serialize, Deserialize)]
420pub struct WidgetSettingsCustomizationDTO {
421 #[serde(default, skip_serializing_if = "Option::is_none")]
423 pub position: Option<String>,
424 #[serde(default, skip_serializing_if = "Option::is_none")]
426 pub sizes: Option<WidgetSettingsCustomizationSizeDTO>,
427}
428
429#[derive(Debug, Clone, Default, Serialize, Deserialize)]
431pub struct WidgetSettingsCustomizationSizeDTO {
432 #[serde(default, skip_serializing_if = "Option::is_none")]
434 pub width: Option<f64>,
435 #[serde(default, skip_serializing_if = "Option::is_none")]
437 pub height: Option<f64>,
438}
439
440#[derive(Debug, Clone, Default, Serialize, Deserialize)]
442pub struct WidgetSettingsDTO {
443 #[serde(
445 rename = "acknowledgementDetails",
446 default,
447 skip_serializing_if = "Option::is_none"
448 )]
449 pub acknowledgement_details: Option<AcknowledgementDetailsDTO>,
450 #[serde(
452 rename = "agencyName",
453 default,
454 skip_serializing_if = "Option::is_none"
455 )]
456 pub agency_name: Option<String>,
457 #[serde(
459 rename = "agencyWebsite",
460 default,
461 skip_serializing_if = "Option::is_none"
462 )]
463 pub agency_website: Option<String>,
464 #[serde(
466 rename = "allowAvatarImage",
467 default,
468 skip_serializing_if = "Option::is_none"
469 )]
470 pub allow_avatar_image: Option<bool>,
471 #[serde(
473 rename = "autoCountryCode",
474 default,
475 skip_serializing_if = "Option::is_none"
476 )]
477 pub auto_country_code: Option<bool>,
478 #[serde(
480 rename = "countryCode",
481 default,
482 skip_serializing_if = "Option::is_none"
483 )]
484 pub country_code: Option<String>,
485 #[serde(rename = "chatType")]
488 pub chat_type: String,
489 #[serde(
491 rename = "promptType",
492 default,
493 skip_serializing_if = "Option::is_none"
494 )]
495 pub prompt_type: Option<String>,
496 #[serde(rename = "chatIcon")]
499 pub chat_icon: String,
500 #[serde(
502 rename = "enableRevisitMessage",
503 default,
504 skip_serializing_if = "Option::is_none"
505 )]
506 pub enable_revisit_message: Option<bool>,
507 #[serde(default, skip_serializing_if = "Option::is_none")]
509 pub heading: Option<String>,
510 #[serde(rename = "legalMsg", default, skip_serializing_if = "Option::is_none")]
512 pub legal_msg: Option<String>,
513 #[serde(
515 rename = "liveChatAckMsg",
516 default,
517 skip_serializing_if = "Option::is_none"
518 )]
519 pub live_chat_ack_msg: Option<String>,
520 #[serde(
522 rename = "liveChatEndedMsg",
523 default,
524 skip_serializing_if = "Option::is_none"
525 )]
526 pub live_chat_ended_msg: Option<String>,
527 #[serde(
529 rename = "liveChatFeedbackMsg",
530 default,
531 skip_serializing_if = "Option::is_none"
532 )]
533 pub live_chat_feedback_msg: Option<String>,
534 #[serde(
536 rename = "liveChatFeedbackNote",
537 default,
538 skip_serializing_if = "Option::is_none"
539 )]
540 pub live_chat_feedback_note: Option<String>,
541 #[serde(
543 rename = "liveChatIntroMsg",
544 default,
545 skip_serializing_if = "Option::is_none"
546 )]
547 pub live_chat_intro_msg: Option<String>,
548 #[serde(
550 rename = "liveChatUserInactiveMsg",
551 default,
552 skip_serializing_if = "Option::is_none"
553 )]
554 pub live_chat_user_inactive_msg: Option<String>,
555 #[serde(
557 rename = "liveChatUserInactiveTime",
558 default,
559 skip_serializing_if = "Option::is_none"
560 )]
561 pub live_chat_user_inactive_time: Option<String>,
562 #[serde(
564 rename = "liveChatVisitorInactiveMsg",
565 default,
566 skip_serializing_if = "Option::is_none"
567 )]
568 pub live_chat_visitor_inactive_msg: Option<String>,
569 #[serde(
571 rename = "liveChatVisitorInactiveTime",
572 default,
573 skip_serializing_if = "Option::is_none"
574 )]
575 pub live_chat_visitor_inactive_time: Option<String>,
576 #[serde(default, skip_serializing_if = "Option::is_none")]
578 pub locale: Option<String>,
579 #[serde(
581 rename = "promptAvatar",
582 default,
583 skip_serializing_if = "Option::is_none"
584 )]
585 pub prompt_avatar: Option<String>,
586 #[serde(
588 rename = "promptAvatarAltText",
589 default,
590 skip_serializing_if = "Option::is_none"
591 )]
592 pub prompt_avatar_alt_text: Option<String>,
593 #[serde(
595 rename = "isPromptAvatarImageOptimize",
596 default,
597 skip_serializing_if = "Option::is_none"
598 )]
599 pub is_prompt_avatar_image_optimize: Option<bool>,
600 #[serde(rename = "promptMsg", default, skip_serializing_if = "Option::is_none")]
602 pub prompt_msg: Option<String>,
603 #[serde(
605 rename = "revisitPromptMsg",
606 default,
607 skip_serializing_if = "Option::is_none"
608 )]
609 pub revisit_prompt_msg: Option<String>,
610 #[serde(
612 rename = "sendActionText",
613 default,
614 skip_serializing_if = "Option::is_none"
615 )]
616 pub send_action_text: Option<String>,
617 #[serde(
619 rename = "showAgencyBranding",
620 default,
621 skip_serializing_if = "Option::is_none"
622 )]
623 pub show_agency_branding: Option<bool>,
624 #[serde(
626 rename = "showConsentCheckbox",
627 default,
628 skip_serializing_if = "Option::is_none"
629 )]
630 pub show_consent_checkbox: Option<bool>,
631 #[serde(
633 rename = "showLiveChatWelcomeMsg",
634 default,
635 skip_serializing_if = "Option::is_none"
636 )]
637 pub show_live_chat_welcome_msg: Option<bool>,
638 #[serde(
640 rename = "showPrompt",
641 default,
642 skip_serializing_if = "Option::is_none"
643 )]
644 pub show_prompt: Option<bool>,
645 #[serde(
647 rename = "subHeading",
648 default,
649 skip_serializing_if = "Option::is_none"
650 )]
651 pub sub_heading: Option<String>,
652 #[serde(
654 rename = "successMsg",
655 default,
656 skip_serializing_if = "Option::is_none"
657 )]
658 pub success_msg: Option<String>,
659 #[serde(
661 rename = "supportContact",
662 default,
663 skip_serializing_if = "Option::is_none"
664 )]
665 pub support_contact: Option<String>,
666 #[serde(
668 rename = "thankYouMsg",
669 default,
670 skip_serializing_if = "Option::is_none"
671 )]
672 pub thank_you_msg: Option<String>,
673 #[serde(default, skip_serializing_if = "Option::is_none")]
675 pub theme: Option<WidgetSettingsThemeDTO>,
676 #[serde(
678 rename = "useEmailField",
679 default,
680 skip_serializing_if = "Option::is_none"
681 )]
682 pub use_email_field: Option<bool>,
683 #[serde(rename = "waNumber", default, skip_serializing_if = "Option::is_none")]
685 pub wa_number: Option<String>,
686 #[serde(
688 rename = "widgetPrimaryColor",
689 default,
690 skip_serializing_if = "Option::is_none"
691 )]
692 pub widget_primary_color: Option<String>,
693 #[serde(
695 rename = "representativeAssignedMessage",
696 default,
697 skip_serializing_if = "Option::is_none"
698 )]
699 pub representative_assigned_message: Option<String>,
700 #[serde(default, skip_serializing_if = "Option::is_none")]
702 pub dimensions: Option<WidgetSettingsCustomizationDTO>,
703 #[serde(
705 rename = "advanceSettings",
706 default,
707 skip_serializing_if = "Option::is_none"
708 )]
709 pub advance_settings: Option<AdvanceSettingsDTO>,
710 #[serde(
712 rename = "locationCountryCode",
713 default,
714 skip_serializing_if = "Option::is_none"
715 )]
716 pub location_country_code: Option<String>,
717 #[serde(rename = "widgetId", default, skip_serializing_if = "Option::is_none")]
719 pub widget_id: Option<String>,
720 #[serde(
722 rename = "widgetPlacement",
723 default,
724 skip_serializing_if = "Option::is_none"
725 )]
726 pub widget_placement: Option<String>,
727}
728
729#[derive(Debug, Clone, Default, Serialize, Deserialize)]
731pub struct WidgetSettingsThemeCustomColorDTO {
732 #[serde(
734 rename = "chatBubbleColor",
735 default,
736 skip_serializing_if = "Option::is_none"
737 )]
738 pub chat_bubble_color: Option<String>,
739 #[serde(
741 rename = "backgroundColor",
742 default,
743 skip_serializing_if = "Option::is_none"
744 )]
745 pub background_color: Option<String>,
746 #[serde(
748 rename = "headerColor",
749 default,
750 skip_serializing_if = "Option::is_none"
751 )]
752 pub header_color: Option<String>,
753 #[serde(
755 rename = "buttonColor",
756 default,
757 skip_serializing_if = "Option::is_none"
758 )]
759 pub button_color: Option<String>,
760 #[serde(
762 rename = "avatarBackgroundColor",
763 default,
764 skip_serializing_if = "Option::is_none"
765 )]
766 pub avatar_background_color: Option<String>,
767 #[serde(
769 rename = "avatarBorderColor",
770 default,
771 skip_serializing_if = "Option::is_none"
772 )]
773 pub avatar_border_color: Option<String>,
774 #[serde(
776 rename = "senderMessageColor",
777 default,
778 skip_serializing_if = "Option::is_none"
779 )]
780 pub sender_message_color: Option<String>,
781 #[serde(
783 rename = "receivedMessageColor",
784 default,
785 skip_serializing_if = "Option::is_none"
786 )]
787 pub received_message_color: Option<String>,
788}
789
790#[derive(Debug, Clone, Default, Serialize, Deserialize)]
792pub struct WidgetSettingsThemeDTO {
793 #[serde(default, skip_serializing_if = "Option::is_none")]
795 pub name: Option<String>,
796 #[serde(default, skip_serializing_if = "Option::is_none")]
798 pub colors: Option<WidgetSettingsThemeCustomColorDTO>,
799}