/**
  * @inheritdoc
  */
 public function validate($input)
 {
     $conditionResult = call_user_func($this->condition, $input);
     $this->selectedRule = $conditionResult === true ? $this->onTrue : $this->onFalse;
     foreach ($this->selectedRule->validate($input) as $error) {
         (yield $error);
     }
 }
 /**
  * @inheritdoc
  */
 public function validate($input)
 {
     $firstHasErrors = false;
     foreach ($this->first->validate($input) as $error) {
         $firstHasErrors = true;
         (yield $error);
     }
     if ($firstHasErrors === false) {
         foreach ($this->second->validate($input) as $error) {
             (yield $error);
         }
     }
 }
 /**
  * @inheritdoc
  */
 public function validate($input)
 {
     $secondaryHasErrors = false;
     foreach ($this->secondary->validate($input) as $error) {
         $error ?: null;
         // suppress unused
         $secondaryHasErrors = true;
         break;
     }
     // if secondary condition failed then rule will become 'failed' only if primary condition fails too.
     if ($secondaryHasErrors === true) {
         foreach ($this->primary->validate($input) as $error) {
             (yield $error);
         }
     }
 }
 /**
  * @param RuleInterface            $rule
  * @param mixed                    $input
  * @param ErrorAggregatorInterface $aggregator
  *
  * @return Generator
  */
 protected static function validateData(RuleInterface $rule, $input, ErrorAggregatorInterface $aggregator)
 {
     foreach ($rule->validate($input) as $error) {
         (yield $error);
     }
     $rule->onFinish($aggregator);
     foreach ($aggregator->get() as $error) {
         (yield $error);
     }
 }