for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace JMS\Serializer\Exclusion;
use JMS\Serializer\Context;
use JMS\Serializer\Metadata\ClassMetadata;
use JMS\Serializer\Metadata\PropertyMetadata;
/**
* @author Adrien Brault <[email protected]>
*/
final class DepthExclusionStrategy implements ExclusionStrategyInterface
{
public function shouldSkipClass(ClassMetadata $metadata, Context $context): bool
return $this->isTooDeep($context);
}
public function shouldSkipProperty(PropertyMetadata $property, Context $context): bool
private function isTooDeep(Context $context): bool
$relativeDepth = 0;
foreach ($context->getMetadataStack() as $metadata) {
if (!$metadata instanceof PropertyMetadata) {
continue;
$relativeDepth++;
if (0 === $metadata->maxDepth && $context->getMetadataStack()->top() === $metadata) {
if (null !== $metadata->maxDepth && $relativeDepth > $metadata->maxDepth) {
return true;
return false;