<?php 
namespace Aws\Api\Serializer; 
 
use Aws\Api\Service; 
use Aws\Api\StructureShape; 
 
/** 
 * Serializes requests for the REST-JSON protocol. 
 * @internal 
 */ 
class RestJsonSerializer extends RestSerializer 
{ 
    /** @var JsonBody */ 
    private $jsonFormatter; 
 
    /** @var string */ 
    private $contentType; 
 
    /** 
     * @param Service  $api           Service API description 
     * @param string   $endpoint      Endpoint to connect to 
     * @param JsonBody $jsonFormatter Optional JSON formatter to use 
     */ 
    public function __construct( 
        Service $api, 
        $endpoint, 
        JsonBody $jsonFormatter = null 
    ) { 
        parent::__construct($api, $endpoint); 
        $this->contentType = JsonBody::getContentType($api); 
        $this->jsonFormatter = $jsonFormatter ?: new JsonBody($api); 
    } 
 
    protected function payload(StructureShape $member, array $value, array &$opts) 
    { 
        $opts['headers']['Content-Type'] = $this->contentType; 
        $opts['body'] = (string) $this->jsonFormatter->build($member, $value); 
    } 
} 
 
 |