use crate::topic::Topic;
use serde::Deserialize;
use serde_json::Value;
#[derive(Debug, Deserialize, Default, Clone)]
pub struct Developer {
pub name: Option<String>,
#[serde(rename = "type")]
pub developer_type: Option<String>,
pub url: Option<String>,
}
#[derive(Debug, Deserialize, Default, Clone)]
pub struct Maintainer {
pub github: Option<String>,
}
#[derive(Debug, Deserialize, Default, Clone)]
pub struct SrcOptions {
pub directory: Option<String>,
pub is_fanon: Option<Value>,
pub is_mediawiki: Option<Value>,
pub is_wikipedia: Option<Value>,
pub language: Option<String>,
pub min_abstract_length: Option<String>,
pub skip_abstract: Option<Value>,
pub skip_abstract_paren: Option<Value>,
pub skip_end: Option<String>,
pub skip_icon: Option<Value>,
pub skip_image_name: Option<Value>,
pub skip_qr: Option<String>,
pub source_skip: Option<String>,
pub src_info: Option<String>,
}
#[derive(Debug, Deserialize, Default, Clone)]
pub struct Meta {
pub attribution: Option<String>,
pub blockgroup: Option<String>,
pub created_date: Option<String>,
pub description: Option<String>,
pub designer: Option<String>,
pub dev_date: Option<String>,
pub dev_milestone: Option<String>,
pub developer: Option<Vec<Developer>>,
pub example_query: Option<String>,
pub id: Option<String>,
pub is_stackexchange: Option<Value>,
pub js_callback_name: Option<String>,
pub live_date: Option<String>,
pub maintainer: Option<Maintainer>,
pub name: Option<String>,
pub perl_module: Option<String>,
pub producer: Option<String>,
pub production_state: Option<String>,
pub repo: Option<String>,
pub signal_from: Option<String>,
pub src_domain: Option<String>,
pub src_id: Option<i64>,
pub src_name: Option<String>,
pub src_options: Option<SrcOptions>,
pub src_url: Option<String>,
pub status: Option<String>,
pub tab: Option<String>,
pub topic: Option<Vec<String>>,
#[serde(rename = "unsafe")]
pub unsafe_flag: Option<Value>,
}
#[derive(Debug, Deserialize)]
pub struct Response {
#[serde(rename = "Abstract")]
pub r#abstract: Option<String>,
#[serde(rename = "AbstractSource")]
pub abstract_source: Option<String>,
#[serde(rename = "AbstractText")]
pub abstract_text: Option<String>,
#[serde(rename = "AbstractURL")]
pub abstract_url: Option<String>,
#[serde(rename = "Answer")]
pub answer: Option<String>,
#[serde(rename = "AnswerType")]
pub answer_type: Option<String>,
#[serde(rename = "Definition")]
pub definition: Option<String>,
#[serde(rename = "DefinitionSource")]
pub definition_source: Option<String>,
#[serde(rename = "DefinitionURL")]
pub definition_url: Option<String>,
#[serde(rename = "Entity")]
pub entity: Option<String>,
#[serde(rename = "Heading")]
pub heading: Option<String>,
#[serde(rename = "Image")]
pub image: Option<String>,
#[serde(rename = "ImageHeight")]
pub image_height: Value,
#[serde(rename = "ImageIsLogo")]
pub image_is_logo: Value,
#[serde(rename = "ImageWidth")]
pub image_width: Value,
#[serde(rename = "Infobox")]
pub info_box: Option<Value>,
#[serde(rename = "Redirect")]
pub redirect: Option<String>,
#[serde(rename = "RelatedTopics")]
pub related_topics: Vec<Topic>,
#[serde(rename = "Results")]
pub results: Vec<Value>,
#[serde(rename = "Type")]
pub r#type: String,
#[serde(rename = "meta")]
pub meta: Option<Meta>,
}
pub enum ResultFormat {
List,
Detailed,
}
pub struct ImageResult {
pub title: String,
pub image: String,
pub thumbnail: String,
pub url: String,
pub height: u32,
pub width: u32,
pub source: String,
}
pub struct NewsResult {
pub date: String,
pub title: String,
pub body: String,
pub url: String,
pub image: Option<String>,
pub source: String,
}
#[derive(Debug, Clone)]
pub struct LiteSearchResult {
pub title: String,
pub url: String,
pub snippet: String,
}