vendor/symfony/serializer/Debug/TraceableSerializer.php line 44

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Component\Serializer\Debug;
  11. use Symfony\Component\Serializer\DataCollector\SerializerDataCollector;
  12. use Symfony\Component\Serializer\Encoder\DecoderInterface;
  13. use Symfony\Component\Serializer\Encoder\EncoderInterface;
  14. use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
  15. use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
  16. use Symfony\Component\Serializer\SerializerInterface;
  17. /**
  18.  * Collects some data about serialization.
  19.  *
  20.  * @author Mathias Arlaud <mathias.arlaud@gmail.com>
  21.  *
  22.  * @internal
  23.  */
  24. class TraceableSerializer implements SerializerInterfaceNormalizerInterfaceDenormalizerInterfaceEncoderInterfaceDecoderInterface
  25. {
  26.     public const DEBUG_TRACE_ID 'debug_trace_id';
  27.     /**
  28.      * @param SerializerInterface&NormalizerInterface&DenormalizerInterface&EncoderInterface&DecoderInterface $serializer
  29.      */
  30.     public function __construct(
  31.         private SerializerInterface $serializer,
  32.         private SerializerDataCollector $dataCollector,
  33.     ) {
  34.     }
  35.     /**
  36.      * {@inheritdoc}
  37.      */
  38.     public function serialize(mixed $datastring $format, array $context = []): string
  39.     {
  40.         $context[self::DEBUG_TRACE_ID] = $traceId uniqid();
  41.         $startTime microtime(true);
  42.         $result $this->serializer->serialize($data$format$context);
  43.         $time microtime(true) - $startTime;
  44.         $this->dataCollector->collectSerialize($traceId$data$format$context$time);
  45.         return $result;
  46.     }
  47.     /**
  48.      * {@inheritdoc}
  49.      */
  50.     public function deserialize(mixed $datastring $typestring $format, array $context = []): mixed
  51.     {
  52.         $context[self::DEBUG_TRACE_ID] = $traceId uniqid();
  53.         $startTime microtime(true);
  54.         $result $this->serializer->deserialize($data$type$format$context);
  55.         $time microtime(true) - $startTime;
  56.         $this->dataCollector->collectDeserialize($traceId$data$type$format$context$time);
  57.         return $result;
  58.     }
  59.     /**
  60.      * {@inheritdoc}
  61.      */
  62.     public function normalize(mixed $objectstring $format null, array $context = []): array|string|int|float|bool|\ArrayObject|null
  63.     {
  64.         $context[self::DEBUG_TRACE_ID] = $traceId uniqid();
  65.         $startTime microtime(true);
  66.         $result $this->serializer->normalize($object$format$context);
  67.         $time microtime(true) - $startTime;
  68.         $this->dataCollector->collectNormalize($traceId$object$format$context$time);
  69.         return $result;
  70.     }
  71.     /**
  72.      * {@inheritdoc}
  73.      */
  74.     public function denormalize(mixed $datastring $typestring $format null, array $context = []): mixed
  75.     {
  76.         $context[self::DEBUG_TRACE_ID] = $traceId uniqid();
  77.         $startTime microtime(true);
  78.         $result $this->serializer->denormalize($data$type$format$context);
  79.         $time microtime(true) - $startTime;
  80.         $this->dataCollector->collectDenormalize($traceId$data$type$format$context$time);
  81.         return $result;
  82.     }
  83.     /**
  84.      * {@inheritdoc}
  85.      */
  86.     public function encode(mixed $datastring $format, array $context = []): string
  87.     {
  88.         $context[self::DEBUG_TRACE_ID] = $traceId uniqid();
  89.         $startTime microtime(true);
  90.         $result $this->serializer->encode($data$format$context);
  91.         $time microtime(true) - $startTime;
  92.         $this->dataCollector->collectEncode($traceId$data$format$context$time);
  93.         return $result;
  94.     }
  95.     /**
  96.      * {@inheritdoc}
  97.      */
  98.     public function decode(string $datastring $format, array $context = []): mixed
  99.     {
  100.         $context[self::DEBUG_TRACE_ID] = $traceId uniqid();
  101.         $startTime microtime(true);
  102.         $result $this->serializer->decode($data$format$context);
  103.         $time microtime(true) - $startTime;
  104.         $this->dataCollector->collectDecode($traceId$data$format$context$time);
  105.         return $result;
  106.     }
  107.     /**
  108.      * {@inheritdoc}
  109.      */
  110.     public function supportsNormalization(mixed $datastring $format null, array $context = []): bool
  111.     {
  112.         return $this->serializer->supportsNormalization($data$format$context);
  113.     }
  114.     /**
  115.      * {@inheritdoc}
  116.      */
  117.     public function supportsDenormalization(mixed $datastring $typestring $format null, array $context = []): bool
  118.     {
  119.         return $this->serializer->supportsDenormalization($data$type$format$context);
  120.     }
  121.     /**
  122.      * {@inheritdoc}
  123.      */
  124.     public function supportsEncoding(string $format, array $context = []): bool
  125.     {
  126.         return $this->serializer->supportsEncoding($format$context);
  127.     }
  128.     /**
  129.      * {@inheritdoc}
  130.      */
  131.     public function supportsDecoding(string $format, array $context = []): bool
  132.     {
  133.         return $this->serializer->supportsDecoding($format$context);
  134.     }
  135.     /**
  136.      * Proxies all method calls to the original serializer.
  137.      */
  138.     public function __call(string $method, array $arguments): mixed
  139.     {
  140.         return $this->serializer->{$method}(...$arguments);
  141.     }
  142. }