use std::any::{Any, type_name_of_val}; use tonic::async_trait; use crate::util; #[async_trait] pub trait Source: Any + Send + Sync where Q: Clone + Send + Sync + 'static, C: Clone + Send + Sync + 'static, { /// Decide if this source should run for the given query fn enable(&self, _query: &Q) -> bool { true } async fn get_candidates(&self, query: &Q) -> Result, String>; fn name(&self) -> &'static str { util::short_type_name(type_name_of_val(self)) } }