private function format(Shape $shape, $value) { switch ($shape['type']) { case 'structure': $data = []; foreach ($value as $k => $v) { if ($v !== null && $shape->hasMember($k)) { $data[$shape['locationName'] ?: $k] = $this->format($shape->getMember($k), $v); } } return $data; case 'list': $items = $shape->getMember(); foreach ($value as &$v) { $data[] = $this->format($items, $v); } return $value; case 'map': $values = $shape->getValue(); foreach ($value as &$v) { $v = $this->format($values, $v); } return $value; case 'blob': return base64_encode($value); default: return $value; } }
public function parse(Shape $shape, $value) { switch ($shape['type']) { case 'structure': $target = []; foreach ($shape->getMembers() as $name => $member) { $name = $member['locationName'] ?: $name; if (isset($value[$name])) { $target[$name] = $this->parse($member, $value[$name]); } else { $target[$name] = null; // don't ignore null response values } } return $target; case 'list': $member = $shape->getMember(); $target = []; foreach ($value as $v) { $target[] = $this->parse($member, $v); } return $target; case 'map': $values = $shape->getValue(); $target = []; foreach ($value as $k => $v) { $target[$k] = $this->parse($values, $v); } return $target; case 'blob': return base64_decode($value); default: return $value; } }
private function applyPayload(RequestInterface $request, Shape $input, $name, array $args) { if (!isset($args[$name])) { return; } $m = $input->getMember($name); if ($m['streaming'] || ($m['type'] == 'string' || $m['type'] == 'blob')) { // Streaming bodies or payloads that are strings are // always just a stream of data. $request->setBody(Stream::factory($args[$name])); } else { $this->payload($request, $m, $args[$name]); } }