use serde::{Deserialize, Serialize};
pub use crate::providers::Provider;
pub use crate::refs::Reference;
pub use crate::tls::TlsConfig;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct SearchResult {
pub title: String,
pub snippet: String,
pub url: String,
pub ref_index: usize,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum SearchStatus {
Ok,
Empty,
Blocked,
}
impl SearchStatus {
pub fn is_failure(self) -> bool {
matches!(self, SearchStatus::Blocked)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchOutput {
pub query: String,
pub results: Vec<SearchResult>,
pub references: Vec<Reference>,
pub token_estimate: usize,
pub result_count: usize,
pub status: SearchStatus,
pub provider: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct SearchOptions {
pub query: String,
pub max_results: Option<usize>,
pub safe_search: Option<bool>,
pub timeout_secs: u64,
#[serde(default)]
pub tls: TlsConfig,
#[serde(default)]
pub provider: Provider,
#[serde(default)]
pub fallback: Option<Provider>,
}
impl Default for SearchOptions {
fn default() -> Self {
Self {
query: String::new(),
max_results: Some(5),
safe_search: None,
timeout_secs: 10,
tls: TlsConfig::default(),
provider: Provider::default(),
fallback: None,
}
}
}