gnu-social/vendor/zendframework/zend-serializer/src/AdapterPluginManager.php
2020-08-07 23:42:38 +01:00

106 lines
4.0 KiB
PHP

<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Zend\Serializer;
use Zend\ServiceManager\AbstractPluginManager;
use Zend\ServiceManager\Factory\InvokableFactory;
use Zend\ServiceManager\Exception\InvalidServiceException;
/**
* Plugin manager implementation for serializer adapters.
*
* Enforces that adapters retrieved are instances of
* Adapter\AdapterInterface. Additionally, it registers a number of default
* adapters available.
*/
class AdapterPluginManager extends AbstractPluginManager
{
protected $aliases = [
'igbinary' => Adapter\IgBinary::class,
'igBinary' => Adapter\IgBinary::class,
'IgBinary' => Adapter\IgBinary::class,
'json' => Adapter\Json::class,
'Json' => Adapter\Json::class,
'msgpack' => Adapter\MsgPack::class,
'msgPack' => Adapter\MsgPack::class,
'MsgPack' => Adapter\MsgPack::class,
'phpcode' => Adapter\PhpCode::class,
'phpCode' => Adapter\PhpCode::class,
'PhpCode' => Adapter\PhpCode::class,
'phpserialize' => Adapter\PhpSerialize::class,
'phpSerialize' => Adapter\PhpSerialize::class,
'PhpSerialize' => Adapter\PhpSerialize::class,
'pythonpickle' => Adapter\PythonPickle::class,
'pythonPickle' => Adapter\PythonPickle::class,
'PythonPickle' => Adapter\PythonPickle::class,
'wddx' => Adapter\Wddx::class,
'Wddx' => Adapter\Wddx::class,
];
protected $factories = [
Adapter\IgBinary::class => InvokableFactory::class,
Adapter\Json::class => InvokableFactory::class,
Adapter\MsgPack::class => InvokableFactory::class,
Adapter\PhpCode::class => InvokableFactory::class,
Adapter\PhpSerialize::class => InvokableFactory::class,
Adapter\PythonPickle::class => InvokableFactory::class,
Adapter\Wddx::class => InvokableFactory::class,
// Legacy (v2) due to alias resolution; canonical form of resolved
// alias is used to look up the factory, while the non-normalized
// resolved alias is used as the requested name passed to the factory.
'zendserializeradapterigbinary' => InvokableFactory::class,
'zendserializeradapterjson' => InvokableFactory::class,
'zendserializeradaptermsgpack' => InvokableFactory::class,
'zendserializeradapterphpcode' => InvokableFactory::class,
'zendserializeradapterphpserialize' => InvokableFactory::class,
'zendserializeradapterpythonpickle' => InvokableFactory::class,
'zendserializeradapterwddx' => InvokableFactory::class,
];
protected $instanceOf = Adapter\AdapterInterface::class;
/**
* Validate the plugin is of the expected type (v3).
*
* Validates against `$instanceOf`.
*
* @param mixed $instance
* @throws InvalidServiceException
*/
public function validate($instance)
{
if (! $instance instanceof $this->instanceOf) {
throw new InvalidServiceException(sprintf(
'%s can only create instances of %s; %s is invalid',
get_class($this),
$this->instanceOf,
(is_object($instance) ? get_class($instance) : gettype($instance))
));
}
}
/**
* Validate the plugin is of the expected type (v2).
*
* Proxies to `validate()`.
*
* @param mixed $instance
* @throws Exception\RuntimeException
*/
public function validatePlugin($instance)
{
try {
$this->validate($instance);
} catch (InvalidServiceException $e) {
throw new Exception\RuntimeException($e->getMessage(), $e->getCode(), $e);
}
}
}