use crate::*;
use serde_with::{serde_as, OneOrMany};
pub type ReviewDateModifiedFieldEnum = String;
pub type ReviewEncodingFormatFieldEnum = String;
pub type ReviewEditEIDRFieldEnum = String;
pub type ReviewDatePublishedFieldEnum = String;
pub type ReviewTemporalFieldEnum = String;
pub type ReviewDateCreatedFieldEnum = String;
pub type ReviewFileFormatFieldEnum = String;
pub type ReviewExpiresFieldEnum = String;
pub type ReviewTemporalCoverageFieldEnum = String;
pub type ReviewSchemaVersionFieldEnum = String;
pub type ReviewGenreFieldEnum = String;
pub type ReviewAdditionalTypeFieldEnum = String;
#[serde_as]
#[derive(Debug, serde::Deserialize)]
#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
pub struct Review {
#[serde(rename = "@context")]
pub context: String,
#[serde(rename = "reviewRating")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub review_rating: Vec<Rating>,
#[serde(rename = "associatedMediaReview")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub associated_media_review: Vec<Review>,
#[serde(rename = "associatedReview")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub associated_review: Vec<Review>,
#[serde(rename = "negativeNotes")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub negative_notes: Vec<ReviewNegativeNotesFieldEnum>,
#[serde(rename = "itemReviewed")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub item_reviewed: Vec<Thing>,
#[serde(rename = "reviewBody")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub review_body: Vec<String>,
#[serde(rename = "positiveNotes")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub positive_notes: Vec<ReviewPositiveNotesFieldEnum>,
#[serde(rename = "reviewAspect")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub review_aspect: Vec<String>,
#[serde(rename = "associatedClaimReview")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub associated_claim_review: Vec<Review>,
#[serde(rename = "provider")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub provider: Vec<ReviewProviderFieldEnum>,
#[serde(rename = "aggregateRating")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub aggregate_rating: Vec<AggregateRating>,
#[serde(rename = "citation")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub citation: Vec<ReviewCitationFieldEnum>,
#[serde(rename = "locationCreated")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub location_created: Vec<Place>,
#[serde(rename = "sdPublisher")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub sd_publisher: Vec<ReviewSdPublisherFieldEnum>,
#[serde(rename = "thumbnail")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub thumbnail: Vec<ImageObject>,
#[serde(rename = "accessModeSufficient")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub access_mode_sufficient: Vec<ItemList>,
#[serde(rename = "publishingPrinciples")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub publishing_principles: Vec<ReviewPublishingPrinciplesFieldEnum>,
#[serde(rename = "inLanguage")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub in_language: Vec<ReviewInLanguageFieldEnum>,
#[serde(rename = "abstract")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub _abstract: Vec<String>,
#[serde(rename = "countryOfOrigin")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub country_of_origin: Vec<Country>,
#[serde(rename = "contentLocation")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub content_location: Vec<Place>,
#[serde(rename = "dateModified")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub date_modified: Vec<ReviewDateModifiedFieldEnum>,
#[serde(rename = "usageInfo")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub usage_info: Vec<ReviewUsageInfoFieldEnum>,
#[serde(rename = "sdDatePublished")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub sd_date_published: Vec<String>,
#[serde(rename = "archivedAt")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub archived_at: Vec<ReviewArchivedAtFieldEnum>,
#[serde(rename = "workTranslation")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub work_translation: Vec<CreativeWork>,
#[serde(rename = "sdLicense")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub sd_license: Vec<ReviewSdLicenseFieldEnum>,
#[serde(rename = "educationalAlignment")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub educational_alignment: Vec<AlignmentObject>,
#[serde(rename = "editor")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub editor: Vec<Person>,
#[serde(rename = "license")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub license: Vec<ReviewLicenseFieldEnum>,
#[serde(rename = "maintainer")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub maintainer: Vec<ReviewMaintainerFieldEnum>,
#[serde(rename = "sourceOrganization")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub source_organization: Vec<Organization>,
#[serde(rename = "reviews")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub reviews: Vec<Review>,
#[serde(rename = "accessibilityHazard")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub accessibility_hazard: Vec<String>,
#[serde(rename = "workExample")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub work_example: Vec<CreativeWork>,
#[serde(rename = "pattern")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub pattern: Vec<ReviewPatternFieldEnum>,
#[serde(rename = "offers")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub offers: Vec<ReviewOffersFieldEnum>,
#[serde(rename = "hasPart")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub has_part: Vec<CreativeWork>,
#[serde(rename = "keywords")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub keywords: Vec<ReviewKeywordsFieldEnum>,
#[serde(rename = "exampleOfWork")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub example_of_work: Vec<CreativeWork>,
#[serde(rename = "copyrightNotice")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub copyright_notice: Vec<String>,
#[serde(rename = "encodingFormat")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub encoding_format: Vec<ReviewEncodingFormatFieldEnum>,
#[serde(rename = "mainEntity")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub main_entity: Vec<Thing>,
#[serde(rename = "editEIDR")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub edit_eidr: Vec<ReviewEditEIDRFieldEnum>,
#[serde(rename = "copyrightYear")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub copyright_year: Vec<f32>,
#[serde(rename = "about")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub about: Vec<Thing>,
#[serde(rename = "datePublished")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub date_published: Vec<ReviewDatePublishedFieldEnum>,
#[serde(rename = "educationalLevel")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub educational_level: Vec<ReviewEducationalLevelFieldEnum>,
#[serde(rename = "accessibilityFeature")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub accessibility_feature: Vec<String>,
#[serde(rename = "materialExtent")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub material_extent: Vec<ReviewMaterialExtentFieldEnum>,
#[serde(rename = "video")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub video: Vec<ReviewVideoFieldEnum>,
#[serde(rename = "funding")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub funding: Vec<Grant>,
#[serde(rename = "headline")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub headline: Vec<String>,
#[serde(rename = "digitalSourceType")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub digital_source_type: Vec<IPTCDigitalSourceEnumerationEnum>,
#[serde(rename = "learningResourceType")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub learning_resource_type: Vec<ReviewLearningResourceTypeFieldEnum>,
#[serde(rename = "alternativeHeadline")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub alternative_headline: Vec<String>,
#[serde(rename = "temporal")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub temporal: Vec<ReviewTemporalFieldEnum>,
#[serde(rename = "isBasedOnUrl")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub is_based_on_url: Vec<ReviewIsBasedOnUrlFieldEnum>,
#[serde(rename = "associatedMedia")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub associated_media: Vec<MediaObject>,
#[serde(rename = "commentCount")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub comment_count: Vec<i32>,
#[serde(rename = "dateCreated")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub date_created: Vec<ReviewDateCreatedFieldEnum>,
#[serde(rename = "fileFormat")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub file_format: Vec<ReviewFileFormatFieldEnum>,
#[serde(rename = "teaches")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub teaches: Vec<ReviewTeachesFieldEnum>,
#[serde(rename = "accessibilityControl")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub accessibility_control: Vec<String>,
#[serde(rename = "isPartOf")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub is_part_of: Vec<ReviewIsPartOfFieldEnum>,
#[serde(rename = "accessibilityAPI")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub accessibility_api: Vec<String>,
#[serde(rename = "contentReferenceTime")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub content_reference_time: Vec<String>,
#[serde(rename = "isBasedOn")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub is_based_on: Vec<ReviewIsBasedOnFieldEnum>,
#[serde(rename = "creativeWorkStatus")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub creative_work_status: Vec<ReviewCreativeWorkStatusFieldEnum>,
#[serde(rename = "award")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub award: Vec<String>,
#[serde(rename = "educationalUse")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub educational_use: Vec<ReviewEducationalUseFieldEnum>,
#[serde(rename = "isFamilyFriendly")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub is_family_friendly: Vec<String>,
#[serde(rename = "interactivityType")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub interactivity_type: Vec<String>,
#[serde(rename = "publication")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub publication: Vec<PublicationEvent>,
#[serde(rename = "accountablePerson")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub accountable_person: Vec<Person>,
#[serde(rename = "version")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub version: Vec<ReviewVersionFieldEnum>,
#[serde(rename = "expires")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub expires: Vec<ReviewExpiresFieldEnum>,
#[serde(rename = "awards")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub awards: Vec<String>,
#[serde(rename = "text")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub text: Vec<String>,
#[serde(rename = "producer")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub producer: Vec<ReviewProducerFieldEnum>,
#[serde(rename = "thumbnailUrl")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub thumbnail_url: Vec<String>,
#[serde(rename = "copyrightHolder")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub copyright_holder: Vec<ReviewCopyrightHolderFieldEnum>,
#[serde(rename = "wordCount")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub word_count: Vec<i32>,
#[serde(rename = "recordedAt")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub recorded_at: Vec<Event>,
#[serde(rename = "audience")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub audience: Vec<Audience>,
#[serde(rename = "spatial")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub spatial: Vec<Place>,
#[serde(rename = "interpretedAsClaim")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub interpreted_as_claim: Vec<Claim>,
#[serde(rename = "creditText")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub credit_text: Vec<String>,
#[serde(rename = "material")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub material: Vec<ReviewMaterialFieldEnum>,
#[serde(rename = "translator")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub translator: Vec<ReviewTranslatorFieldEnum>,
#[serde(rename = "character")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub character: Vec<Person>,
#[serde(rename = "funder")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub funder: Vec<ReviewFunderFieldEnum>,
#[serde(rename = "encodings")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub encodings: Vec<MediaObject>,
#[serde(rename = "contributor")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub contributor: Vec<ReviewContributorFieldEnum>,
#[serde(rename = "position")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub position: Vec<ReviewPositionFieldEnum>,
#[serde(rename = "conditionsOfAccess")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub conditions_of_access: Vec<String>,
#[serde(rename = "review")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub review: Vec<Review>,
#[serde(rename = "temporalCoverage")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub temporal_coverage: Vec<ReviewTemporalCoverageFieldEnum>,
#[serde(rename = "mentions")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub mentions: Vec<Thing>,
#[serde(rename = "interactionStatistic")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub interaction_statistic: Vec<InteractionCounter>,
#[serde(rename = "schemaVersion")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub schema_version: Vec<ReviewSchemaVersionFieldEnum>,
#[serde(rename = "acquireLicensePage")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub acquire_license_page: Vec<ReviewAcquireLicensePageFieldEnum>,
#[serde(rename = "sponsor")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub sponsor: Vec<ReviewSponsorFieldEnum>,
#[serde(rename = "publisher")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub publisher: Vec<ReviewPublisherFieldEnum>,
#[serde(rename = "assesses")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub assesses: Vec<ReviewAssessesFieldEnum>,
#[serde(rename = "spatialCoverage")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub spatial_coverage: Vec<Place>,
#[serde(rename = "size")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub size: Vec<ReviewSizeFieldEnum>,
#[serde(rename = "contentRating")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub content_rating: Vec<ReviewContentRatingFieldEnum>,
#[serde(rename = "accessMode")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub access_mode: Vec<String>,
#[serde(rename = "creator")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub creator: Vec<ReviewCreatorFieldEnum>,
#[serde(rename = "releasedEvent")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub released_event: Vec<PublicationEvent>,
#[serde(rename = "accessibilitySummary")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub accessibility_summary: Vec<String>,
#[serde(rename = "translationOfWork")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub translation_of_work: Vec<CreativeWork>,
#[serde(rename = "publisherImprint")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub publisher_imprint: Vec<Organization>,
#[serde(rename = "typicalAgeRange")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub typical_age_range: Vec<String>,
#[serde(rename = "comment")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub comment: Vec<Comment>,
#[serde(rename = "encoding")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub encoding: Vec<MediaObject>,
#[serde(rename = "discussionUrl")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub discussion_url: Vec<String>,
#[serde(rename = "timeRequired")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub time_required: Vec<Duration>,
#[serde(rename = "isAccessibleForFree")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub is_accessible_for_free: Vec<String>,
#[serde(rename = "audio")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub audio: Vec<ReviewAudioFieldEnum>,
#[serde(rename = "correction")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub correction: Vec<ReviewCorrectionFieldEnum>,
#[serde(rename = "author")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub author: Vec<ReviewAuthorFieldEnum>,
#[serde(rename = "genre")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub genre: Vec<ReviewGenreFieldEnum>,
#[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<ReviewMainEntityOfPageFieldEnum>,
#[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<ReviewIdentifierFieldEnum>,
#[serde(rename = "description")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub description: Vec<ReviewDescriptionFieldEnum>,
#[serde(rename = "subjectOf")]
#[serde_as(as = "OneOrMany<_>")]
#[serde(default)]
pub subject_of: Vec<ReviewSubjectOfFieldEnum>,
#[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<ReviewAdditionalTypeFieldEnum>,
#[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<ReviewImageFieldEnum>,
}