/** * @param string $eventClassName * @param string $serialization * @return Event * @throws EventSourcingException when failed to deserialize */ public function deserialize($eventClassName, $serialization) { Assert::argumentNotEmpty($eventClassName, 'Event class name is required'); Assert::argumentClassExists($eventClassName, 'Event class does not exist: %class%'); Assert::argumentSubclassOf($eventClassName, 'Goodby\\EventSourcing\\Event', 'Event class must be subclass of %parent%'); $data = json_decode($serialization, true); if (json_last_error() != JSON_ERROR_NONE) { throw EventSourcingException::failedToDeserializeEvent($this->getLastErrorMessage()); } /** @var $eventClassName Event */ return $eventClassName::fromContractualData($data); }