trustfall_rustdoc/
query.rs1use std::{collections::BTreeMap, sync::Arc};
4
5use trustfall::{FieldValue, execute_query};
6
7use crate::versioned::VersionedRustdocAdapter;
8
9type QueryResult = BTreeMap<Arc<str>, FieldValue>;
10
11impl<'a> VersionedRustdocAdapter<'a> {
12 pub fn run_query<'slf: 'a, K: Into<Arc<str>>, V: Into<FieldValue>>(
13 &'slf self,
14 query: &str,
15 vars: BTreeMap<K, V>,
16 ) -> anyhow::Result<Box<dyn Iterator<Item = QueryResult> + 'a>> {
17 match self {
18 #[cfg(feature = "v53")]
19 VersionedRustdocAdapter::V53(_, adapter) => {
20 execute_query(self.schema(), Arc::new(adapter), query, vars)
21 }
22
23 #[cfg(feature = "v55")]
24 VersionedRustdocAdapter::V55(_, adapter) => {
25 execute_query(self.schema(), Arc::new(adapter), query, vars)
26 }
27
28 #[cfg(feature = "v56")]
29 VersionedRustdocAdapter::V56(_, adapter) => {
30 execute_query(self.schema(), Arc::new(adapter), query, vars)
31 }
32 }
33 }
34
35 pub fn run_query_with_indexed_query<'slf: 'a, K: Into<Arc<str>>, V: Into<FieldValue>>(
36 &'slf self,
37 query: Arc<trustfall_core::ir::IndexedQuery>,
38 vars: BTreeMap<K, V>,
39 ) -> anyhow::Result<Box<dyn Iterator<Item = QueryResult> + 'a>> {
40 let vars = Arc::new(
41 vars.into_iter()
42 .map(|(k, v)| (k.into(), v.into()))
43 .collect(),
44 );
45
46 match self {
47 #[cfg(feature = "v53")]
48 VersionedRustdocAdapter::V53(_, adapter) => {
49 Ok(trustfall_core::interpreter::execution::interpret_ir(
50 Arc::new(adapter),
51 query,
52 vars,
53 )?)
54 }
55
56 #[cfg(feature = "v55")]
57 VersionedRustdocAdapter::V55(_, adapter) => {
58 Ok(trustfall_core::interpreter::execution::interpret_ir(
59 Arc::new(adapter),
60 query,
61 vars,
62 )?)
63 }
64
65 #[cfg(feature = "v56")]
66 VersionedRustdocAdapter::V56(_, adapter) => {
67 Ok(trustfall_core::interpreter::execution::interpret_ir(
68 Arc::new(adapter),
69 query,
70 vars,
71 )?)
72 }
73 }
74 }
75}