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 AdCampaignDTO {
24 #[serde(default, skip_serializing_if = "Option::is_none")]
26 pub id: Option<String>,
27 #[serde(default, skip_serializing_if = "Option::is_none")]
29 pub locale: Option<LocaleDTO>,
30 #[serde(default, skip_serializing_if = "Option::is_none")]
32 pub name: Option<String>,
33 #[serde(
37 rename = "publishingStatus",
38 default,
39 skip_serializing_if = "Option::is_none"
40 )]
41 pub publishing_status: Option<String>,
42 #[serde(rename = "mediaType", default, skip_serializing_if = "Option::is_none")]
45 pub media_type: Option<String>,
46 #[serde(default, skip_serializing_if = "Option::is_none")]
48 pub audience: Option<AudienceDTO>,
49 #[serde(rename = "unitCost", default, skip_serializing_if = "Option::is_none")]
51 pub unit_cost: Option<UnitCostDTO>,
52 #[serde(
54 rename = "campaignType",
55 default,
56 skip_serializing_if = "Option::is_none"
57 )]
58 pub campaign_type: Option<String>,
59 #[serde(
61 rename = "adCampaignGroupId",
62 default,
63 skip_serializing_if = "Option::is_none"
64 )]
65 pub ad_campaign_group_id: Option<String>,
66 #[serde(
68 rename = "adCampaignId",
69 default,
70 skip_serializing_if = "Option::is_none"
71 )]
72 pub ad_campaign_id: Option<String>,
73 #[serde(default, skip_serializing_if = "Vec::is_empty")]
75 pub ads: Vec<LinkedInAdDTO>,
76 #[serde(
78 rename = "linkedInError",
79 default,
80 skip_serializing_if = "Option::is_none"
81 )]
82 pub linked_in_error: Option<String>,
83 #[serde(default, skip_serializing_if = "Option::is_none")]
85 pub meta: Option<serde_json::Value>,
86}
87
88#[derive(Debug, Clone, Default, Serialize, Deserialize)]
90pub struct AdCampaignGroupDataDTO {
91 #[serde(default, skip_serializing_if = "Option::is_none")]
93 pub id: Option<String>,
94 #[serde(rename = "locationId")]
97 pub location_id: String,
98 #[serde(default, skip_serializing_if = "Option::is_none")]
100 pub budget: Option<LinkedInBudgetDTO>,
101 #[serde(rename = "adCampaigns", default, skip_serializing_if = "Vec::is_empty")]
103 pub ad_campaigns: Vec<AdCampaignDTO>,
104 #[serde(
107 rename = "adBudgetOptimization",
108 default,
109 skip_serializing_if = "Option::is_none"
110 )]
111 pub ad_budget_optimization: Option<String>,
112 #[serde(
115 rename = "objectiveType",
116 default,
117 skip_serializing_if = "Option::is_none"
118 )]
119 pub objective_type: Option<String>,
120 #[serde(default, skip_serializing_if = "Option::is_none")]
122 pub name: Option<String>,
123 #[serde(
125 rename = "adCampaignGroupId",
126 default,
127 skip_serializing_if = "Option::is_none"
128 )]
129 pub ad_campaign_group_id: Option<String>,
130 #[serde(
134 rename = "publishingStatus",
135 default,
136 skip_serializing_if = "Option::is_none"
137 )]
138 pub publishing_status: Option<String>,
139 #[serde(
141 rename = "linkedInAdAccountId",
142 default,
143 skip_serializing_if = "Option::is_none"
144 )]
145 pub linked_in_ad_account_id: Option<String>,
146 #[serde(
148 rename = "unpublishedChanges",
149 default,
150 skip_serializing_if = "Option::is_none"
151 )]
152 pub unpublished_changes: Option<bool>,
153 #[serde(default, skip_serializing_if = "Option::is_none")]
155 pub meta: Option<serde_json::Value>,
156 #[serde(
158 rename = "linkedInError",
159 default,
160 skip_serializing_if = "Option::is_none"
161 )]
162 pub linked_in_error: Option<String>,
163}
164
165#[derive(Debug, Clone, Default, Serialize, Deserialize)]
167pub struct AdScheduleTargetDTO {
168 #[serde(rename = "startMinute")]
172 pub start_minute: String,
173 #[serde(rename = "endMinute")]
177 pub end_minute: String,
178 #[serde(rename = "dayOfWeek")]
183 pub day_of_week: String,
184 #[serde(rename = "startHour")]
187 pub start_hour: f64,
188 #[serde(rename = "endHour")]
191 pub end_hour: f64,
192}
193
194#[derive(Debug, Clone, Default, Serialize, Deserialize)]
196pub struct AudienceCustomAudienceItemDTO {
197 pub id: String,
200 pub name: String,
203}
204
205#[derive(Debug, Clone, Default, Serialize, Deserialize)]
207pub struct AudienceDTO {
208 #[serde(
210 rename = "geoLocations",
211 default,
212 skip_serializing_if = "Vec::is_empty"
213 )]
214 pub geo_locations: Vec<GeoLocationDTO>,
215 #[serde(
217 rename = "targetAudience",
218 default,
219 skip_serializing_if = "Option::is_none"
220 )]
221 pub target_audience: Option<TargetAudienceDTO>,
222}
223
224#[derive(Debug, Clone, Default, Serialize, Deserialize)]
226pub struct AudienceDimensionDTO {
227 #[serde(
229 rename = "isAgeUnknown",
230 default,
231 skip_serializing_if = "Option::is_none"
232 )]
233 pub is_age_unknown: Option<bool>,
234 #[serde(rename = "ageRanges", default, skip_serializing_if = "Vec::is_empty")]
236 pub age_ranges: Vec<String>,
237 #[serde(default, skip_serializing_if = "Vec::is_empty")]
239 pub genders: Vec<String>,
240 #[serde(
242 rename = "parentalStatuses",
243 default,
244 skip_serializing_if = "Vec::is_empty"
245 )]
246 pub parental_statuses: Vec<String>,
247 #[serde(
249 rename = "audienceSegments",
250 default,
251 skip_serializing_if = "Option::is_none"
252 )]
253 pub audience_segments: Option<AudienceSegmentsDTO>,
254}
255
256#[derive(Debug, Clone, Default, Serialize, Deserialize)]
258pub struct AudienceInterestDTO {
259 pub id: String,
262 pub name: String,
265 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
267 pub type_: Option<String>,
268}
269
270#[derive(Debug, Clone, Default, Serialize, Deserialize)]
272pub struct AudienceLocaleDTO {
273 pub name: String,
276 pub key: f64,
279}
280
281#[derive(Debug, Clone, Default, Serialize, Deserialize)]
283pub struct AudienceLocationDTO {
284 pub key: String,
287 pub name: String,
290 #[serde(rename = "type")]
296 pub type_: String,
297 #[serde(rename = "selectionType")]
301 pub selection_type: String,
302 #[serde(default, skip_serializing_if = "Option::is_none")]
304 pub radius: Option<f64>,
305 #[serde(
308 rename = "radiusUnit",
309 default,
310 skip_serializing_if = "Option::is_none"
311 )]
312 pub radius_unit: Option<String>,
313 #[serde(default, skip_serializing_if = "Option::is_none")]
315 pub geometry: Option<AudienceLocationGeometry>,
316}
317
318#[derive(Debug, Clone, Default, Serialize, Deserialize)]
320pub struct AudienceLocationGeometry {
321 pub location: serde_json::Value,
324 #[serde(rename = "locationType")]
327 pub location_type: String,
328}
329
330#[derive(Debug, Clone, Default, Serialize, Deserialize)]
332pub struct AudiencePlacementsDTO {
333 #[serde(default, skip_serializing_if = "Vec::is_empty")]
335 pub facebook: Vec<String>,
336 #[serde(default, skip_serializing_if = "Vec::is_empty")]
338 pub instagram: Vec<String>,
339 #[serde(default, skip_serializing_if = "Vec::is_empty")]
341 pub messenger: Vec<String>,
342}
343
344#[derive(Debug, Clone, Default, Serialize, Deserialize)]
346pub struct AudienceSegmentsDTO {
347 #[serde(
349 rename = "customAudiences",
350 default,
351 skip_serializing_if = "Vec::is_empty"
352 )]
353 pub custom_audiences: Vec<String>,
354 #[serde(rename = "userLists", default, skip_serializing_if = "Vec::is_empty")]
356 pub user_lists: Vec<String>,
357 #[serde(
359 rename = "userInterests",
360 default,
361 skip_serializing_if = "Vec::is_empty"
362 )]
363 pub user_interests: Vec<String>,
364}
365
366#[derive(Debug, Clone, Default, Serialize, Deserialize)]
368pub struct Budget {
369 #[serde(rename = "budgetType")]
373 pub budget_type: String,
374 pub amount: f64,
377 #[serde(
379 rename = "scheduleStartDate",
380 default,
381 skip_serializing_if = "Option::is_none"
382 )]
383 pub schedule_start_date: Option<String>,
384 #[serde(
386 rename = "scheduleEndDate",
387 default,
388 skip_serializing_if = "Option::is_none"
389 )]
390 pub schedule_end_date: Option<String>,
391}
392
393#[derive(Debug, Clone, Default, Serialize, Deserialize)]
395pub struct CallAssetPayloadDTO {
396 #[serde(rename = "phoneNumber")]
399 pub phone_number: String,
400 #[serde(rename = "countryCode")]
403 pub country_code: String,
404 #[serde(
406 rename = "callConversionAction",
407 default,
408 skip_serializing_if = "Option::is_none"
409 )]
410 pub call_conversion_action: Option<String>,
411 #[serde(
413 rename = "adScheduleTargets",
414 default,
415 skip_serializing_if = "Vec::is_empty"
416 )]
417 pub ad_schedule_targets: Vec<AdScheduleTargetDTO>,
418 #[serde(
420 rename = "resourceName",
421 default,
422 skip_serializing_if = "Option::is_none"
423 )]
424 pub resource_name: Option<String>,
425}
426
427#[derive(Debug, Clone, Default, Serialize, Deserialize)]
429pub struct CampaignDTO {
430 #[serde(default, skip_serializing_if = "Option::is_none")]
432 pub id: Option<String>,
433 pub name: String,
436 #[serde(rename = "locationId")]
439 pub location_id: String,
440 #[serde(rename = "advertisingChannelType")]
445 pub advertising_channel_type: String,
446 #[serde(
449 rename = "advertisingChannelSubType",
450 default,
451 skip_serializing_if = "Option::is_none"
452 )]
453 pub advertising_channel_sub_type: Option<String>,
454 #[serde(rename = "goalType", default, skip_serializing_if = "Option::is_none")]
457 pub goal_type: Option<String>,
458 #[serde(default, skip_serializing_if = "Option::is_none")]
460 pub budget: Option<GoogleBudgetDTO>,
461 #[serde(default, skip_serializing_if = "Option::is_none")]
463 pub audience: Option<GoogleCampaignAudienceDTO>,
464 #[serde(
466 rename = "networkSettings",
467 default,
468 skip_serializing_if = "Option::is_none"
469 )]
470 pub network_settings: Option<GoogleNetworkSettingsDTO>,
471 #[serde(
473 rename = "biddingStrategy",
474 default,
475 skip_serializing_if = "Option::is_none"
476 )]
477 pub bidding_strategy: Option<GoogleBiddingStrategyDTO>,
478 #[serde(default, skip_serializing_if = "Option::is_none")]
480 pub assets: Option<GoogleAssetsDTO>,
481 #[serde(
483 rename = "isEuPoliticalAds",
484 default,
485 skip_serializing_if = "Option::is_none"
486 )]
487 pub is_eu_political_ads: Option<bool>,
488 #[serde(rename = "adGroups", default, skip_serializing_if = "Vec::is_empty")]
490 pub ad_groups: Vec<GoogleAdGroupDTO>,
491 #[serde(
493 rename = "campaignGoal",
494 default,
495 skip_serializing_if = "Option::is_none"
496 )]
497 pub campaign_goal: Option<GoogleCampaignGoalDTO>,
498 #[serde(rename = "adSchedule", default, skip_serializing_if = "Vec::is_empty")]
500 pub ad_schedule: Vec<GoogleAdScheduleDTO>,
501 #[serde(
505 rename = "publishingStatus",
506 default,
507 skip_serializing_if = "Option::is_none"
508 )]
509 pub publishing_status: Option<String>,
510 #[serde(
512 rename = "googleAdAccountId",
513 default,
514 skip_serializing_if = "Option::is_none"
515 )]
516 pub google_ad_account_id: Option<String>,
517 #[serde(
519 rename = "unpublishedChanges",
520 default,
521 skip_serializing_if = "Option::is_none"
522 )]
523 pub unpublished_changes: Option<bool>,
524 #[serde(
526 rename = "maximumCpc",
527 default,
528 skip_serializing_if = "Option::is_none"
529 )]
530 pub maximum_cpc: Option<f64>,
531 #[serde(
533 rename = "googleCampaignId",
534 default,
535 skip_serializing_if = "Option::is_none"
536 )]
537 pub google_campaign_id: Option<String>,
538 #[serde(default, skip_serializing_if = "Option::is_none")]
540 pub source: Option<String>,
541 #[serde(
543 rename = "advancedOptions",
544 default,
545 skip_serializing_if = "Option::is_none"
546 )]
547 pub advanced_options: Option<serde_json::Value>,
548}
549
550#[derive(Debug, Clone, Default, Serialize, Deserialize)]
552pub struct ConsentDTO {
553 #[serde(rename = "checkRequired")]
556 pub check_required: bool,
557 pub id: f64,
560 pub consent: LocalizedStringDTO,
563}
564
565#[derive(Debug, Clone, Default, Serialize, Deserialize)]
567pub struct ConversionValueSettings {
568 #[serde(rename = "defaultValue")]
571 pub default_value: f64,
572 #[serde(rename = "defaultCurrencyCode")]
575 pub default_currency_code: String,
576 #[serde(rename = "alwaysUseDefaultValue")]
580 pub always_use_default_value: bool,
581}
582
583#[derive(Debug, Clone, Default, Serialize, Deserialize)]
585pub struct CreateConversationFormDTO {
586 #[serde(rename = "locationId")]
589 pub location_id: String,
590 pub name: String,
593 pub text: String,
596 #[serde(default, skip_serializing_if = "Vec::is_empty")]
599 pub questions: Vec<WelcomeMessageQuestion>,
600}
601
602#[derive(Debug, Clone, Default, Serialize, Deserialize)]
604pub struct CreateGoogleIntegrationDTO {
605 #[serde(rename = "locationId")]
608 pub location_id: String,
609 #[serde(rename = "adAccountId")]
612 pub ad_account_id: String,
613 #[serde(rename = "mccId")]
616 pub mcc_id: String,
617}
618
619#[derive(Debug, Clone, Default, Serialize, Deserialize)]
621pub struct CreateIntegrationDTO {
622 #[serde(rename = "locationId")]
625 pub location_id: String,
626 #[serde(rename = "pageId")]
629 pub page_id: String,
630 #[serde(
632 rename = "adAccountId",
633 default,
634 skip_serializing_if = "Option::is_none"
635 )]
636 pub ad_account_id: Option<String>,
637}
638
639#[derive(Debug, Clone, Default, Serialize, Deserialize)]
641pub struct CreateLeadFormDTO {
642 #[serde(rename = "type")]
646 pub type_: String,
647 pub name: String,
650 #[serde(rename = "locationId")]
653 pub location_id: String,
654 #[serde(
656 rename = "greetingCard",
657 default,
658 skip_serializing_if = "Option::is_none"
659 )]
660 pub greeting_card: Option<GreetingCard>,
661 #[serde(default, skip_serializing_if = "Vec::is_empty")]
665 pub questions: Vec<FormQuestion>,
666 #[serde(
668 rename = "questionPageHeadline",
669 default,
670 skip_serializing_if = "Option::is_none"
671 )]
672 pub question_page_headline: Option<String>,
673 #[serde(rename = "privacyPolicyLink")]
676 pub privacy_policy_link: String,
677 #[serde(
679 rename = "privacyPolicyText",
680 default,
681 skip_serializing_if = "Option::is_none"
682 )]
683 pub privacy_policy_text: Option<String>,
684 #[serde(
686 rename = "customDisclaimer",
687 default,
688 skip_serializing_if = "Option::is_none"
689 )]
690 pub custom_disclaimer: Option<CustomDisclaimer>,
691 #[serde(rename = "thankYouPage")]
694 pub thank_you_page: ThankYouPage,
695 #[serde(rename = "isDraft", default, skip_serializing_if = "Option::is_none")]
697 pub is_draft: Option<bool>,
698 #[serde(
700 rename = "draftFormId",
701 default,
702 skip_serializing_if = "Option::is_none"
703 )]
704 pub draft_form_id: Option<String>,
705 #[serde(default, skip_serializing_if = "Option::is_none")]
707 pub locale: Option<String>,
708}
709
710#[derive(Debug, Clone, Default, Serialize, Deserialize)]
712pub struct CreateLinkedinIntegrationDTO {
713 #[serde(rename = "locationId")]
716 pub location_id: String,
717 #[serde(rename = "adAccountId")]
720 pub ad_account_id: String,
721 #[serde(rename = "adAccountName")]
724 pub ad_account_name: String,
725 #[serde(rename = "currencyCode")]
728 pub currency_code: String,
729 #[serde(rename = "organizationId")]
732 pub organization_id: String,
733}
734
735#[derive(Debug, Clone, Default, Serialize, Deserialize)]
737pub struct CreateOfflineUserListJobDTO {
738 #[serde(rename = "locationId")]
741 pub location_id: String,
742 #[serde(
744 rename = "smartListIds",
745 default,
746 skip_serializing_if = "Vec::is_empty"
747 )]
748 pub smart_list_ids: Vec<String>,
749 #[serde(rename = "csvPath", default, skip_serializing_if = "Option::is_none")]
751 pub csv_path: Option<String>,
752 #[serde(
754 rename = "userListId",
755 default,
756 skip_serializing_if = "Option::is_none"
757 )]
758 pub user_list_id: Option<String>,
759 #[serde(rename = "isDynamic", default, skip_serializing_if = "Option::is_none")]
761 pub is_dynamic: Option<bool>,
762}
763
764#[derive(Debug, Clone, Default, Serialize, Deserialize)]
766pub struct CreationLocaleDTO {
767 pub country: String,
770 pub language: String,
773}
774
775#[derive(Debug, Clone, Default, Serialize, Deserialize)]
777pub struct CustomDisclaimer {
778 pub title: String,
781 pub body: String,
784 #[serde(default, skip_serializing_if = "Vec::is_empty")]
786 pub checkboxes: Vec<CustomDisclaimerCheckbox>,
787}
788
789#[derive(Debug, Clone, Default, Serialize, Deserialize)]
791pub struct CustomDisclaimerCheckbox {
792 #[serde(rename = "isRequired")]
795 pub is_required: bool,
796 pub text: String,
799 pub key: String,
802}
803
804#[derive(Debug, Clone, Default, Serialize, Deserialize)]
806pub struct CustomQuestionFieldDTO {
807 #[serde(rename = "customQuestionText")]
810 pub custom_question_text: String,
811 #[serde(
814 rename = "singleChoiceAnswers",
815 default,
816 skip_serializing_if = "Vec::is_empty"
817 )]
818 pub single_choice_answers: Vec<String>,
819}
820
821#[derive(Debug, Clone, Default, Serialize, Deserialize)]
823pub struct FacebookAudienceDTO {
824 #[serde(
827 rename = "geoLocations",
828 default,
829 skip_serializing_if = "Vec::is_empty"
830 )]
831 pub geo_locations: Vec<AudienceLocationDTO>,
832 #[serde(default, skip_serializing_if = "Vec::is_empty")]
834 pub locales: Vec<AudienceLocaleDTO>,
835 #[serde(default, skip_serializing_if = "Option::is_none")]
837 pub placements: Option<AudiencePlacementsDTO>,
838 #[serde(
841 rename = "placementType",
842 default,
843 skip_serializing_if = "Option::is_none"
844 )]
845 pub placement_type: Option<String>,
846 #[serde(default, skip_serializing_if = "Vec::is_empty")]
848 pub lookalike: Vec<AudienceCustomAudienceItemDTO>,
849 #[serde(default, skip_serializing_if = "Vec::is_empty")]
851 pub retargeting: Vec<AudienceCustomAudienceItemDTO>,
852 #[serde(default, skip_serializing_if = "Vec::is_empty")]
854 pub interests: Vec<AudienceInterestDTO>,
855 #[serde(rename = "ageMin", default, skip_serializing_if = "Option::is_none")]
857 pub age_min: Option<f64>,
858 #[serde(rename = "ageMax", default, skip_serializing_if = "Option::is_none")]
860 pub age_max: Option<f64>,
861 #[serde(default, skip_serializing_if = "Vec::is_empty")]
863 pub genders: Vec<f64>,
864}
865
866#[derive(Debug, Clone, Default, Serialize, Deserialize)]
868pub struct FbSetDefaultPageBodyDTO {
869 #[serde(rename = "pageId")]
872 pub page_id: String,
873}
874
875#[derive(Debug, Clone, Default, Serialize, Deserialize)]
877pub struct FbUpdateAudienceBodyDTO {
878 #[serde(rename = "locationId")]
881 pub location_id: String,
882 pub name: String,
885 #[serde(default, skip_serializing_if = "Option::is_none")]
887 pub description: Option<String>,
888}
889
890#[derive(Debug, Clone, Default, Serialize, Deserialize)]
892pub struct FlexibleRuleUserListDTO {
893 #[serde(
895 rename = "inclusiveRuleOperator",
896 default,
897 skip_serializing_if = "Option::is_none"
898 )]
899 pub inclusive_rule_operator: Option<String>,
900 #[serde(
903 rename = "inclusiveOperands",
904 default,
905 skip_serializing_if = "Vec::is_empty"
906 )]
907 pub inclusive_operands: Vec<RuleOperandDTO>,
908 #[serde(
911 rename = "exclusiveOperands",
912 default,
913 skip_serializing_if = "Vec::is_empty"
914 )]
915 pub exclusive_operands: Vec<RuleOperandDTO>,
916}
917
918#[derive(Debug, Clone, Default, Serialize, Deserialize)]
920pub struct FormQuestion {
921 #[serde(default, skip_serializing_if = "Option::is_none")]
923 pub label: Option<String>,
924 pub key: String,
927 #[serde(rename = "type")]
933 pub type_: String,
934 #[serde(default, skip_serializing_if = "Vec::is_empty")]
936 pub options: Vec<FormQuestionOption>,
937}
938
939#[derive(Debug, Clone, Default, Serialize, Deserialize)]
941pub struct FormQuestionOption {
942 pub key: String,
945 pub value: String,
948}
949
950#[derive(Debug, Clone, Default, Serialize, Deserialize)]
952pub struct GeoAddressComponentDTO {
953 #[serde(rename = "longName", default, skip_serializing_if = "Option::is_none")]
955 pub long_name: Option<String>,
956 #[serde(rename = "shortName", default, skip_serializing_if = "Option::is_none")]
958 pub short_name: Option<String>,
959 #[serde(default, skip_serializing_if = "Vec::is_empty")]
961 pub types: Vec<String>,
962}
963
964#[derive(Debug, Clone, Default, Serialize, Deserialize)]
966pub struct GeoGeometryDTO {
967 #[serde(default, skip_serializing_if = "Option::is_none")]
969 pub location: Option<GeoLatLngDTO>,
970 #[serde(
972 rename = "locationType",
973 default,
974 skip_serializing_if = "Option::is_none"
975 )]
976 pub location_type: Option<String>,
977 #[serde(default, skip_serializing_if = "Option::is_none")]
979 pub viewport: Option<GeoViewportDTO>,
980}
981
982#[derive(Debug, Clone, Default, Serialize, Deserialize)]
984pub struct GeoLatLngDTO {
985 #[serde(default, skip_serializing_if = "Option::is_none")]
987 pub lat: Option<f64>,
988 #[serde(default, skip_serializing_if = "Option::is_none")]
990 pub lng: Option<f64>,
991}
992
993#[derive(Debug, Clone, Default, Serialize, Deserialize)]
995pub struct GeoLocationDTO {
996 pub name: String,
999 pub urn: String,
1002 #[serde(rename = "facetUrn")]
1005 pub facet_urn: String,
1006 #[serde(rename = "selectionType")]
1010 pub selection_type: String,
1011}
1012
1013#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1015pub struct GeoViewportDTO {
1016 #[serde(default, skip_serializing_if = "Option::is_none")]
1018 pub northeast: Option<GeoLatLngDTO>,
1019 #[serde(default, skip_serializing_if = "Option::is_none")]
1021 pub southwest: Option<GeoLatLngDTO>,
1022}
1023
1024#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1026pub struct GoogleAdContentDTO {
1027 #[serde(default, skip_serializing_if = "Option::is_none")]
1029 pub id: Option<String>,
1030 #[serde(default, skip_serializing_if = "Option::is_none")]
1032 pub name: Option<String>,
1033 #[serde(rename = "mediaType", default, skip_serializing_if = "Option::is_none")]
1036 pub media_type: Option<String>,
1037 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1039 pub headlines: Vec<String>,
1040 #[serde(
1042 rename = "longHeadlines",
1043 default,
1044 skip_serializing_if = "Vec::is_empty"
1045 )]
1046 pub long_headlines: Vec<String>,
1047 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1049 pub descriptions: Vec<String>,
1050 #[serde(rename = "finalUrl", default, skip_serializing_if = "Option::is_none")]
1052 pub final_url: Option<String>,
1053 #[serde(default, skip_serializing_if = "Option::is_none")]
1055 pub path1: Option<String>,
1056 #[serde(default, skip_serializing_if = "Option::is_none")]
1058 pub path2: Option<String>,
1059 #[serde(rename = "isDeleted", default, skip_serializing_if = "Option::is_none")]
1061 pub is_deleted: Option<bool>,
1062 #[serde(rename = "adError", default, skip_serializing_if = "Option::is_none")]
1064 pub ad_error: Option<String>,
1065 #[serde(
1069 rename = "publishingStatus",
1070 default,
1071 skip_serializing_if = "Option::is_none"
1072 )]
1073 pub publishing_status: Option<String>,
1074 #[serde(rename = "adId", default, skip_serializing_if = "Option::is_none")]
1076 pub ad_id: Option<String>,
1077 #[serde(
1079 rename = "adCampaignId",
1080 default,
1081 skip_serializing_if = "Option::is_none"
1082 )]
1083 pub ad_campaign_id: Option<String>,
1084 #[serde(rename = "adGroupId", default, skip_serializing_if = "Option::is_none")]
1086 pub ad_group_id: Option<String>,
1087 #[serde(
1089 rename = "googleAdId",
1090 default,
1091 skip_serializing_if = "Option::is_none"
1092 )]
1093 pub google_ad_id: Option<String>,
1094 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1096 pub media: Vec<GoogleMediaDTO>,
1097 #[serde(
1101 rename = "callToActionLabel",
1102 default,
1103 skip_serializing_if = "Option::is_none"
1104 )]
1105 pub call_to_action_label: Option<String>,
1106 #[serde(
1108 rename = "businessName",
1109 default,
1110 skip_serializing_if = "Option::is_none"
1111 )]
1112 pub business_name: Option<String>,
1113 #[serde(
1115 rename = "youtubeVideoLinks",
1116 default,
1117 skip_serializing_if = "Vec::is_empty"
1118 )]
1119 pub youtube_video_links: Vec<GoogleYouTubeVideoLinkDTO>,
1120 #[serde(
1122 rename = "carouselCards",
1123 default,
1124 skip_serializing_if = "Vec::is_empty"
1125 )]
1126 pub carousel_cards: Vec<GoogleCarouselCardDTO>,
1127 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1131 pub placements: Vec<String>,
1132 #[serde(
1134 rename = "customChannels",
1135 default,
1136 skip_serializing_if = "Option::is_none"
1137 )]
1138 pub custom_channels: Option<bool>,
1139}
1140
1141#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1143pub struct GoogleAdGroupAudienceDTO {
1144 #[serde(
1146 rename = "geoLocations",
1147 default,
1148 skip_serializing_if = "Vec::is_empty"
1149 )]
1150 pub geo_locations: Vec<GoogleGeoLocationDTO>,
1151 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1153 pub locales: Vec<GoogleLocaleDTO>,
1154}
1155
1156#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1158pub struct GoogleAdGroupDTO {
1159 #[serde(default, skip_serializing_if = "Option::is_none")]
1161 pub id: Option<String>,
1162 #[serde(rename = "adGroupId", default, skip_serializing_if = "Option::is_none")]
1164 pub ad_group_id: Option<String>,
1165 #[serde(default, skip_serializing_if = "Option::is_none")]
1167 pub name: Option<String>,
1168 #[serde(
1170 rename = "adCampaignId",
1171 default,
1172 skip_serializing_if = "Option::is_none"
1173 )]
1174 pub ad_campaign_id: Option<String>,
1175 #[serde(rename = "adContent", default, skip_serializing_if = "Vec::is_empty")]
1177 pub ad_content: Vec<GoogleAdContentDTO>,
1178 #[serde(default, skip_serializing_if = "Option::is_none")]
1180 pub keywords: Option<GoogleKeywordsDTO>,
1181 #[serde(
1185 rename = "publishingStatus",
1186 default,
1187 skip_serializing_if = "Option::is_none"
1188 )]
1189 pub publishing_status: Option<String>,
1190 #[serde(
1192 rename = "adGroupError",
1193 default,
1194 skip_serializing_if = "Option::is_none"
1195 )]
1196 pub ad_group_error: Option<String>,
1197 #[serde(
1199 rename = "googleAdGroupId",
1200 default,
1201 skip_serializing_if = "Option::is_none"
1202 )]
1203 pub google_ad_group_id: Option<String>,
1204 #[serde(
1206 rename = "customChannels",
1207 default,
1208 skip_serializing_if = "Option::is_none"
1209 )]
1210 pub custom_channels: Option<bool>,
1211 #[serde(
1215 rename = "selectedChannels",
1216 default,
1217 skip_serializing_if = "Vec::is_empty"
1218 )]
1219 pub selected_channels: Vec<String>,
1220 #[serde(
1222 rename = "googleAudienceId",
1223 default,
1224 skip_serializing_if = "Option::is_none"
1225 )]
1226 pub google_audience_id: Option<String>,
1227 #[serde(default, skip_serializing_if = "Option::is_none")]
1229 pub audience: Option<GoogleAdGroupAudienceDTO>,
1230}
1231
1232#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1234pub struct GoogleAdScheduleDTO {
1235 #[serde(rename = "dayOfWeek")]
1241 pub day_of_week: String,
1242 #[serde(rename = "from")]
1245 pub from_: String,
1246 pub to: String,
1249}
1250
1251#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1253pub struct GoogleAssetImageDTO {
1254 pub url: String,
1257 #[serde(
1259 rename = "resourceName",
1260 default,
1261 skip_serializing_if = "Option::is_none"
1262 )]
1263 pub resource_name: Option<String>,
1264 #[serde(default, skip_serializing_if = "Option::is_none")]
1266 pub name: Option<String>,
1267 #[serde(default, skip_serializing_if = "Option::is_none")]
1269 pub error: Option<String>,
1270}
1271
1272#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1274pub struct GoogleAssetsDTO {
1275 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1277 pub calls: Vec<String>,
1278 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1280 pub sitelinks: Vec<String>,
1281 #[serde(rename = "leadForm", default, skip_serializing_if = "Option::is_none")]
1283 pub lead_form: Option<String>,
1284 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1286 pub images: Vec<GoogleAssetImageDTO>,
1287 #[serde(
1289 rename = "businessLogo",
1290 default,
1291 skip_serializing_if = "Option::is_none"
1292 )]
1293 pub business_logo: Option<GoogleAssetImageDTO>,
1294}
1295
1296#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1298pub struct GoogleBiddingStrategyDTO {
1299 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
1301 pub type_: Option<String>,
1302 #[serde(default, skip_serializing_if = "Option::is_none")]
1304 pub value: Option<f64>,
1305}
1306
1307#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1309pub struct GoogleBudgetDTO {
1310 #[serde(
1313 rename = "budgetType",
1314 default,
1315 skip_serializing_if = "Option::is_none"
1316 )]
1317 pub budget_type: Option<String>,
1318 #[serde(default, skip_serializing_if = "Option::is_none")]
1320 pub amount: Option<f64>,
1321 #[serde(
1323 rename = "scheduleStartDate",
1324 default,
1325 skip_serializing_if = "Option::is_none"
1326 )]
1327 pub schedule_start_date: Option<String>,
1328 #[serde(
1330 rename = "scheduleEndDate",
1331 default,
1332 skip_serializing_if = "Option::is_none"
1333 )]
1334 pub schedule_end_date: Option<String>,
1335}
1336
1337#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1339pub struct GoogleCampaignAudienceDTO {
1340 #[serde(
1342 rename = "geoLocations",
1343 default,
1344 skip_serializing_if = "Vec::is_empty"
1345 )]
1346 pub geo_locations: Vec<GoogleGeoLocationDTO>,
1347 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1349 pub locales: Vec<GoogleLocaleDTO>,
1350 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1352 pub gender: Vec<GoogleDemographicTargetDTO>,
1353 #[serde(rename = "ageRange", default, skip_serializing_if = "Vec::is_empty")]
1355 pub age_range: Vec<GoogleDemographicTargetDTO>,
1356 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1358 pub segments: Vec<GoogleSegmentTargetDTO>,
1359 #[serde(
1361 rename = "targetInterests",
1362 default,
1363 skip_serializing_if = "Option::is_none"
1364 )]
1365 pub target_interests: Option<GoogleTargetInterestsDTO>,
1366}
1367
1368#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1370pub struct GoogleCampaignGoalDTO {
1371 #[serde(rename = "type")]
1375 pub type_: String,
1376 #[serde(default, skip_serializing_if = "Option::is_none")]
1378 pub value: Option<String>,
1379 #[serde(
1381 rename = "isCustomConversionGoal",
1382 default,
1383 skip_serializing_if = "Option::is_none"
1384 )]
1385 pub is_custom_conversion_goal: Option<bool>,
1386}
1387
1388#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1390pub struct GoogleCarouselCardDTO {
1391 #[serde(default, skip_serializing_if = "Option::is_none")]
1393 pub headline: Option<String>,
1394 #[serde(rename = "finalUrl", default, skip_serializing_if = "Option::is_none")]
1396 pub final_url: Option<String>,
1397 #[serde(
1399 rename = "callToActionLabel",
1400 default,
1401 skip_serializing_if = "Option::is_none"
1402 )]
1403 pub call_to_action_label: Option<String>,
1404 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1406 pub media: Vec<GoogleMediaDTO>,
1407}
1408
1409#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1411pub struct GoogleDemographicTargetDTO {
1412 #[serde(rename = "enum")]
1415 pub enum_: String,
1416 pub negative: bool,
1419}
1420
1421#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1423pub struct GoogleGeoLocationDTO {
1424 #[serde(default, skip_serializing_if = "Option::is_none")]
1426 pub key: Option<String>,
1427 #[serde(default, skip_serializing_if = "Option::is_none")]
1429 pub id: Option<String>,
1430 #[serde(default, skip_serializing_if = "Option::is_none")]
1432 pub name: Option<String>,
1433 #[serde(
1435 rename = "countryName",
1436 default,
1437 skip_serializing_if = "Option::is_none"
1438 )]
1439 pub country_name: Option<String>,
1440 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
1442 pub type_: Option<String>,
1443 #[serde(default, skip_serializing_if = "Option::is_none")]
1445 pub radius: Option<f64>,
1446 #[serde(
1449 rename = "radiusUnit",
1450 default,
1451 skip_serializing_if = "Option::is_none"
1452 )]
1453 pub radius_unit: Option<String>,
1454 #[serde(
1457 rename = "selectionType",
1458 default,
1459 skip_serializing_if = "Option::is_none"
1460 )]
1461 pub selection_type: Option<String>,
1462 #[serde(
1464 rename = "resourceName",
1465 default,
1466 skip_serializing_if = "Option::is_none"
1467 )]
1468 pub resource_name: Option<String>,
1469 #[serde(rename = "placeId", default, skip_serializing_if = "Option::is_none")]
1471 pub place_id: Option<String>,
1472 #[serde(
1474 rename = "formattedAddress",
1475 default,
1476 skip_serializing_if = "Option::is_none"
1477 )]
1478 pub formatted_address: Option<String>,
1479 #[serde(default, skip_serializing_if = "Option::is_none")]
1481 pub geometry: Option<GeoGeometryDTO>,
1482 #[serde(
1484 rename = "addressComponents",
1485 default,
1486 skip_serializing_if = "Vec::is_empty"
1487 )]
1488 pub address_components: Vec<GeoAddressComponentDTO>,
1489}
1490
1491#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1493pub struct GoogleKeywordItemDTO {
1494 pub keyword: String,
1497 #[serde(rename = "matchType")]
1500 pub match_type: String,
1501}
1502
1503#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1505pub struct GoogleKeywordsDTO {
1506 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1508 pub positives: Vec<GoogleKeywordItemDTO>,
1509 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1511 pub negatives: Vec<GoogleKeywordItemDTO>,
1512}
1513
1514#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1516pub struct GoogleLocaleDTO {
1517 #[serde(default, skip_serializing_if = "Option::is_none")]
1519 pub name: Option<String>,
1520 #[serde(default, skip_serializing_if = "Option::is_none")]
1522 pub key: Option<String>,
1523 #[serde(default, skip_serializing_if = "Option::is_none")]
1525 pub id: Option<String>,
1526 #[serde(
1528 rename = "resourceName",
1529 default,
1530 skip_serializing_if = "Option::is_none"
1531 )]
1532 pub resource_name: Option<String>,
1533}
1534
1535#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1537pub struct GoogleMediaDTO {
1538 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
1541 pub type_: Option<String>,
1542 #[serde(default, skip_serializing_if = "Option::is_none")]
1544 pub src: Option<String>,
1545 #[serde(rename = "isLogo", default, skip_serializing_if = "Option::is_none")]
1547 pub is_logo: Option<bool>,
1548 #[serde(default, skip_serializing_if = "Option::is_none")]
1550 pub error: Option<String>,
1551 #[serde(default, skip_serializing_if = "Option::is_none")]
1553 pub url: Option<String>,
1554 #[serde(rename = "imageType", default, skip_serializing_if = "Option::is_none")]
1556 pub image_type: Option<String>,
1557}
1558
1559#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1561pub struct GoogleNetworkSettingsDTO {
1562 #[serde(rename = "targetSearchNetwork")]
1565 pub target_search_network: bool,
1566 #[serde(rename = "targetContentNetwork")]
1569 pub target_content_network: bool,
1570}
1571
1572#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1574pub struct GoogleSegmentTargetDTO {
1575 #[serde(rename = "type")]
1578 pub type_: String,
1579 pub id: String,
1582}
1583
1584#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1586pub struct GoogleTargetInterestsDTO {
1587 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1589 pub affinity: Vec<String>,
1590 #[serde(rename = "inMarket", default, skip_serializing_if = "Vec::is_empty")]
1592 pub in_market: Vec<String>,
1593}
1594
1595#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1597pub struct GoogleYouTubeVideoLinkDTO {
1598 #[serde(rename = "youtubeVideoId")]
1601 pub youtube_video_id: String,
1602}
1603
1604#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1606pub struct GreetingCard {
1607 pub title: String,
1610 pub style: String,
1613 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1616 pub content: Vec<String>,
1617}
1618
1619#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1621pub struct HiddenFieldDTO {
1622 pub name: String,
1625 pub value: String,
1628}
1629
1630#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1632pub struct KeywordSuggestionDTO {
1633 pub url: String,
1636 #[serde(
1638 rename = "languageCode",
1639 default,
1640 skip_serializing_if = "Option::is_none"
1641 )]
1642 pub language_code: Option<String>,
1643 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1645 pub locations: Vec<String>,
1646 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1648 pub keywords: Vec<String>,
1649}
1650
1651#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1653pub struct LeadFormAssetPayloadDTO {
1654 #[serde(
1656 rename = "resourceName",
1657 default,
1658 skip_serializing_if = "Option::is_none"
1659 )]
1660 pub resource_name: Option<String>,
1661 pub headline: String,
1664 pub description: String,
1667 #[serde(rename = "businessName")]
1670 pub business_name: String,
1671 #[serde(rename = "privacyPolicyUrl")]
1674 pub privacy_policy_url: String,
1675 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1678 pub fields: Vec<LeadFormFieldDTO>,
1679 #[serde(rename = "callToActionType")]
1685 pub call_to_action_type: String,
1686 #[serde(
1688 rename = "callToActionDescription",
1689 default,
1690 skip_serializing_if = "Option::is_none"
1691 )]
1692 pub call_to_action_description: Option<String>,
1693 #[serde(
1695 rename = "backgroundImageAsset",
1696 default,
1697 skip_serializing_if = "Option::is_none"
1698 )]
1699 pub background_image_asset: Option<String>,
1700 #[serde(
1703 rename = "desiredIntent",
1704 default,
1705 skip_serializing_if = "Option::is_none"
1706 )]
1707 pub desired_intent: Option<String>,
1708 #[serde(
1710 rename = "customQuestionFields",
1711 default,
1712 skip_serializing_if = "Vec::is_empty"
1713 )]
1714 pub custom_question_fields: Vec<CustomQuestionFieldDTO>,
1715 #[serde(
1717 rename = "postSubmitHeadline",
1718 default,
1719 skip_serializing_if = "Option::is_none"
1720 )]
1721 pub post_submit_headline: Option<String>,
1722 #[serde(
1724 rename = "postSubmitDescription",
1725 default,
1726 skip_serializing_if = "Option::is_none"
1727 )]
1728 pub post_submit_description: Option<String>,
1729 #[serde(
1732 rename = "postSubmitCallToActionType",
1733 default,
1734 skip_serializing_if = "Option::is_none"
1735 )]
1736 pub post_submit_call_to_action_type: Option<String>,
1737 #[serde(rename = "finalUrls", default, skip_serializing_if = "Option::is_none")]
1739 pub final_urls: Option<String>,
1740}
1741
1742#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1744pub struct LeadFormContentDTO {
1745 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1748 pub questions: Vec<LeadFormQuestionDTO>,
1749 #[serde(default, skip_serializing_if = "Option::is_none")]
1751 pub description: Option<LocalizedStringDTO>,
1752 pub headline: LocalizedStringDTO,
1755 #[serde(rename = "postSubmissionInfo")]
1758 pub post_submission_info: PostSubmissionInfoDTO,
1759 #[serde(rename = "legalInfo")]
1762 pub legal_info: LegalInfoDTO,
1763}
1764
1765#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1767pub struct LeadFormFieldDTO {
1768 #[serde(rename = "inputType")]
1771 pub input_type: String,
1772 #[serde(
1774 rename = "singleChoiceAnswers",
1775 default,
1776 skip_serializing_if = "Vec::is_empty"
1777 )]
1778 pub single_choice_answers: Vec<String>,
1779}
1780
1781#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1783pub struct LeadFormQuestionDTO {
1784 pub question: LocalizedStringDTO,
1787 pub name: String,
1790 #[serde(rename = "questionDetails")]
1793 pub question_details: QuestionDetailsDTO,
1794 #[serde(
1796 rename = "predefinedField",
1797 default,
1798 skip_serializing_if = "Option::is_none"
1799 )]
1800 pub predefined_field: Option<String>,
1801}
1802
1803#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1805pub struct LegalInfoDTO {
1806 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1809 pub consents: Vec<ConsentDTO>,
1810 #[serde(rename = "privacyPolicyUrl")]
1813 pub privacy_policy_url: String,
1814 #[serde(
1816 rename = "legalDisclaimer",
1817 default,
1818 skip_serializing_if = "Option::is_none"
1819 )]
1820 pub legal_disclaimer: Option<LocalizedStringDTO>,
1821}
1822
1823#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1825pub struct LinkedInAdDTO {
1826 #[serde(default, skip_serializing_if = "Option::is_none")]
1828 pub id: Option<String>,
1829 #[serde(default, skip_serializing_if = "Option::is_none")]
1831 pub name: Option<String>,
1832 #[serde(
1834 rename = "introductoryText",
1835 default,
1836 skip_serializing_if = "Option::is_none"
1837 )]
1838 pub introductory_text: Option<String>,
1839 #[serde(
1841 rename = "destinationUrl",
1842 default,
1843 skip_serializing_if = "Option::is_none"
1844 )]
1845 pub destination_url: Option<String>,
1846 #[serde(
1848 rename = "callToActionLabel",
1849 default,
1850 skip_serializing_if = "Option::is_none"
1851 )]
1852 pub call_to_action_label: Option<String>,
1853 #[serde(
1855 rename = "destinationFormId",
1856 default,
1857 skip_serializing_if = "Option::is_none"
1858 )]
1859 pub destination_form_id: Option<String>,
1860 #[serde(
1862 rename = "contentReferenceString",
1863 default,
1864 skip_serializing_if = "Option::is_none"
1865 )]
1866 pub content_reference_string: Option<String>,
1867 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1869 pub media: Vec<LinkedInMediaDTO>,
1870 #[serde(
1872 rename = "adCampaignId",
1873 default,
1874 skip_serializing_if = "Option::is_none"
1875 )]
1876 pub ad_campaign_id: Option<String>,
1877 #[serde(rename = "adId", default, skip_serializing_if = "Option::is_none")]
1879 pub ad_id: Option<String>,
1880 #[serde(default, skip_serializing_if = "Option::is_none")]
1882 pub headline: Option<String>,
1883 #[serde(
1887 rename = "publishingStatus",
1888 default,
1889 skip_serializing_if = "Option::is_none"
1890 )]
1891 pub publishing_status: Option<String>,
1892 #[serde(
1894 rename = "adCampaignGroupId",
1895 default,
1896 skip_serializing_if = "Option::is_none"
1897 )]
1898 pub ad_campaign_group_id: Option<String>,
1899 #[serde(default, skip_serializing_if = "Option::is_none")]
1901 pub description: Option<String>,
1902 #[serde(default, skip_serializing_if = "Option::is_none")]
1904 pub meta: Option<serde_json::Value>,
1905 #[serde(
1907 rename = "linkedInError",
1908 default,
1909 skip_serializing_if = "Option::is_none"
1910 )]
1911 pub linked_in_error: Option<String>,
1912}
1913
1914#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1916pub struct LinkedInBudgetDTO {
1917 #[serde(
1920 rename = "budgetType",
1921 default,
1922 skip_serializing_if = "Option::is_none"
1923 )]
1924 pub budget_type: Option<String>,
1925 #[serde(default, skip_serializing_if = "Option::is_none")]
1927 pub amount: Option<f64>,
1928 #[serde(
1930 rename = "scheduleStartDate",
1931 default,
1932 skip_serializing_if = "Option::is_none"
1933 )]
1934 pub schedule_start_date: Option<String>,
1935 #[serde(
1937 rename = "scheduleEndDate",
1938 default,
1939 skip_serializing_if = "Option::is_none"
1940 )]
1941 pub schedule_end_date: Option<String>,
1942}
1943
1944#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1946pub struct LinkedInCreateLeadFormBodyDTO {
1947 pub owner: SponsoredAccountOwnerDTO,
1950 #[serde(rename = "creationLocale")]
1953 pub creation_locale: CreationLocaleDTO,
1954 pub name: String,
1957 pub state: String,
1961 pub content: LeadFormContentDTO,
1964 #[serde(
1966 rename = "hiddenFields",
1967 default,
1968 skip_serializing_if = "Vec::is_empty"
1969 )]
1970 pub hidden_fields: Vec<HiddenFieldDTO>,
1971}
1972
1973#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1975pub struct LinkedInMediaDTO {
1976 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
1979 pub type_: Option<String>,
1980 #[serde(default, skip_serializing_if = "Option::is_none")]
1982 pub src: Option<String>,
1983 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1985 pub frames: Vec<String>,
1986 #[serde(
1988 rename = "selectedPoster",
1989 default,
1990 skip_serializing_if = "Option::is_none"
1991 )]
1992 pub selected_poster: Option<f64>,
1993 #[serde(
1995 rename = "thumbnailUrl",
1996 default,
1997 skip_serializing_if = "Option::is_none"
1998 )]
1999 pub thumbnail_url: Option<String>,
2000 #[serde(default, skip_serializing_if = "Option::is_none")]
2002 pub name: Option<String>,
2003 #[serde(default, skip_serializing_if = "Option::is_none")]
2005 pub headline: Option<String>,
2006 #[serde(
2008 rename = "destinationUrl",
2009 default,
2010 skip_serializing_if = "Option::is_none"
2011 )]
2012 pub destination_url: Option<String>,
2013 #[serde(
2015 rename = "fileSizeBytes",
2016 default,
2017 skip_serializing_if = "Option::is_none"
2018 )]
2019 pub file_size_bytes: Option<f64>,
2020}
2021
2022#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2024pub struct LinkedInUpdateAdStatusBodyDTO {
2025 #[serde(rename = "operationType")]
2029 pub operation_type: String,
2030 #[serde(rename = "type")]
2034 pub type_: String,
2035}
2036
2037#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2039pub struct LocaleDTO {
2040 pub country: String,
2043 pub language: String,
2046}
2047
2048#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2050pub struct LocalizedStringDTO {
2051 pub localized: serde_json::Value,
2054}
2055
2056#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2058pub struct LocationIdBodyDTO {
2059 #[serde(rename = "locationId")]
2062 pub location_id: String,
2063}
2064
2065#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2067pub struct MediaDTO {
2068 pub src: String,
2071 #[serde(
2073 rename = "thumbnailUrl",
2074 default,
2075 skip_serializing_if = "Option::is_none"
2076 )]
2077 pub thumbnail_url: Option<String>,
2078 #[serde(
2080 rename = "selectedPoster",
2081 default,
2082 skip_serializing_if = "Option::is_none"
2083 )]
2084 pub selected_poster: Option<f64>,
2085 #[serde(rename = "type")]
2089 pub type_: String,
2090 #[serde(default, skip_serializing_if = "Option::is_none")]
2092 pub name: Option<String>,
2093 #[serde(default, skip_serializing_if = "Option::is_none")]
2095 pub headline: Option<String>,
2096 #[serde(default, skip_serializing_if = "Option::is_none")]
2098 pub description: Option<String>,
2099 #[serde(default, skip_serializing_if = "Option::is_none")]
2101 pub link: Option<String>,
2102}
2103
2104#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2106pub struct MemberDTO {
2107 #[serde(rename = "memberType")]
2111 pub member_type: String,
2112 #[serde(default, skip_serializing_if = "Option::is_none")]
2114 pub keyword: Option<String>,
2115 #[serde(default, skip_serializing_if = "Option::is_none")]
2117 pub url: Option<String>,
2118 #[serde(default, skip_serializing_if = "Option::is_none")]
2120 pub app: Option<String>,
2121}
2122
2123#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2125pub struct MultipleChoiceOptionDTO {
2126 pub id: f64,
2129 pub text: LocalizedStringDTO,
2132}
2133
2134#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2136pub struct MultipleChoiceQuestionDetailsDTO {
2137 #[serde(default, skip_serializing_if = "Vec::is_empty")]
2140 pub options: Vec<MultipleChoiceOptionDTO>,
2141}
2142
2143#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2145pub struct PostSubmissionCallToActionDTO {
2146 #[serde(rename = "callToActionTarget")]
2149 pub call_to_action_target: PostSubmissionCallToActionTargetDTO,
2150 #[serde(rename = "callToActionLabel")]
2155 pub call_to_action_label: String,
2156}
2157
2158#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2160pub struct PostSubmissionCallToActionTargetDTO {
2161 #[serde(rename = "landingPageUrl")]
2164 pub landing_page_url: String,
2165}
2166
2167#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2169pub struct PostSubmissionInfoDTO {
2170 pub message: LocalizedStringDTO,
2173 #[serde(rename = "callToAction")]
2176 pub call_to_action: PostSubmissionCallToActionDTO,
2177}
2178
2179#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2181pub struct PublishAdDTO {
2182 #[serde(rename = "locationId")]
2185 pub location_id: String,
2186}
2187
2188#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2190pub struct PublishingProgressResponseDTO {
2191 #[serde(
2195 rename = "campaignId",
2196 default,
2197 skip_serializing_if = "Option::is_none"
2198 )]
2199 pub campaign_id: Option<String>,
2200 #[serde(
2206 rename = "publishingStatus",
2207 default,
2208 skip_serializing_if = "Option::is_none"
2209 )]
2210 pub publishing_status: Option<String>,
2211 #[serde(default, skip_serializing_if = "Option::is_none")]
2215 pub total: Option<f64>,
2216 #[serde(default, skip_serializing_if = "Option::is_none")]
2220 pub processed: Option<f64>,
2221 #[serde(
2226 rename = "isComplete",
2227 default,
2228 skip_serializing_if = "Option::is_none"
2229 )]
2230 pub is_complete: Option<bool>,
2231 #[serde(rename = "hasFailed", default, skip_serializing_if = "Option::is_none")]
2235 pub has_failed: Option<bool>,
2236}
2237
2238#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2240pub struct QuestionDetailsDTO {
2241 #[serde(
2243 rename = "textQuestionDetails",
2244 default,
2245 skip_serializing_if = "Option::is_none"
2246 )]
2247 pub text_question_details: Option<serde_json::Value>,
2248 #[serde(
2250 rename = "multipleChoiceQuestionDetails",
2251 default,
2252 skip_serializing_if = "Option::is_none"
2253 )]
2254 pub multiple_choice_question_details: Option<MultipleChoiceQuestionDetailsDTO>,
2255}
2256
2257#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2259pub struct RuleBasedUserListDTO {
2260 #[serde(
2263 rename = "prepopulationStatus",
2264 default,
2265 skip_serializing_if = "Option::is_none"
2266 )]
2267 pub prepopulation_status: Option<String>,
2268 #[serde(rename = "flexibleRuleUserList")]
2271 pub flexible_rule_user_list: FlexibleRuleUserListDTO,
2272}
2273
2274#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2276pub struct RuleDTO {
2277 #[serde(
2280 rename = "ruleItemGroups",
2281 default,
2282 skip_serializing_if = "Vec::is_empty"
2283 )]
2284 pub rule_item_groups: Vec<RuleItemGroupDTO>,
2285}
2286
2287#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2289pub struct RuleItemDTO {
2290 pub name: String,
2294 #[serde(rename = "stringRuleItem")]
2297 pub string_rule_item: StringRuleItemDTO,
2298}
2299
2300#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2302pub struct RuleItemGroupDTO {
2303 #[serde(rename = "ruleItems", default, skip_serializing_if = "Vec::is_empty")]
2306 pub rule_items: Vec<RuleItemDTO>,
2307}
2308
2309#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2311pub struct RuleOperandDTO {
2312 #[serde(rename = "lookbackWindowDays")]
2315 pub lookback_window_days: f64,
2316 pub rule: RuleDTO,
2319}
2320
2321#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2323pub struct SelectedAttributeDTO {
2324 pub urn: String,
2327 pub name: String,
2330 #[serde(rename = "categoryName")]
2333 pub category_name: String,
2334 pub facet: String,
2337}
2338
2339#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2341pub struct SitelinkAssetPayloadDTO {
2342 #[serde(
2344 rename = "resourceName",
2345 default,
2346 skip_serializing_if = "Option::is_none"
2347 )]
2348 pub resource_name: Option<String>,
2349 #[serde(rename = "linkText")]
2352 pub link_text: String,
2353 #[serde(rename = "finalUrls")]
2356 pub final_urls: String,
2357 #[serde(default, skip_serializing_if = "Option::is_none")]
2359 pub description1: Option<String>,
2360 #[serde(default, skip_serializing_if = "Option::is_none")]
2362 pub description2: Option<String>,
2363 #[serde(rename = "startDate", default, skip_serializing_if = "Option::is_none")]
2365 pub start_date: Option<String>,
2366 #[serde(rename = "endDate", default, skip_serializing_if = "Option::is_none")]
2368 pub end_date: Option<String>,
2369 #[serde(
2371 rename = "adScheduleTargets",
2372 default,
2373 skip_serializing_if = "Vec::is_empty"
2374 )]
2375 pub ad_schedule_targets: Vec<AdScheduleTargetDTO>,
2376}
2377
2378#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2380pub struct SponsoredAccountOwnerDTO {
2381 #[serde(rename = "sponsoredAccount")]
2384 pub sponsored_account: String,
2385}
2386
2387#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2389pub struct StringRuleItemDTO {
2390 pub operator: String,
2393 pub value: String,
2396}
2397
2398#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2400pub struct TargetAudienceDTO {
2401 #[serde(default, skip_serializing_if = "Vec::is_empty")]
2403 pub include: Vec<Vec<SelectedAttributeDTO>>,
2404 #[serde(default, skip_serializing_if = "Vec::is_empty")]
2406 pub exclude: Vec<Vec<SelectedAttributeDTO>>,
2407}
2408
2409#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2411pub struct ThankYouPage {
2412 pub title: String,
2415 pub body: String,
2418 #[serde(rename = "buttonText")]
2421 pub button_text: String,
2422 #[serde(rename = "buttonType")]
2425 pub button_type: String,
2426 #[serde(
2428 rename = "buttonLink",
2429 default,
2430 skip_serializing_if = "Option::is_none"
2431 )]
2432 pub button_link: Option<String>,
2433 #[serde(
2435 rename = "businessPhone",
2436 default,
2437 skip_serializing_if = "Option::is_none"
2438 )]
2439 pub business_phone: Option<String>,
2440 #[serde(
2442 rename = "countryCode",
2443 default,
2444 skip_serializing_if = "Option::is_none"
2445 )]
2446 pub country_code: Option<String>,
2447}
2448
2449#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2451pub struct UnitCostDTO {
2452 pub amount: f64,
2455}
2456
2457#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2459pub struct UpdateCustomAudienceBatchDTO {
2460 #[serde(rename = "locationId")]
2463 pub location_id: String,
2464 #[serde(rename = "csvPath", default, skip_serializing_if = "Option::is_none")]
2466 pub csv_path: Option<String>,
2467 #[serde(rename = "operationType")]
2470 pub operation_type: String,
2471 #[serde(
2473 rename = "smartlistIds",
2474 default,
2475 skip_serializing_if = "Vec::is_empty"
2476 )]
2477 pub smartlist_ids: Vec<String>,
2478 #[serde(
2480 rename = "dynamicAudience",
2481 default,
2482 skip_serializing_if = "Option::is_none"
2483 )]
2484 pub dynamic_audience: Option<String>,
2485}
2486
2487#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2489pub struct UpdateCustomAudienceDTO {
2490 #[serde(rename = "locationId")]
2493 pub location_id: String,
2494 #[serde(rename = "contactId")]
2497 pub contact_id: String,
2498 #[serde(
2500 rename = "fbAdAccountId",
2501 default,
2502 skip_serializing_if = "Option::is_none"
2503 )]
2504 pub fb_ad_account_id: Option<String>,
2505}
2506
2507#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2509pub struct UpsertAdDTO {
2510 #[serde(default, skip_serializing_if = "Option::is_none")]
2512 pub id: Option<String>,
2513 #[serde(rename = "locationId")]
2516 pub location_id: String,
2517 #[serde(default, skip_serializing_if = "Option::is_none")]
2519 pub name: Option<String>,
2520 #[serde(
2522 rename = "primaryText",
2523 default,
2524 skip_serializing_if = "Option::is_none"
2525 )]
2526 pub primary_text: Option<String>,
2527 #[serde(default, skip_serializing_if = "Option::is_none")]
2529 pub headline: Option<String>,
2530 #[serde(default, skip_serializing_if = "Option::is_none")]
2532 pub description: Option<String>,
2533 #[serde(rename = "imageUrl", default, skip_serializing_if = "Option::is_none")]
2535 pub image_url: Option<String>,
2536 #[serde(rename = "mediaType", default, skip_serializing_if = "Option::is_none")]
2539 pub media_type: Option<String>,
2540 #[serde(default, skip_serializing_if = "Vec::is_empty")]
2542 pub media: Vec<MediaDTO>,
2543 #[serde(
2545 rename = "multiAdvertiserAds",
2546 default,
2547 skip_serializing_if = "Option::is_none"
2548 )]
2549 pub multi_advertiser_ads: Option<bool>,
2550 #[serde(rename = "campaignId")]
2553 pub campaign_id: String,
2554 #[serde(rename = "adsetId")]
2557 pub adset_id: String,
2558 #[serde(default, skip_serializing_if = "Option::is_none")]
2560 pub cta: Option<String>,
2561 #[serde(
2563 rename = "conversationFormId",
2564 default,
2565 skip_serializing_if = "Option::is_none"
2566 )]
2567 pub conversation_form_id: Option<String>,
2568 #[serde(
2570 rename = "destinationLink",
2571 default,
2572 skip_serializing_if = "Option::is_none"
2573 )]
2574 pub destination_link: Option<String>,
2575 #[serde(
2577 rename = "destinationFormId",
2578 default,
2579 skip_serializing_if = "Option::is_none"
2580 )]
2581 pub destination_form_id: Option<String>,
2582}
2583
2584#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2586pub struct UpsertAdsetDTO {
2587 #[serde(default, skip_serializing_if = "Option::is_none")]
2589 pub id: Option<String>,
2590 #[serde(rename = "locationId")]
2593 pub location_id: String,
2594 #[serde(default, skip_serializing_if = "Option::is_none")]
2596 pub name: Option<String>,
2597 #[serde(rename = "pageId", default, skip_serializing_if = "Option::is_none")]
2599 pub page_id: Option<String>,
2600 #[serde(
2602 rename = "instagramActorId",
2603 default,
2604 skip_serializing_if = "Option::is_none"
2605 )]
2606 pub instagram_actor_id: Option<String>,
2607 #[serde(
2610 rename = "messagingPlatforms",
2611 default,
2612 skip_serializing_if = "Vec::is_empty"
2613 )]
2614 pub messaging_platforms: Vec<String>,
2615 #[serde(
2617 rename = "whatsappNumber",
2618 default,
2619 skip_serializing_if = "Option::is_none"
2620 )]
2621 pub whatsapp_number: Option<String>,
2622 #[serde(default, skip_serializing_if = "Option::is_none")]
2625 pub audience: Option<FacebookAudienceDTO>,
2626 #[serde(default, skip_serializing_if = "Option::is_none")]
2628 pub budget: Option<Budget>,
2629 #[serde(
2631 rename = "conversionLocation",
2632 default,
2633 skip_serializing_if = "Option::is_none"
2634 )]
2635 pub conversion_location: Option<String>,
2636 #[serde(
2638 rename = "customEventType",
2639 default,
2640 skip_serializing_if = "Option::is_none"
2641 )]
2642 pub custom_event_type: Option<String>,
2643 #[serde(rename = "pixelId", default, skip_serializing_if = "Option::is_none")]
2645 pub pixel_id: Option<String>,
2646 #[serde(rename = "campaignId")]
2649 pub campaign_id: String,
2650}
2651
2652#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2654pub struct UpsertAssetsDTO {
2655 #[serde(rename = "locationId")]
2658 pub location_id: String,
2659 #[serde(rename = "type")]
2663 pub type_: String,
2664 pub payload: serde_json::Value,
2669}
2670
2671#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2673pub struct UpsertAudienceDTO {
2674 #[serde(rename = "locationId")]
2677 pub location_id: String,
2678 #[serde(
2680 rename = "resourceName",
2681 default,
2682 skip_serializing_if = "Option::is_none"
2683 )]
2684 pub resource_name: Option<String>,
2685 pub name: String,
2688 #[serde(default, skip_serializing_if = "Option::is_none")]
2690 pub dimensions: Option<AudienceDimensionDTO>,
2691 #[serde(
2693 rename = "exclusionDimension",
2694 default,
2695 skip_serializing_if = "Option::is_none"
2696 )]
2697 pub exclusion_dimension: Option<AudienceDimensionDTO>,
2698}
2699
2700#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2702pub struct UpsertCampaignDTO {
2703 #[serde(default, skip_serializing_if = "Option::is_none")]
2705 pub id: Option<String>,
2706 #[serde(rename = "locationId")]
2709 pub location_id: String,
2710 #[serde(default, skip_serializing_if = "Option::is_none")]
2712 pub name: Option<String>,
2713 #[serde(default, skip_serializing_if = "Option::is_none")]
2717 pub objective: Option<String>,
2718 #[serde(
2722 rename = "specialAdCategories",
2723 default,
2724 skip_serializing_if = "Vec::is_empty"
2725 )]
2726 pub special_ad_categories: Vec<String>,
2727 #[serde(default, skip_serializing_if = "Option::is_none")]
2729 pub source: Option<String>,
2730}
2731
2732#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2734pub struct UpsertConversionDTO {
2735 #[serde(rename = "locationId")]
2738 pub location_id: String,
2739 #[serde(
2741 rename = "conversionId",
2742 default,
2743 skip_serializing_if = "Option::is_none"
2744 )]
2745 pub conversion_id: Option<String>,
2746 pub name: String,
2749 #[serde(rename = "type")]
2753 pub type_: String,
2754 pub category: String,
2757 #[serde(rename = "valueSettings")]
2760 pub value_settings: ConversionValueSettings,
2761 #[serde(rename = "countingType")]
2765 pub counting_type: String,
2766 #[serde(rename = "attributionModel")]
2770 pub attribution_model: String,
2771 #[serde(rename = "clickThroughWindow")]
2774 pub click_through_window: f64,
2775}
2776
2777#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2779pub struct UpsertConversionPixelDTO {
2780 #[serde(rename = "locationId")]
2783 pub location_id: String,
2784 #[serde(
2786 rename = "conversionPixelId",
2787 default,
2788 skip_serializing_if = "Option::is_none"
2789 )]
2790 pub conversion_pixel_id: Option<String>,
2791 #[serde(default, skip_serializing_if = "Option::is_none")]
2793 pub name: Option<String>,
2794 #[serde(rename = "igUserId", default, skip_serializing_if = "Option::is_none")]
2796 pub ig_user_id: Option<String>,
2797 #[serde(rename = "type")]
2800 pub type_: String,
2801}
2802
2803#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2805pub struct UpsertSegmentDTO {
2806 pub name: String,
2809 #[serde(default, skip_serializing_if = "Option::is_none")]
2811 pub description: Option<String>,
2812 #[serde(default, skip_serializing_if = "Vec::is_empty")]
2814 pub members: Vec<MemberDTO>,
2815 #[serde(default, skip_serializing_if = "Option::is_none")]
2817 pub status: Option<String>,
2818 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
2820 pub type_: Option<String>,
2821 #[serde(default, skip_serializing_if = "Option::is_none")]
2823 pub id: Option<String>,
2824 #[serde(
2826 rename = "membershipStatus",
2827 default,
2828 skip_serializing_if = "Option::is_none"
2829 )]
2830 pub membership_status: Option<String>,
2831 #[serde(
2833 rename = "ruleBasedUserList",
2834 default,
2835 skip_serializing_if = "Option::is_none"
2836 )]
2837 pub rule_based_user_list: Option<RuleBasedUserListDTO>,
2838 #[serde(
2840 rename = "membershipLifeSpan",
2841 default,
2842 skip_serializing_if = "Option::is_none"
2843 )]
2844 pub membership_life_span: Option<f64>,
2845 #[serde(
2847 rename = "seedUserListIds",
2848 default,
2849 skip_serializing_if = "Vec::is_empty"
2850 )]
2851 pub seed_user_list_ids: Vec<String>,
2852 #[serde(
2854 rename = "countryCodes",
2855 default,
2856 skip_serializing_if = "Vec::is_empty"
2857 )]
2858 pub country_codes: Vec<String>,
2859 #[serde(
2862 rename = "expansionLevel",
2863 default,
2864 skip_serializing_if = "Option::is_none"
2865 )]
2866 pub expansion_level: Option<String>,
2867}
2868
2869#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2871pub struct WelcomeMessageQuestion {
2872 pub question: String,
2875 #[serde(default, skip_serializing_if = "Option::is_none")]
2877 pub response: Option<String>,
2878}