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 AdCampaignDTO {
16 #[serde(default, skip_serializing_if = "Option::is_none")]
18 pub id: Option<String>,
19 #[serde(default, skip_serializing_if = "Option::is_none")]
21 pub locale: Option<LocaleDTO>,
22 #[serde(default, skip_serializing_if = "Option::is_none")]
24 pub name: Option<String>,
25 #[serde(
29 rename = "publishingStatus",
30 default,
31 skip_serializing_if = "Option::is_none"
32 )]
33 pub publishing_status: Option<String>,
34 #[serde(rename = "mediaType", default, skip_serializing_if = "Option::is_none")]
37 pub media_type: Option<String>,
38 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub audience: Option<AudienceDTO>,
41 #[serde(rename = "unitCost", default, skip_serializing_if = "Option::is_none")]
43 pub unit_cost: Option<UnitCostDTO>,
44 #[serde(
46 rename = "campaignType",
47 default,
48 skip_serializing_if = "Option::is_none"
49 )]
50 pub campaign_type: Option<String>,
51 #[serde(
53 rename = "adCampaignGroupId",
54 default,
55 skip_serializing_if = "Option::is_none"
56 )]
57 pub ad_campaign_group_id: Option<String>,
58 #[serde(
60 rename = "adCampaignId",
61 default,
62 skip_serializing_if = "Option::is_none"
63 )]
64 pub ad_campaign_id: Option<String>,
65 #[serde(default, skip_serializing_if = "Vec::is_empty")]
67 pub ads: Vec<LinkedInAdDTO>,
68 #[serde(
70 rename = "linkedInError",
71 default,
72 skip_serializing_if = "Option::is_none"
73 )]
74 pub linked_in_error: Option<String>,
75 #[serde(default, skip_serializing_if = "Option::is_none")]
77 pub meta: Option<serde_json::Value>,
78}
79
80#[derive(Debug, Clone, Default, Serialize, Deserialize)]
82pub struct AdCampaignGroupDataDTO {
83 #[serde(default, skip_serializing_if = "Option::is_none")]
85 pub id: Option<String>,
86 #[serde(rename = "locationId")]
89 pub location_id: String,
90 #[serde(default, skip_serializing_if = "Option::is_none")]
92 pub budget: Option<LinkedInBudgetDTO>,
93 #[serde(rename = "adCampaigns", default, skip_serializing_if = "Vec::is_empty")]
95 pub ad_campaigns: Vec<AdCampaignDTO>,
96 #[serde(
99 rename = "adBudgetOptimization",
100 default,
101 skip_serializing_if = "Option::is_none"
102 )]
103 pub ad_budget_optimization: Option<String>,
104 #[serde(
107 rename = "objectiveType",
108 default,
109 skip_serializing_if = "Option::is_none"
110 )]
111 pub objective_type: Option<String>,
112 #[serde(default, skip_serializing_if = "Option::is_none")]
114 pub name: Option<String>,
115 #[serde(
117 rename = "adCampaignGroupId",
118 default,
119 skip_serializing_if = "Option::is_none"
120 )]
121 pub ad_campaign_group_id: Option<String>,
122 #[serde(
126 rename = "publishingStatus",
127 default,
128 skip_serializing_if = "Option::is_none"
129 )]
130 pub publishing_status: Option<String>,
131 #[serde(
133 rename = "linkedInAdAccountId",
134 default,
135 skip_serializing_if = "Option::is_none"
136 )]
137 pub linked_in_ad_account_id: Option<String>,
138 #[serde(
140 rename = "unpublishedChanges",
141 default,
142 skip_serializing_if = "Option::is_none"
143 )]
144 pub unpublished_changes: Option<bool>,
145 #[serde(default, skip_serializing_if = "Option::is_none")]
147 pub meta: Option<serde_json::Value>,
148 #[serde(
150 rename = "linkedInError",
151 default,
152 skip_serializing_if = "Option::is_none"
153 )]
154 pub linked_in_error: Option<String>,
155}
156
157#[derive(Debug, Clone, Default, Serialize, Deserialize)]
159pub struct AdScheduleTargetDTO {
160 #[serde(rename = "startMinute")]
164 pub start_minute: String,
165 #[serde(rename = "endMinute")]
169 pub end_minute: String,
170 #[serde(rename = "dayOfWeek")]
175 pub day_of_week: String,
176 #[serde(rename = "startHour")]
179 pub start_hour: f64,
180 #[serde(rename = "endHour")]
183 pub end_hour: f64,
184}
185
186#[derive(Debug, Clone, Default, Serialize, Deserialize)]
188pub struct AudienceCustomAudienceItemDTO {
189 pub id: String,
192 pub name: String,
195}
196
197#[derive(Debug, Clone, Default, Serialize, Deserialize)]
199pub struct AudienceDTO {
200 #[serde(
202 rename = "geoLocations",
203 default,
204 skip_serializing_if = "Vec::is_empty"
205 )]
206 pub geo_locations: Vec<GeoLocationDTO>,
207 #[serde(
209 rename = "targetAudience",
210 default,
211 skip_serializing_if = "Option::is_none"
212 )]
213 pub target_audience: Option<TargetAudienceDTO>,
214}
215
216#[derive(Debug, Clone, Default, Serialize, Deserialize)]
218pub struct AudienceDimensionDTO {
219 #[serde(
221 rename = "isAgeUnknown",
222 default,
223 skip_serializing_if = "Option::is_none"
224 )]
225 pub is_age_unknown: Option<bool>,
226 #[serde(rename = "ageRanges", default, skip_serializing_if = "Vec::is_empty")]
228 pub age_ranges: Vec<String>,
229 #[serde(default, skip_serializing_if = "Vec::is_empty")]
231 pub genders: Vec<String>,
232 #[serde(
234 rename = "parentalStatuses",
235 default,
236 skip_serializing_if = "Vec::is_empty"
237 )]
238 pub parental_statuses: Vec<String>,
239 #[serde(
241 rename = "audienceSegments",
242 default,
243 skip_serializing_if = "Option::is_none"
244 )]
245 pub audience_segments: Option<AudienceSegmentsDTO>,
246}
247
248#[derive(Debug, Clone, Default, Serialize, Deserialize)]
250pub struct AudienceInterestDTO {
251 pub id: String,
254 pub name: String,
257 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
259 pub type_: Option<String>,
260}
261
262#[derive(Debug, Clone, Default, Serialize, Deserialize)]
264pub struct AudienceLocaleDTO {
265 pub name: String,
268 pub key: f64,
271}
272
273#[derive(Debug, Clone, Default, Serialize, Deserialize)]
275pub struct AudienceLocationDTO {
276 pub key: String,
279 pub name: String,
282 #[serde(rename = "type")]
288 pub type_: String,
289 #[serde(rename = "selectionType")]
293 pub selection_type: String,
294 #[serde(default, skip_serializing_if = "Option::is_none")]
296 pub radius: Option<f64>,
297 #[serde(
300 rename = "radiusUnit",
301 default,
302 skip_serializing_if = "Option::is_none"
303 )]
304 pub radius_unit: Option<String>,
305 #[serde(default, skip_serializing_if = "Option::is_none")]
307 pub geometry: Option<AudienceLocationGeometry>,
308}
309
310#[derive(Debug, Clone, Default, Serialize, Deserialize)]
312pub struct AudienceLocationGeometry {
313 pub location: serde_json::Value,
316 #[serde(rename = "locationType")]
319 pub location_type: String,
320}
321
322#[derive(Debug, Clone, Default, Serialize, Deserialize)]
324pub struct AudiencePlacementsDTO {
325 #[serde(default, skip_serializing_if = "Vec::is_empty")]
327 pub facebook: Vec<String>,
328 #[serde(default, skip_serializing_if = "Vec::is_empty")]
330 pub instagram: Vec<String>,
331 #[serde(default, skip_serializing_if = "Vec::is_empty")]
333 pub messenger: Vec<String>,
334}
335
336#[derive(Debug, Clone, Default, Serialize, Deserialize)]
338pub struct AudienceSegmentsDTO {
339 #[serde(
341 rename = "customAudiences",
342 default,
343 skip_serializing_if = "Vec::is_empty"
344 )]
345 pub custom_audiences: Vec<String>,
346 #[serde(rename = "userLists", default, skip_serializing_if = "Vec::is_empty")]
348 pub user_lists: Vec<String>,
349 #[serde(
351 rename = "userInterests",
352 default,
353 skip_serializing_if = "Vec::is_empty"
354 )]
355 pub user_interests: Vec<String>,
356}
357
358#[derive(Debug, Clone, Default, Serialize, Deserialize)]
360pub struct Budget {
361 #[serde(rename = "budgetType")]
365 pub budget_type: String,
366 pub amount: f64,
369 #[serde(
371 rename = "scheduleStartDate",
372 default,
373 skip_serializing_if = "Option::is_none"
374 )]
375 pub schedule_start_date: Option<String>,
376 #[serde(
378 rename = "scheduleEndDate",
379 default,
380 skip_serializing_if = "Option::is_none"
381 )]
382 pub schedule_end_date: Option<String>,
383}
384
385#[derive(Debug, Clone, Default, Serialize, Deserialize)]
387pub struct CallAssetPayloadDTO {
388 #[serde(rename = "phoneNumber")]
391 pub phone_number: String,
392 #[serde(rename = "countryCode")]
395 pub country_code: String,
396 #[serde(
398 rename = "callConversionAction",
399 default,
400 skip_serializing_if = "Option::is_none"
401 )]
402 pub call_conversion_action: Option<String>,
403 #[serde(
405 rename = "adScheduleTargets",
406 default,
407 skip_serializing_if = "Vec::is_empty"
408 )]
409 pub ad_schedule_targets: Vec<AdScheduleTargetDTO>,
410 #[serde(
412 rename = "resourceName",
413 default,
414 skip_serializing_if = "Option::is_none"
415 )]
416 pub resource_name: Option<String>,
417}
418
419#[derive(Debug, Clone, Default, Serialize, Deserialize)]
421pub struct CampaignDTO {
422 #[serde(default, skip_serializing_if = "Option::is_none")]
424 pub id: Option<String>,
425 pub name: String,
428 #[serde(rename = "locationId")]
431 pub location_id: String,
432 #[serde(rename = "advertisingChannelType")]
437 pub advertising_channel_type: String,
438 #[serde(
441 rename = "advertisingChannelSubType",
442 default,
443 skip_serializing_if = "Option::is_none"
444 )]
445 pub advertising_channel_sub_type: Option<String>,
446 #[serde(rename = "goalType", default, skip_serializing_if = "Option::is_none")]
449 pub goal_type: Option<String>,
450 #[serde(default, skip_serializing_if = "Option::is_none")]
452 pub budget: Option<GoogleBudgetDTO>,
453 #[serde(default, skip_serializing_if = "Option::is_none")]
455 pub audience: Option<GoogleCampaignAudienceDTO>,
456 #[serde(
458 rename = "networkSettings",
459 default,
460 skip_serializing_if = "Option::is_none"
461 )]
462 pub network_settings: Option<GoogleNetworkSettingsDTO>,
463 #[serde(
465 rename = "biddingStrategy",
466 default,
467 skip_serializing_if = "Option::is_none"
468 )]
469 pub bidding_strategy: Option<GoogleBiddingStrategyDTO>,
470 #[serde(default, skip_serializing_if = "Option::is_none")]
472 pub assets: Option<GoogleAssetsDTO>,
473 #[serde(
475 rename = "isEuPoliticalAds",
476 default,
477 skip_serializing_if = "Option::is_none"
478 )]
479 pub is_eu_political_ads: Option<bool>,
480 #[serde(rename = "adGroups", default, skip_serializing_if = "Vec::is_empty")]
482 pub ad_groups: Vec<GoogleAdGroupDTO>,
483 #[serde(
485 rename = "campaignGoal",
486 default,
487 skip_serializing_if = "Option::is_none"
488 )]
489 pub campaign_goal: Option<GoogleCampaignGoalDTO>,
490 #[serde(rename = "adSchedule", default, skip_serializing_if = "Vec::is_empty")]
492 pub ad_schedule: Vec<GoogleAdScheduleDTO>,
493 #[serde(
497 rename = "publishingStatus",
498 default,
499 skip_serializing_if = "Option::is_none"
500 )]
501 pub publishing_status: Option<String>,
502 #[serde(
504 rename = "googleAdAccountId",
505 default,
506 skip_serializing_if = "Option::is_none"
507 )]
508 pub google_ad_account_id: Option<String>,
509 #[serde(
511 rename = "unpublishedChanges",
512 default,
513 skip_serializing_if = "Option::is_none"
514 )]
515 pub unpublished_changes: Option<bool>,
516 #[serde(
518 rename = "maximumCpc",
519 default,
520 skip_serializing_if = "Option::is_none"
521 )]
522 pub maximum_cpc: Option<f64>,
523 #[serde(
525 rename = "googleCampaignId",
526 default,
527 skip_serializing_if = "Option::is_none"
528 )]
529 pub google_campaign_id: Option<String>,
530 #[serde(default, skip_serializing_if = "Option::is_none")]
532 pub source: Option<String>,
533 #[serde(
535 rename = "advancedOptions",
536 default,
537 skip_serializing_if = "Option::is_none"
538 )]
539 pub advanced_options: Option<serde_json::Value>,
540}
541
542#[derive(Debug, Clone, Default, Serialize, Deserialize)]
544pub struct ConsentDTO {
545 #[serde(rename = "checkRequired")]
548 pub check_required: bool,
549 pub id: f64,
552 pub consent: LocalizedStringDTO,
555}
556
557#[derive(Debug, Clone, Default, Serialize, Deserialize)]
559pub struct ConversionValueSettings {
560 #[serde(rename = "defaultValue")]
563 pub default_value: f64,
564 #[serde(rename = "defaultCurrencyCode")]
567 pub default_currency_code: String,
568 #[serde(rename = "alwaysUseDefaultValue")]
572 pub always_use_default_value: bool,
573}
574
575#[derive(Debug, Clone, Default, Serialize, Deserialize)]
577pub struct CreateConversationFormDTO {
578 #[serde(rename = "locationId")]
581 pub location_id: String,
582 pub name: String,
585 pub text: String,
588 #[serde(default, skip_serializing_if = "Vec::is_empty")]
591 pub questions: Vec<WelcomeMessageQuestion>,
592}
593
594#[derive(Debug, Clone, Default, Serialize, Deserialize)]
596pub struct CreateGoogleIntegrationDTO {
597 #[serde(rename = "locationId")]
600 pub location_id: String,
601 #[serde(rename = "adAccountId")]
604 pub ad_account_id: String,
605 #[serde(rename = "mccId")]
608 pub mcc_id: String,
609}
610
611#[derive(Debug, Clone, Default, Serialize, Deserialize)]
613pub struct CreateIntegrationDTO {
614 #[serde(rename = "locationId")]
617 pub location_id: String,
618 #[serde(rename = "pageId")]
621 pub page_id: String,
622 #[serde(
624 rename = "adAccountId",
625 default,
626 skip_serializing_if = "Option::is_none"
627 )]
628 pub ad_account_id: Option<String>,
629}
630
631#[derive(Debug, Clone, Default, Serialize, Deserialize)]
633pub struct CreateLeadFormDTO {
634 #[serde(rename = "type")]
638 pub type_: String,
639 pub name: String,
642 #[serde(rename = "locationId")]
645 pub location_id: String,
646 #[serde(
648 rename = "greetingCard",
649 default,
650 skip_serializing_if = "Option::is_none"
651 )]
652 pub greeting_card: Option<GreetingCard>,
653 #[serde(default, skip_serializing_if = "Vec::is_empty")]
657 pub questions: Vec<FormQuestion>,
658 #[serde(
660 rename = "questionPageHeadline",
661 default,
662 skip_serializing_if = "Option::is_none"
663 )]
664 pub question_page_headline: Option<String>,
665 #[serde(rename = "privacyPolicyLink")]
668 pub privacy_policy_link: String,
669 #[serde(
671 rename = "privacyPolicyText",
672 default,
673 skip_serializing_if = "Option::is_none"
674 )]
675 pub privacy_policy_text: Option<String>,
676 #[serde(
678 rename = "customDisclaimer",
679 default,
680 skip_serializing_if = "Option::is_none"
681 )]
682 pub custom_disclaimer: Option<CustomDisclaimer>,
683 #[serde(rename = "thankYouPage")]
686 pub thank_you_page: ThankYouPage,
687 #[serde(rename = "isDraft", default, skip_serializing_if = "Option::is_none")]
689 pub is_draft: Option<bool>,
690 #[serde(
692 rename = "draftFormId",
693 default,
694 skip_serializing_if = "Option::is_none"
695 )]
696 pub draft_form_id: Option<String>,
697 #[serde(default, skip_serializing_if = "Option::is_none")]
699 pub locale: Option<String>,
700}
701
702#[derive(Debug, Clone, Default, Serialize, Deserialize)]
704pub struct CreateLinkedinIntegrationDTO {
705 #[serde(rename = "locationId")]
708 pub location_id: String,
709 #[serde(rename = "adAccountId")]
712 pub ad_account_id: String,
713 #[serde(rename = "adAccountName")]
716 pub ad_account_name: String,
717 #[serde(rename = "currencyCode")]
720 pub currency_code: String,
721 #[serde(rename = "organizationId")]
724 pub organization_id: String,
725}
726
727#[derive(Debug, Clone, Default, Serialize, Deserialize)]
729pub struct CreateOfflineUserListJobDTO {
730 #[serde(rename = "locationId")]
733 pub location_id: String,
734 #[serde(
736 rename = "smartListIds",
737 default,
738 skip_serializing_if = "Vec::is_empty"
739 )]
740 pub smart_list_ids: Vec<String>,
741 #[serde(rename = "csvPath", default, skip_serializing_if = "Option::is_none")]
743 pub csv_path: Option<String>,
744 #[serde(
746 rename = "userListId",
747 default,
748 skip_serializing_if = "Option::is_none"
749 )]
750 pub user_list_id: Option<String>,
751 #[serde(rename = "isDynamic", default, skip_serializing_if = "Option::is_none")]
753 pub is_dynamic: Option<bool>,
754}
755
756#[derive(Debug, Clone, Default, Serialize, Deserialize)]
758pub struct CreationLocaleDTO {
759 pub country: String,
762 pub language: String,
765}
766
767#[derive(Debug, Clone, Default, Serialize, Deserialize)]
769pub struct CustomDisclaimer {
770 pub title: String,
773 pub body: String,
776 #[serde(default, skip_serializing_if = "Vec::is_empty")]
778 pub checkboxes: Vec<CustomDisclaimerCheckbox>,
779}
780
781#[derive(Debug, Clone, Default, Serialize, Deserialize)]
783pub struct CustomDisclaimerCheckbox {
784 #[serde(rename = "isRequired")]
787 pub is_required: bool,
788 pub text: String,
791 pub key: String,
794}
795
796#[derive(Debug, Clone, Default, Serialize, Deserialize)]
798pub struct CustomQuestionFieldDTO {
799 #[serde(rename = "customQuestionText")]
802 pub custom_question_text: String,
803 #[serde(
806 rename = "singleChoiceAnswers",
807 default,
808 skip_serializing_if = "Vec::is_empty"
809 )]
810 pub single_choice_answers: Vec<String>,
811}
812
813#[derive(Debug, Clone, Default, Serialize, Deserialize)]
815pub struct FacebookAudienceDTO {
816 #[serde(
819 rename = "geoLocations",
820 default,
821 skip_serializing_if = "Vec::is_empty"
822 )]
823 pub geo_locations: Vec<AudienceLocationDTO>,
824 #[serde(default, skip_serializing_if = "Vec::is_empty")]
826 pub locales: Vec<AudienceLocaleDTO>,
827 #[serde(default, skip_serializing_if = "Option::is_none")]
829 pub placements: Option<AudiencePlacementsDTO>,
830 #[serde(
833 rename = "placementType",
834 default,
835 skip_serializing_if = "Option::is_none"
836 )]
837 pub placement_type: Option<String>,
838 #[serde(default, skip_serializing_if = "Vec::is_empty")]
840 pub lookalike: Vec<AudienceCustomAudienceItemDTO>,
841 #[serde(default, skip_serializing_if = "Vec::is_empty")]
843 pub retargeting: Vec<AudienceCustomAudienceItemDTO>,
844 #[serde(default, skip_serializing_if = "Vec::is_empty")]
846 pub interests: Vec<AudienceInterestDTO>,
847 #[serde(rename = "ageMin", default, skip_serializing_if = "Option::is_none")]
849 pub age_min: Option<f64>,
850 #[serde(rename = "ageMax", default, skip_serializing_if = "Option::is_none")]
852 pub age_max: Option<f64>,
853 #[serde(default, skip_serializing_if = "Vec::is_empty")]
855 pub genders: Vec<f64>,
856}
857
858#[derive(Debug, Clone, Default, Serialize, Deserialize)]
860pub struct FbSetDefaultPageBodyDTO {
861 #[serde(rename = "pageId")]
864 pub page_id: String,
865}
866
867#[derive(Debug, Clone, Default, Serialize, Deserialize)]
869pub struct FbUpdateAudienceBodyDTO {
870 #[serde(rename = "locationId")]
873 pub location_id: String,
874 pub name: String,
877 #[serde(default, skip_serializing_if = "Option::is_none")]
879 pub description: Option<String>,
880}
881
882#[derive(Debug, Clone, Default, Serialize, Deserialize)]
884pub struct FlexibleRuleUserListDTO {
885 #[serde(
887 rename = "inclusiveRuleOperator",
888 default,
889 skip_serializing_if = "Option::is_none"
890 )]
891 pub inclusive_rule_operator: Option<String>,
892 #[serde(
895 rename = "inclusiveOperands",
896 default,
897 skip_serializing_if = "Vec::is_empty"
898 )]
899 pub inclusive_operands: Vec<RuleOperandDTO>,
900 #[serde(
903 rename = "exclusiveOperands",
904 default,
905 skip_serializing_if = "Vec::is_empty"
906 )]
907 pub exclusive_operands: Vec<RuleOperandDTO>,
908}
909
910#[derive(Debug, Clone, Default, Serialize, Deserialize)]
912pub struct FormQuestion {
913 #[serde(default, skip_serializing_if = "Option::is_none")]
915 pub label: Option<String>,
916 pub key: String,
919 #[serde(rename = "type")]
925 pub type_: String,
926 #[serde(default, skip_serializing_if = "Vec::is_empty")]
928 pub options: Vec<FormQuestionOption>,
929}
930
931#[derive(Debug, Clone, Default, Serialize, Deserialize)]
933pub struct FormQuestionOption {
934 pub key: String,
937 pub value: String,
940}
941
942#[derive(Debug, Clone, Default, Serialize, Deserialize)]
944pub struct GeoAddressComponentDTO {
945 #[serde(rename = "longName", default, skip_serializing_if = "Option::is_none")]
947 pub long_name: Option<String>,
948 #[serde(rename = "shortName", default, skip_serializing_if = "Option::is_none")]
950 pub short_name: Option<String>,
951 #[serde(default, skip_serializing_if = "Vec::is_empty")]
953 pub types: Vec<String>,
954}
955
956#[derive(Debug, Clone, Default, Serialize, Deserialize)]
958pub struct GeoGeometryDTO {
959 #[serde(default, skip_serializing_if = "Option::is_none")]
961 pub location: Option<GeoLatLngDTO>,
962 #[serde(
964 rename = "locationType",
965 default,
966 skip_serializing_if = "Option::is_none"
967 )]
968 pub location_type: Option<String>,
969 #[serde(default, skip_serializing_if = "Option::is_none")]
971 pub viewport: Option<GeoViewportDTO>,
972}
973
974#[derive(Debug, Clone, Default, Serialize, Deserialize)]
976pub struct GeoLatLngDTO {
977 #[serde(default, skip_serializing_if = "Option::is_none")]
979 pub lat: Option<f64>,
980 #[serde(default, skip_serializing_if = "Option::is_none")]
982 pub lng: Option<f64>,
983}
984
985#[derive(Debug, Clone, Default, Serialize, Deserialize)]
987pub struct GeoLocationDTO {
988 pub name: String,
991 pub urn: String,
994 #[serde(rename = "facetUrn")]
997 pub facet_urn: String,
998 #[serde(rename = "selectionType")]
1002 pub selection_type: String,
1003}
1004
1005#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1007pub struct GeoViewportDTO {
1008 #[serde(default, skip_serializing_if = "Option::is_none")]
1010 pub northeast: Option<GeoLatLngDTO>,
1011 #[serde(default, skip_serializing_if = "Option::is_none")]
1013 pub southwest: Option<GeoLatLngDTO>,
1014}
1015
1016#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1018pub struct GoogleAdContentDTO {
1019 #[serde(default, skip_serializing_if = "Option::is_none")]
1021 pub id: Option<String>,
1022 #[serde(default, skip_serializing_if = "Option::is_none")]
1024 pub name: Option<String>,
1025 #[serde(rename = "mediaType", default, skip_serializing_if = "Option::is_none")]
1028 pub media_type: Option<String>,
1029 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1031 pub headlines: Vec<String>,
1032 #[serde(
1034 rename = "longHeadlines",
1035 default,
1036 skip_serializing_if = "Vec::is_empty"
1037 )]
1038 pub long_headlines: Vec<String>,
1039 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1041 pub descriptions: Vec<String>,
1042 #[serde(rename = "finalUrl", default, skip_serializing_if = "Option::is_none")]
1044 pub final_url: Option<String>,
1045 #[serde(default, skip_serializing_if = "Option::is_none")]
1047 pub path1: Option<String>,
1048 #[serde(default, skip_serializing_if = "Option::is_none")]
1050 pub path2: Option<String>,
1051 #[serde(rename = "isDeleted", default, skip_serializing_if = "Option::is_none")]
1053 pub is_deleted: Option<bool>,
1054 #[serde(rename = "adError", default, skip_serializing_if = "Option::is_none")]
1056 pub ad_error: Option<String>,
1057 #[serde(
1061 rename = "publishingStatus",
1062 default,
1063 skip_serializing_if = "Option::is_none"
1064 )]
1065 pub publishing_status: Option<String>,
1066 #[serde(rename = "adId", default, skip_serializing_if = "Option::is_none")]
1068 pub ad_id: Option<String>,
1069 #[serde(
1071 rename = "adCampaignId",
1072 default,
1073 skip_serializing_if = "Option::is_none"
1074 )]
1075 pub ad_campaign_id: Option<String>,
1076 #[serde(rename = "adGroupId", default, skip_serializing_if = "Option::is_none")]
1078 pub ad_group_id: Option<String>,
1079 #[serde(
1081 rename = "googleAdId",
1082 default,
1083 skip_serializing_if = "Option::is_none"
1084 )]
1085 pub google_ad_id: Option<String>,
1086 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1088 pub media: Vec<GoogleMediaDTO>,
1089 #[serde(
1093 rename = "callToActionLabel",
1094 default,
1095 skip_serializing_if = "Option::is_none"
1096 )]
1097 pub call_to_action_label: Option<String>,
1098 #[serde(
1100 rename = "businessName",
1101 default,
1102 skip_serializing_if = "Option::is_none"
1103 )]
1104 pub business_name: Option<String>,
1105 #[serde(
1107 rename = "youtubeVideoLinks",
1108 default,
1109 skip_serializing_if = "Vec::is_empty"
1110 )]
1111 pub youtube_video_links: Vec<GoogleYouTubeVideoLinkDTO>,
1112 #[serde(
1114 rename = "carouselCards",
1115 default,
1116 skip_serializing_if = "Vec::is_empty"
1117 )]
1118 pub carousel_cards: Vec<GoogleCarouselCardDTO>,
1119 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1123 pub placements: Vec<String>,
1124 #[serde(
1126 rename = "customChannels",
1127 default,
1128 skip_serializing_if = "Option::is_none"
1129 )]
1130 pub custom_channels: Option<bool>,
1131}
1132
1133#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1135pub struct GoogleAdGroupAudienceDTO {
1136 #[serde(
1138 rename = "geoLocations",
1139 default,
1140 skip_serializing_if = "Vec::is_empty"
1141 )]
1142 pub geo_locations: Vec<GoogleGeoLocationDTO>,
1143 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1145 pub locales: Vec<GoogleLocaleDTO>,
1146}
1147
1148#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1150pub struct GoogleAdGroupDTO {
1151 #[serde(default, skip_serializing_if = "Option::is_none")]
1153 pub id: Option<String>,
1154 #[serde(rename = "adGroupId", default, skip_serializing_if = "Option::is_none")]
1156 pub ad_group_id: Option<String>,
1157 #[serde(default, skip_serializing_if = "Option::is_none")]
1159 pub name: Option<String>,
1160 #[serde(
1162 rename = "adCampaignId",
1163 default,
1164 skip_serializing_if = "Option::is_none"
1165 )]
1166 pub ad_campaign_id: Option<String>,
1167 #[serde(rename = "adContent", default, skip_serializing_if = "Vec::is_empty")]
1169 pub ad_content: Vec<GoogleAdContentDTO>,
1170 #[serde(default, skip_serializing_if = "Option::is_none")]
1172 pub keywords: Option<GoogleKeywordsDTO>,
1173 #[serde(
1177 rename = "publishingStatus",
1178 default,
1179 skip_serializing_if = "Option::is_none"
1180 )]
1181 pub publishing_status: Option<String>,
1182 #[serde(
1184 rename = "adGroupError",
1185 default,
1186 skip_serializing_if = "Option::is_none"
1187 )]
1188 pub ad_group_error: Option<String>,
1189 #[serde(
1191 rename = "googleAdGroupId",
1192 default,
1193 skip_serializing_if = "Option::is_none"
1194 )]
1195 pub google_ad_group_id: Option<String>,
1196 #[serde(
1198 rename = "customChannels",
1199 default,
1200 skip_serializing_if = "Option::is_none"
1201 )]
1202 pub custom_channels: Option<bool>,
1203 #[serde(
1207 rename = "selectedChannels",
1208 default,
1209 skip_serializing_if = "Vec::is_empty"
1210 )]
1211 pub selected_channels: Vec<String>,
1212 #[serde(
1214 rename = "googleAudienceId",
1215 default,
1216 skip_serializing_if = "Option::is_none"
1217 )]
1218 pub google_audience_id: Option<String>,
1219 #[serde(default, skip_serializing_if = "Option::is_none")]
1221 pub audience: Option<GoogleAdGroupAudienceDTO>,
1222}
1223
1224#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1226pub struct GoogleAdScheduleDTO {
1227 #[serde(rename = "dayOfWeek")]
1233 pub day_of_week: String,
1234 #[serde(rename = "from")]
1237 pub from_: String,
1238 pub to: String,
1241}
1242
1243#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1245pub struct GoogleAssetImageDTO {
1246 pub url: String,
1249 #[serde(
1251 rename = "resourceName",
1252 default,
1253 skip_serializing_if = "Option::is_none"
1254 )]
1255 pub resource_name: Option<String>,
1256 #[serde(default, skip_serializing_if = "Option::is_none")]
1258 pub name: Option<String>,
1259 #[serde(default, skip_serializing_if = "Option::is_none")]
1261 pub error: Option<String>,
1262}
1263
1264#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1266pub struct GoogleAssetsDTO {
1267 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1269 pub calls: Vec<String>,
1270 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1272 pub sitelinks: Vec<String>,
1273 #[serde(rename = "leadForm", default, skip_serializing_if = "Option::is_none")]
1275 pub lead_form: Option<String>,
1276 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1278 pub images: Vec<GoogleAssetImageDTO>,
1279 #[serde(
1281 rename = "businessLogo",
1282 default,
1283 skip_serializing_if = "Option::is_none"
1284 )]
1285 pub business_logo: Option<GoogleAssetImageDTO>,
1286}
1287
1288#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1290pub struct GoogleBiddingStrategyDTO {
1291 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
1293 pub type_: Option<String>,
1294 #[serde(default, skip_serializing_if = "Option::is_none")]
1296 pub value: Option<f64>,
1297}
1298
1299#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1301pub struct GoogleBudgetDTO {
1302 #[serde(
1305 rename = "budgetType",
1306 default,
1307 skip_serializing_if = "Option::is_none"
1308 )]
1309 pub budget_type: Option<String>,
1310 #[serde(default, skip_serializing_if = "Option::is_none")]
1312 pub amount: Option<f64>,
1313 #[serde(
1315 rename = "scheduleStartDate",
1316 default,
1317 skip_serializing_if = "Option::is_none"
1318 )]
1319 pub schedule_start_date: Option<String>,
1320 #[serde(
1322 rename = "scheduleEndDate",
1323 default,
1324 skip_serializing_if = "Option::is_none"
1325 )]
1326 pub schedule_end_date: Option<String>,
1327}
1328
1329#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1331pub struct GoogleCampaignAudienceDTO {
1332 #[serde(
1334 rename = "geoLocations",
1335 default,
1336 skip_serializing_if = "Vec::is_empty"
1337 )]
1338 pub geo_locations: Vec<GoogleGeoLocationDTO>,
1339 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1341 pub locales: Vec<GoogleLocaleDTO>,
1342 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1344 pub gender: Vec<GoogleDemographicTargetDTO>,
1345 #[serde(rename = "ageRange", default, skip_serializing_if = "Vec::is_empty")]
1347 pub age_range: Vec<GoogleDemographicTargetDTO>,
1348 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1350 pub segments: Vec<GoogleSegmentTargetDTO>,
1351 #[serde(
1353 rename = "targetInterests",
1354 default,
1355 skip_serializing_if = "Option::is_none"
1356 )]
1357 pub target_interests: Option<GoogleTargetInterestsDTO>,
1358}
1359
1360#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1362pub struct GoogleCampaignGoalDTO {
1363 #[serde(rename = "type")]
1367 pub type_: String,
1368 #[serde(default, skip_serializing_if = "Option::is_none")]
1370 pub value: Option<String>,
1371 #[serde(
1373 rename = "isCustomConversionGoal",
1374 default,
1375 skip_serializing_if = "Option::is_none"
1376 )]
1377 pub is_custom_conversion_goal: Option<bool>,
1378}
1379
1380#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1382pub struct GoogleCarouselCardDTO {
1383 #[serde(default, skip_serializing_if = "Option::is_none")]
1385 pub headline: Option<String>,
1386 #[serde(rename = "finalUrl", default, skip_serializing_if = "Option::is_none")]
1388 pub final_url: Option<String>,
1389 #[serde(
1391 rename = "callToActionLabel",
1392 default,
1393 skip_serializing_if = "Option::is_none"
1394 )]
1395 pub call_to_action_label: Option<String>,
1396 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1398 pub media: Vec<GoogleMediaDTO>,
1399}
1400
1401#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1403pub struct GoogleDemographicTargetDTO {
1404 #[serde(rename = "enum")]
1407 pub enum_: String,
1408 pub negative: bool,
1411}
1412
1413#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1415pub struct GoogleGeoLocationDTO {
1416 #[serde(default, skip_serializing_if = "Option::is_none")]
1418 pub key: Option<String>,
1419 #[serde(default, skip_serializing_if = "Option::is_none")]
1421 pub id: Option<String>,
1422 #[serde(default, skip_serializing_if = "Option::is_none")]
1424 pub name: Option<String>,
1425 #[serde(
1427 rename = "countryName",
1428 default,
1429 skip_serializing_if = "Option::is_none"
1430 )]
1431 pub country_name: Option<String>,
1432 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
1434 pub type_: Option<String>,
1435 #[serde(default, skip_serializing_if = "Option::is_none")]
1437 pub radius: Option<f64>,
1438 #[serde(
1441 rename = "radiusUnit",
1442 default,
1443 skip_serializing_if = "Option::is_none"
1444 )]
1445 pub radius_unit: Option<String>,
1446 #[serde(
1449 rename = "selectionType",
1450 default,
1451 skip_serializing_if = "Option::is_none"
1452 )]
1453 pub selection_type: Option<String>,
1454 #[serde(
1456 rename = "resourceName",
1457 default,
1458 skip_serializing_if = "Option::is_none"
1459 )]
1460 pub resource_name: Option<String>,
1461 #[serde(rename = "placeId", default, skip_serializing_if = "Option::is_none")]
1463 pub place_id: Option<String>,
1464 #[serde(
1466 rename = "formattedAddress",
1467 default,
1468 skip_serializing_if = "Option::is_none"
1469 )]
1470 pub formatted_address: Option<String>,
1471 #[serde(default, skip_serializing_if = "Option::is_none")]
1473 pub geometry: Option<GeoGeometryDTO>,
1474 #[serde(
1476 rename = "addressComponents",
1477 default,
1478 skip_serializing_if = "Vec::is_empty"
1479 )]
1480 pub address_components: Vec<GeoAddressComponentDTO>,
1481}
1482
1483#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1485pub struct GoogleKeywordItemDTO {
1486 pub keyword: String,
1489 #[serde(rename = "matchType")]
1492 pub match_type: String,
1493}
1494
1495#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1497pub struct GoogleKeywordsDTO {
1498 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1500 pub positives: Vec<GoogleKeywordItemDTO>,
1501 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1503 pub negatives: Vec<GoogleKeywordItemDTO>,
1504}
1505
1506#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1508pub struct GoogleLocaleDTO {
1509 #[serde(default, skip_serializing_if = "Option::is_none")]
1511 pub name: Option<String>,
1512 #[serde(default, skip_serializing_if = "Option::is_none")]
1514 pub key: Option<String>,
1515 #[serde(default, skip_serializing_if = "Option::is_none")]
1517 pub id: Option<String>,
1518 #[serde(
1520 rename = "resourceName",
1521 default,
1522 skip_serializing_if = "Option::is_none"
1523 )]
1524 pub resource_name: Option<String>,
1525}
1526
1527#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1529pub struct GoogleMediaDTO {
1530 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
1533 pub type_: Option<String>,
1534 #[serde(default, skip_serializing_if = "Option::is_none")]
1536 pub src: Option<String>,
1537 #[serde(rename = "isLogo", default, skip_serializing_if = "Option::is_none")]
1539 pub is_logo: Option<bool>,
1540 #[serde(default, skip_serializing_if = "Option::is_none")]
1542 pub error: Option<String>,
1543 #[serde(default, skip_serializing_if = "Option::is_none")]
1545 pub url: Option<String>,
1546 #[serde(rename = "imageType", default, skip_serializing_if = "Option::is_none")]
1548 pub image_type: Option<String>,
1549}
1550
1551#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1553pub struct GoogleNetworkSettingsDTO {
1554 #[serde(rename = "targetSearchNetwork")]
1557 pub target_search_network: bool,
1558 #[serde(rename = "targetContentNetwork")]
1561 pub target_content_network: bool,
1562}
1563
1564#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1566pub struct GoogleSegmentTargetDTO {
1567 #[serde(rename = "type")]
1570 pub type_: String,
1571 pub id: String,
1574}
1575
1576#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1578pub struct GoogleTargetInterestsDTO {
1579 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1581 pub affinity: Vec<String>,
1582 #[serde(rename = "inMarket", default, skip_serializing_if = "Vec::is_empty")]
1584 pub in_market: Vec<String>,
1585}
1586
1587#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1589pub struct GoogleYouTubeVideoLinkDTO {
1590 #[serde(rename = "youtubeVideoId")]
1593 pub youtube_video_id: String,
1594}
1595
1596#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1598pub struct GreetingCard {
1599 pub title: String,
1602 pub style: String,
1605 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1608 pub content: Vec<String>,
1609}
1610
1611#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1613pub struct HiddenFieldDTO {
1614 pub name: String,
1617 pub value: String,
1620}
1621
1622#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1624pub struct KeywordSuggestionDTO {
1625 pub url: String,
1628 #[serde(
1630 rename = "languageCode",
1631 default,
1632 skip_serializing_if = "Option::is_none"
1633 )]
1634 pub language_code: Option<String>,
1635 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1637 pub locations: Vec<String>,
1638 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1640 pub keywords: Vec<String>,
1641}
1642
1643#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1645pub struct LeadFormAssetPayloadDTO {
1646 #[serde(
1648 rename = "resourceName",
1649 default,
1650 skip_serializing_if = "Option::is_none"
1651 )]
1652 pub resource_name: Option<String>,
1653 pub headline: String,
1656 pub description: String,
1659 #[serde(rename = "businessName")]
1662 pub business_name: String,
1663 #[serde(rename = "privacyPolicyUrl")]
1666 pub privacy_policy_url: String,
1667 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1670 pub fields: Vec<LeadFormFieldDTO>,
1671 #[serde(rename = "callToActionType")]
1677 pub call_to_action_type: String,
1678 #[serde(
1680 rename = "callToActionDescription",
1681 default,
1682 skip_serializing_if = "Option::is_none"
1683 )]
1684 pub call_to_action_description: Option<String>,
1685 #[serde(
1687 rename = "backgroundImageAsset",
1688 default,
1689 skip_serializing_if = "Option::is_none"
1690 )]
1691 pub background_image_asset: Option<String>,
1692 #[serde(
1695 rename = "desiredIntent",
1696 default,
1697 skip_serializing_if = "Option::is_none"
1698 )]
1699 pub desired_intent: Option<String>,
1700 #[serde(
1702 rename = "customQuestionFields",
1703 default,
1704 skip_serializing_if = "Vec::is_empty"
1705 )]
1706 pub custom_question_fields: Vec<CustomQuestionFieldDTO>,
1707 #[serde(
1709 rename = "postSubmitHeadline",
1710 default,
1711 skip_serializing_if = "Option::is_none"
1712 )]
1713 pub post_submit_headline: Option<String>,
1714 #[serde(
1716 rename = "postSubmitDescription",
1717 default,
1718 skip_serializing_if = "Option::is_none"
1719 )]
1720 pub post_submit_description: Option<String>,
1721 #[serde(
1724 rename = "postSubmitCallToActionType",
1725 default,
1726 skip_serializing_if = "Option::is_none"
1727 )]
1728 pub post_submit_call_to_action_type: Option<String>,
1729 #[serde(rename = "finalUrls", default, skip_serializing_if = "Option::is_none")]
1731 pub final_urls: Option<String>,
1732}
1733
1734#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1736pub struct LeadFormContentDTO {
1737 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1740 pub questions: Vec<LeadFormQuestionDTO>,
1741 #[serde(default, skip_serializing_if = "Option::is_none")]
1743 pub description: Option<LocalizedStringDTO>,
1744 pub headline: LocalizedStringDTO,
1747 #[serde(rename = "postSubmissionInfo")]
1750 pub post_submission_info: PostSubmissionInfoDTO,
1751 #[serde(rename = "legalInfo")]
1754 pub legal_info: LegalInfoDTO,
1755}
1756
1757#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1759pub struct LeadFormFieldDTO {
1760 #[serde(rename = "inputType")]
1763 pub input_type: String,
1764 #[serde(
1766 rename = "singleChoiceAnswers",
1767 default,
1768 skip_serializing_if = "Vec::is_empty"
1769 )]
1770 pub single_choice_answers: Vec<String>,
1771}
1772
1773#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1775pub struct LeadFormQuestionDTO {
1776 pub question: LocalizedStringDTO,
1779 pub name: String,
1782 #[serde(rename = "questionDetails")]
1785 pub question_details: QuestionDetailsDTO,
1786 #[serde(
1788 rename = "predefinedField",
1789 default,
1790 skip_serializing_if = "Option::is_none"
1791 )]
1792 pub predefined_field: Option<String>,
1793}
1794
1795#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1797pub struct LegalInfoDTO {
1798 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1801 pub consents: Vec<ConsentDTO>,
1802 #[serde(rename = "privacyPolicyUrl")]
1805 pub privacy_policy_url: String,
1806 #[serde(
1808 rename = "legalDisclaimer",
1809 default,
1810 skip_serializing_if = "Option::is_none"
1811 )]
1812 pub legal_disclaimer: Option<LocalizedStringDTO>,
1813}
1814
1815#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1817pub struct LinkedInAdDTO {
1818 #[serde(default, skip_serializing_if = "Option::is_none")]
1820 pub id: Option<String>,
1821 #[serde(default, skip_serializing_if = "Option::is_none")]
1823 pub name: Option<String>,
1824 #[serde(
1826 rename = "introductoryText",
1827 default,
1828 skip_serializing_if = "Option::is_none"
1829 )]
1830 pub introductory_text: Option<String>,
1831 #[serde(
1833 rename = "destinationUrl",
1834 default,
1835 skip_serializing_if = "Option::is_none"
1836 )]
1837 pub destination_url: Option<String>,
1838 #[serde(
1840 rename = "callToActionLabel",
1841 default,
1842 skip_serializing_if = "Option::is_none"
1843 )]
1844 pub call_to_action_label: Option<String>,
1845 #[serde(
1847 rename = "destinationFormId",
1848 default,
1849 skip_serializing_if = "Option::is_none"
1850 )]
1851 pub destination_form_id: Option<String>,
1852 #[serde(
1854 rename = "contentReferenceString",
1855 default,
1856 skip_serializing_if = "Option::is_none"
1857 )]
1858 pub content_reference_string: Option<String>,
1859 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1861 pub media: Vec<LinkedInMediaDTO>,
1862 #[serde(
1864 rename = "adCampaignId",
1865 default,
1866 skip_serializing_if = "Option::is_none"
1867 )]
1868 pub ad_campaign_id: Option<String>,
1869 #[serde(rename = "adId", default, skip_serializing_if = "Option::is_none")]
1871 pub ad_id: Option<String>,
1872 #[serde(default, skip_serializing_if = "Option::is_none")]
1874 pub headline: Option<String>,
1875 #[serde(
1879 rename = "publishingStatus",
1880 default,
1881 skip_serializing_if = "Option::is_none"
1882 )]
1883 pub publishing_status: Option<String>,
1884 #[serde(
1886 rename = "adCampaignGroupId",
1887 default,
1888 skip_serializing_if = "Option::is_none"
1889 )]
1890 pub ad_campaign_group_id: Option<String>,
1891 #[serde(default, skip_serializing_if = "Option::is_none")]
1893 pub description: Option<String>,
1894 #[serde(default, skip_serializing_if = "Option::is_none")]
1896 pub meta: Option<serde_json::Value>,
1897 #[serde(
1899 rename = "linkedInError",
1900 default,
1901 skip_serializing_if = "Option::is_none"
1902 )]
1903 pub linked_in_error: Option<String>,
1904}
1905
1906#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1908pub struct LinkedInBudgetDTO {
1909 #[serde(
1912 rename = "budgetType",
1913 default,
1914 skip_serializing_if = "Option::is_none"
1915 )]
1916 pub budget_type: Option<String>,
1917 #[serde(default, skip_serializing_if = "Option::is_none")]
1919 pub amount: Option<f64>,
1920 #[serde(
1922 rename = "scheduleStartDate",
1923 default,
1924 skip_serializing_if = "Option::is_none"
1925 )]
1926 pub schedule_start_date: Option<String>,
1927 #[serde(
1929 rename = "scheduleEndDate",
1930 default,
1931 skip_serializing_if = "Option::is_none"
1932 )]
1933 pub schedule_end_date: Option<String>,
1934}
1935
1936#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1938pub struct LinkedInCreateLeadFormBodyDTO {
1939 pub owner: SponsoredAccountOwnerDTO,
1942 #[serde(rename = "creationLocale")]
1945 pub creation_locale: CreationLocaleDTO,
1946 pub name: String,
1949 pub state: String,
1953 pub content: LeadFormContentDTO,
1956 #[serde(
1958 rename = "hiddenFields",
1959 default,
1960 skip_serializing_if = "Vec::is_empty"
1961 )]
1962 pub hidden_fields: Vec<HiddenFieldDTO>,
1963}
1964
1965#[derive(Debug, Clone, Default, Serialize, Deserialize)]
1967pub struct LinkedInMediaDTO {
1968 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
1971 pub type_: Option<String>,
1972 #[serde(default, skip_serializing_if = "Option::is_none")]
1974 pub src: Option<String>,
1975 #[serde(default, skip_serializing_if = "Vec::is_empty")]
1977 pub frames: Vec<String>,
1978 #[serde(
1980 rename = "selectedPoster",
1981 default,
1982 skip_serializing_if = "Option::is_none"
1983 )]
1984 pub selected_poster: Option<f64>,
1985 #[serde(
1987 rename = "thumbnailUrl",
1988 default,
1989 skip_serializing_if = "Option::is_none"
1990 )]
1991 pub thumbnail_url: Option<String>,
1992 #[serde(default, skip_serializing_if = "Option::is_none")]
1994 pub name: Option<String>,
1995 #[serde(default, skip_serializing_if = "Option::is_none")]
1997 pub headline: Option<String>,
1998 #[serde(
2000 rename = "destinationUrl",
2001 default,
2002 skip_serializing_if = "Option::is_none"
2003 )]
2004 pub destination_url: Option<String>,
2005 #[serde(
2007 rename = "fileSizeBytes",
2008 default,
2009 skip_serializing_if = "Option::is_none"
2010 )]
2011 pub file_size_bytes: Option<f64>,
2012}
2013
2014#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2016pub struct LinkedInUpdateAdStatusBodyDTO {
2017 #[serde(rename = "operationType")]
2021 pub operation_type: String,
2022 #[serde(rename = "type")]
2026 pub type_: String,
2027}
2028
2029#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2031pub struct LocaleDTO {
2032 pub country: String,
2035 pub language: String,
2038}
2039
2040#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2042pub struct LocalizedStringDTO {
2043 pub localized: serde_json::Value,
2046}
2047
2048#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2050pub struct LocationIdBodyDTO {
2051 #[serde(rename = "locationId")]
2054 pub location_id: String,
2055}
2056
2057#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2059pub struct MediaDTO {
2060 pub src: String,
2063 #[serde(
2065 rename = "thumbnailUrl",
2066 default,
2067 skip_serializing_if = "Option::is_none"
2068 )]
2069 pub thumbnail_url: Option<String>,
2070 #[serde(
2072 rename = "selectedPoster",
2073 default,
2074 skip_serializing_if = "Option::is_none"
2075 )]
2076 pub selected_poster: Option<f64>,
2077 #[serde(rename = "type")]
2081 pub type_: String,
2082 #[serde(default, skip_serializing_if = "Option::is_none")]
2084 pub name: Option<String>,
2085 #[serde(default, skip_serializing_if = "Option::is_none")]
2087 pub headline: Option<String>,
2088 #[serde(default, skip_serializing_if = "Option::is_none")]
2090 pub description: Option<String>,
2091 #[serde(default, skip_serializing_if = "Option::is_none")]
2093 pub link: Option<String>,
2094}
2095
2096#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2098pub struct MemberDTO {
2099 #[serde(rename = "memberType")]
2103 pub member_type: String,
2104 #[serde(default, skip_serializing_if = "Option::is_none")]
2106 pub keyword: Option<String>,
2107 #[serde(default, skip_serializing_if = "Option::is_none")]
2109 pub url: Option<String>,
2110 #[serde(default, skip_serializing_if = "Option::is_none")]
2112 pub app: Option<String>,
2113}
2114
2115#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2117pub struct MultipleChoiceOptionDTO {
2118 pub id: f64,
2121 pub text: LocalizedStringDTO,
2124}
2125
2126#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2128pub struct MultipleChoiceQuestionDetailsDTO {
2129 #[serde(default, skip_serializing_if = "Vec::is_empty")]
2132 pub options: Vec<MultipleChoiceOptionDTO>,
2133}
2134
2135#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2137pub struct PostSubmissionCallToActionDTO {
2138 #[serde(rename = "callToActionTarget")]
2141 pub call_to_action_target: PostSubmissionCallToActionTargetDTO,
2142 #[serde(rename = "callToActionLabel")]
2147 pub call_to_action_label: String,
2148}
2149
2150#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2152pub struct PostSubmissionCallToActionTargetDTO {
2153 #[serde(rename = "landingPageUrl")]
2156 pub landing_page_url: String,
2157}
2158
2159#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2161pub struct PostSubmissionInfoDTO {
2162 pub message: LocalizedStringDTO,
2165 #[serde(rename = "callToAction")]
2168 pub call_to_action: PostSubmissionCallToActionDTO,
2169}
2170
2171#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2173pub struct PublishAdDTO {
2174 #[serde(rename = "locationId")]
2177 pub location_id: String,
2178}
2179
2180#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2182pub struct PublishingProgressResponseDTO {
2183 #[serde(rename = "campaignId")]
2186 pub campaign_id: String,
2187 #[serde(rename = "publishingStatus")]
2192 pub publishing_status: String,
2193 pub total: f64,
2196 pub processed: f64,
2199 #[serde(rename = "isComplete")]
2203 pub is_complete: bool,
2204 #[serde(rename = "hasFailed")]
2207 pub has_failed: bool,
2208}
2209
2210#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2212pub struct QuestionDetailsDTO {
2213 #[serde(
2215 rename = "textQuestionDetails",
2216 default,
2217 skip_serializing_if = "Option::is_none"
2218 )]
2219 pub text_question_details: Option<serde_json::Value>,
2220 #[serde(
2222 rename = "multipleChoiceQuestionDetails",
2223 default,
2224 skip_serializing_if = "Option::is_none"
2225 )]
2226 pub multiple_choice_question_details: Option<MultipleChoiceQuestionDetailsDTO>,
2227}
2228
2229#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2231pub struct RuleBasedUserListDTO {
2232 #[serde(
2235 rename = "prepopulationStatus",
2236 default,
2237 skip_serializing_if = "Option::is_none"
2238 )]
2239 pub prepopulation_status: Option<String>,
2240 #[serde(rename = "flexibleRuleUserList")]
2243 pub flexible_rule_user_list: FlexibleRuleUserListDTO,
2244}
2245
2246#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2248pub struct RuleDTO {
2249 #[serde(
2252 rename = "ruleItemGroups",
2253 default,
2254 skip_serializing_if = "Vec::is_empty"
2255 )]
2256 pub rule_item_groups: Vec<RuleItemGroupDTO>,
2257}
2258
2259#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2261pub struct RuleItemDTO {
2262 pub name: String,
2266 #[serde(rename = "stringRuleItem")]
2269 pub string_rule_item: StringRuleItemDTO,
2270}
2271
2272#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2274pub struct RuleItemGroupDTO {
2275 #[serde(rename = "ruleItems", default, skip_serializing_if = "Vec::is_empty")]
2278 pub rule_items: Vec<RuleItemDTO>,
2279}
2280
2281#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2283pub struct RuleOperandDTO {
2284 #[serde(rename = "lookbackWindowDays")]
2287 pub lookback_window_days: f64,
2288 pub rule: RuleDTO,
2291}
2292
2293#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2295pub struct SelectedAttributeDTO {
2296 pub urn: String,
2299 pub name: String,
2302 #[serde(rename = "categoryName")]
2305 pub category_name: String,
2306 pub facet: String,
2309}
2310
2311#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2313pub struct SitelinkAssetPayloadDTO {
2314 #[serde(
2316 rename = "resourceName",
2317 default,
2318 skip_serializing_if = "Option::is_none"
2319 )]
2320 pub resource_name: Option<String>,
2321 #[serde(rename = "linkText")]
2324 pub link_text: String,
2325 #[serde(rename = "finalUrls")]
2328 pub final_urls: String,
2329 #[serde(default, skip_serializing_if = "Option::is_none")]
2331 pub description1: Option<String>,
2332 #[serde(default, skip_serializing_if = "Option::is_none")]
2334 pub description2: Option<String>,
2335 #[serde(rename = "startDate", default, skip_serializing_if = "Option::is_none")]
2337 pub start_date: Option<String>,
2338 #[serde(rename = "endDate", default, skip_serializing_if = "Option::is_none")]
2340 pub end_date: Option<String>,
2341 #[serde(
2343 rename = "adScheduleTargets",
2344 default,
2345 skip_serializing_if = "Vec::is_empty"
2346 )]
2347 pub ad_schedule_targets: Vec<AdScheduleTargetDTO>,
2348}
2349
2350#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2352pub struct SponsoredAccountOwnerDTO {
2353 #[serde(rename = "sponsoredAccount")]
2356 pub sponsored_account: String,
2357}
2358
2359#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2361pub struct StringRuleItemDTO {
2362 pub operator: String,
2365 pub value: String,
2368}
2369
2370#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2372pub struct TargetAudienceDTO {
2373 #[serde(default, skip_serializing_if = "Vec::is_empty")]
2375 pub include: Vec<Vec<SelectedAttributeDTO>>,
2376 #[serde(default, skip_serializing_if = "Vec::is_empty")]
2378 pub exclude: Vec<Vec<SelectedAttributeDTO>>,
2379}
2380
2381#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2383pub struct ThankYouPage {
2384 pub title: String,
2387 pub body: String,
2390 #[serde(rename = "buttonText")]
2393 pub button_text: String,
2394 #[serde(rename = "buttonType")]
2397 pub button_type: String,
2398 #[serde(
2400 rename = "buttonLink",
2401 default,
2402 skip_serializing_if = "Option::is_none"
2403 )]
2404 pub button_link: Option<String>,
2405 #[serde(
2407 rename = "businessPhone",
2408 default,
2409 skip_serializing_if = "Option::is_none"
2410 )]
2411 pub business_phone: Option<String>,
2412 #[serde(
2414 rename = "countryCode",
2415 default,
2416 skip_serializing_if = "Option::is_none"
2417 )]
2418 pub country_code: Option<String>,
2419}
2420
2421#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2423pub struct UnitCostDTO {
2424 pub amount: f64,
2427}
2428
2429#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2431pub struct UpdateCustomAudienceBatchDTO {
2432 #[serde(rename = "locationId")]
2435 pub location_id: String,
2436 #[serde(rename = "csvPath", default, skip_serializing_if = "Option::is_none")]
2438 pub csv_path: Option<String>,
2439 #[serde(rename = "operationType")]
2442 pub operation_type: String,
2443 #[serde(
2445 rename = "smartlistIds",
2446 default,
2447 skip_serializing_if = "Vec::is_empty"
2448 )]
2449 pub smartlist_ids: Vec<String>,
2450 #[serde(
2452 rename = "dynamicAudience",
2453 default,
2454 skip_serializing_if = "Option::is_none"
2455 )]
2456 pub dynamic_audience: Option<String>,
2457}
2458
2459#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2461pub struct UpdateCustomAudienceDTO {
2462 #[serde(rename = "locationId")]
2465 pub location_id: String,
2466 #[serde(rename = "contactId")]
2469 pub contact_id: String,
2470 #[serde(
2472 rename = "fbAdAccountId",
2473 default,
2474 skip_serializing_if = "Option::is_none"
2475 )]
2476 pub fb_ad_account_id: Option<String>,
2477}
2478
2479#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2481pub struct UpsertAdDTO {
2482 #[serde(default, skip_serializing_if = "Option::is_none")]
2484 pub id: Option<String>,
2485 #[serde(rename = "locationId")]
2488 pub location_id: String,
2489 #[serde(default, skip_serializing_if = "Option::is_none")]
2491 pub name: Option<String>,
2492 #[serde(
2494 rename = "primaryText",
2495 default,
2496 skip_serializing_if = "Option::is_none"
2497 )]
2498 pub primary_text: Option<String>,
2499 #[serde(default, skip_serializing_if = "Option::is_none")]
2501 pub headline: Option<String>,
2502 #[serde(default, skip_serializing_if = "Option::is_none")]
2504 pub description: Option<String>,
2505 #[serde(rename = "imageUrl", default, skip_serializing_if = "Option::is_none")]
2507 pub image_url: Option<String>,
2508 #[serde(rename = "mediaType", default, skip_serializing_if = "Option::is_none")]
2511 pub media_type: Option<String>,
2512 #[serde(default, skip_serializing_if = "Vec::is_empty")]
2514 pub media: Vec<MediaDTO>,
2515 #[serde(
2517 rename = "multiAdvertiserAds",
2518 default,
2519 skip_serializing_if = "Option::is_none"
2520 )]
2521 pub multi_advertiser_ads: Option<bool>,
2522 #[serde(rename = "campaignId")]
2525 pub campaign_id: String,
2526 #[serde(rename = "adsetId")]
2529 pub adset_id: String,
2530 #[serde(default, skip_serializing_if = "Option::is_none")]
2532 pub cta: Option<String>,
2533 #[serde(
2535 rename = "conversationFormId",
2536 default,
2537 skip_serializing_if = "Option::is_none"
2538 )]
2539 pub conversation_form_id: Option<String>,
2540 #[serde(
2542 rename = "destinationLink",
2543 default,
2544 skip_serializing_if = "Option::is_none"
2545 )]
2546 pub destination_link: Option<String>,
2547 #[serde(
2549 rename = "destinationFormId",
2550 default,
2551 skip_serializing_if = "Option::is_none"
2552 )]
2553 pub destination_form_id: Option<String>,
2554}
2555
2556#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2558pub struct UpsertAdsetDTO {
2559 #[serde(default, skip_serializing_if = "Option::is_none")]
2561 pub id: Option<String>,
2562 #[serde(rename = "locationId")]
2565 pub location_id: String,
2566 #[serde(default, skip_serializing_if = "Option::is_none")]
2568 pub name: Option<String>,
2569 #[serde(rename = "pageId", default, skip_serializing_if = "Option::is_none")]
2571 pub page_id: Option<String>,
2572 #[serde(
2574 rename = "instagramActorId",
2575 default,
2576 skip_serializing_if = "Option::is_none"
2577 )]
2578 pub instagram_actor_id: Option<String>,
2579 #[serde(
2582 rename = "messagingPlatforms",
2583 default,
2584 skip_serializing_if = "Vec::is_empty"
2585 )]
2586 pub messaging_platforms: Vec<String>,
2587 #[serde(
2589 rename = "whatsappNumber",
2590 default,
2591 skip_serializing_if = "Option::is_none"
2592 )]
2593 pub whatsapp_number: Option<String>,
2594 #[serde(default, skip_serializing_if = "Option::is_none")]
2597 pub audience: Option<FacebookAudienceDTO>,
2598 #[serde(default, skip_serializing_if = "Option::is_none")]
2600 pub budget: Option<Budget>,
2601 #[serde(
2603 rename = "conversionLocation",
2604 default,
2605 skip_serializing_if = "Option::is_none"
2606 )]
2607 pub conversion_location: Option<String>,
2608 #[serde(
2610 rename = "customEventType",
2611 default,
2612 skip_serializing_if = "Option::is_none"
2613 )]
2614 pub custom_event_type: Option<String>,
2615 #[serde(rename = "pixelId", default, skip_serializing_if = "Option::is_none")]
2617 pub pixel_id: Option<String>,
2618 #[serde(rename = "campaignId")]
2621 pub campaign_id: String,
2622}
2623
2624#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2626pub struct UpsertAssetsDTO {
2627 #[serde(rename = "locationId")]
2630 pub location_id: String,
2631 #[serde(rename = "type")]
2635 pub type_: String,
2636 pub payload: serde_json::Value,
2641}
2642
2643#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2645pub struct UpsertAudienceDTO {
2646 #[serde(rename = "locationId")]
2649 pub location_id: String,
2650 #[serde(
2652 rename = "resourceName",
2653 default,
2654 skip_serializing_if = "Option::is_none"
2655 )]
2656 pub resource_name: Option<String>,
2657 pub name: String,
2660 #[serde(default, skip_serializing_if = "Option::is_none")]
2662 pub dimensions: Option<AudienceDimensionDTO>,
2663 #[serde(
2665 rename = "exclusionDimension",
2666 default,
2667 skip_serializing_if = "Option::is_none"
2668 )]
2669 pub exclusion_dimension: Option<AudienceDimensionDTO>,
2670}
2671
2672#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2674pub struct UpsertCampaignDTO {
2675 #[serde(default, skip_serializing_if = "Option::is_none")]
2677 pub id: Option<String>,
2678 #[serde(rename = "locationId")]
2681 pub location_id: String,
2682 #[serde(default, skip_serializing_if = "Option::is_none")]
2684 pub name: Option<String>,
2685 #[serde(default, skip_serializing_if = "Option::is_none")]
2689 pub objective: Option<String>,
2690 #[serde(
2694 rename = "specialAdCategories",
2695 default,
2696 skip_serializing_if = "Vec::is_empty"
2697 )]
2698 pub special_ad_categories: Vec<String>,
2699 #[serde(default, skip_serializing_if = "Option::is_none")]
2701 pub source: Option<String>,
2702}
2703
2704#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2706pub struct UpsertConversionDTO {
2707 #[serde(rename = "locationId")]
2710 pub location_id: String,
2711 #[serde(
2713 rename = "conversionId",
2714 default,
2715 skip_serializing_if = "Option::is_none"
2716 )]
2717 pub conversion_id: Option<String>,
2718 pub name: String,
2721 #[serde(rename = "type")]
2725 pub type_: String,
2726 pub category: String,
2729 #[serde(rename = "valueSettings")]
2732 pub value_settings: ConversionValueSettings,
2733 #[serde(rename = "countingType")]
2737 pub counting_type: String,
2738 #[serde(rename = "attributionModel")]
2742 pub attribution_model: String,
2743 #[serde(rename = "clickThroughWindow")]
2746 pub click_through_window: f64,
2747}
2748
2749#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2751pub struct UpsertConversionPixelDTO {
2752 #[serde(rename = "locationId")]
2755 pub location_id: String,
2756 #[serde(
2758 rename = "conversionPixelId",
2759 default,
2760 skip_serializing_if = "Option::is_none"
2761 )]
2762 pub conversion_pixel_id: Option<String>,
2763 #[serde(default, skip_serializing_if = "Option::is_none")]
2765 pub name: Option<String>,
2766 #[serde(rename = "igUserId", default, skip_serializing_if = "Option::is_none")]
2768 pub ig_user_id: Option<String>,
2769 #[serde(rename = "type")]
2772 pub type_: String,
2773}
2774
2775#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2777pub struct UpsertSegmentDTO {
2778 pub name: String,
2781 #[serde(default, skip_serializing_if = "Option::is_none")]
2783 pub description: Option<String>,
2784 #[serde(default, skip_serializing_if = "Vec::is_empty")]
2786 pub members: Vec<MemberDTO>,
2787 #[serde(default, skip_serializing_if = "Option::is_none")]
2789 pub status: Option<String>,
2790 #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
2792 pub type_: Option<String>,
2793 #[serde(default, skip_serializing_if = "Option::is_none")]
2795 pub id: Option<String>,
2796 #[serde(
2798 rename = "membershipStatus",
2799 default,
2800 skip_serializing_if = "Option::is_none"
2801 )]
2802 pub membership_status: Option<String>,
2803 #[serde(
2805 rename = "ruleBasedUserList",
2806 default,
2807 skip_serializing_if = "Option::is_none"
2808 )]
2809 pub rule_based_user_list: Option<RuleBasedUserListDTO>,
2810 #[serde(
2812 rename = "membershipLifeSpan",
2813 default,
2814 skip_serializing_if = "Option::is_none"
2815 )]
2816 pub membership_life_span: Option<f64>,
2817 #[serde(
2819 rename = "seedUserListIds",
2820 default,
2821 skip_serializing_if = "Vec::is_empty"
2822 )]
2823 pub seed_user_list_ids: Vec<String>,
2824 #[serde(
2826 rename = "countryCodes",
2827 default,
2828 skip_serializing_if = "Vec::is_empty"
2829 )]
2830 pub country_codes: Vec<String>,
2831 #[serde(
2834 rename = "expansionLevel",
2835 default,
2836 skip_serializing_if = "Option::is_none"
2837 )]
2838 pub expansion_level: Option<String>,
2839}
2840
2841#[derive(Debug, Clone, Default, Serialize, Deserialize)]
2843pub struct WelcomeMessageQuestion {
2844 pub question: String,
2847 #[serde(default, skip_serializing_if = "Option::is_none")]
2849 pub response: Option<String>,
2850}