1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
* Zernio API
*
* API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api
*
* The version of the OpenAPI document: 1.0.4
* Contact: support@zernio.com
* Generated by: https://openapi-generator.tech
*/
use crate::models;
use serde::{Deserialize, Serialize};
/// AdCreative : Platform-specific creative data. Fields vary by platform.
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct AdCreative {
/// Primary thumbnail/image URL
#[serde(rename = "thumbnailUrl", skip_serializing_if = "Option::is_none")]
pub thumbnail_url: Option<String>,
/// Alternative image URL
#[serde(rename = "imageUrl", skip_serializing_if = "Option::is_none")]
pub image_url: Option<String>,
/// Meta video ID for VIDEO-type ads. Null for non-video ads. Callers that need an embeddable MP4 can call GET /{videoId}?fields=source with the page access token.
#[serde(
rename = "videoId",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub video_id: Option<Option<String>>,
/// Public Facebook watch URL for VIDEO-type ads (https://www.facebook.com/watch/?v={videoId}). Null for non-video ads.
#[serde(
rename = "videoUrl",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub video_url: Option<Option<String>>,
/// Meta creative object_type (e.g. SHARE, VIDEO, PRIVACY_CHECK_FAIL, POST_DELETED). Use this to render state-aware previews — when Meta moderation strips image/video fields, only thumbnailUrl at 64x64 is available.
#[serde(rename = "objectType", skip_serializing_if = "Option::is_none")]
pub object_type: Option<String>,
/// Meta creative `object_story_id` (the SHARE reference). Frequently absent — Meta omits it for SHARE creatives. Use effectiveObjectStoryId instead.
#[serde(
rename = "objectStoryId",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub object_story_id: Option<Option<String>>,
/// Meta `effective_object_story_id` — `{pageId}_{postId}` of the Facebook post the ad's engagement (comments) lives on. Pass to GET /v1/ads?effectiveObjectStoryId= to map a Business-Manager-visible post back to this ad; GET /v1/ads/{adId}/comments resolves comments against it.
#[serde(
rename = "effectiveObjectStoryId",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub effective_object_story_id: Option<Option<String>>,
/// Meta `effective_instagram_media_id` — the Instagram media ID of the boosted post the ad's engagement lives on. Pass to GET /v1/ads?effectiveInstagramMediaId= to map a Business-Manager-visible IG post back to this ad.
#[serde(
rename = "effectiveInstagramMediaId",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub effective_instagram_media_id: Option<Option<String>>,
/// Meta `instagram_user_id` — the Instagram-scoped business ID that owns the boosted media.
#[serde(
rename = "instagramUserId",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub instagram_user_id: Option<Option<String>>,
/// Meta `instagram_permalink_url` — public Instagram post URL of the boosted media.
#[serde(
rename = "instagramPermalinkUrl",
default,
with = "::serde_with::rust::double_option",
skip_serializing_if = "Option::is_none"
)]
pub instagram_permalink_url: Option<Option<String>>,
/// All media URLs for this ad (carousel images, multiple assets). Populated for Meta (carousel child_attachments), Google Ads (responsive display marketing_images), and LinkedIn (multi-image posts).
#[serde(rename = "mediaUrls", skip_serializing_if = "Option::is_none")]
pub media_urls: Option<Vec<String>>,
/// Ad copy/text
#[serde(rename = "body", skip_serializing_if = "Option::is_none")]
pub body: Option<String>,
/// Google Ads headline
#[serde(rename = "googleHeadline", skip_serializing_if = "Option::is_none")]
pub google_headline: Option<String>,
/// Google Ads description
#[serde(rename = "googleDescription", skip_serializing_if = "Option::is_none")]
pub google_description: Option<String>,
/// Destination URL
#[serde(rename = "linkUrl", skip_serializing_if = "Option::is_none")]
pub link_url: Option<String>,
#[serde(rename = "pinterestImageUrl", skip_serializing_if = "Option::is_none")]
pub pinterest_image_url: Option<String>,
#[serde(rename = "pinterestTitle", skip_serializing_if = "Option::is_none")]
pub pinterest_title: Option<String>,
#[serde(
rename = "pinterestDescription",
skip_serializing_if = "Option::is_none"
)]
pub pinterest_description: Option<String>,
}
impl AdCreative {
/// Platform-specific creative data. Fields vary by platform.
pub fn new() -> AdCreative {
AdCreative {
thumbnail_url: None,
image_url: None,
video_id: None,
video_url: None,
object_type: None,
object_story_id: None,
effective_object_story_id: None,
effective_instagram_media_id: None,
instagram_user_id: None,
instagram_permalink_url: None,
media_urls: None,
body: None,
google_headline: None,
google_description: None,
link_url: None,
pinterest_image_url: None,
pinterest_title: None,
pinterest_description: None,
}
}
}