matrixcode_core/tools/websearch/
parser.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct SearchResult {
8 pub title: String,
9 pub url: String,
10 pub snippet: Option<String>,
11}
12
13pub trait SearchResultParser {
15 fn parse(&self, content: &str, max_results: usize) -> Vec<SearchResult>;
17}
18
19pub fn clean_url(url: &str) -> String {
21 if url.contains("duckduckgo.com/l/")
22 && let Some(query) = url.split("uddg=").nth(1)
23 && let Some(encoded) = query.split('&').next()
24 {
25 return urlencoding::decode(encoded)
26 .unwrap_or_default()
27 .into_owned();
28 }
29 url.to_string()
30}
31
32pub fn strip_html_tags(s: &str) -> String {
34 let re = regex::Regex::new(r"<[^>]*>").unwrap();
35 let without_tags = re.replace_all(s, "");
36
37 without_tags
38 .replace("&", "&")
39 .replace("<", "<")
40 .replace(">", ">")
41 .replace(""", "\"")
42 .replace("'", "'")
43 .replace(" ", " ")
44 .trim()
45 .to_string()
46}