Files
piratepoet/mailpoet/lib/Validator/Schema/OneOfSchema.php
Jan Jakes 14d2b52713 Add factory for one-of WP JSON schema
[MAILPOET-4195]
2022-03-30 11:29:58 +02:00

38 lines
1001 B
PHP

<?php declare(strict_types = 1);
namespace MailPoet\Validator\Schema;
use MailPoet\Validator\Schema;
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#oneof-and-anyof
class OneOfSchema extends Schema {
protected $schema = [
'oneOf' => [],
];
/** @param Schema[] $schemas */
public function __construct(
array $schemas
) {
foreach ($schemas as $schema) {
$this->schema['oneOf'][] = $schema->toArray();
}
}
public function nullable(): self {
$null = ['type' => 'null'];
$oneOf = $this->schema['oneOf'];
$value = in_array($null, $oneOf, true) ? $oneOf : array_merge($oneOf, [$null]);
return $this->updateSchemaProperty('oneOf', $value);
}
public function nonNullable(): self {
$null = ['type' => 'null'];
$oneOf = $this->schema['oneOf'];
$value = array_filter($oneOf, function ($item) use ($null) {
return $item !== $null;
});
return $this->updateSchemaProperty('oneOf', $value);
}
}