late 0.0.999

API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
Documentation
/*
 * Zernio API
 *
 * API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api  Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal.  Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
 *
 * The version of the OpenAPI document: 1.41.0
 * Contact: support@zernio.com
 * Generated by: https://openapi-generator.tech
 */

use crate::models;
use serde::{Deserialize, Serialize};

/// MetaCatalogProductInput : One product shape for single and bulk calls. Money is in major units (12.99); Zernio converts to what Meta wants.
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct MetaCatalogProductInput {
    /// Your SKU; unique inside the catalog
    #[serde(rename = "retailerId", skip_serializing_if = "Option::is_none")]
    pub retailer_id: Option<String>,
    #[serde(rename = "name", skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(rename = "description", skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    /// Product page
    #[serde(rename = "url", skip_serializing_if = "Option::is_none")]
    pub url: Option<String>,
    #[serde(rename = "imageUrl", skip_serializing_if = "Option::is_none")]
    pub image_url: Option<String>,
    #[serde(
        rename = "additionalImageUrls",
        skip_serializing_if = "Option::is_none"
    )]
    pub additional_image_urls: Option<Vec<String>>,
    /// Major units, e.g. 12.99
    #[serde(rename = "price", skip_serializing_if = "Option::is_none")]
    pub price: Option<f64>,
    /// ISO 4217, e.g. EUR
    #[serde(rename = "currency", skip_serializing_if = "Option::is_none")]
    pub currency: Option<String>,
    #[serde(rename = "salePrice", skip_serializing_if = "Option::is_none")]
    pub sale_price: Option<f64>,
    /// ISO 8601
    #[serde(rename = "salePriceStartDate", skip_serializing_if = "Option::is_none")]
    pub sale_price_start_date: Option<String>,
    /// ISO 8601
    #[serde(rename = "salePriceEndDate", skip_serializing_if = "Option::is_none")]
    pub sale_price_end_date: Option<String>,
    #[serde(rename = "availability", skip_serializing_if = "Option::is_none")]
    pub availability: Option<Availability>,
    #[serde(rename = "condition", skip_serializing_if = "Option::is_none")]
    pub condition: Option<Condition>,
    #[serde(rename = "brand", skip_serializing_if = "Option::is_none")]
    pub brand: Option<String>,
    #[serde(rename = "category", skip_serializing_if = "Option::is_none")]
    pub category: Option<String>,
    #[serde(
        rename = "googleProductCategory",
        skip_serializing_if = "Option::is_none"
    )]
    pub google_product_category: Option<String>,
    #[serde(rename = "productType", skip_serializing_if = "Option::is_none")]
    pub product_type: Option<String>,
    #[serde(rename = "gtin", skip_serializing_if = "Option::is_none")]
    pub gtin: Option<String>,
    #[serde(rename = "mpn", skip_serializing_if = "Option::is_none")]
    pub mpn: Option<String>,
    #[serde(rename = "inventory", skip_serializing_if = "Option::is_none")]
    pub inventory: Option<i32>,
    #[serde(rename = "visibility", skip_serializing_if = "Option::is_none")]
    pub visibility: Option<Visibility>,
    #[serde(rename = "color", skip_serializing_if = "Option::is_none")]
    pub color: Option<String>,
    #[serde(rename = "size", skip_serializing_if = "Option::is_none")]
    pub size: Option<String>,
    #[serde(rename = "gender", skip_serializing_if = "Option::is_none")]
    pub gender: Option<Gender>,
    #[serde(rename = "material", skip_serializing_if = "Option::is_none")]
    pub material: Option<String>,
    #[serde(rename = "pattern", skip_serializing_if = "Option::is_none")]
    pub pattern: Option<String>,
    #[serde(rename = "customLabel0", skip_serializing_if = "Option::is_none")]
    pub custom_label0: Option<String>,
    #[serde(rename = "customLabel1", skip_serializing_if = "Option::is_none")]
    pub custom_label1: Option<String>,
    #[serde(rename = "customLabel2", skip_serializing_if = "Option::is_none")]
    pub custom_label2: Option<String>,
    #[serde(rename = "customLabel3", skip_serializing_if = "Option::is_none")]
    pub custom_label3: Option<String>,
    #[serde(rename = "customLabel4", skip_serializing_if = "Option::is_none")]
    pub custom_label4: Option<String>,
}

impl MetaCatalogProductInput {
    /// One product shape for single and bulk calls. Money is in major units (12.99); Zernio converts to what Meta wants.
    pub fn new() -> MetaCatalogProductInput {
        MetaCatalogProductInput {
            retailer_id: None,
            name: None,
            description: None,
            url: None,
            image_url: None,
            additional_image_urls: None,
            price: None,
            currency: None,
            sale_price: None,
            sale_price_start_date: None,
            sale_price_end_date: None,
            availability: None,
            condition: None,
            brand: None,
            category: None,
            google_product_category: None,
            product_type: None,
            gtin: None,
            mpn: None,
            inventory: None,
            visibility: None,
            color: None,
            size: None,
            gender: None,
            material: None,
            pattern: None,
            custom_label0: None,
            custom_label1: None,
            custom_label2: None,
            custom_label3: None,
            custom_label4: None,
        }
    }
}
///
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Availability {
    #[serde(rename = "in stock")]
    InStock,
    #[serde(rename = "out of stock")]
    OutOfStock,
    #[serde(rename = "preorder")]
    Preorder,
    #[serde(rename = "available for order")]
    AvailableForOrder,
    #[serde(rename = "discontinued")]
    Discontinued,
    #[serde(rename = "pending")]
    Pending,
}

impl Default for Availability {
    fn default() -> Availability {
        Self::InStock
    }
}
///
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Condition {
    #[serde(rename = "new")]
    New,
    #[serde(rename = "refurbished")]
    Refurbished,
    #[serde(rename = "used")]
    Used,
}

impl Default for Condition {
    fn default() -> Condition {
        Self::New
    }
}
///
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Visibility {
    #[serde(rename = "published")]
    Published,
    #[serde(rename = "staging")]
    Staging,
}

impl Default for Visibility {
    fn default() -> Visibility {
        Self::Published
    }
}
///
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Gender {
    #[serde(rename = "female")]
    Female,
    #[serde(rename = "male")]
    Male,
    #[serde(rename = "unisex")]
    Unisex,
}

impl Default for Gender {
    fn default() -> Gender {
        Self::Female
    }
}