swiftide_core/
query_evaluation.rs1use crate::querying::{Query, states};
2
3pub enum QueryEvaluation {
5 RetrieveDocuments(Query<states::Retrieved>),
7 AnswerQuery(Query<states::Answered>),
9}
10
11impl std::fmt::Debug for QueryEvaluation {
12 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13 match self {
14 QueryEvaluation::RetrieveDocuments(query) => {
15 write!(f, "RetrieveDocuments({query:?})")
16 }
17 QueryEvaluation::AnswerQuery(query) => write!(f, "AnswerQuery({query:?})"),
18 }
19 }
20}
21
22impl From<Query<states::Retrieved>> for QueryEvaluation {
23 fn from(val: Query<states::Retrieved>) -> Self {
24 QueryEvaluation::RetrieveDocuments(val)
25 }
26}
27
28impl From<Query<states::Answered>> for QueryEvaluation {
29 fn from(val: Query<states::Answered>) -> Self {
30 QueryEvaluation::AnswerQuery(val)
31 }
32}
33
34impl QueryEvaluation {
36 pub fn retrieve_documents_query(self) -> Option<Query<states::Retrieved>> {
37 if let QueryEvaluation::RetrieveDocuments(query) = self {
38 Some(query)
39 } else {
40 None
41 }
42 }
43
44 pub fn answer_query(self) -> Option<Query<states::Answered>> {
45 if let QueryEvaluation::AnswerQuery(query) = self {
46 Some(query)
47 } else {
48 None
49 }
50 }
51}
52
53#[cfg(test)]
54mod tests {
55 use super::*;
56
57 #[test]
58 fn test_from_retrieved() {
59 let query = Query::<states::Retrieved>::new(); let evaluation = QueryEvaluation::from(query.clone());
61
62 match evaluation {
63 QueryEvaluation::RetrieveDocuments(q) => assert_eq!(q, query),
64 QueryEvaluation::AnswerQuery(_) => panic!("Unexpected QueryEvaluation variant"),
65 }
66 }
67
68 #[test]
69 fn test_from_answered() {
70 let query = Query::<states::Answered>::new(); let evaluation = QueryEvaluation::from(query.clone());
72
73 match evaluation {
74 QueryEvaluation::AnswerQuery(q) => assert_eq!(q, query),
75 QueryEvaluation::RetrieveDocuments(_) => panic!("Unexpected QueryEvaluation variant"),
76 }
77 }
78
79 #[test]
80 fn test_retrieve_documents_query() {
81 let query = Query::<states::Retrieved>::new(); let evaluation = QueryEvaluation::RetrieveDocuments(query.clone());
83
84 match evaluation.retrieve_documents_query() {
85 Some(q) => assert_eq!(q, query),
86 None => panic!("Expected a query, got None"),
87 }
88 }
89
90 #[test]
91 fn test_answer_query() {
92 let query = Query::<states::Answered>::new(); let evaluation = QueryEvaluation::AnswerQuery(query.clone());
94
95 match evaluation.answer_query() {
96 Some(q) => assert_eq!(q, query),
97 None => panic!("Expected a query, got None"),
98 }
99 }
100}