File tree Expand file tree Collapse file tree 2 files changed +51
-1
lines changed Expand file tree Collapse file tree 2 files changed +51
-1
lines changed Original file line number Diff line number Diff line change 16
16
use Interop \Queue \Queue ;
17
17
use Interop \Queue \SubscriptionConsumer ;
18
18
use Interop \Queue \Topic ;
19
+ use InvalidArgumentException ;
19
20
use RdKafka \Conf ;
20
21
use RdKafka \KafkaConsumer ;
21
22
use RdKafka \Producer as VendorProducer ;
@@ -54,8 +55,35 @@ public function __construct(array $config)
54
55
$ this ->config = $ config ;
55
56
$ this ->kafkaConsumers = [];
56
57
$ this ->rdKafkaConsumers = [];
58
+ $ this ->configureSerializer ($ config );
59
+ }
60
+
61
+ /**
62
+ * @param array $config
63
+ * @return void
64
+ */
65
+ private function configureSerializer (array $ config ): void
66
+ {
67
+ if (!isset ($ config ['serializer ' ])) {
68
+ $ this ->setSerializer (new JsonSerializer ());
69
+ return ;
70
+ }
57
71
58
- $ this ->setSerializer (new JsonSerializer ());
72
+ if (is_string ($ config ['serializer ' ])) {
73
+ $ this ->setSerializer (new $ config ['serializer ' ]());
74
+ } elseif (is_array ($ config ['serializer ' ]) && isset ($ config ['serializer ' ]['class ' ])) {
75
+ $ serializerClass = $ config ['serializer ' ]['class ' ];
76
+ $ serializerOptions = $ config ['serializer ' ]['options ' ] ?? [];
77
+ if (!empty ($ serializerOptions )) {
78
+ $ this ->setSerializer (new $ serializerClass ($ serializerOptions ));
79
+ } else {
80
+ $ this ->setSerializer (new $ serializerClass ());
81
+ }
82
+ } elseif ($ config ['serializer ' ] instanceof Serializer) {
83
+ $ this ->setSerializer ($ config ['serializer ' ]);
84
+ } else {
85
+ throw new InvalidArgumentException ('Invalid serializer configuration ' );
86
+ }
59
87
}
60
88
61
89
/**
Original file line number Diff line number Diff line change 8
8
use Enqueue \RdKafka \Serializer ;
9
9
use Interop \Queue \Exception \InvalidDestinationException ;
10
10
use Interop \Queue \Exception \TemporaryQueueNotSupportedException ;
11
+ use InvalidArgumentException ;
11
12
use PHPUnit \Framework \TestCase ;
12
13
13
14
class RdKafkaContextTest extends TestCase
@@ -36,6 +37,27 @@ public function testShouldSetJsonSerializerInConstructor()
36
37
$ this ->assertInstanceOf (JsonSerializer::class, $ context ->getSerializer ());
37
38
}
38
39
40
+ public function testShouldUseStringSerializerClassFromConfig ()
41
+ {
42
+ $ mockSerializerClass = get_class ($ this ->createMock (Serializer::class));
43
+
44
+ $ context = new RdKafkaContext ([
45
+ 'serializer ' => $ mockSerializerClass
46
+ ]);
47
+
48
+ $ this ->assertInstanceOf ($ mockSerializerClass , $ context ->getSerializer ());
49
+ }
50
+
51
+ public function testShouldThrowExceptionOnInvalidSerializerConfig ()
52
+ {
53
+ $ this ->expectException (InvalidArgumentException::class);
54
+ $ this ->expectExceptionMessage ('Invalid serializer configuration ' );
55
+
56
+ new RdKafkaContext ([
57
+ 'serializer ' => 123
58
+ ]);
59
+ }
60
+
39
61
public function testShouldAllowGetPreviouslySetSerializer ()
40
62
{
41
63
$ context = new RdKafkaContext ([]);
You can’t perform that action at this time.
0 commit comments