public static function serializeOptions(Operation $operation, array $userValues = [])
 {
     $options = ['headers' => []];
     $jsonSerializer = new JsonSerializer();
     foreach ($userValues as $paramName => $paramValue) {
         if (null === ($schema = $operation->getParam($paramName))) {
             continue;
         }
         switch ($schema->getLocation()) {
             case 'query':
                 $options['query'][$schema->getName()] = $paramValue;
                 break;
             case 'header':
                 $options['headers'] += self::parseHeader($schema, $paramName, $paramValue);
                 break;
             case 'json':
                 $json = isset($options['json']) ? $options['json'] : [];
                 $options['json'] = $jsonSerializer->stockJson($schema, $paramValue, $json);
                 break;
             case 'raw':
                 $options['body'] = $paramValue;
                 break;
         }
     }
     if (!empty($options['json']) && ($key = $operation->getJsonKey())) {
         $options['json'] = [$key => $options['json']];
     }
     return $options;
 }
 public function serializeOptions(Operation $operation, array $userValues = []) : array
 {
     $options = ['headers' => []];
     foreach ($userValues as $paramName => $paramValue) {
         if (null === ($schema = $operation->getParam($paramName))) {
             continue;
         }
         $this->callStockingMethod($schema, $paramValue, $options);
     }
     if (!empty($options['json'])) {
         if ($key = $operation->getJsonKey()) {
             $options['json'] = [$key => $options['json']];
         }
         if (strpos(json_encode($options['json']), '\\/') !== false) {
             $options['body'] = json_encode($options['json'], JSON_UNESCAPED_SLASHES);
             $options['headers']['Content-Type'] = 'application/json';
             unset($options['json']);
         }
     }
     return $options;
 }