Skip to content
This repository has been archived by the owner on Sep 4, 2024. It is now read-only.

Commit

Permalink
Updated serialization handlers
Browse files Browse the repository at this point in the history
  • Loading branch information
Ivan Wolf committed Jul 6, 2018
1 parent 03c57b9 commit ba80399
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 258 deletions.
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
The MIT License (MIT)

Copyright (c) 2014 DETAIL NET
Copyright (c) 2018 DETAIL NET

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
22 changes: 12 additions & 10 deletions src/JMSSerializer/Handler/ArrayCollectionHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,34 +7,36 @@

class ArrayCollectionHandler extends BaseArrayCollectionHandler
{
/**
* @return array
*/
public static function getSubscribingMethods()
{
// $methods = parent::getSubscribingMethods();
$methods = array();
$formats = array('php');
$collectionTypes = array(
$methods = parent::getSubscribingMethods();
$formats = ['php'];
$types = [
'ArrayCollection',
'Doctrine\Common\Collections\ArrayCollection',
'Doctrine\ORM\PersistentCollection',
'Doctrine\ODM\MongoDB\PersistentCollection',
'Doctrine\ODM\PHPCR\PersistentCollection',
);
];

foreach ($collectionTypes as $type) {
foreach ($types as $type) {
foreach ($formats as $format) {
$methods[] = array(
$methods[] = [
'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
'type' => $type,
'format' => $format,
'method' => 'serializeCollection',
);
];

$methods[] = array(
$methods[] = [
'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,
'type' => $type,
'format' => $format,
'method' => 'deserializeCollection',
);
];
}
}

Expand Down
94 changes: 64 additions & 30 deletions src/JMSSerializer/Handler/DateHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,52 +2,86 @@

namespace Detail\Normalization\JMSSerializer\Handler;

use DateInterval;
use DateTime;
use DateTimeZone;
use DateTimeImmutable;

use JMS\Serializer\AbstractVisitor;
use JMS\Serializer\GraphNavigator;
use JMS\Serializer\Handler\DateHandler as BaseDateHandler;
use JMS\Serializer\JsonDeserializationVisitor;

use Detail\Normalization\JMSSerializer\PhpDeserializationVisitor;

class DateHandler extends BaseDateHandler
{
use DatePhpDeserializationTrait;

/**
* @param string $defaultFormat
* @param string $defaultTimezone
*/
public function __construct($defaultFormat = DateTime::ISO8601, $defaultTimezone = 'UTC')
{
$this->format = $defaultFormat;
$this->timezone = new DateTimeZone($defaultTimezone);

parent::__construct($defaultFormat, $defaultTimezone);
}

/**
* @return array
*/
public static function getSubscribingMethods()
{
$methods = array();
$methods = parent::getSubscribingMethods();
$formats = ['php'];
$types = ['DateTime', 'DateTimeImmutable', 'DateInterval'];

// Subscribe deserialization of 'DateTime' for 'php' format
$methods[] = array(
'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,
'type' => 'DateTime',
'format' => 'php',
);
foreach ($types as $type) {
foreach ($formats as $format) {
$methods[] = [
'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,
'type' => $type,
'format' => $format,
];

// Subscribe serialization of 'DateTime' and 'DateInterval' for 'php' format
foreach (array('DateTime', 'DateInterval') as $type) {
$methods[] = array(
'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
'type' => $type,
'format' => 'php',
'method' => 'serialize' . $type,
);
$methods[] = [
'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
'type' => $type,
'format' => $format,
'method' => 'serialize' . ucfirst($type),
];
}
}

return $methods;
}

public function deserializeDateTimeFromPhp(
PhpDeserializationVisitor $visitor,
?string $data,
array $type
): ?DateTime {
return $this->deserializeDateTimeFromJson(
$this->createJsonDeserializationVisitor($visitor),
$data,
$type
);
}

public function deserializeDateTimeImmutableFromPhp(
PhpDeserializationVisitor $visitor,
?string $data,
array $type
): ?DateTimeImmutable {
return $this->deserializeDateTimeImmutableFromJson(
$this->createJsonDeserializationVisitor($visitor),
$data,
$type
);
}

public function deserializeDateIntervalFromPhp(
PhpDeserializationVisitor $visitor,
?string $data,
array $type
): ?DateInterval {
return $this->deserializeDateIntervalFromJson(
$this->createJsonDeserializationVisitor($visitor),
$data,
$type
);
}

private function createJsonDeserializationVisitor(AbstractVisitor $visitor): JsonDeserializationVisitor
{
return new JsonDeserializationVisitor($visitor->getNamingStrategy());
}
}
145 changes: 0 additions & 145 deletions src/JMSSerializer/Handler/DateImmutableHandler.php

This file was deleted.

62 changes: 0 additions & 62 deletions src/JMSSerializer/Handler/DatePhpDeserializationTrait.php

This file was deleted.

Loading

0 comments on commit ba80399

Please sign in to comment.