From 62c04573e88972c52e77aa3fdff8ae74356cac84 Mon Sep 17 00:00:00 2001 From: Daniel Carbone Date: Thu, 30 Jan 2025 14:14:38 -0600 Subject: [PATCH] better client generation --- src/Version/Definition/TypeExtractor.php | 6 +++--- src/Version/Definition/Types.php | 13 ++++++------- template/versions/core/class_version_client.php | 12 ++++++++++-- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/Version/Definition/TypeExtractor.php b/src/Version/Definition/TypeExtractor.php index cfbeee13..4dbee315 100644 --- a/src/Version/Definition/TypeExtractor.php +++ b/src/Version/Definition/TypeExtractor.php @@ -136,7 +136,7 @@ protected static function extractTypesFromXSD(Config $config, Version $version, $type = TypeBuilder::build($config, $version, $fhirName, $child, $sourceFile); // add type - $types->addType($type); + $type = $types->addOrReturnType($type); // proceed with decoration SimpleTypeElementTypeDecorator::decorate($config, $types, $type, $child); @@ -148,7 +148,7 @@ protected static function extractTypesFromXSD(Config $config, Version $version, $type = TypeBuilder::build($config, $version, $fhirName, $child, $sourceFile); // add type - $types->addType($type); + $type = $types->addOrReturnType($type); // proceed with decoration ComplexTypeElementTypeDecorator::decorate($config, $types, $type, $child); @@ -173,7 +173,7 @@ protected static function extractTypesFromXSD(Config $config, Version $version, $type = TypeBuilder::build($config, $version, $fhirName, $child, $sourceFile); // add type - $types->addType($type); + $type = $types->addOrReturnType($type); // proceed with decoration ElementElementTypeDecorator::rootDecorate($config, $types, $type, $child); diff --git a/src/Version/Definition/Types.php b/src/Version/Definition/Types.php index 01ff0370..c8cdd629 100644 --- a/src/Version/Definition/Types.php +++ b/src/Version/Definition/Types.php @@ -58,7 +58,7 @@ public function __construct(Version $version) // TODO(dcarbone): this sucks. $xt = new Type($version, PHPFHIR_XHTML_TYPE_NAME); $xt->setKind(TypeKindEnum::PHPFHIR_XHTML); - $this->addType($xt); + $this->addOrReturnType($xt); } /** @@ -117,14 +117,14 @@ public function getTypeByFQN(string $fqn, bool $leadingSlash): null|Type * same type running around... * * @param \DCarbone\PHPFHIR\Version\Definition\Type $type - * @return \DCarbone\PHPFHIR\Version\Definition\Types + * @return \DCarbone\PHPFHIR\Version\Definition\Type */ - public function addType(Type &$type): Types + public function addOrReturnType(Type $type): Type { $tname = $type->getFHIRName(); foreach ($this->_types as $current) { if ($type === $current) { - return $this; + return $current; } if ($current->getFHIRName() === $tname) { // this happens with FHIR types sometimes... @@ -136,12 +136,11 @@ public function addType(Type &$type): Types $type->getSourceFileBasename() ) ); - $type = $current; - return $this; + return $current; } } $this->_types[] = $type; - return $this; + return $type; } /** diff --git a/template/versions/core/class_version_client.php b/template/versions/core/class_version_client.php index 5fe8a452..9edb94d2 100644 --- a/template/versions/core/class_version_client.php +++ b/template/versions/core/class_version_client.php @@ -48,7 +48,11 @@ ); foreach($types->getIterator() as $type) { - if (($type->isResourceType() || $type->hasResourceTypeParent()) && !$type->isAbstract() && !$type->getKind()->isResourceContainer($version)) { + if ($type->hasResourceTypeParent() + && 'Bundle' !== $type->getFHIRName() + && 'DomainResource' !== $type->getFHIRName() + && !$type->isAbstract() + && !$type->getKind()->isResourceContainer($version)) { $imports->addVersionTypeImports($type); } } @@ -212,7 +216,11 @@ protected function _requireOK( $ } } getDefinition()->getTypes()->getNameSortedIterator() as $rsc) : - if (!($rsc->isResourceType() || $rsc->hasResourceTypeParent()) || $rsc->isAbstract() || $rsc->getKind()->isResourceContainer($version)) { + if (!$rsc->hasResourceTypeParent() + || 'Bundle' === $rsc->getFHIRName() + || 'DomainResource' === $rsc->getFHIRName() + || $rsc->isAbstract() + || $rsc->getKind()->isResourceContainer($version)) { continue; }