haste_fhir_search/elastic_search/
search_parameter_resolver.rs1use std::sync::Arc;
2
3use elasticsearch::Elasticsearch;
4use haste_fhir_client::request::SearchRequest;
5use haste_fhir_operation_error::OperationOutcomeError;
6use haste_jwt::{ProjectId, TenantId};
7
8use crate::{
9 SearchOptions, SearchReturn,
10 elastic_search::search,
11 memory::R4_SEARCH_PARAMETERS_INDEX,
12 project_parameters::{IndexSearch, ProjectParameterResolver},
13};
14
15pub type ElasticSearchParameterResolver<Repo> = ProjectParameterResolver<ElasticIndexSearch, Repo>;
18
19#[derive(Clone)]
21pub struct ElasticIndexSearch {
22 es: Arc<Elasticsearch>,
23}
24
25impl ElasticIndexSearch {
26 #[must_use]
27 pub fn new(es: Arc<Elasticsearch>) -> Self {
28 ElasticIndexSearch { es }
29 }
30}
31
32impl IndexSearch for ElasticIndexSearch {
33 async fn search(
34 &self,
35 tenant: &TenantId,
36 project: &ProjectId,
37 request: &SearchRequest,
38 options: &SearchOptions,
39 ) -> Result<SearchReturn, OperationOutcomeError> {
40 search::execute_search(
41 self.es.clone(),
42 R4_SEARCH_PARAMETERS_INDEX.clone(),
43 tenant,
44 project,
45 request,
46 Some(options),
47 )
48 .await
49 }
50}