use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(untagged)]
pub enum StringOrArray {
String(String),
Array(Vec<String>),
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(untagged)]
pub enum NumberOrString {
Number(u32),
String(String),
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(untagged)]
pub enum BoolOrString {
Bool(bool),
String(String),
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(untagged)]
pub enum ItemOrArray<T> {
Item(T),
Array(Vec<T>),
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct FacetRes {
pub filters: Option<ItemOrArray<FilterItem>>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct FilterItem {
#[serde(skip_serializing_if = "Option::is_none")]
pub count: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub not: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub off: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub on: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub term: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<StringOrArray>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct Pagination {
#[serde(skip_serializing_if = "Option::is_none")]
pub from: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub results: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub total: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub previous: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub perpage: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub perpage_options: Option<ItemOrArray<u32>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub of: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub next: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub current: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub to: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_list: Option<ItemOrArray<PageListItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub first: Option<StringOrArray>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct PageListItem {
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub number: Option<NumberOrString>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ResultItem {
#[serde(skip_serializing_if = "Option::is_none")]
pub access_restricted: Option<BoolOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub aka: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub campaigns: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub contributor: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub date: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dates: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub digitized: Option<BoolOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub extract_timestamp: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub group: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hassegments: Option<BoolOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub image_url: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub index: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub item: Option<ItemOrArray<ItemSummary>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mime_type: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub number_field: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub online_format: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub original_format: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub other_title: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub partof: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub publication_frequency: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shelf_id: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub site: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub subject: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub type_field: Option<StringOrArray>, #[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
pub struct ItemSummary {
#[serde(skip_serializing_if = "Option::is_none")]
pub call_number: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub contributor_names: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_published: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub date_issued: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub digitized_label: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub genre: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub medium: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub other_title: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub publication_frequency: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub score: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub subject_headings: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub subjects: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub summary: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ItemResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub views: Option<ItemOrArray<Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timestamp: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub locations: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fulltext_service: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub next_issue: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub newspaper_holdings_url: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title_url: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page: Option<ItemOrArray<Page>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pagination: Option<ItemOrArray<Pagination>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub resource: Option<ItemOrArray<Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cite_this: Option<ItemOrArray<CiteThis>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub calendar_url: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub previous_issue: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub segments: Option<ItemOrArray<Segment>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub related_items: Option<ItemOrArray<RelatedItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub word_coordinates_query: Option<ItemOrArray<Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub more_like_this: Option<ItemOrArray<MoreLikeThis>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub articles_and_essays: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub traditional_knowledge_labels: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub item: Option<ItemOrArray<ItemAttribute>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub word_coordinates_pages: Option<ItemOrArray<Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub type_field: Option<StringOrArray>, #[serde(skip_serializing_if = "Option::is_none")]
pub options: Option<ItemOrArray<Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub resources: Option<ItemOrArray<ResourceObject>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ResourceResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub views: Option<ItemOrArray<Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timestamp: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub locations: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fulltext_service: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub next_issue: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub newspaper_holdings_url: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title_url: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page: Option<ItemOrArray<Page>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pagination: Option<ItemOrArray<Pagination>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub resource: Option<ItemOrArray<ResourceDetail>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cite_this: Option<ItemOrArray<CiteThis>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub calendar_url: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub previous_issue: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub segments: Option<ItemOrArray<Segment>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub related_items: Option<ItemOrArray<RelatedItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub word_coordinates_query: Option<ItemOrArray<Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub more_like_this: Option<ItemOrArray<MoreLikeThis>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub articles_and_essays: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub traditional_knowledge_labels: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub item: Option<ItemOrArray<ItemAttribute>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub word_coordinates_pages: Option<ItemOrArray<Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub type_field: Option<StringOrArray>, #[serde(skip_serializing_if = "Option::is_none")]
pub options: Option<ItemOrArray<Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub resources: Option<ItemOrArray<ResourceObject>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ResourceDetail {
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub files: Option<ItemOrArray<Vec<File>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub audio: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub background: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub begin: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub capture_range: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub djvu_text_file: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub download_restricted: Option<BoolOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fulltext_derivative: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fulltext_file: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub height: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub info: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub image: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub paprika_resource_path: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pdf: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub representative_index: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub type_field: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub uuid: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub version: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video_stream: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub word_coordinates: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct File {
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub format: Option<ItemOrArray<Value>>, #[serde(skip_serializing_if = "Option::is_none")]
pub height: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub info: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub levels: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mimetype: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub other_name: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub profile: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub protocol: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub size: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub streams: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tiles: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub type_field: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub use_field: Option<StringOrArray>, #[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct CiteThis {
#[serde(skip_serializing_if = "Option::is_none")]
pub chicago: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mla: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub apa: Option<StringOrArray>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct Segment {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct RelatedItem {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct MoreLikeThis {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct Page {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
pub struct ItemAttribute {
#[serde(skip_serializing_if = "Option::is_none")]
pub place_of_publication: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_collection: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_offsite: Option<BoolOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub contributors: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location_county: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub access_restricted: Option<BoolOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub site: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub original_format: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub partof_title: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub date: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub item_type: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub subject_headings: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub newspaper_title: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_published: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub extract_urls: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub partof_division: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub contents: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub subject: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub index: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub digital_id: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub call_number: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub group: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub score: Option<NumberOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location_country: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub related_items: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub online_format: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub subjects: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rights: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub locations: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub notes: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shelf_id: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub batch: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub summary: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub digitized: Option<BoolOrString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub publication_frequency: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub resources: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub aka: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub contributor_names: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub image_url: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub access_advisory: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
pub struct ResourceObject {
#[serde(skip_serializing_if = "Option::is_none")]
pub files: Option<ItemOrArray<ItemOrArray<File>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub image: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub type_field: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub height: Option<ItemOrArray<NumberOrString>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<ItemOrArray<NumberOrString>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration: Option<ItemOrArray<NumberOrString>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mimetype: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub size: Option<ItemOrArray<NumberOrString>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<ItemOrArray<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<ItemOrArray<String>>,
#[serde(flatten)]
#[serde(skip_serializing_if = "Option::is_none")]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct SearchResultResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub facets: Option<FacetRes>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pagination: Option<Pagination>,
#[serde(skip_serializing_if = "Option::is_none")]
pub results: Option<Vec<ResultItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct CollectionsResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub facets: Option<FacetRes>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pagination: Option<Pagination>,
#[serde(skip_serializing_if = "Option::is_none")]
pub results: Option<Vec<CollectionItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct CollectionItem {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub private_note: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub collection_slug: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub organization: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub site_map: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub type_field: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub normalized_slug: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<StringOrArray>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
pub struct CollectionResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub facets: Option<FacetRes>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pagination: Option<Pagination>,
#[serde(skip_serializing_if = "Option::is_none")]
pub results: Option<Vec<CollectionItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct FormatResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub facets: Option<FacetRes>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pagination: Option<Pagination>,
#[serde(skip_serializing_if = "Option::is_none")]
pub results: Option<Vec<ResultItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct CollectionDetail {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct SearchResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub facets: Option<FacetRes>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pagination: Option<Pagination>,
#[serde(skip_serializing_if = "Option::is_none")]
pub results: Option<Vec<ResultItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub additional: Option<Value>,
}