Skip to content

Commit 7b02409

Browse files
committed
v0.1
0 parents  commit 7b02409

11 files changed

+246
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
vendor/
2+
composer.lock
3+
.phpunit.result.cache

composer.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"name": "micro/plugin-serializer",
3+
"description": "Micro Framework: Serializer plugin",
4+
"type": "library",
5+
"version": "0.1",
6+
"license": "MIT",
7+
"autoload": {
8+
"psr-4": {
9+
"Micro\\Plugin\\Serializer\\": "src/"
10+
}
11+
},
12+
"authors": [
13+
{
14+
"name": "Stanislau.Komar",
15+
"email": "stanislau_komar@epam.com"
16+
}
17+
],
18+
"minimum-stability": "stable",
19+
"require": {}
20+
}

src/Business/SerializerFacade.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
namespace Micro\Plugin\Serializer\Business;
4+
5+
use Micro\Plugin\Serializer\SerializerFacadeInterface;
6+
7+
class SerializerFacade implements SerializerFacadeInterface
8+
{
9+
/**
10+
* @param SerializerFactoryProviderInterface $factoryProvider
11+
*/
12+
public function __construct(
13+
private SerializerFactoryProviderInterface $factoryProvider
14+
) {
15+
}
16+
17+
/**
18+
* {@inheritDoc}
19+
*/
20+
public function serialize(object $object, string $format, array $context = []): string
21+
{
22+
return $this->factoryProvider
23+
->getFactory()
24+
->create()
25+
->serialize($object, $format, $context);
26+
}
27+
28+
/**
29+
* {@inheritDoc}
30+
*/
31+
public function deserialize(string $data, string $objectClass, string $format, array $options = []): object
32+
{
33+
return $this->factoryProvider
34+
->getFactory()
35+
->create()
36+
->deserialize($data, $objectClass, $format, $options);
37+
}
38+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace Micro\Plugin\Serializer\Business;
4+
5+
interface SerializerFactoryInterface
6+
{
7+
/**
8+
* @return SerializerInterface
9+
*/
10+
public function create(): SerializerInterface;
11+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
namespace Micro\Plugin\Serializer\Business;
4+
5+
use Micro\Plugin\Serializer\Exception\SerializerAdapterNotInstalledException;
6+
7+
class SerializerFactoryProvider implements SerializerFactoryProviderInterface
8+
{
9+
/**
10+
* @var SerializerFactoryInterface|null
11+
*/
12+
private ?SerializerFactoryInterface $serializerFactory = null;
13+
14+
/**
15+
* @param SerializerFactoryInterface $serializerFactory
16+
* @return void
17+
*/
18+
public function setFactory(SerializerFactoryInterface $serializerFactory): void
19+
{
20+
$this->serializerFactory = $serializerFactory;
21+
}
22+
23+
/**
24+
* @return SerializerFactoryInterface
25+
*/
26+
public function getFactory(): SerializerFactoryInterface
27+
{
28+
if($this->serializerFactory === null) {
29+
throw new SerializerAdapterNotInstalledException();
30+
}
31+
32+
return $this->serializerFactory;
33+
}
34+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace Micro\Plugin\Serializer\Business;
4+
5+
6+
use Micro\Plugin\Serializer\Exception\SerializerAdapterNotInstalledException;
7+
8+
interface SerializerFactoryProviderInterface
9+
{
10+
/**
11+
* @param SerializerFactoryInterface $serializerFactory
12+
*
13+
* @return void
14+
*/
15+
public function setFactory(SerializerFactoryInterface $serializerFactory): void;
16+
17+
/**
18+
* @return SerializerFactoryInterface
19+
*
20+
* @throws SerializerAdapterNotInstalledException
21+
*/
22+
public function getFactory(): SerializerFactoryInterface;
23+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace Micro\Plugin\Serializer\Business;
4+
5+
interface SerializerInterface
6+
{
7+
/**
8+
* @param object $object
9+
* @param string $format
10+
* @param array $context
11+
* @return string
12+
*/
13+
public function serialize(object $object, string $format, array $context = []): string;
14+
15+
/**
16+
* @param string $data
17+
* @param string $objectClass
18+
* @param string $format
19+
* @param array $options
20+
* @return object
21+
*/
22+
public function deserialize(string $data, string $objectClass, string $format, array $options = []): object;
23+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
namespace Micro\Plugin\Serializer\Exception;
4+
5+
class SerializerAdapterNotInstalledException extends \RuntimeException
6+
{
7+
}

src/SerializerFacadeInterface.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace Micro\Plugin\Serializer;
4+
5+
interface SerializerFacadeInterface
6+
{
7+
public const FORMAT_JSON = 'json';
8+
public const FORMAT_XML = 'xml';
9+
10+
/**
11+
* @param object $object
12+
* @param string $format
13+
* @param array $context
14+
* @return string
15+
*/
16+
public function serialize(object $object, string $format, array $context = []): string;
17+
18+
/**
19+
* @param string $data
20+
* @param string $objectClass
21+
* @param string $format
22+
* @param array $options
23+
* @return object
24+
*/
25+
public function deserialize(string $data, string $objectClass, string $format, array $options = []): object;
26+
}

src/SerializerPlugin.php

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php
2+
3+
namespace Micro\Plugin\Serializer;
4+
5+
use Micro\Component\DependencyInjection\Container;
6+
use Micro\Framework\Kernel\Plugin\AbstractPlugin;
7+
use Micro\Plugin\Serializer\Business\SerializerFacade;
8+
use Micro\Plugin\Serializer\Business\SerializerFactoryInterface;
9+
use Micro\Plugin\Serializer\Business\SerializerFactoryProvider;
10+
use Micro\Plugin\Serializer\Business\SerializerFactoryProviderInterface;
11+
12+
class SerializerPlugin extends AbstractPlugin
13+
{
14+
/**
15+
* {@inheritDoc}
16+
*/
17+
public function provideDependencies(Container $container): void
18+
{
19+
$container->register(SerializerFacadeInterface::class, function (Container $container) {
20+
return $this->createSerializerFacade($container);
21+
});
22+
}
23+
24+
/**
25+
* @param Container $container
26+
* @return SerializerFacadeInterface
27+
* @throws \Psr\Container\ContainerExceptionInterface
28+
* @throws \Psr\Container\NotFoundExceptionInterface
29+
*/
30+
protected function createSerializerFacade(Container $container): SerializerFacadeInterface
31+
{
32+
return new SerializerFacade(
33+
$this->createSerializerFactoryProvider($container)
34+
);
35+
}
36+
37+
/**
38+
* @param Container $container
39+
* @return SerializerFactoryProviderInterface
40+
* @throws \Psr\Container\ContainerExceptionInterface
41+
* @throws \Psr\Container\NotFoundExceptionInterface
42+
*/
43+
protected function createSerializerFactoryProvider(Container $container): SerializerFactoryProviderInterface
44+
{
45+
$serializerFactory = $container->get(SerializerFactoryInterface::class);
46+
$factoryProvider = new SerializerFactoryProvider();
47+
$factoryProvider->setFactory($serializerFactory);
48+
49+
return $factoryProvider;
50+
}
51+
}

0 commit comments

Comments
 (0)