/**
  * @param array $value
  *
  * @return array
  */
 protected function serialization(array &$value)
 {
     $data = [self::DATA_KEY => \array_merge(PropertyHelper::setResponseDataTypeAndId($this->mappings, $value), DataAttributesHelper::setResponseDataAttributes($this->mappings, $value), DataLinksHelper::setResponseDataLinks($this->mappings, $value), DataLinksHelper::setResponseDataRelationship($this->mappings, $value, $value))];
     DataIncludedHelper::setResponseDataIncluded($this->mappings, $value, $data);
     $this->setResponseLinks($value, $data);
     $this->setResponseMeta($data);
     $this->setResponseVersion($data);
     return $data;
 }
 /**
  * @param \NilPortugues\Api\Mapping\Mapping[] $mappings
  * @param array                               $data
  * @param array                               $attributes
  * @param array                               $value
  */
 protected static function addToIncludedArray(array &$mappings, array &$data, array &$attributes, array &$value)
 {
     if (\count($attributes) > 0) {
         $includedData = PropertyHelper::setResponseDataTypeAndId($mappings, $value);
         if (self::hasIdKey($includedData)) {
             $arrayData = \array_merge([JsonApiTransformer::TYPE_KEY => $includedData[JsonApiTransformer::TYPE_KEY], JsonApiTransformer::ID_KEY => $includedData[JsonApiTransformer::ID_KEY], JsonApiTransformer::ATTRIBUTES_KEY => $attributes, JsonApiTransformer::RELATIONSHIPS_KEY => []], DataLinksHelper::setResponseDataLinks($mappings, $value));
             $relationshipData = [];
             self::addRelationshipsToIncludedResources($mappings, $relationshipData, $value, $value[Serializer::CLASS_IDENTIFIER_KEY], $attributes);
             if ($relationshipData) {
                 $arrayData[JsonApiTransformer::RELATIONSHIPS_KEY] = \array_merge($arrayData[JsonApiTransformer::RELATIONSHIPS_KEY], $relationshipData);
             }
             $data[JsonApiTransformer::INCLUDED_KEY][] = \array_filter($arrayData);
         }
     }
     if (!empty($data[JsonApiTransformer::INCLUDED_KEY])) {
         $data[JsonApiTransformer::INCLUDED_KEY] = \array_values(\array_unique($data[JsonApiTransformer::INCLUDED_KEY], SORT_REGULAR));
     }
 }
 /**
  * @param array $value
  * @param array $data
  */
 protected function setResponseLinks(array $value, array &$data)
 {
     $data[self::LINKS_KEY] = \array_filter(\array_merge($this->addHrefToLinks($this->buildLinks()), !empty($data[self::LINKS_KEY]) ? $data[self::LINKS_KEY] : []));
     if (!empty($value[Serializer::CLASS_IDENTIFIER_KEY])) {
         $type = $value[Serializer::CLASS_IDENTIFIER_KEY];
         if (\is_scalar($type) && !empty($this->mappings[$type])) {
             $urls = $this->mappings[$type]->getUrls();
             $data[self::LINKS_KEY] = \array_filter(\array_merge(empty($data[self::LINKS_KEY]) ? [] : $data[self::LINKS_KEY], !empty($urls) ? $this->addHrefToLinks($this->getResponseAdditionalLinks($value, $type)) : []));
             /*
              * Adds the _links:self:href link to the response.
              */
             list($idValues, $idProperties) = RecursiveFormatterHelper::getIdPropertyAndValues($this->mappings, $value, $type);
             $href = DataLinksHelper::buildUrl($this->mappings, $idProperties, $idValues, $this->mappings[$type]->getResourceUrl(), $type);
             if ($href != $this->mappings[$type]->getResourceUrl()) {
                 $data[self::LINKS_KEY][self::SELF_LINK][self::LINKS_HREF] = $href;
             }
         }
     }
     if (empty($data[self::LINKS_KEY])) {
         unset($data[self::LINKS_KEY]);
     }
 }