1#![allow(dead_code)]
8
9use serde::{Deserialize, Serialize};
10use serde_json::Value;
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
14#[serde(rename_all = "camelCase")]
15pub struct QueryConfig {
16 pub messages: Vec<Value>,
18 pub system_prompt: Option<String>,
20 pub user_context: std::collections::HashMap<String, String>,
22 pub system_context: std::collections::HashMap<String, String>,
24 pub query_source: Option<String>,
26 pub max_output_tokens_override: Option<u32>,
28 pub max_turns: Option<u32>,
30 pub skip_cache_write: Option<bool>,
32 pub task_budget: Option<TaskBudget>,
34}
35
36impl Default for QueryConfig {
37 fn default() -> Self {
38 Self {
39 messages: vec![],
40 system_prompt: None,
41 user_context: std::collections::HashMap::new(),
42 system_context: std::collections::HashMap::new(),
43 query_source: None,
44 max_output_tokens_override: None,
45 max_turns: None,
46 skip_cache_write: None,
47 task_budget: None,
48 }
49 }
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
54#[serde(rename_all = "camelCase")]
55pub struct TaskBudget {
56 pub total: u32,
58}
59
60#[derive(Debug, Clone)]
62pub struct QueryResult {
63 pub messages: Vec<Value>,
65 pub success: bool,
67 pub error: Option<String>,
69}
70
71impl Default for QueryResult {
72 fn default() -> Self {
73 Self {
74 messages: vec![],
75 success: true,
76 error: None,
77 }
78 }
79}
80
81pub async fn execute_query(config: QueryConfig) -> QueryResult {
89 QueryResult {
92 messages: config.messages,
93 success: true,
94 error: None,
95 }
96}
97
98pub fn query_checkpoint(name: &str) {
100 let _ = name;
102}
103
104#[cfg(test)]
105mod tests {
106 use super::*;
107
108 #[test]
109 fn test_query_config_default() {
110 let config = QueryConfig::default();
111 assert!(config.messages.is_empty());
112 assert!(config.system_prompt.is_none());
113 }
114
115 #[test]
116 fn test_query_result_default() {
117 let result = QueryResult::default();
118 assert!(result.success);
119 assert!(result.error.is_none());
120 }
121}