public merge ( Joli\Jane\Model\JsonSchema $left, Joli\Jane\Model\JsonSchema $right ) : Joli\Jane\Model\JsonSchema | ||
$left | Joli\Jane\Model\JsonSchema | |
$right | Joli\Jane\Model\JsonSchema | |
return | Joli\Jane\Model\JsonSchema |
public function merge(JsonSchema $left, JsonSchema $right)
{
$merged = clone $right;
if ($left->getType() !== null && $right->getType() !== null && $left->getType() !== $right->getType()) {
throw new \RuntimeException("Both types are defined and different, merge is not possible");
}
if ($right->getType() === null && $left->getType() !== null) {
$merged->setType($left->getType());
}
$merged->setProperties($this->arrayMerge($left->getProperties(), $right->getProperties()));
$merged->setRequired($this->arrayUnique($this->arrayMerge($left->getRequired(), $right->getRequired())));
return $merged;
}
/** * {@inheritDoc} */ public function guessClass($object, $name) { $classes = []; foreach ($object->getOneOf() as $oneOf) { $oneOfName = $name . 'Sub'; $oneOfResolved = $oneOf; if ($oneOf instanceof Reference) { $oneOfName = array_pop(explode('/', $oneOf->getFragment())); $oneOfResolved = $this->resolver->resolve($oneOf); } $merged = $this->jsonSchemaMerger->merge($object, $oneOfResolved); $classes = array_merge($classes, $this->chainGuesser->guessClass($merged, $oneOfName)); if ($oneOf instanceof Reference) { $oneOf->setResolved($merged); } } return $classes; }