Skip to content

Commit 9ce166e

Browse files
authored
[opentelemetry-auto-laravel] fix: serialization error when calls internal Redis::Pipeline command (#331)
* fix: add ability to escape error, when serialized parameter is closure or callable function * tests: add pipeline serialization test case
1 parent c5cef98 commit 9ce166e

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

src/Watchers/RedisCommand/Serializer.php

+11-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,17 @@ public static function serializeCommand(string $command, array $params): string
7070
}
7171

7272
// In some cases (for example when using LUA scripts) arrays are valid parameters
73-
$paramsToSerialize = array_map(function ($param) { return is_array($param) ? json_encode($param) : $param; }, $paramsToSerialize);
73+
// In additional cases, Closure are also valid parameters (Pipeline command)
74+
$paramsToSerialize = array_map(
75+
static function ($param) {
76+
return match (true) {
77+
is_array($param) => json_encode($param),
78+
is_callable($param) => 'Callable',
79+
default => $param,
80+
};
81+
},
82+
$paramsToSerialize
83+
);
7484

7585
return $command . ' ' . implode(' ', $paramsToSerialize);
7686
}

tests/Unit/Watches/RedisCommand/SerializerTest.php

+2
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,7 @@ public function serializeCases(): iterable
3434

3535
// Parameters of array type
3636
yield ['EVAL', ['param1', 'param2', ['arg1', 'arg2']], 'EVAL param1 param2 ["arg1","arg2"]'];
37+
38+
yield ['pipeline', [function () {}], 'pipeline Callable'];
3739
}
3840
}

0 commit comments

Comments
 (0)