zai_rs/tool/web_search/
response.rs1use serde::{Deserialize, Serialize};
2use validator::Validate;
3
4#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
9pub struct WebSearchInfo {
10 #[serde(skip_serializing_if = "Option::is_none")]
12 pub icon: Option<String>,
13 #[serde(skip_serializing_if = "Option::is_none")]
15 pub title: Option<String>,
16 #[serde(skip_serializing_if = "Option::is_none")]
18 #[validate(url)]
19 pub link: Option<String>,
20 #[serde(skip_serializing_if = "Option::is_none")]
22 pub media: Option<String>,
23 #[serde(skip_serializing_if = "Option::is_none")]
25 pub publish_date: Option<String>,
26 #[serde(skip_serializing_if = "Option::is_none")]
28 pub content: Option<String>,
29 #[serde(skip_serializing_if = "Option::is_none")]
31 pub refer: Option<String>,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct WebSearchResponse {
37 pub id: String,
39 pub created: i64,
41 pub request_id: String,
43 pub search_intent: Vec<SearchIntent>,
45 pub search_result: Vec<SearchResult>,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct SearchIntent {
52 pub query: String,
54 pub intent: String,
56 pub keywords: String,
58}
59
60#[derive(Debug, Clone, Serialize, Deserialize)]
62pub struct SearchResult {
63 pub title: String,
65 pub content: String,
67 pub link: String,
69 pub media: String,
71 pub icon: String,
73 pub refer: String,
75 pub publish_date: String,
77}
78
79impl WebSearchResponse {
80 pub fn result_count(&self) -> usize {
82 self.search_result.len()
83 }
84
85 pub fn intents(&self) -> &Vec<SearchIntent> {
87 &self.search_intent
88 }
89
90 pub fn results(&self) -> &Vec<SearchResult> {
92 &self.search_result
93 }
94
95 pub fn task_id(&self) -> &str {
97 &self.id
98 }
99
100 pub fn created_at(&self) -> i64 {
102 self.created
103 }
104
105 pub fn request_id(&self) -> &str {
107 &self.request_id
108 }
109}