SourceFetcherBootloader.php•1.32 kB
<?php
declare(strict_types=1);
namespace Butschster\ContextGenerator\Source\Fetcher;
use Butschster\ContextGenerator\SourceParserInterface;
use Spiral\Boot\Bootloader\Bootloader;
use Spiral\Core\Attribute\Singleton;
use Spiral\Core\Container;
#[Singleton]
final class SourceFetcherBootloader extends Bootloader
{
    /** @var class-string<SourceFetcherInterface>[] */
    private array $fetchers = [];
    /**
     * Register a source fetcher
     * @param class-string<SourceFetcherInterface> $fetcher
     */
    public function register(string $fetcher): self
    {
        $this->fetchers[] = $fetcher;
        return $this;
    }
    #[\Override]
    public function defineSingletons(): array
    {
        return [
            SourceParserInterface::class => static function (
                Container $container,
                SourceFetcherBootloader $bootloader,
            ) {
                $fetchers = $bootloader->getFetchers();
                return new SourceFetcherProvider(
                    fetchers: \array_map(
                        static fn(string $fetcher) => $container->get($fetcher),
                        $fetchers,
                    ),
                );
            },
        ];
    }
    public function getFetchers(): array
    {
        return $this->fetchers;
    }
}