Skip to main content

haste_codegen/type_gen/rust_types/
mod.rs

1use haste_fhir_model::r4::generated::terminology::IssueType;
2use haste_fhir_operation_error::OperationOutcomeError;
3use proc_macro2::TokenStream;
4
5mod data_types;
6mod terminology;
7
8pub struct GeneratedTypes {
9    pub terminology: TokenStream,
10    pub resources: TokenStream,
11    pub types: TokenStream,
12}
13
14/// Generates the Rust types for the provided FHIR definition files.
15///
16/// # Errors
17///
18/// Returns an [`OperationOutcomeError`] if:
19/// - terminology generation fails; or
20/// - data type generation fails.
21pub async fn generate(
22    file_paths: &Vec<String>,
23    level: Option<&'static str>,
24) -> Result<GeneratedTypes, OperationOutcomeError> {
25    let terminology_types = terminology::generate(file_paths).await?;
26
27    let data_types =
28        data_types::generate(file_paths, level, &terminology_types.inlined_terminologies)
29            .map_err(|d| OperationOutcomeError::error(IssueType::exception(), d))?;
30
31    Ok(GeneratedTypes {
32        terminology: terminology_types.tokens,
33        resources: data_types.resources,
34        types: data_types.types,
35    })
36}