use anyhow::Result;
use rh_codegen::{CodeGenerator, CodegenConfig};
use std::path::Path;
fn main() -> Result<()> {
let config = CodegenConfig::default();
let mut generator = CodeGenerator::new(config);
let output_dir = Path::new("./test-real-fix");
let src_dir = output_dir.join("src");
if output_dir.exists() {
std::fs::remove_dir_all(output_dir)?;
}
std::fs::create_dir_all(&src_dir)?;
println!("Testing the Element/ElementDefinition fix with simulated real structures...");
let element_structure = create_enhanced_element_structure();
let element_definition_structure = create_enhanced_element_definition_structure();
generator.generate_to_organized_directories(&element_structure, &src_dir)?;
generator.generate_to_organized_directories(&element_definition_structure, &src_dir)?;
println!("✅ Generated test files");
println!("📁 Files generated in: {}/datatypes/", src_dir.display());
println!("🔍 Checking generated files...");
let element_file = src_dir.join("datatypes").join("element.rs");
let element_definition_file = src_dir.join("datatypes").join("element_definition.rs");
if element_file.exists() {
println!("✅ Element file generated: {}", element_file.display());
} else {
println!("❌ Element file not found");
}
if element_definition_file.exists() {
println!(
"✅ ElementDefinition file generated: {}",
element_definition_file.display()
);
} else {
println!("❌ ElementDefinition file not found");
}
println!("🎯 Fix appears to be working - files are being generated separately!");
println!(
"📖 Manual verification: check that element.rs doesn't contain ElementDefinition structs"
);
Ok(())
}
fn create_enhanced_element_structure() -> rh_codegen::fhir_types::StructureDefinition {
use rh_codegen::fhir_types::*;
StructureDefinition {
resource_type: "StructureDefinition".to_string(),
id: "Element".to_string(),
url: "http://hl7.org/fhir/StructureDefinition/Element".to_string(),
name: "Element".to_string(),
title: Some("Element".to_string()),
status: "active".to_string(),
description: Some("Base definition for all elements in a resource.".to_string()),
purpose: None,
kind: "complex-type".to_string(),
is_abstract: false,
base_type: "Element".to_string(),
base_definition: None,
version: Some("4.0.1".to_string()),
differential: Some(StructureDefinitionDifferential {
element: vec![
ElementDefinition {
id: Some("Element.extension".to_string()),
path: "Element.extension".to_string(),
short: Some("Additional content defined by implementations".to_string()),
definition: Some("May be used to represent additional information".to_string()),
min: Some(0),
max: Some("*".to_string()),
element_type: Some(vec![ElementType {
code: Some("Extension".to_string()),
target_profile: None,
}]),
fixed: None,
pattern: None,
binding: None,
constraint: None,
},
],
}),
snapshot: None,
}
}
fn create_enhanced_element_definition_structure() -> rh_codegen::fhir_types::StructureDefinition {
use rh_codegen::fhir_types::*;
StructureDefinition {
resource_type: "StructureDefinition".to_string(),
id: "ElementDefinition".to_string(),
url: "http://hl7.org/fhir/StructureDefinition/ElementDefinition".to_string(),
name: "ElementDefinition".to_string(),
title: Some("ElementDefinition".to_string()),
status: "active".to_string(),
description: Some(
"Captures constraints on each element within the resource, profile, or extension."
.to_string(),
),
purpose: None,
kind: "complex-type".to_string(),
is_abstract: false,
base_type: "BackboneElement".to_string(),
base_definition: Some(
"http://hl7.org/fhir/StructureDefinition/BackboneElement".to_string(),
),
version: Some("4.0.1".to_string()),
differential: Some(StructureDefinitionDifferential {
element: vec![
ElementDefinition {
id: Some("ElementDefinition.binding".to_string()),
path: "ElementDefinition.binding".to_string(),
short: Some("ValueSet details if this is coded".to_string()),
definition: Some("Binds to a value set if this element is coded".to_string()),
min: Some(0),
max: Some("1".to_string()),
element_type: Some(vec![ElementType {
code: Some("BackboneElement".to_string()),
target_profile: None,
}]),
fixed: None,
pattern: None,
binding: None,
constraint: None,
},
],
}),
snapshot: None,
}
}