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