mant_engine/query/
execution.rs1use super::{
3 QueryExecutionError, QueryView, QueryViewResult, ResolvedContent, SearchQuery, search_query,
4 select_excerpt,
5};
6
7pub fn project_query_view(
13 query: ResolvedContent,
14 view: &QueryView,
15) -> Result<QueryViewResult, QueryExecutionError> {
16 validate_query_view(view)
17 .map_err(|error| QueryExecutionError::Query(super::QueryError::QueryValidation(error)))?;
18 match view {
19 QueryView::Full {} => Ok(QueryViewResult::Full(Box::new(query))),
20 QueryView::Outline {
21 entries,
22 root,
23 references,
24 } => {
25 mant_query::build_outline_with_references(
26 &query,
27 entries.clone(),
28 root.clone(),
29 references,
30 )
31 }
32 .map(QueryViewResult::Outline)
33 .map_err(QueryExecutionError::Projection),
34 QueryView::Excerpt { selectors } => select_excerpt(&query, selectors)
35 .map(QueryViewResult::Excerpt)
36 .map_err(QueryExecutionError::Projection),
37 QueryView::Explain { entry, options } => mant_query::explain_query(
38 &query,
39 &mant_protocol::ExplanationQuery {
40 entry: entry.clone(),
41 options: *options,
42 },
43 )
44 .map(QueryViewResult::Explanation)
45 .map_err(|error| {
46 QueryExecutionError::Query(super::QueryError::QueryValidation(
47 super::QueryValidationError::InvalidExplanation(error),
48 ))
49 }),
50 QueryView::Search {
51 pattern,
52 syntax,
53 case,
54 scope,
55 word,
56 context_lines,
57 limit,
58 offset,
59 } => search_query(
60 &query,
61 &SearchQuery {
62 pattern: pattern.clone(),
63 syntax: *syntax,
64 case: *case,
65 scope: *scope,
66 word: *word,
67 context_lines: *context_lines,
68 limit: *limit,
69 offset: *offset,
70 },
71 )
72 .map(QueryViewResult::Search)
73 .map_err(QueryExecutionError::Search),
74 }
75}
76
77use super::validation::validate_query_view;