use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct UploadedOrDerivedAudience {
#[serde(rename = "accountId")]
pub account_id: String,
#[serde(rename = "adAccountId")]
pub ad_account_id: String,
#[serde(rename = "name")]
pub name: String,
#[serde(rename = "description", skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(rename = "type")]
pub r#type: Type,
#[serde(rename = "matchRules", skip_serializing_if = "Option::is_none")]
pub match_rules: Option<Vec<models::UploadedOrDerivedAudienceMatchRulesInner>>,
#[serde(rename = "sourceType", skip_serializing_if = "Option::is_none")]
pub source_type: Option<SourceType>,
#[serde(rename = "trigger", skip_serializing_if = "Option::is_none")]
pub trigger: Option<String>,
#[serde(rename = "lookbackDays", skip_serializing_if = "Option::is_none")]
pub lookback_days: Option<LookbackDays>,
#[serde(rename = "engagementSources", skip_serializing_if = "Option::is_none")]
pub engagement_sources: Option<Vec<String>>,
#[serde(rename = "companies", skip_serializing_if = "Option::is_none")]
pub companies: Option<Vec<models::UploadedOrDerivedAudienceCompaniesInner>>,
#[serde(rename = "pixelId", skip_serializing_if = "Option::is_none")]
pub pixel_id: Option<String>,
#[serde(rename = "retentionDays", skip_serializing_if = "Option::is_none")]
pub retention_days: Option<i32>,
#[serde(rename = "sourceAudienceId", skip_serializing_if = "Option::is_none")]
pub source_audience_id: Option<String>,
#[serde(rename = "country", skip_serializing_if = "Option::is_none")]
pub country: Option<String>,
#[serde(rename = "ratio", skip_serializing_if = "Option::is_none")]
pub ratio: Option<f64>,
#[serde(rename = "rule", skip_serializing_if = "Option::is_none")]
pub rule: Option<serde_json::Value>,
#[serde(rename = "customerFileSource", skip_serializing_if = "Option::is_none")]
pub customer_file_source: Option<String>,
}
impl UploadedOrDerivedAudience {
pub fn new(
account_id: String,
ad_account_id: String,
name: String,
r#type: Type,
) -> UploadedOrDerivedAudience {
UploadedOrDerivedAudience {
account_id,
ad_account_id,
name,
description: None,
r#type,
match_rules: None,
source_type: None,
trigger: None,
lookback_days: None,
engagement_sources: None,
companies: None,
pixel_id: None,
retention_days: None,
source_audience_id: None,
country: None,
ratio: None,
rule: None,
customer_file_source: None,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Type {
#[serde(rename = "customer_list")]
CustomerList,
#[serde(rename = "company_list")]
CompanyList,
#[serde(rename = "engagement")]
Engagement,
#[serde(rename = "website")]
Website,
#[serde(rename = "website_retargeting")]
WebsiteRetargeting,
#[serde(rename = "lookalike")]
Lookalike,
}
impl Default for Type {
fn default() -> Type {
Self::CustomerList
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum SourceType {
#[serde(rename = "VIDEO_ADS")]
VideoAds,
#[serde(rename = "LEAD_GEN_FORMS")]
LeadGenForms,
#[serde(rename = "ORGANIZATION_PAGES")]
OrganizationPages,
#[serde(rename = "EVENT_PAGES")]
EventPages,
#[serde(rename = "SINGLE_IMAGE_ADS")]
SingleImageAds,
}
impl Default for SourceType {
fn default() -> SourceType {
Self::VideoAds
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum LookbackDays {
#[serde(rename = "30")]
Variant30,
#[serde(rename = "60")]
Variant60,
#[serde(rename = "90")]
Variant90,
#[serde(rename = "180")]
Variant180,
#[serde(rename = "365")]
Variant365,
}
impl Default for LookbackDays {
fn default() -> LookbackDays {
Self::Variant30
}
}