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; } }
/** * Extract a single header from the response into the result. */ private function extractHeader($name, Shape $shape, ResponseInterface $response, &$result) { $value = $response->getHeaderLine($shape['locationName'] ?: $name); switch ($shape->getType()) { case 'float': case 'double': $value = (double) $value; break; case 'long': $value = (int) $value; break; case 'boolean': $value = filter_var($value, FILTER_VALIDATE_BOOLEAN); break; case 'blob': $value = base64_decode($value); break; case 'timestamp': try { $value = new DateTimeResult($value); break; } catch (\Exception $e) { // If the value cannot be parsed, then do not add it to the // output structure. return; } } $result[$name] = $value; }
private function dispatch(Shape $shape, $value) { static $methods = ['structure' => 'check_structure', 'list' => 'check_list', 'map' => 'check_map', 'blob' => 'check_blob', 'boolean' => 'check_boolean', 'integer' => 'check_numeric', 'float' => 'check_numeric', 'long' => 'check_numeric', 'string' => 'check_string', 'byte' => 'check_string', 'char' => 'check_string']; $type = $shape->getType(); if (isset($methods[$type])) { $this->{$methods[$type]}($shape, $value); } }
private function memberKey(Shape $shape, $name) { if (null !== $shape['locationName']) { return $shape['locationName']; } if ($shape instanceof ListShape && $shape['flattened']) { return $shape->getMember()['locationName'] ?: $name; } return $name; }
public function parse(Shape $shape, $value) { if ($value === null) { return $value; } switch ($shape['type']) { case 'structure': $target = []; foreach ($shape->getMembers() as $name => $member) { $locationName = $member['locationName'] ?: $name; if (isset($value[$locationName])) { $target[$name] = $this->parse($member, $value[$locationName]); } } 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 'timestamp': // The Unix epoch (or Unix time or POSIX time or Unix // timestamp) is the number of seconds that have elapsed since // January 1, 1970 (midnight UTC/GMT). return DateTimeResult::fromEpoch($value); case 'blob': return base64_decode($value); default: return $value; } }
private function applyQuery($name, Shape $member, $value, array &$opts) { if ($member instanceof MapShape) { $opts['query'] = isset($opts['query']) && is_array($opts['query']) ? $opts['query'] + $value : $value; } elseif ($value !== null) { if ($member->getType() === 'boolean') { $value = $value ? 'true' : 'false'; } $opts['query'][$member['locationName'] ?: $name] = $value; } }