@@ -272,25 +272,28 @@ private function splitOptionalArgs(array $input, array $extraAllowedKeys = []):
272272 * the CallOptions classname. Parameters are split and returned in the order
273273 * that the options types are provided.
274274 */
275- private function validateOptions (array $ options , array |string ...$ optionTypes ): array
275+ private function validateOptions (array $ options , array |Message | string ...$ optionTypes ): array
276276 {
277277 $ splitOptions = [];
278278 foreach ($ optionTypes as $ optionType ) {
279279 if (is_array ($ optionType )) {
280280 $ splitOptions [] = $ this ->pluckArray ($ optionType , $ options );
281- } elseif (is_string ($ optionType )) {
282- if (is_subclass_of ($ optionType , Message::class)) {
281+ } else {
282+ if ($ optionType === CallOptions::class) {
283+ $ callOptionKeys = array_keys ((new CallOptions ([]))->toArray ());
284+ $ splitOptions [] = $ this ->pluckArray ($ callOptionKeys , $ options );
285+ } else {
283286 $ messageKeys = array_map (
284287 fn ($ method ) => lcfirst (substr ($ method , 3 )),
285288 array_filter (
286289 get_class_methods ($ optionType ),
287290 fn ($ m ) => 0 === strpos ($ m , 'get ' )
288291 )
289292 );
290- $ splitOptions [] = $ this ->pluckArray ($ messageKeys , $ options );
291- } elseif ( $ optionType === CallOptions::class) {
292- $ callOptionKeys = array_keys (( new CallOptions ([]))-> toArray ());
293- $ splitOptions [] = $ this -> pluckArray ( $ callOptionKeys , $ options ) ;
293+ $ messageOptions = $ this ->pluckArray ($ messageKeys , $ options );
294+ $ splitOptions [] = $ optionType instanceof Message
295+ ? $ this -> serializer -> decodeMessage ( $ optionType , $ messageOptions )
296+ : $ messageOptions ;
294297 }
295298 }
296299 }
0 commit comments