docs: def is_length(property_name, *, min_length=1, max_length=None, present_optional=False):
      """Returns a Validation that checks the length of a string."""
      def check(val):
        """Checks that a value matches a scope-enclosed set of length parameters."""
        if not val:
          return present_optional
        else:
          if len(val) >= min_length:
            if max_length is None:
              return True
            else:
              return len(val) <= max_length
          else:
            return False
  
      if max_length:
        message = "must be at least {0} characters long".format(min_length)
      else:
        message = "must be between {0} and {1} characters long".format(min_length, max_length)
  
      return Validation(check, property_name, message)