Skip to content

Commit

Permalink
v1.13.2
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrii Savluk committed Mar 30, 2023
1 parent f80bee0 commit 427ad80
Showing 1 changed file with 45 additions and 12 deletions.
57 changes: 45 additions & 12 deletions src/Support/TypeGeneration/RefsResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,19 @@
use Illuminate\Support\Str;
use LogicException;
use Savks\Negotiator\Enums\RefTypes;
use Savks\Negotiator\Support\Mapping\Mapper;

class RefsResolver
{
/**
* @param list<array{
* pattern: string,
* resolver: Closure(array, class-string): (array|null),
* }> $mapperVariants
* rule: string | (Closure(class-string): bool),
* resolver: Closure(array, class-string<Mapper>): (list<string[]|string>|null),
* } | (Closure(class-string<Mapper>): (list<string[]|string>|null))> $mapperVariants
* @param list<array{
* pattern: string,
* resolver: Closure(array, class-string<BackedEnum>): (array|null),
* }> $enumVariants
* rule: string | (Closure(class-string): bool),
* resolver: Closure(array, class-string<BackedEnum>): (list<string[]|string>|null),
* } | (Closure(class-string<BackedEnum>): (list<string[]|string>|null))> $enumVariants
*/
public function __construct(
protected readonly array $mapperVariants,
Expand Down Expand Up @@ -54,14 +55,30 @@ protected function resolveEnumRef(string $enumFQN): array
$enumName = null;

foreach ($this->enumVariants as $variant) {
if (\preg_match($variant['pattern'], $enumFQN, $matches) > 0) {
$resolvedValue = $variant['resolver']($matches, $enumFQN);
if (\is_callable($variant)) {
$resolvedValue = $variant($enumFQN);

if ($resolvedValue) {
[$namespaceSegments, $enumName] = $resolvedValue;
}
} else {
if (\is_callable($variant['rule'])) {
$isMatch = $variant['rule']($enumFQN);

break;
$matches = null;
} else {
$isMatch = \preg_match($variant['rule'], $enumFQN, $matches) > 0;
}

if ($isMatch) {
$resolvedValue = $variant['resolver']($matches, $enumFQN);

if ($resolvedValue) {
[$namespaceSegments, $enumName] = $resolvedValue;
}

break;
}
}
}

Expand All @@ -87,14 +104,30 @@ protected function resolveMapperRef(string $mapperFQN): array
$mapperName = null;

foreach ($this->mapperVariants as $variant) {
if (\preg_match($variant['pattern'], $mapperFQN, $matches) > 0) {
$resolvedValue = $variant['resolver']($matches, $mapperFQN);
if (\is_callable($variant)) {
$resolvedValue = $variant($mapperFQN);

if ($resolvedValue) {
[$namespaceSegments, $mapperName] = $resolvedValue;
}
} else {
if (\is_callable($variant['rule'])) {
$isMatch = $variant['rule']($mapperFQN);

break;
$matches = null;
} else {
$isMatch = \preg_match($variant['rule'], $mapperFQN, $matches) > 0;
}

if ($isMatch) {
$resolvedValue = $variant['resolver']($matches, $mapperFQN);

if ($resolvedValue) {
[$namespaceSegments, $mapperName] = $resolvedValue;
}

break;
}
}
}

Expand Down

0 comments on commit 427ad80

Please sign in to comment.