use crate::*;
use serde_with::{serde_as, OneOrMany};
pub type ProductGroupGtinFieldEnum = String;
pub type ProductGroupAsinFieldEnum = String;
pub type ProductGroupAdditionalTypeFieldEnum = String;
#[serde_as]
#[derive(Debug, serde::Deserialize)]
#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
pub struct ProductGroup {
#[serde(rename = "@context")]
pub context: String,
#[serde(rename = "hasVariant")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub has_variant: Vec<Product>,
#[serde(rename = "variesBy")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub varies_by: Vec<ProductGroupVariesByFieldEnum>,
#[serde(rename = "productGroupID")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub product_group_id: Vec<String>,
#[serde(rename = "productID")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub product_id: Vec<String>,
#[serde(rename = "aggregateRating")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub aggregate_rating: Vec<AggregateRating>,
#[serde(rename = "hasCertification")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub has_certification: Vec<Certification>,
#[serde(rename = "isSimilarTo")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub is_similar_to: Vec<ProductGroupIsSimilarToFieldEnum>,
#[serde(rename = "colorSwatch")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub color_swatch: Vec<ProductGroupColorSwatchFieldEnum>,
#[serde(rename = "productionDate")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub production_date: Vec<String>,
#[serde(rename = "countryOfAssembly")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub country_of_assembly: Vec<String>,
#[serde(rename = "countryOfOrigin")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub country_of_origin: Vec<Country>,
#[serde(rename = "sku")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub sku: Vec<String>,
#[serde(rename = "hasMerchantReturnPolicy")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub has_merchant_return_policy: Vec<MerchantReturnPolicy>,
#[serde(rename = "weight")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub weight: Vec<ProductGroupWeightFieldEnum>,
#[serde(rename = "mpn")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub mpn: Vec<String>,
#[serde(rename = "hasGS1DigitalLink")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub has_gs1_digital_link: Vec<String>,
#[serde(rename = "model")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub model: Vec<ProductGroupModelFieldEnum>,
#[serde(rename = "isRelatedTo")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub is_related_to: Vec<ProductGroupIsRelatedToFieldEnum>,
#[serde(rename = "reviews")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub reviews: Vec<Review>,
#[serde(rename = "gtin12")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub gtin12: Vec<String>,
#[serde(rename = "pattern")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub pattern: Vec<ProductGroupPatternFieldEnum>,
#[serde(rename = "offers")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub offers: Vec<ProductGroupOffersFieldEnum>,
#[serde(rename = "keywords")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub keywords: Vec<ProductGroupKeywordsFieldEnum>,
#[serde(rename = "negativeNotes")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub negative_notes: Vec<ProductGroupNegativeNotesFieldEnum>,
#[serde(rename = "gtin13")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub gtin13: Vec<String>,
#[serde(rename = "hasMeasurement")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub has_measurement: Vec<QuantitativeValue>,
#[serde(rename = "gtin")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub gtin: Vec<ProductGroupGtinFieldEnum>,
#[serde(rename = "funding")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub funding: Vec<Grant>,
#[serde(rename = "isConsumableFor")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub is_consumable_for: Vec<Product>,
#[serde(rename = "mobileUrl")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub mobile_url: Vec<String>,
#[serde(rename = "category")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub category: Vec<ProductGroupCategoryFieldEnum>,
#[serde(rename = "asin")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub asin: Vec<ProductGroupAsinFieldEnum>,
#[serde(rename = "color")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub color: Vec<String>,
#[serde(rename = "countryOfLastProcessing")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub country_of_last_processing: Vec<String>,
#[serde(rename = "logo")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub logo: Vec<ProductGroupLogoFieldEnum>,
#[serde(rename = "award")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub award: Vec<String>,
#[serde(rename = "isFamilyFriendly")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub is_family_friendly: Vec<String>,
#[serde(rename = "releaseDate")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub release_date: Vec<String>,
#[serde(rename = "brand")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub brand: Vec<ProductGroupBrandFieldEnum>,
#[serde(rename = "inProductGroupWithID")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub in_product_group_with_id: Vec<String>,
#[serde(rename = "manufacturer")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub manufacturer: Vec<Organization>,
#[serde(rename = "awards")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub awards: Vec<String>,
#[serde(rename = "width")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub width: Vec<ProductGroupWidthFieldEnum>,
#[serde(rename = "hasAdultConsideration")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub has_adult_consideration: Vec<AdultOrientedEnumerationEnum>,
#[serde(rename = "audience")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub audience: Vec<Audience>,
#[serde(rename = "material")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub material: Vec<ProductGroupMaterialFieldEnum>,
#[serde(rename = "additionalProperty")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub additional_property: Vec<PropertyValue>,
#[serde(rename = "slogan")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub slogan: Vec<String>,
#[serde(rename = "depth")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub depth: Vec<ProductGroupDepthFieldEnum>,
#[serde(rename = "review")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub review: Vec<Review>,
#[serde(rename = "itemCondition")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub item_condition: Vec<OfferItemConditionEnum>,
#[serde(rename = "nsn")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub nsn: Vec<String>,
#[serde(rename = "positiveNotes")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub positive_notes: Vec<ProductGroupPositiveNotesFieldEnum>,
#[serde(rename = "size")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub size: Vec<ProductGroupSizeFieldEnum>,
#[serde(rename = "hasEnergyConsumptionDetails")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub has_energy_consumption_details: Vec<EnergyConsumptionDetails>,
#[serde(rename = "gtin14")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub gtin14: Vec<String>,
#[serde(rename = "height")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub height: Vec<ProductGroupHeightFieldEnum>,
#[serde(rename = "purchaseDate")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub purchase_date: Vec<String>,
#[serde(rename = "isVariantOf")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub is_variant_of: Vec<ProductGroupIsVariantOfFieldEnum>,
#[serde(rename = "gtin8")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub gtin8: Vec<String>,
#[serde(rename = "isAccessoryOrSparePartFor")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub is_accessory_or_spare_part_for: Vec<Product>,
#[serde(rename = "name")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub name: Vec<String>,
#[serde(rename = "mainEntityOfPage")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub main_entity_of_page: Vec<ProductGroupMainEntityOfPageFieldEnum>,
#[serde(rename = "url")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub url: Vec<String>,
#[serde(rename = "disambiguatingDescription")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub disambiguating_description: Vec<String>,
#[serde(rename = "identifier")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub identifier: Vec<ProductGroupIdentifierFieldEnum>,
#[serde(rename = "description")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub description: Vec<ProductGroupDescriptionFieldEnum>,
#[serde(rename = "subjectOf")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub subject_of: Vec<ProductGroupSubjectOfFieldEnum>,
#[serde(rename = "alternateName")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub alternate_name: Vec<String>,
#[serde(rename = "additionalType")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub additional_type: Vec<ProductGroupAdditionalTypeFieldEnum>,
#[serde(rename = "potentialAction")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub potential_action: Vec<Action>,
#[serde(rename = "sameAs")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub same_as: Vec<String>,
#[serde(rename = "image")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub image: Vec<ProductGroupImageFieldEnum>,
}