use std::{fmt::Debug, path::PathBuf};
#[cfg(test)]
use mockall::{automock, predicate::*};
#[cfg(test)]
use tokio_stream::wrappers::ReceiverStream;
#[cfg(test)]
use crate::models::resolved::ResolvedSymbol;
use crate::models::{self};
#[cfg_attr(
test,
automock(type QueryContext=super::types::Context; type QueryResult=ReceiverStream<ResolvedSymbol>;)
)]
pub trait Resolver: Send + Sync + Debug {
#[allow(missing_docs)]
type QueryContext;
#[allow(missing_docs)]
type QueryResult;
fn query(&self, query: String, ctx: Self::QueryContext) -> Self::QueryResult;
}
#[derive(Default, Debug, Clone)]
pub struct Context {
pub current_file: Option<PathBuf>,
pub symbol_kinds: Option<Vec<models::parsed::SymbolKind>>,
}
impl Context {
#[must_use]
pub fn with_current_file(mut self, current_file: PathBuf) -> Self {
self.current_file = Some(current_file);
self
}
#[must_use]
pub fn with_symbol_kinds(mut self, symbol_kinds: &[models::parsed::SymbolKind]) -> Self {
self.symbol_kinds = Some(symbol_kinds.to_vec());
self
}
}