/** * Unserialise a plan * * @param array $serialisedPlan Decoded json data * @return LibraryRelease[] * @throws Exception */ protected function unserialisePlan($serialisedPlan) { $releases = []; foreach ($serialisedPlan as $name => $data) { // Unserialise this node $library = $this->getLibrary($name); if (!$library) { throw new Exception("Missing library {$name}"); } $version = new Version($data['Version']); $libraryRelease = new LibraryRelease($library, $version); // Restore cached changelog if (!empty($data['Changelog'])) { $libraryRelease->setChangelog($data['Changelog']); } // Merge with unserialised children if (!empty($data['Items'])) { $libraryRelease->addItems($this->unserialisePlan($data['Items'])); } $releases[$name] = $libraryRelease; } return $releases; }