/*
 * 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};

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum CreatePostRequestPlatformsInnerPlatformSpecificData {
    TwitterPlatformData(Box<models::TwitterPlatformData>),
    ThreadsPlatformData(Box<models::ThreadsPlatformData>),
    FacebookPlatformData(Box<models::FacebookPlatformData>),
    InstagramPlatformData(Box<models::InstagramPlatformData>),
    LinkedInPlatformData(Box<models::LinkedInPlatformData>),
    PinterestPlatformData(Box<models::PinterestPlatformData>),
    YouTubePlatformData(Box<models::YouTubePlatformData>),
    GoogleBusinessPlatformData(Box<models::GoogleBusinessPlatformData>),
    TikTokPlatformData(Box<models::TikTokPlatformData>),
    TelegramPlatformData(Box<models::TelegramPlatformData>),
    SnapchatPlatformData(Box<models::SnapchatPlatformData>),
    RedditPlatformData(Box<models::RedditPlatformData>),
    BlueskyPlatformData(Box<models::BlueskyPlatformData>),
    DiscordPlatformData(Box<models::DiscordPlatformData>),
}

impl Default for CreatePostRequestPlatformsInnerPlatformSpecificData {
    fn default() -> Self {
        Self::TwitterPlatformData(Default::default())
    }
}
/// Controls who can reply to the tweet. \"following\" allows only people you follow, \"mentionedUsers\" allows only mentioned users, \"subscribers\" allows only subscribers, \"verified\" allows only verified users. Omit for default (everyone can reply). For threads, applies to the first tweet only. Cannot be combined with replyToTweetId.
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum ReplySettings {
    #[serde(rename = "following")]
    Following,
    #[serde(rename = "mentionedUsers")]
    MentionedUsers,
    #[serde(rename = "subscribers")]
    Subscribers,
    #[serde(rename = "verified")]
    Verified,
}

impl Default for ReplySettings {
    fn default() -> ReplySettings {
        Self::Following
    }
}
/// Content type: story (ephemeral 24h, default), saved_story (permanent on Public Profile), spotlight (video feed)
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum ContentType {
    #[serde(rename = "story")]
    Story,
    #[serde(rename = "saved_story")]
    SavedStory,
    #[serde(rename = "spotlight")]
    Spotlight,
}

impl Default for ContentType {
    fn default() -> ContentType {
        Self::Story
    }
}
/// Video visibility: public (default, anyone can watch), unlisted (link only), private (invite only)
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Visibility {
    #[serde(rename = "public")]
    Public,
    #[serde(rename = "private")]
    Private,
    #[serde(rename = "unlisted")]
    Unlisted,
}

impl Default for Visibility {
    fn default() -> Visibility {
        Self::Public
    }
}
/// Post type. STANDARD is a regular update. EVENT requires the event object. OFFER requires the offer object. Defaults to STANDARD if omitted.
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum TopicType {
    #[serde(rename = "STANDARD")]
    Standard,
    #[serde(rename = "EVENT")]
    Event,
    #[serde(rename = "OFFER")]
    Offer,
}

impl Default for TopicType {
    fn default() -> TopicType {
        Self::Standard
    }
}
/// Type of commercial content disclosure. Sufficient on its own: \"brand_organic\" (\"Your Brand\") implies isBrandOrganicPost and \"brand_content\" (\"Branded Content\", paid partnership) implies brandPartnerPromote, so you don't need to send the boolean flags separately. Branded content cannot be posted with privacyLevel SELF_ONLY.
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum CommercialContentType {
    #[serde(rename = "none")]
    None,
    #[serde(rename = "brand_organic")]
    BrandOrganic,
    #[serde(rename = "brand_content")]
    BrandContent,
}

impl Default for CommercialContentType {
    fn default() -> CommercialContentType {
        Self::None
    }
}
/// Optional override. Defaults based on provided media items.
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum MediaType {
    #[serde(rename = "video")]
    Video,
    #[serde(rename = "photo")]
    Photo,
}

impl Default for MediaType {
    fn default() -> MediaType {
        Self::Video
    }
}
/// Text formatting mode for the message (default is HTML)
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum ParseMode {
    #[serde(rename = "HTML")]
    Html,
    #[serde(rename = "Markdown")]
    Markdown,
    #[serde(rename = "MarkdownV2")]
    MarkdownV2,
}

impl Default for ParseMode {
    fn default() -> ParseMode {
        Self::Html
    }
}
