Skip to content

Commit f0b0954

Browse files
committed
Added Base64 serialiezr
1 parent 0e82ced commit f0b0954

File tree

3 files changed

+75
-2
lines changed

3 files changed

+75
-2
lines changed

src/core/etl/src/Flow/ETL/ConfigBuilder.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
use Flow\ETL\Monitoring\Memory\Unit;
1212
use Flow\ETL\Pipeline\Optimizer;
1313
use Flow\ETL\Row\Factory\NativeEntryFactory;
14-
use Flow\Serializer\{NativePHPSerializer, Serializer};
14+
use Flow\Serializer\{Base64Serializer, NativePHPSerializer, Serializer};
1515

1616
final class ConfigBuilder
1717
{
@@ -52,7 +52,7 @@ public function build() : Config
5252
{
5353
$this->id ??= \uniqid('flow_php', true);
5454
$entryFactory = new NativeEntryFactory();
55-
$this->serializer ??= new NativePHPSerializer();
55+
$this->serializer ??= new Base64Serializer(new NativePHPSerializer());
5656
$cachePath = \is_string(\getenv(Config::CACHE_DIR_ENV)) && \realpath(\getenv(Config::CACHE_DIR_ENV))
5757
? \getenv(Config::CACHE_DIR_ENV)
5858
: \sys_get_temp_dir() . '/flow_php/cache';
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Flow\Serializer;
6+
7+
final class Base64Serializer implements Serializer
8+
{
9+
public function __construct(private readonly Serializer $serializer)
10+
{
11+
}
12+
13+
public function serialize(object $serializable) : string
14+
{
15+
return \base64_encode($this->serializer->serialize($serializable));
16+
}
17+
18+
public function unserialize(string $serialized, string $class) : object
19+
{
20+
/** @phpstan-ignore-next-line */
21+
return $this->serializer->unserialize(\base64_decode($serialized, true), $class);
22+
}
23+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Flow\Serializer\Tests\Unit;
6+
7+
use function Flow\ETL\DSL\{bool_entry, datetime_entry, float_entry, int_entry, object_entry, row, rows, str_entry, struct_element, struct_entry, struct_type, type_int, type_string};
8+
use Flow\ETL\{Row, Rows};
9+
use Flow\Serializer\{Base64Serializer, NativePHPSerializer};
10+
use PHPUnit\Framework\TestCase;
11+
12+
final class Base64SerializerTest extends TestCase
13+
{
14+
public function test_serializing_rows() : void
15+
{
16+
$rows = rows(
17+
...\array_map(
18+
fn () : Row => row(
19+
int_entry('integer', 1),
20+
str_entry('string', 'string'),
21+
bool_entry('boolean', true),
22+
datetime_entry('datetime', new \DateTimeImmutable('2022-01-01 00:00:00')),
23+
str_entry('null', null),
24+
float_entry('float', 0.12),
25+
object_entry('object', new \ArrayIterator([1, 2, 3])),
26+
struct_entry(
27+
'struct',
28+
['integer' => 1, 'string' => 'string'],
29+
struct_type([
30+
struct_element('integer', type_int()),
31+
struct_element('string', type_string()),
32+
])
33+
)
34+
),
35+
\range(0, 100)
36+
)
37+
);
38+
39+
$serializer = new Base64Serializer(new NativePHPSerializer());
40+
41+
$serialized = $serializer->serialize($rows);
42+
43+
$unserialized = $serializer->unserialize($serialized, Rows::class);
44+
45+
self::assertEquals(
46+
$rows,
47+
$unserialized
48+
);
49+
}
50+
}

0 commit comments

Comments
 (0)