/** * @return Shape */ public function getKey() { if (!$this->key) { $this->key = isset($this->definition['key']) ? Shape::create($this->definition['key'], $this->shapeMap) : new Shape(['type' => 'string'], $this->shapeMap); } return $this->key; }
/** * @return Shape * * @throws \RuntimeException if no member is specified */ public function getMember() { if (!$this->member) { if (!isset($this->definition['member'])) { throw new \RuntimeException('No member attribute specified'); } $this->member = Shape::create($this->definition['member'], $this->shapeMap); } return $this->member; }
/** * Resolve a shape reference * * @param array $shapeRef Shape reference shape * * @return Shape * @throws \InvalidArgumentException */ public function resolve(array $shapeRef) { $shape = $shapeRef['shape']; if (!isset($this->definitions[$shape])) { throw new \InvalidArgumentException('Shape not found: ' . $shape); } $isSimple = count($shapeRef) == 1; if ($isSimple && isset($this->simple[$shape])) { return $this->simple[$shape]; } $definition = $shapeRef + $this->definitions[$shape]; $definition['name'] = $definition['shape']; unset($definition['shape']); $result = Shape::create($definition, $this); if ($isSimple) { $this->simple[$shape] = $result; } return $result; }
protected function shapeFor(array $definition) { return isset($definition['shape']) ? $this->shapeMap->resolve($definition) : Shape::create($definition, $this->shapeMap); }