docs: def validate(self) -> ValidationResult:
          """
          Apply the configured ValidationRule(s) (in the given order) and return a ValidationResult object.
  
          :return: validation result
          :rtype: ValidationResult
          """
          result = ValidationResult()
          try:
              for rule in self.get_rules():
                  try:
                      if not rule.apply():
                          result.annotate_rule_violation(rule)
                          if rule.stop_if_invalid:
                              break
                  except Exception as e:
                      result.annotate_exception(e, rule)
          except Exception as e:
              result.annotate_exception(e, None)
          return result