File "IterableDataValidationTrait.php"
Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/woocommerce/vendor/opis/json-schema/src/Keywords/IterableDataValidationTrait.php
File size: 3.26 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/* ============================================================================
* Copyright 2020 Zindex Software
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================================ */
namespace Opis\JsonSchema\Keywords;
use ArrayObject;
use Opis\JsonSchema\{ValidationContext, Schema};
use Opis\JsonSchema\Errors\{ValidationError, ErrorContainer};
trait IterableDataValidationTrait
{
use ErrorTrait;
/**
* @param int $maxErrors
* @return ErrorContainer
*/
protected function errorContainer(int $maxErrors = 1): ErrorContainer
{
return new ErrorContainer($maxErrors);
}
/**
* @param Schema $schema
* @param ValidationContext $context
* @param iterable $iterator
* @param ArrayObject|null $keys
* @return ErrorContainer
*/
protected function iterateAndValidate(
Schema $schema,
ValidationContext $context,
iterable $iterator,
?ArrayObject $keys = null
): ErrorContainer {
$container = $this->errorContainer($context->maxErrors());
if ($keys) {
foreach ($iterator as $key) {
$context->pushDataPath($key);
$error = $schema->validate($context);
$context->popDataPath();
if ($error) {
if (!$container->isFull()) {
$container->add($error);
}
} else {
$keys[] = $key;
}
}
} else {
foreach ($iterator as $key) {
$context->pushDataPath($key);
$error = $schema->validate($context);
$context->popDataPath();
if ($error && $container->add($error)->isFull()) {
break;
}
}
}
return $container;
}
/**
* @param Schema $parentSchema
* @param Schema $schema
* @param ValidationContext $context
* @param iterable $iterator
* @param string $keyword
* @param string $message
* @param array $args
* @param ArrayObject|null $visited_keys
* @return ValidationError|null
*/
protected function validateIterableData(
Schema $parentSchema,
Schema $schema,
ValidationContext $context,
iterable $iterator,
string $keyword,
string $message,
array $args = [],
?ArrayObject $visited_keys = null
): ?ValidationError {
$errors = $this->iterateAndValidate($schema, $context, $iterator, $visited_keys);
if ($errors->isEmpty()) {
return null;
}
return $this->error($parentSchema, $context, $keyword, $message, $args, $errors);
}
}