docs: def add_collection_errors(
          self,
          property_name,
          direct_errors=None,
          collection_errors=None
      ):
          """
          Add collection errors
          Accepts a list errors coming from validators attached directly,
          or a list of schema results for each item in the collection.
  
          :param property_name: str, property name
          :param direct_errors: list, errors from validators attached directly
          :param collection_errors: list of results for collection members
          :return: shiftschema.result.Result
          """
          if direct_errors is None and collection_errors is None:
              return self
  
          # direct errors
          if direct_errors is not None:
              if type(direct_errors) is not list:
                  direct_errors = [direct_errors]
              if property_name not in self.errors:
                  self.errors[property_name] = dict()
              if 'direct' not in self.errors[property_name]:
                  self.errors[property_name]['direct'] = []
              for error in direct_errors:
                  if not isinstance(error, Error):
                      err = 'Error must be of type {}'
                      raise x.InvalidErrorType(err.format(Error))
                  self.errors[property_name]['direct'].append(error)
  
          # collection errors
          if collection_errors:
              enum = enumerate(collection_errors)
              errors_dict = {i: e for i, e in enum if not bool(e)}
              if not errors_dict:
                  return self
  
              if property_name not in self.errors:
                  self.errors[property_name] = dict()
              if 'collection' not in self.errors[property_name]:
                  self.errors[property_name]['collection'] = errors_dict
              else:
                  local = self.errors[property_name]['collection']
                  remote = errors_dict
                  for index, result in remote.items():
                      if index not in local:
                          self.errors[property_name]['collection'][index] = result
                      else:
                          merged = self.merge_errors(
                              local[index].errors,
                              remote[index].errors
                          )
                          self.errors[property_name]['collection'][index] = merged
  
          return self