* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ namespace JMS\Serializer\Tests\Fixtures; use JMS\Serializer\Construction\ObjectConstructorInterface; use JMS\Serializer\DeserializationContext; use JMS\Serializer\Metadata\ClassMetadata; use JMS\Serializer\VisitorInterface; /** * Object constructor that allows deserialization into already constructed * objects passed through the deserialization context */ class InitializedObjectConstructor implements ObjectConstructorInterface { private $fallbackConstructor; /** * Constructor. * * @param ObjectConstructorInterface $fallbackConstructor Fallback object constructor */ public function __construct(ObjectConstructorInterface $fallbackConstructor) { $this->fallbackConstructor = $fallbackConstructor; } /** * {@inheritdoc} */ public function construct(VisitorInterface $visitor, ClassMetadata $metadata, $data, array $type, DeserializationContext $context) { if ($context->attributes->containsKey('target') && $context->getDepth() === 1) { return $context->attributes->get('target')->get(); } return $this->fallbackConstructor->construct($visitor, $metadata, $data, $type, $context); } }