use serde::{Deserialize, Serialize};
use validator::Validate;
#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
pub struct WebSearchInfo {
#[serde(skip_serializing_if = "Option::is_none")]
pub icon: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[validate(url)]
pub link: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub media: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub publish_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub refer: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WebSearchResponse {
pub id: String,
pub created: i64,
pub request_id: String,
pub search_intent: Vec<SearchIntent>,
pub search_result: Vec<SearchResult>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchIntent {
pub query: String,
pub intent: String,
pub keywords: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchResult {
pub title: String,
pub content: String,
pub link: String,
pub media: String,
pub icon: String,
pub refer: String,
pub publish_date: String,
}
impl WebSearchResponse {
pub fn result_count(&self) -> usize {
self.search_result.len()
}
pub fn intents(&self) -> &Vec<SearchIntent> {
&self.search_intent
}
pub fn results(&self) -> &Vec<SearchResult> {
&self.search_result
}
pub fn task_id(&self) -> &str {
&self.id
}
pub fn created_at(&self) -> i64 {
self.created
}
pub fn request_id(&self) -> &str {
&self.request_id
}
}