Skip to content

Commit

Permalink
refactor: refactored serializers
Browse files Browse the repository at this point in the history
  • Loading branch information
petrknap committed Apr 1, 2024
1 parent 35d659b commit b823d61
Show file tree
Hide file tree
Showing 8 changed files with 44 additions and 84 deletions.
13 changes: 2 additions & 11 deletions src/Binary.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,11 @@ public static function decode(string $data): Decoder

public static function serialize(mixed $data): string
{
return self::getSerializer()->serialize(serializable: $data);
return (new Serializer())->serialize(serializable: $data);
}

public static function unserialize(string $data): mixed
{
return self::getSerializer()->unserialize(serialized: $data);
}

private static function getSerializer(): Serializer\SerializerInterface
{
static $serializer;
return $serializer ??= new Serializer\Zlib(
new Coder\Zlib(),
new Serializer\Php(),
);
return (new Serializer())->unserialize(serialized: $data);
}
}
9 changes: 0 additions & 9 deletions src/Exception/DecoderException.php

This file was deleted.

9 changes: 0 additions & 9 deletions src/Exception/EncoderException.php

This file was deleted.

31 changes: 31 additions & 0 deletions src/Serializer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

declare(strict_types=1);

namespace PetrKnap\Binary;

/**
* @see Coder\Zlib
* @see Serializer\Php
*/
class Serializer extends Serializer\Serializer
{
protected readonly Coder\CoderInterface $coder;
protected readonly Serializer\SerializerInterface $serializer;

public function __construct()
{
$this->coder = new Coder\Zlib();
$this->serializer = new Serializer\Php();
}

protected function doSerialize(mixed $serializable): string
{
return $this->coder->encode($this->serializer->serialize($serializable));
}

protected function doUnserialize(string $serialized): mixed
{
return $this->serializer->unserialize($this->coder->decode($serialized));
}
}
23 changes: 6 additions & 17 deletions src/Serializer/Igbinary.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,20 @@

namespace PetrKnap\Binary\Serializer;

use PetrKnap\Shorts\Exception\MissingRequirement;
use PetrKnap\Binary\HasRequirementsTrait;
use PetrKnap\Shorts\HasRequirements;

/**
* @link https://www.php.net/manual/en/book.igbinary.php
*/
final class Igbinary extends Serializer implements HasRequirements
{
public function __construct()
{
self::checkRequirements();
}
use HasRequirementsTrait;

public static function checkRequirements(): void
{
$functions = [
'igbinary_serialize',
'igbinary_unserialize',
];
foreach ($functions as $function) {
if (!function_exists($function)) {
throw new MissingRequirement(self::class, 'function', $function);
}
}
}
private const REQUIRED_FUNCTIONS = [
'igbinary_serialize',
'igbinary_unserialize',
];

protected function doSerialize(mixed $serializable): string
{
Expand Down
4 changes: 1 addition & 3 deletions src/Serializer/Php.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,11 @@

namespace PetrKnap\Binary\Serializer;

use Throwable;

/**
* @see serialize()
* @see unserialize()
*/
final class Php extends Serializer implements SerializerInterface
final class Php extends Serializer
{
protected function doSerialize(mixed $serializable): string
{
Expand Down
27 changes: 0 additions & 27 deletions src/Serializer/Zlib.php

This file was deleted.

12 changes: 4 additions & 8 deletions tests/Serializer/ZlibTest.php → tests/SerializerTest.php
Original file line number Diff line number Diff line change
@@ -1,24 +1,20 @@
<?php declare(strict_types=1);

namespace PetrKnap\Binary\Serializer;
namespace PetrKnap\Binary;

use PetrKnap\Binary\Coder;
use PetrKnap\Shorts\Exception\MissingRequirement;

final class ZlibTest extends SerializerTestCase
final class SerializerTest extends Serializer\SerializerTestCase
{
public static function getSerialized(): string
{
return base64_decode('NYtJCoAwEAT/0i8IuCA9R+/6hhFRAiFCJh4k+HdDwGNVV6+cCMv7HNQMHFmMA6Ep6QNROpbXqsbmo6aqPJ205AiXZsjeuCN8zP/aE/EOAbJI+1pOPp6o4AjI+wE=');
}

public static function getSerializer(): SerializerInterface
public static function getSerializer(): Serializer\SerializerInterface
{
try {
return new Zlib(
new Coder\Zlib(),
new Php(),
);
return new Serializer();
} catch (MissingRequirement $reason) {
self::markTestSkipped($reason->getMessage());
}
Expand Down

0 comments on commit b823d61

Please sign in to comment.