pub struct CodeGenerator { /* private fields */ }Expand description
Main code generator struct that orchestrates specialized generators
Uses Arc<Mutex<>> for shared mutable state to enable parallel generation
of independent StructureDefinitions via rayon.
Implementations§
Source§impl CodeGenerator
impl CodeGenerator
Sourcepub fn new(config: CodegenConfig) -> Self
pub fn new(config: CodegenConfig) -> Self
Create a new code generator with the given configuration
Sourcepub fn new_with_value_set_directory<P: AsRef<Path>>(
config: CodegenConfig,
value_set_dir: P,
) -> Self
pub fn new_with_value_set_directory<P: AsRef<Path>>( config: CodegenConfig, value_set_dir: P, ) -> Self
Create a new code generator with a ValueSet directory
Sourcepub fn load_structure_definition<P: AsRef<Path>>(
&self,
path: P,
) -> CodegenResult<StructureDefinition>
pub fn load_structure_definition<P: AsRef<Path>>( &self, path: P, ) -> CodegenResult<StructureDefinition>
Load and parse a FHIR StructureDefinition from a JSON file
Sourcepub fn generate_struct(
&mut self,
structure_def: &StructureDefinition,
) -> CodegenResult<RustStruct>
pub fn generate_struct( &mut self, structure_def: &StructureDefinition, ) -> CodegenResult<RustStruct>
Generate a Rust struct from a FHIR StructureDefinition
Sourcepub fn generate_trait(
&mut self,
structure_def: &StructureDefinition,
) -> CodegenResult<Vec<RustTrait>>
pub fn generate_trait( &mut self, structure_def: &StructureDefinition, ) -> CodegenResult<Vec<RustTrait>>
Generate traits for a structure definition
Sourcepub fn generate_to_organized_directories<P: AsRef<Path>>(
&mut self,
structure_def: &StructureDefinition,
base_output_dir: P,
) -> CodegenResult<()>
pub fn generate_to_organized_directories<P: AsRef<Path>>( &mut self, structure_def: &StructureDefinition, base_output_dir: P, ) -> CodegenResult<()>
Generate a Rust struct and write it to the appropriate directory based on FHIR type classification
Sourcepub fn generate_trait_to_organized_directory<P: AsRef<Path>>(
&mut self,
structure_def: &StructureDefinition,
base_output_dir: P,
) -> CodegenResult<()>
pub fn generate_trait_to_organized_directory<P: AsRef<Path>>( &mut self, structure_def: &StructureDefinition, base_output_dir: P, ) -> CodegenResult<()>
Generate traits and write them to the traits directory
Sourcepub fn classify_fhir_structure_def(
&self,
structure_def: &StructureDefinition,
) -> FhirTypeCategory
pub fn classify_fhir_structure_def( &self, structure_def: &StructureDefinition, ) -> FhirTypeCategory
Classify a FHIR StructureDefinition into the appropriate category
Sourcepub fn generate_to_file<P: AsRef<Path>>(
&mut self,
structure_def: &StructureDefinition,
output_path: P,
) -> CodegenResult<()>
pub fn generate_to_file<P: AsRef<Path>>( &mut self, structure_def: &StructureDefinition, output_path: P, ) -> CodegenResult<()>
Generate a Rust struct and write it to a file
Sourcepub fn generate_trait_to_file<P: AsRef<Path>>(
&mut self,
structure_def: &StructureDefinition,
output_path: P,
) -> CodegenResult<()>
pub fn generate_trait_to_file<P: AsRef<Path>>( &mut self, structure_def: &StructureDefinition, output_path: P, ) -> CodegenResult<()>
Generate a Rust trait and write it to a file
Sourcepub fn pre_register_value_set_enums<P: AsRef<Path>>(
&mut self,
package_dir: P,
) -> CodegenResult<()>
pub fn pre_register_value_set_enums<P: AsRef<Path>>( &mut self, package_dir: P, ) -> CodegenResult<()>
Pre-scan and register all ValueSet enums in the TypeRegistry This should be called before processing resources to ensure correct import paths
Sourcepub fn generate_enum_files<P: AsRef<Path>>(
&mut self,
enums_dir: P,
) -> CodegenResult<()>
pub fn generate_enum_files<P: AsRef<Path>>( &mut self, enums_dir: P, ) -> CodegenResult<()>
Generate all ValueSet enums to separate files in the specified directory
Sourcepub fn generate_enums_mod_file<P: AsRef<Path>>(
&mut self,
enums_dir: P,
) -> CodegenResult<()>
pub fn generate_enums_mod_file<P: AsRef<Path>>( &mut self, enums_dir: P, ) -> CodegenResult<()>
Generate a mod.rs file that re-exports all the enum modules
Sourcepub fn generate_enum_for_value_set(
&mut self,
value_set_url: &str,
) -> CodegenResult<Option<RustEnum>>
pub fn generate_enum_for_value_set( &mut self, value_set_url: &str, ) -> CodegenResult<Option<RustEnum>>
Generate an enum for a value set binding
Sourcepub fn has_cached_enums(&self) -> bool
pub fn has_cached_enums(&self) -> bool
Check if any ValueSet enums have been generated
Sourcepub fn to_filename(&self, structure_def: &StructureDefinition) -> String
pub fn to_filename(&self, structure_def: &StructureDefinition) -> String
Convert a FHIR resource type name to filename using snake_case
Sourcepub fn pre_generate_base_definitions(
&mut self,
structure_defs: &[StructureDefinition],
)
pub fn pre_generate_base_definitions( &mut self, structure_defs: &[StructureDefinition], )
Pre-generate base definitions (Element, BackboneElement, DomainResource, Resource) to ensure they’re in the type_cache before parallel generation begins.
These core FHIR types are referenced by virtually every other type, so generating them first eliminates lock contention during the parallel phase and avoids redundant re-generation attempts.
Sourcepub fn generate_trait_file_from_trait<P: AsRef<Path>>(
&self,
rust_trait: &RustTrait,
output_path: P,
) -> CodegenResult<()>
pub fn generate_trait_file_from_trait<P: AsRef<Path>>( &self, rust_trait: &RustTrait, output_path: P, ) -> CodegenResult<()>
Generate a trait file directly from a RustTrait object
Sourcepub fn type_cache_snapshot(&self) -> HashMap<String, RustStruct>
pub fn type_cache_snapshot(&self) -> HashMap<String, RustStruct>
Get a clone of the shared type cache (for reading generated structs)
Sourcepub fn generate_structs_parallel(
&self,
structure_defs: &[StructureDefinition],
) -> Vec<(String, CodegenResult<RustStruct>)>
pub fn generate_structs_parallel( &self, structure_defs: &[StructureDefinition], ) -> Vec<(String, CodegenResult<RustStruct>)>
Generate Rust structs for multiple StructureDefinitions in parallel using rayon.
This processes the CPU-intensive struct generation phase in parallel while
maintaining thread-safe access to shared state via Arc<Mutex<>>.
Returns a vector of (StructureDefinition, Result
§Performance
On a machine with N cores, this typically achieves ~N× speedup for the struct generation phase compared to sequential processing, as each StructureDefinition’s struct generation is largely independent.
The TypeRegistry must be fully populated (Phase 1 complete) before calling this.
Sourcepub fn write_all_generated_files<P: AsRef<Path>>(
&self,
structure_defs: &[StructureDefinition],
base_output_dir: P,
) -> Vec<CodegenResult<()>> ⓘ
pub fn write_all_generated_files<P: AsRef<Path>>( &self, structure_defs: &[StructureDefinition], base_output_dir: P, ) -> Vec<CodegenResult<()>> ⓘ
Generate files for all generated structs in the type cache.
This is the I/O phase that writes generated Rust code to disk.
It should be called after generate_structs_parallel (or sequential generation)
has populated the type cache.
Sourcepub fn write_all_trait_files<P: AsRef<Path>>(
&self,
structure_defs: &[StructureDefinition],
base_output_dir: P,
) -> Vec<CodegenResult<()>> ⓘ
pub fn write_all_trait_files<P: AsRef<Path>>( &self, structure_defs: &[StructureDefinition], base_output_dir: P, ) -> Vec<CodegenResult<()>> ⓘ
Generate trait files for all resources and profiles in parallel.
This writes trait files for resources/profiles that have been generated.
Auto Trait Implementations§
impl Freeze for CodeGenerator
impl RefUnwindSafe for CodeGenerator
impl Send for CodeGenerator
impl Sync for CodeGenerator
impl Unpin for CodeGenerator
impl UnsafeUnpin for CodeGenerator
impl UnwindSafe for CodeGenerator
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more