/** * @param array $data * @param string $class * @param string|null $format * @param array $context * @return Item */ public function denormalize($data, $class, $format = null, array $context = array()) { $data = $this->prepareForDenormalization($data); $id = new ItemId((string) $data[self::ID]); $name = new StringLiteral((string) $data[self::NAME]); $icon = new Uri((string) $data[self::ICON]); /* @var Item $item */ $item = new $class($id, $name, $icon); if (isset($data[self::DESCRIPTION])) { $item = $item->withDescription(new StringLiteral((string) $data[self::DESCRIPTION])); } if (isset($data[self::VALUE])) { $item = $item->withValue(new Integer((int) $data[self::VALUE])); } if (isset($data[self::STACK_COUNT])) { $item = $item->withStackCount(new Integer((int) $data[self::STACK_COUNT])); } if (!empty($data[self::BINDING_TYPE])) { $item = $item->withBindingType(BindingType::fromNative((string) $data[self::BINDING_TYPE])); } if (isset($data[self::MINIMUM_LEVEL])) { $item = $item->withMinimumLevel(new Integer((int) $data[self::MINIMUM_LEVEL])); } if (isset($data[self::DURABILITY])) { $item = $item->withDurability(new Integer((int) $data[self::DURABILITY])); } if (!empty($data[self::STATS])) { if (!$this->serializer instanceof DenormalizerInterface) { throw new \LogicException('Cannot denormalize attribute "Stats" because injected serializer is not a denormalizer.'); } /* @var Stats $stats */ $stats = $this->serializer->denormalize($data[self::STATS], Stats::class, $format, $context); $item = $item->withStats($stats); } $modifications = new ModificationCollection(); if (!empty($data[self::MODS])) { if (!$this->serializer instanceof DenormalizerInterface) { throw new \LogicException('Cannot denormalize attribute "Mods" because injected serializer is not a denormalizer.'); } foreach ($data[self::MODS] as $key => $modification) { $modification = $this->serializer->denormalize($modification, Modification::class, $format, $context); $modifications = $modifications->withKey($key, $modification); } } if ($modifications->length() > 0) { $item = $item->withModifications($modifications); } return $item; }