Skip to main content

haste_fhir_search/elastic_search/
search_parameter_resolver.rs

1use 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
15/// Resolves the base parameters plus each project's own, found in
16/// Elasticsearch.
17pub type ElasticSearchParameterResolver<Repo> = ProjectParameterResolver<ElasticIndexSearch, Repo>;
18
19/// The Elasticsearch index, searched with the base parameters.
20#[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}