1#![allow(
14 missing_docs,
15 clippy::doc_lazy_continuation,
16 clippy::doc_overindented_list_items
17)]
18
19use serde::{Deserialize, Serialize};
20
21#[derive(Debug, Clone, Default, Serialize, Deserialize)]
23pub struct A2PComplianceDTO {
24 #[serde(
26 rename = "enableA2PCompliance",
27 default,
28 skip_serializing_if = "Option::is_none"
29 )]
30 pub enable_a2_p_compliance: Option<bool>,
31 #[serde(
33 rename = "a2pOptInForm1",
34 default,
35 skip_serializing_if = "Option::is_none"
36 )]
37 pub a2p_opt_in_form1: Option<String>,
38 #[serde(
40 rename = "a2pOptInForm1ShowCheckbox",
41 default,
42 skip_serializing_if = "Option::is_none"
43 )]
44 pub a2p_opt_in_form1_show_checkbox: Option<bool>,
45 #[serde(
47 rename = "a2pOptInForm1PreChecked",
48 default,
49 skip_serializing_if = "Option::is_none"
50 )]
51 pub a2p_opt_in_form1_pre_checked: Option<bool>,
52 #[serde(
54 rename = "isA2POptInForm2",
55 default,
56 skip_serializing_if = "Option::is_none"
57 )]
58 pub is_a2_p_opt_in_form2: Option<bool>,
59 #[serde(
61 rename = "a2pOptInForm2",
62 default,
63 skip_serializing_if = "Option::is_none"
64 )]
65 pub a2p_opt_in_form2: Option<String>,
66 #[serde(
68 rename = "a2pOptInForm2ShowCheckbox",
69 default,
70 skip_serializing_if = "Option::is_none"
71 )]
72 pub a2p_opt_in_form2_show_checkbox: Option<bool>,
73 #[serde(
75 rename = "a2pOptInForm2PreChecked",
76 default,
77 skip_serializing_if = "Option::is_none"
78 )]
79 pub a2p_opt_in_form2_pre_checked: Option<bool>,
80 #[serde(
82 rename = "privacyPolicyLink",
83 default,
84 skip_serializing_if = "Option::is_none"
85 )]
86 pub privacy_policy_link: Option<String>,
87 #[serde(
89 rename = "termsOfServiceLink",
90 default,
91 skip_serializing_if = "Option::is_none"
92 )]
93 pub terms_of_service_link: Option<String>,
94 #[serde(
96 rename = "isA2POptInForm1",
97 default,
98 skip_serializing_if = "Option::is_none"
99 )]
100 pub is_a2_p_opt_in_form1: Option<bool>,
101 #[serde(
103 rename = "messageType",
104 default,
105 skip_serializing_if = "Option::is_none"
106 )]
107 pub message_type: Option<String>,
108}
109
110#[derive(Debug, Clone, Default, Serialize, Deserialize)]
112pub struct AcknowledgementDetailsDTO {
113 #[serde(default, skip_serializing_if = "Option::is_none")]
115 pub icon: Option<String>,
116 #[serde(
118 rename = "placeholderColor",
119 default,
120 skip_serializing_if = "Option::is_none"
121 )]
122 pub placeholder_color: Option<String>,
123 #[serde(
125 rename = "liveChatIcon",
126 default,
127 skip_serializing_if = "Option::is_none"
128 )]
129 pub live_chat_icon: Option<String>,
130 #[serde(
132 rename = "liveChatPlaceholderColor",
133 default,
134 skip_serializing_if = "Option::is_none"
135 )]
136 pub live_chat_placeholder_color: Option<String>,
137}
138
139#[derive(Debug, Clone, Default, Serialize, Deserialize)]
141pub struct AdvanceSettingsDTO {
142 #[serde(
144 rename = "brandingTitle",
145 default,
146 skip_serializing_if = "Option::is_none"
147 )]
148 pub branding_title: Option<String>,
149 #[serde(default, skip_serializing_if = "Option::is_none")]
151 pub redirect: Option<RedirectDTO>,
152 #[serde(
154 rename = "enableContactForm",
155 default,
156 skip_serializing_if = "Option::is_none"
157 )]
158 pub enable_contact_form: Option<bool>,
159 #[serde(
161 rename = "defaultConsentCheck",
162 default,
163 skip_serializing_if = "Option::is_none"
164 )]
165 pub default_consent_check: Option<bool>,
166 #[serde(
168 rename = "businessOfficeHours",
169 default,
170 skip_serializing_if = "Option::is_none"
171 )]
172 pub business_office_hours: Option<BusinessOfficeHoursDTO>,
173 #[serde(
175 rename = "contactFormOptions",
176 default,
177 skip_serializing_if = "Vec::is_empty"
178 )]
179 pub contact_form_options: Vec<String>,
180 #[serde(
184 rename = "allInOneChatTypes",
185 default,
186 skip_serializing_if = "Vec::is_empty"
187 )]
188 pub all_in_one_chat_types: Vec<String>,
189 #[serde(
191 rename = "allInOneInitialMsg",
192 default,
193 skip_serializing_if = "Option::is_none"
194 )]
195 pub all_in_one_initial_msg: Option<String>,
196 #[serde(
198 rename = "contactFormIntroMessage",
199 default,
200 skip_serializing_if = "Option::is_none"
201 )]
202 pub contact_form_intro_message: Option<String>,
203 #[serde(
205 rename = "contactFormSystemMessage",
206 default,
207 skip_serializing_if = "Option::is_none"
208 )]
209 pub contact_form_system_message: Option<String>,
210 #[serde(
212 rename = "prefilledMessageText",
213 default,
214 skip_serializing_if = "Option::is_none"
215 )]
216 pub prefilled_message_text: Option<String>,
217 #[serde(
219 rename = "voiceAiAgent",
220 default,
221 skip_serializing_if = "Option::is_none"
222 )]
223 pub voice_ai_agent: Option<serde_json::Value>,
224 #[serde(rename = "fbPage", default, skip_serializing_if = "Option::is_none")]
226 pub fb_page: Option<FBPageDTO>,
227 #[serde(
229 rename = "instagramPage",
230 default,
231 skip_serializing_if = "Option::is_none"
232 )]
233 pub instagram_page: Option<InstagramPageDTO>,
234 #[serde(
236 rename = "playNotificationSound",
237 default,
238 skip_serializing_if = "Option::is_none"
239 )]
240 pub play_notification_sound: Option<bool>,
241 #[serde(
243 rename = "voiceAiSendActionText",
244 default,
245 skip_serializing_if = "Option::is_none"
246 )]
247 pub voice_ai_send_action_text: Option<String>,
248 #[serde(
250 rename = "aTwoPCompliance",
251 default,
252 skip_serializing_if = "Option::is_none"
253 )]
254 pub a_two_p_compliance: Option<A2PComplianceDTO>,
255}
256
257#[derive(Debug, Clone, Default, Serialize, Deserialize)]
259pub struct BusinessOfficeHoursDTO {
260 #[serde(
262 rename = "enableBusinessHours",
263 default,
264 skip_serializing_if = "Option::is_none"
265 )]
266 pub enable_business_hours: Option<bool>,
267 #[serde(rename = "openHours", default, skip_serializing_if = "Vec::is_empty")]
269 pub open_hours: Vec<String>,
270 #[serde(default, skip_serializing_if = "Option::is_none")]
272 pub timezone: Option<String>,
273 #[serde(
275 rename = "outsideOfficeHoursWelcomeMsg",
276 default,
277 skip_serializing_if = "Option::is_none"
278 )]
279 pub outside_office_hours_welcome_msg: Option<String>,
280}
281
282#[derive(Debug, Clone, Default, Serialize, Deserialize)]
284pub struct CloneChatWidgetDTO {
285 #[serde(rename = "locationId")]
288 pub location_id: String,
289 #[serde(rename = "chatWidgetId")]
292 pub chat_widget_id: String,
293 #[serde(default, skip_serializing_if = "Option::is_none")]
295 pub name: Option<String>,
296}
297
298#[derive(Debug, Clone, Default, Serialize, Deserialize)]
300pub struct CreateWidgetDTO {
301 pub version: f64,
304 #[serde(rename = "chatType")]
308 pub chat_type: String,
309 pub name: String,
312 #[serde(rename = "locationId")]
315 pub location_id: String,
316 #[serde(default, skip_serializing_if = "Option::is_none")]
318 pub deleted: Option<bool>,
319 #[serde(default, skip_serializing_if = "Option::is_none")]
321 pub default: Option<bool>,
322 #[serde(default, skip_serializing_if = "Option::is_none")]
324 pub settings: Option<WidgetSettingsDTO>,
325}
326
327#[derive(Debug, Clone, Default, Serialize, Deserialize)]
329pub struct FBPageDTO {
330 #[serde(
332 rename = "facebookPageId",
333 default,
334 skip_serializing_if = "Option::is_none"
335 )]
336 pub facebook_page_id: Option<String>,
337 #[serde(
339 rename = "facebookPageName",
340 default,
341 skip_serializing_if = "Option::is_none"
342 )]
343 pub facebook_page_name: Option<String>,
344}
345
346#[derive(Debug, Clone, Default, Serialize, Deserialize)]
348pub struct InstagramPageDTO {
349 #[serde(
351 rename = "facebookPageId",
352 default,
353 skip_serializing_if = "Option::is_none"
354 )]
355 pub facebook_page_id: Option<String>,
356 #[serde(
358 rename = "facebookPageName",
359 default,
360 skip_serializing_if = "Option::is_none"
361 )]
362 pub facebook_page_name: Option<String>,
363 #[serde(
365 rename = "instagramPageId",
366 default,
367 skip_serializing_if = "Option::is_none"
368 )]
369 pub instagram_page_id: Option<String>,
370 #[serde(
372 rename = "instagramUsername",
373 default,
374 skip_serializing_if = "Option::is_none"
375 )]
376 pub instagram_username: Option<String>,
377}
378
379#[derive(Debug, Clone, Default, Serialize, Deserialize)]
381pub struct RedirectDTO {
382 #[serde(
384 rename = "redirectAction",
385 default,
386 skip_serializing_if = "Option::is_none"
387 )]
388 pub redirect_action: Option<bool>,
389 #[serde(
391 rename = "redirectWebsite",
392 default,
393 skip_serializing_if = "Option::is_none"
394 )]
395 pub redirect_website: Option<String>,
396 #[serde(
398 rename = "redirectText",
399 default,
400 skip_serializing_if = "Option::is_none"
401 )]
402 pub redirect_text: Option<String>,
403}
404
405#[derive(Debug, Clone, Default, Serialize, Deserialize)]
407pub struct UpdateWidgetDTO {
408 #[serde(default, skip_serializing_if = "Option::is_none")]
410 pub version: Option<f64>,
411 #[serde(rename = "chatType", default, skip_serializing_if = "Option::is_none")]
414 pub chat_type: Option<String>,
415 #[serde(default, skip_serializing_if = "Option::is_none")]
417 pub name: Option<String>,
418 #[serde(default, skip_serializing_if = "Option::is_none")]
420 pub default: Option<bool>,
421 #[serde(default, skip_serializing_if = "Option::is_none")]
423 pub settings: Option<WidgetSettingsDTO>,
424}
425
426#[derive(Debug, Clone, Default, Serialize, Deserialize)]
428pub struct WidgetSettingsCustomizationDTO {
429 #[serde(default, skip_serializing_if = "Option::is_none")]
431 pub position: Option<String>,
432 #[serde(default, skip_serializing_if = "Option::is_none")]
434 pub sizes: Option<WidgetSettingsCustomizationSizeDTO>,
435}
436
437#[derive(Debug, Clone, Default, Serialize, Deserialize)]
439pub struct WidgetSettingsCustomizationSizeDTO {
440 #[serde(default, skip_serializing_if = "Option::is_none")]
442 pub width: Option<f64>,
443 #[serde(default, skip_serializing_if = "Option::is_none")]
445 pub height: Option<f64>,
446}
447
448#[derive(Debug, Clone, Default, Serialize, Deserialize)]
450pub struct WidgetSettingsDTO {
451 #[serde(
453 rename = "acknowledgementDetails",
454 default,
455 skip_serializing_if = "Option::is_none"
456 )]
457 pub acknowledgement_details: Option<AcknowledgementDetailsDTO>,
458 #[serde(
460 rename = "agencyName",
461 default,
462 skip_serializing_if = "Option::is_none"
463 )]
464 pub agency_name: Option<String>,
465 #[serde(
467 rename = "agencyWebsite",
468 default,
469 skip_serializing_if = "Option::is_none"
470 )]
471 pub agency_website: Option<String>,
472 #[serde(
474 rename = "allowAvatarImage",
475 default,
476 skip_serializing_if = "Option::is_none"
477 )]
478 pub allow_avatar_image: Option<bool>,
479 #[serde(
481 rename = "autoCountryCode",
482 default,
483 skip_serializing_if = "Option::is_none"
484 )]
485 pub auto_country_code: Option<bool>,
486 #[serde(
488 rename = "countryCode",
489 default,
490 skip_serializing_if = "Option::is_none"
491 )]
492 pub country_code: Option<String>,
493 #[serde(rename = "chatType")]
496 pub chat_type: String,
497 #[serde(
499 rename = "promptType",
500 default,
501 skip_serializing_if = "Option::is_none"
502 )]
503 pub prompt_type: Option<String>,
504 #[serde(rename = "chatIcon")]
507 pub chat_icon: String,
508 #[serde(
510 rename = "enableRevisitMessage",
511 default,
512 skip_serializing_if = "Option::is_none"
513 )]
514 pub enable_revisit_message: Option<bool>,
515 #[serde(default, skip_serializing_if = "Option::is_none")]
517 pub heading: Option<String>,
518 #[serde(rename = "legalMsg", default, skip_serializing_if = "Option::is_none")]
520 pub legal_msg: Option<String>,
521 #[serde(
523 rename = "liveChatAckMsg",
524 default,
525 skip_serializing_if = "Option::is_none"
526 )]
527 pub live_chat_ack_msg: Option<String>,
528 #[serde(
530 rename = "liveChatEndedMsg",
531 default,
532 skip_serializing_if = "Option::is_none"
533 )]
534 pub live_chat_ended_msg: Option<String>,
535 #[serde(
537 rename = "liveChatFeedbackMsg",
538 default,
539 skip_serializing_if = "Option::is_none"
540 )]
541 pub live_chat_feedback_msg: Option<String>,
542 #[serde(
544 rename = "liveChatFeedbackNote",
545 default,
546 skip_serializing_if = "Option::is_none"
547 )]
548 pub live_chat_feedback_note: Option<String>,
549 #[serde(
551 rename = "liveChatIntroMsg",
552 default,
553 skip_serializing_if = "Option::is_none"
554 )]
555 pub live_chat_intro_msg: Option<String>,
556 #[serde(
558 rename = "liveChatUserInactiveMsg",
559 default,
560 skip_serializing_if = "Option::is_none"
561 )]
562 pub live_chat_user_inactive_msg: Option<String>,
563 #[serde(
565 rename = "liveChatUserInactiveTime",
566 default,
567 skip_serializing_if = "Option::is_none"
568 )]
569 pub live_chat_user_inactive_time: Option<String>,
570 #[serde(
572 rename = "liveChatVisitorInactiveMsg",
573 default,
574 skip_serializing_if = "Option::is_none"
575 )]
576 pub live_chat_visitor_inactive_msg: Option<String>,
577 #[serde(
579 rename = "liveChatVisitorInactiveTime",
580 default,
581 skip_serializing_if = "Option::is_none"
582 )]
583 pub live_chat_visitor_inactive_time: Option<String>,
584 #[serde(default, skip_serializing_if = "Option::is_none")]
586 pub locale: Option<String>,
587 #[serde(
589 rename = "promptAvatar",
590 default,
591 skip_serializing_if = "Option::is_none"
592 )]
593 pub prompt_avatar: Option<String>,
594 #[serde(
596 rename = "promptAvatarAltText",
597 default,
598 skip_serializing_if = "Option::is_none"
599 )]
600 pub prompt_avatar_alt_text: Option<String>,
601 #[serde(
603 rename = "isPromptAvatarImageOptimize",
604 default,
605 skip_serializing_if = "Option::is_none"
606 )]
607 pub is_prompt_avatar_image_optimize: Option<bool>,
608 #[serde(rename = "promptMsg", default, skip_serializing_if = "Option::is_none")]
610 pub prompt_msg: Option<String>,
611 #[serde(
613 rename = "revisitPromptMsg",
614 default,
615 skip_serializing_if = "Option::is_none"
616 )]
617 pub revisit_prompt_msg: Option<String>,
618 #[serde(
620 rename = "sendActionText",
621 default,
622 skip_serializing_if = "Option::is_none"
623 )]
624 pub send_action_text: Option<String>,
625 #[serde(
627 rename = "showAgencyBranding",
628 default,
629 skip_serializing_if = "Option::is_none"
630 )]
631 pub show_agency_branding: Option<bool>,
632 #[serde(
634 rename = "showConsentCheckbox",
635 default,
636 skip_serializing_if = "Option::is_none"
637 )]
638 pub show_consent_checkbox: Option<bool>,
639 #[serde(
641 rename = "showLiveChatWelcomeMsg",
642 default,
643 skip_serializing_if = "Option::is_none"
644 )]
645 pub show_live_chat_welcome_msg: Option<bool>,
646 #[serde(
648 rename = "showPrompt",
649 default,
650 skip_serializing_if = "Option::is_none"
651 )]
652 pub show_prompt: Option<bool>,
653 #[serde(
655 rename = "subHeading",
656 default,
657 skip_serializing_if = "Option::is_none"
658 )]
659 pub sub_heading: Option<String>,
660 #[serde(
662 rename = "successMsg",
663 default,
664 skip_serializing_if = "Option::is_none"
665 )]
666 pub success_msg: Option<String>,
667 #[serde(
669 rename = "supportContact",
670 default,
671 skip_serializing_if = "Option::is_none"
672 )]
673 pub support_contact: Option<String>,
674 #[serde(
676 rename = "thankYouMsg",
677 default,
678 skip_serializing_if = "Option::is_none"
679 )]
680 pub thank_you_msg: Option<String>,
681 #[serde(default, skip_serializing_if = "Option::is_none")]
683 pub theme: Option<WidgetSettingsThemeDTO>,
684 #[serde(
686 rename = "useEmailField",
687 default,
688 skip_serializing_if = "Option::is_none"
689 )]
690 pub use_email_field: Option<bool>,
691 #[serde(rename = "waNumber", default, skip_serializing_if = "Option::is_none")]
693 pub wa_number: Option<String>,
694 #[serde(
696 rename = "widgetPrimaryColor",
697 default,
698 skip_serializing_if = "Option::is_none"
699 )]
700 pub widget_primary_color: Option<String>,
701 #[serde(
703 rename = "representativeAssignedMessage",
704 default,
705 skip_serializing_if = "Option::is_none"
706 )]
707 pub representative_assigned_message: Option<String>,
708 #[serde(default, skip_serializing_if = "Option::is_none")]
710 pub dimensions: Option<WidgetSettingsCustomizationDTO>,
711 #[serde(
713 rename = "advanceSettings",
714 default,
715 skip_serializing_if = "Option::is_none"
716 )]
717 pub advance_settings: Option<AdvanceSettingsDTO>,
718 #[serde(
720 rename = "locationCountryCode",
721 default,
722 skip_serializing_if = "Option::is_none"
723 )]
724 pub location_country_code: Option<String>,
725 #[serde(rename = "widgetId", default, skip_serializing_if = "Option::is_none")]
727 pub widget_id: Option<String>,
728 #[serde(
730 rename = "widgetPlacement",
731 default,
732 skip_serializing_if = "Option::is_none"
733 )]
734 pub widget_placement: Option<String>,
735}
736
737#[derive(Debug, Clone, Default, Serialize, Deserialize)]
739pub struct WidgetSettingsThemeCustomColorDTO {
740 #[serde(
742 rename = "chatBubbleColor",
743 default,
744 skip_serializing_if = "Option::is_none"
745 )]
746 pub chat_bubble_color: Option<String>,
747 #[serde(
749 rename = "backgroundColor",
750 default,
751 skip_serializing_if = "Option::is_none"
752 )]
753 pub background_color: Option<String>,
754 #[serde(
756 rename = "headerColor",
757 default,
758 skip_serializing_if = "Option::is_none"
759 )]
760 pub header_color: Option<String>,
761 #[serde(
763 rename = "buttonColor",
764 default,
765 skip_serializing_if = "Option::is_none"
766 )]
767 pub button_color: Option<String>,
768 #[serde(
770 rename = "avatarBackgroundColor",
771 default,
772 skip_serializing_if = "Option::is_none"
773 )]
774 pub avatar_background_color: Option<String>,
775 #[serde(
777 rename = "avatarBorderColor",
778 default,
779 skip_serializing_if = "Option::is_none"
780 )]
781 pub avatar_border_color: Option<String>,
782 #[serde(
784 rename = "senderMessageColor",
785 default,
786 skip_serializing_if = "Option::is_none"
787 )]
788 pub sender_message_color: Option<String>,
789 #[serde(
791 rename = "receivedMessageColor",
792 default,
793 skip_serializing_if = "Option::is_none"
794 )]
795 pub received_message_color: Option<String>,
796}
797
798#[derive(Debug, Clone, Default, Serialize, Deserialize)]
800pub struct WidgetSettingsThemeDTO {
801 #[serde(default, skip_serializing_if = "Option::is_none")]
803 pub name: Option<String>,
804 #[serde(default, skip_serializing_if = "Option::is_none")]
806 pub colors: Option<WidgetSettingsThemeCustomColorDTO>,
807}