haste_fhir_search/
lib.rs

1use haste_fhir_client::request::SearchRequest;
2use haste_fhir_model::r4::generated::resources::{Resource, ResourceType};
3use haste_fhir_operation_error::OperationOutcomeError;
4use haste_jwt::{ProjectId, ResourceId, TenantId, VersionId};
5use haste_repository::types::{FHIRMethod, SupportedFHIRVersions};
6use serde::Deserialize;
7
8pub mod elastic_search;
9mod indexing_conversion;
10
11pub struct RemoveIndex {
12    // resource_type: ResourceType,
13    // id: String,
14}
15
16pub struct IndexResource<'a> {
17    pub id: &'a ResourceId,
18    pub version_id: &'a String,
19
20    pub project: &'a ProjectId,
21
22    pub fhir_method: &'a FHIRMethod,
23
24    pub resource_type: &'a ResourceType,
25    pub resource: &'a Resource,
26}
27
28#[derive(Deserialize, Debug)]
29pub struct SearchEntry {
30    pub id: ResourceId,
31    pub resource_type: ResourceType,
32    pub version_id: VersionId,
33}
34
35pub struct SearchReturn {
36    pub total: Option<i64>,
37    pub entries: Vec<SearchEntry>,
38}
39
40pub struct SearchOptions {
41    pub count_limit: bool,
42}
43
44pub struct SuccessfullyIndexedCount(pub usize);
45
46pub trait SearchEngine: Send + Sync {
47    fn search(
48        &self,
49        fhir_version: &SupportedFHIRVersions,
50        tenant: &TenantId,
51        project: &ProjectId,
52        search_request: &SearchRequest,
53        options: Option<SearchOptions>,
54    ) -> impl Future<Output = Result<SearchReturn, OperationOutcomeError>> + Send + Sync;
55
56    fn index(
57        &self,
58        fhir_version: &SupportedFHIRVersions,
59        tenant: &TenantId,
60        resource: Vec<IndexResource>,
61    ) -> impl Future<Output = Result<SuccessfullyIndexedCount, OperationOutcomeError>> + Send + Sync;
62
63    fn migrate(
64        &self,
65        fhir_version: &SupportedFHIRVersions,
66    ) -> impl Future<Output = Result<(), haste_fhir_operation_error::OperationOutcomeError>> + Send + Sync;
67}