PHP Classes

File: application/modules/extensions/aws/Aws/Api/Serializer/JsonBody.php

Recommend this page to a friend!
  Classes of Tran Tuan   Pretty PHP S3 Files Manager   application/modules/extensions/aws/Aws/Api/Serializer/JsonBody.php   Download  
File: application/modules/extensions/aws/Aws/Api/Serializer/JsonBody.php
Role: Application script
Content type: text/plain
Description: Application script
Class: Pretty PHP S3 Files Manager
Web based interface to manage files in Amazon S3
Author: By
Last change:
Date: 8 years ago
Size: 2,330 bytes
 

Contents

Class file image Download
<?php
namespace Aws\Api\Serializer;

use
Aws\Api\Service;
use
Aws\Api\Shape;
use
Aws\Api\TimestampShape;

/**
 * Formats the JSON body of a JSON-REST or JSON-RPC operation.
 * @internal
 */
class JsonBody
{
    private
$api;

    public function
__construct(Service $api)
    {
       
$this->api = $api;
    }

   
/**
     * Gets the JSON Content-Type header for a service API
     *
     * @param Service $service
     *
     * @return string
     */
   
public static function getContentType(Service $service)
    {
        return
'application/x-amz-json-'
           
. number_format($service->getMetadata('jsonVersion'), 1);
    }

   
/**
     * Builds the JSON body based on an array of arguments.
     *
     * @param Shape $shape Operation being constructed
     * @param array $args Associative array of arguments
     *
     * @return string
     */
   
public function build(Shape $shape, array $args)
    {
       
$result = json_encode($this->format($shape, $args));

        return
$result == '[]' ? '{}' : $result;
    }

    private function
format(Shape $shape, $value)
    {
        switch (
$shape['type']) {
            case
'structure':
               
$data = [];
                foreach (
$value as $k => $v) {
                    if (
$v !== null && $shape->hasMember($k)) {
                       
$valueShape = $shape->getMember($k);
                       
$data[$valueShape['locationName'] ?: $k]
                            =
$this->format($valueShape, $v);
                    }
                }
                return
$data;

            case
'list':
               
$items = $shape->getMember();
                foreach (
$value as &$v) {
                   
$v = $this->format($items, $v);
                }
                return
$value;

            case
'map':
                if (empty(
$value)) {
                    return new \
stdClass;
                }
               
$values = $shape->getValue();
                foreach (
$value as &$v) {
                   
$v = $this->format($values, $v);
                }
                return
$value;

            case
'blob':
                return
base64_encode($value);

            case
'timestamp':
                return
TimestampShape::format($value, 'unixTimestamp');

            default:
                return
$value;
        }
    }
}