use crate::*;
use serde_with::{serde_as, OneOrMany};
pub type AggregateOfferAvailabilityStartsFieldEnum = String;
pub type AggregateOfferGtinFieldEnum = String;
pub type AggregateOfferValidFromFieldEnum = String;
pub type AggregateOfferAsinFieldEnum = String;
pub type AggregateOfferValidThroughFieldEnum = String;
pub type AggregateOfferAvailabilityEndsFieldEnum = String;
pub type AggregateOfferAdditionalTypeFieldEnum = String;
#[serde_as]
#[derive(Debug, serde::Deserialize)]
#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
pub struct AggregateOffer {
#[serde(rename = "@context")]
pub context: String,
#[serde(rename = "highPrice")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub high_price: Vec<AggregateOfferHighPriceFieldEnum>,
#[serde(rename = "offers")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub offers: Vec<AggregateOfferOffersFieldEnum>,
#[serde(rename = "offerCount")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub offer_count: Vec<i32>,
#[serde(rename = "lowPrice")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub low_price: Vec<AggregateOfferLowPriceFieldEnum>,
#[serde(rename = "priceValidUntil")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub price_valid_until: Vec<String>,
#[serde(rename = "aggregateRating")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub aggregate_rating: Vec<AggregateRating>,
#[serde(rename = "eligibleQuantity")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub eligible_quantity: Vec<QuantitativeValue>,
#[serde(rename = "eligibleRegion")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub eligible_region: Vec<AggregateOfferEligibleRegionFieldEnum>,
#[serde(rename = "availabilityStarts")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub availability_starts: Vec<AggregateOfferAvailabilityStartsFieldEnum>,
#[serde(rename = "sku")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub sku: Vec<String>,
#[serde(rename = "priceSpecification")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub price_specification: Vec<PriceSpecification>,
#[serde(rename = "eligibleCustomerType")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub eligible_customer_type: Vec<BusinessEntityType>,
#[serde(rename = "hasMerchantReturnPolicy")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub has_merchant_return_policy: Vec<MerchantReturnPolicy>,
#[serde(rename = "validForMemberTier")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub valid_for_member_tier: Vec<MemberProgramTier>,
#[serde(rename = "availability")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub availability: Vec<ItemAvailabilityEnum>,
#[serde(rename = "inventoryLevel")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub inventory_level: Vec<QuantitativeValue>,
#[serde(rename = "eligibleDuration")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub eligible_duration: Vec<QuantitativeValue>,
#[serde(rename = "shippingDetails")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub shipping_details: Vec<OfferShippingDetails>,
#[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 = "serialNumber")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub serial_number: Vec<String>,
#[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 = "leaseLength")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub lease_length: Vec<AggregateOfferLeaseLengthFieldEnum>,
#[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 = "deliveryLeadTime")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub delivery_lead_time: Vec<QuantitativeValue>,
#[serde(rename = "seller")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub seller: Vec<AggregateOfferSellerFieldEnum>,
#[serde(rename = "advanceBookingRequirement")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub advance_booking_requirement: Vec<QuantitativeValue>,
#[serde(rename = "gtin")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub gtin: Vec<AggregateOfferGtinFieldEnum>,
#[serde(rename = "price")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub price: Vec<AggregateOfferPriceFieldEnum>,
#[serde(rename = "validFrom")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub valid_from: Vec<AggregateOfferValidFromFieldEnum>,
#[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<AggregateOfferCategoryFieldEnum>,
#[serde(rename = "asin")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub asin: Vec<AggregateOfferAsinFieldEnum>,
#[serde(rename = "addOn")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub add_on: Vec<Offer>,
#[serde(rename = "availableDeliveryMethod")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub available_delivery_method: Vec<DeliveryMethodEnum>,
#[serde(rename = "offeredBy")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub offered_by: Vec<AggregateOfferOfferedByFieldEnum>,
#[serde(rename = "validThrough")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub valid_through: Vec<AggregateOfferValidThroughFieldEnum>,
#[serde(rename = "isFamilyFriendly")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub is_family_friendly: Vec<String>,
#[serde(rename = "warranty")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub warranty: Vec<WarrantyPromise>,
#[serde(rename = "hasAdultConsideration")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub has_adult_consideration: Vec<AdultOrientedEnumerationEnum>,
#[serde(rename = "businessFunction")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub business_function: Vec<BusinessFunction>,
#[serde(rename = "additionalProperty")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub additional_property: Vec<PropertyValue>,
#[serde(rename = "eligibleTransactionVolume")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub eligible_transaction_volume: Vec<PriceSpecification>,
#[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 = "includesObject")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub includes_object: Vec<TypeAndQuantityNode>,
#[serde(rename = "priceCurrency")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub price_currency: Vec<String>,
#[serde(rename = "ineligibleRegion")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub ineligible_region: Vec<AggregateOfferIneligibleRegionFieldEnum>,
#[serde(rename = "gtin14")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub gtin14: Vec<String>,
#[serde(rename = "areaServed")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub area_served: Vec<AggregateOfferAreaServedFieldEnum>,
#[serde(rename = "checkoutPageURLTemplate")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub checkout_page_url_template: Vec<String>,
#[serde(rename = "acceptedPaymentMethod")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub accepted_payment_method: Vec<AggregateOfferAcceptedPaymentMethodFieldEnum>,
#[serde(rename = "gtin8")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub gtin8: Vec<String>,
#[serde(rename = "availableAtOrFrom")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub available_at_or_from: Vec<Place>,
#[serde(rename = "itemOffered")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub item_offered: Vec<AggregateOfferItemOfferedFieldEnum>,
#[serde(rename = "availabilityEnds")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub availability_ends: Vec<AggregateOfferAvailabilityEndsFieldEnum>,
#[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<AggregateOfferMainEntityOfPageFieldEnum>,
#[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<AggregateOfferIdentifierFieldEnum>,
#[serde(rename = "description")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub description: Vec<AggregateOfferDescriptionFieldEnum>,
#[serde(rename = "subjectOf")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub subject_of: Vec<AggregateOfferSubjectOfFieldEnum>,
#[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<AggregateOfferAdditionalTypeFieldEnum>,
#[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<AggregateOfferImageFieldEnum>,
}