haste_artifacts/
lib.rs

1use haste_fhir_model::r4::generated::resources::Resource;
2use once_cell::sync::Lazy;
3use rust_embed::Embed;
4
5pub mod search_parameters;
6
7fn flatten_if_bundle(resource: Resource) -> Vec<Box<Resource>> {
8    match resource {
9        Resource::Bundle(bundle) => bundle
10            .entry
11            .unwrap_or(vec![])
12            .into_iter()
13            .flat_map(|e| e.resource)
14            .collect::<Vec<_>>(),
15        _ => vec![Box::new(resource)],
16    }
17}
18
19fn load_resources() -> Vec<Box<Resource>> {
20    let mut resources = vec![];
21
22    for path in EmbededResourceAssets::iter() {
23        let data = EmbededResourceAssets::get(path.as_ref()).unwrap();
24        let resource = haste_fhir_serialization_json::from_str::<Resource>(
25            str::from_utf8(&data.data).unwrap(),
26        )
27        .expect("Failed to parse artifact parameters JSON");
28        resources.extend(flatten_if_bundle(resource));
29    }
30
31    resources
32}
33
34#[derive(Embed)]
35#[folder = "./artifacts/r4"]
36#[include = "haste_health/**/*.json"]
37#[include = "hl7/minified/**/*.json"]
38
39struct EmbededResourceAssets;
40
41pub static ARTIFACT_RESOURCES: Lazy<Vec<Box<Resource>>> = Lazy::new(|| load_resources());