haste_operation_executor/
lib.rs1pub mod providers;
2pub mod structs;
3pub mod traits;
4pub mod validate;
5
6use haste_fhir_model::r4::generated::resources::OperationDefinition;
7use haste_fhir_model::r4::generated::types::{Extension, ExtensionValueTypeChoice};
8
9pub const CUSTOM_CODE_EXTENSION_URL: &str = "https://haste.health/Extension/custom-code";
10pub const CUSTOM_CODE_TYPE_EXTENSION_URL: &str = "https://haste.health/Extension/custom-code-type";
11
12pub(crate) fn extract_code_from_operation_definition(
13 operation: &OperationDefinition,
14) -> Option<(&str, &str)> {
15 let code_extension = operation.extension.as_ref()?.iter().find(|extension| {
16 extension.url == CUSTOM_CODE_EXTENSION_URL
17 && extension_value_as_string(extension.as_ref()).is_some()
18 })?;
19
20 let code = extension_value_as_string(code_extension.as_ref())?;
21
22 let media_type = code_extension
23 .extension
24 .as_ref()?
25 .iter()
26 .find(|extension| extension.url == CUSTOM_CODE_TYPE_EXTENSION_URL)
27 .and_then(|extension| extension_value_as_string(extension.as_ref()))?;
28
29 Some((code, media_type))
30}
31
32fn extension_value_as_string(extension: &Extension) -> Option<&str> {
33 match extension.value.as_ref()? {
34 ExtensionValueTypeChoice::String(value) => value.value.as_deref(),
35 _ => None,
36 }
37}