deepstore_client/
types.rs1use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5use serde_json::Value as JsonValue;
6
7#[derive(Debug, Clone)]
9pub struct SearchParams {
10 pub database_id: String,
12 pub query: String,
14 pub start_time: DateTime<Utc>,
16 pub end_time: DateTime<Utc>,
18 pub max_hits: Option<usize>,
20 pub sort_by: Option<String>,
22 pub start_offset: Option<usize>,
24 pub search_after: Option<Vec<JsonValue>>,
26 pub snippet_fields: Option<Vec<String>>,
28 pub search_fields: Option<Vec<String>>,
30 pub aggregations: Option<JsonValue>,
32 pub scopes: Option<Vec<String>>,
34}
35
36impl Default for SearchParams {
37 fn default() -> Self {
38 Self {
39 database_id: String::new(),
40 query: "*".to_string(),
41 start_time: Utc::now() - chrono::Duration::hours(1),
42 end_time: Utc::now(),
43 max_hits: Some(100),
44 sort_by: Some("-timestamp_nanos".to_string()),
45 start_offset: None,
46 search_after: None,
47 snippet_fields: None,
48 search_fields: None,
49 aggregations: None,
50 scopes: None,
51 }
52 }
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct SearchResult {
58 pub num_hits: usize,
60 pub hits: Vec<JsonValue>,
62 #[serde(skip_serializing_if = "Option::is_none")]
64 pub snippets: Option<Vec<JsonValue>>,
65 pub elapsed_time_micros: u64,
67 pub errors: Vec<String>,
69 #[serde(skip_serializing_if = "Option::is_none")]
71 pub aggregations: Option<JsonValue>,
72}
73
74pub type QueryTokenProvider = Box<
76 dyn Fn() -> std::pin::Pin<Box<dyn std::future::Future<Output = crate::Result<String>> + Send>>
77 + Send
78 + Sync,
79>;