Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
namespace Aws\Api\ErrorParser;
3
 
4
use Aws\Api\Parser\MetadataParserTrait;
5
use Aws\Api\Parser\PayloadParserTrait;
6
use Aws\Api\Service;
7
use Aws\Api\StructureShape;
8
use Aws\CommandInterface;
9
use Psr\Http\Message\ResponseInterface;
10
 
11
abstract class AbstractErrorParser
12
{
13
    use MetadataParserTrait;
14
    use PayloadParserTrait;
15
 
16
    /**
17
     * @var Service
18
     */
19
    protected $api;
20
 
21
    /**
22
     * @param Service $api
23
     */
24
    public function __construct(Service $api = null)
25
    {
26
        $this->api = $api;
27
    }
28
 
29
    abstract protected function payload(
30
        ResponseInterface $response,
31
        StructureShape $member
32
    );
33
 
34
    protected function extractPayload(
35
        StructureShape $member,
36
        ResponseInterface $response
37
    ) {
38
        if ($member instanceof StructureShape) {
39
            // Structure members parse top-level data into a specific key.
40
            return $this->payload($response, $member);
41
        } else {
42
            // Streaming data is just the stream from the response body.
43
            return $response->getBody();
44
        }
45
    }
46
 
47
    protected function populateShape(
48
        array &$data,
49
        ResponseInterface $response,
50
        CommandInterface $command = null
51
    ) {
52
        $data['body'] = [];
53
 
54
        if (!empty($command) && !empty($this->api)) {
55
 
56
            // If modeled error code is indicated, check for known error shape
57
            if (!empty($data['code'])) {
58
 
59
                $errors = $this->api->getOperation($command->getName())->getErrors();
60
                foreach ($errors as $key => $error) {
61
 
62
                    // If error code matches a known error shape, populate the body
63
                    if ($data['code'] == $error['name']
64
                        && $error instanceof StructureShape
65
                    ) {
66
                        $modeledError = $error;
67
                        $data['body'] = $this->extractPayload(
68
                            $modeledError,
69
                            $response
70
                        );
71
                        $data['error_shape'] = $modeledError;
72
 
73
                        foreach ($error->getMembers() as $name => $member) {
74
                            switch ($member['location']) {
75
                                case 'header':
76
                                    $this->extractHeader($name, $member, $response, $data['body']);
77
                                    break;
78
                                case 'headers':
79
                                    $this->extractHeaders($name, $member, $response, $data['body']);
80
                                    break;
81
                                case 'statusCode':
82
                                    $this->extractStatus($name, $response, $data['body']);
83
                                    break;
84
                            }
85
                        }
86
 
87
                        break;
88
                    }
89
                }
90
            }
91
        }
92
 
93
        return $data;
94
    }
95
}