docs: def merge_errors(errors1, errors2):
      """Deeply merge two error messages.
  
      The format of ``errors1`` and ``errors2`` matches the ``message``
      parameter of :exc:`marshmallow.exceptions.ValidationError`.
      """
      if not errors1:
          return errors2
      if not errors2:
          return errors1
      if isinstance(errors1, list):
          if isinstance(errors2, list):
              return errors1 + errors2
          if isinstance(errors2, dict):
              return dict(
                  errors2,
                  **{SCHEMA: merge_errors(errors1, errors2.get(SCHEMA))}
              )
          return errors1 + [errors2]
      if isinstance(errors1, dict):
          if isinstance(errors2, list):
              return dict(
                  errors1,
                  **{SCHEMA: merge_errors(errors1.get(SCHEMA), errors2)}
              )
          if isinstance(errors2, dict):
              errors = dict(errors1)
              for key, val in iteritems(errors2):
                  if key in errors:
                      errors[key] = merge_errors(errors[key], val)
                  else:
                      errors[key] = val
              return errors
          return dict(
              errors1,
              **{SCHEMA: merge_errors(errors1.get(SCHEMA), errors2)}
          )
      if isinstance(errors2, list):
          return [errors1] + errors2 if errors2 else errors1
      if isinstance(errors2, dict):
          return dict(
              errors2,
              **{SCHEMA: merge_errors(errors1, errors2.get(SCHEMA))}
          )
      return [errors1, errors2]