classDiagram
  BaseValidationRule <|-- RequiredRule
  BaseValidationRule <|-- RegexRule
  BaseValidationRule <|-- CustomRule
  PropertyRule o-- BaseValidationRule

  class PropertyRule {
    +RuleProperty property
    +BaseValidationRule[][] $rules
    +validate(args) Promise~ValidationResult[]~
  }
  class BaseValidationRule {
    +execute(value, object) boolean
    +canExecute(object) boolean
  }
  class RequiredRule {
    +execute(value, object) boolean
  }
  class RegexRule {
    +execute(value, object) boolean
  }
  class CustomRule {
    +execute(value, object) boolean
  }
