code: final public function validate()
      {
          foreach (static::schema()->getRequiredFields() as $field) {
              if (!$this->has($field->getName())) {
                  throw new RequiredFieldNotSet($this, $field);
              }
          }
  
          return $this;
      }
docs: todo: recursively validate nested messages?
  {@inheritdoc}
  @return static