1<?php 2 3declare(strict_types=1); 4 5namespace JMS\Serializer\Builder; 6 7use Doctrine\Common\Annotations\Reader; 8use JMS\Serializer\Exception\LogicException; 9use Metadata\Driver\DriverInterface; 10 11final class CallbackDriverFactory implements DriverFactoryInterface 12{ 13 /** 14 * @var callable 15 */ 16 private $callback; 17 18 public function __construct(callable $callable) 19 { 20 $this->callback = $callable; 21 } 22 23 public function createDriver(array $metadataDirs, Reader $reader): DriverInterface 24 { 25 $driver = \call_user_func($this->callback, $metadataDirs, $reader); 26 if (!$driver instanceof DriverInterface) { 27 throw new LogicException('The callback must return an instance of DriverInterface.'); 28 } 29 30 return $driver; 31 } 32} 33