Attach nested entity errors
        Accepts a list errors coming from validators attached directly,
        or a dict of errors produced by a nested schema.

        :param property_name: str, property name
        :param direct_errors: list, errors from validators attached directly
        :param schema_errors: dict, errors from nested schema
        :return: shiftschema.result.Result

def add_entity_errors(
        self,
        property_name,
        direct_errors=None,
        schema_errors=None
    ):
        """
        Attach nested entity errors
        Accepts a list errors coming from validators attached directly,
        or a dict of errors produced by a nested schema.

        :param property_name: str, property name
        :param direct_errors: list, errors from validators attached directly
        :param schema_errors: dict, errors from nested schema
        :return: shiftschema.result.Result
        """
        if direct_errors is None and schema_errors is None:
            return self

        # direct errors
        if direct_errors is not None:
            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'] = []

            if type(direct_errors) is not list:
                direct_errors = [direct_errors]

            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)

        # schema errors
        if schema_errors is not None:
            if isinstance(schema_errors, Result):
                schema_errors = schema_errors.errors

            if not schema_errors:
                return self

            if property_name not in self.errors:
                self.errors[property_name] = dict()

            if 'schema' not in self.errors[property_name]:
                self.errors[property_name]['schema'] = schema_errors
            else:
                self.errors[property_name]['schema'] = self.merge_errors(
                    self.errors[property_name]['schema'],
                    schema_errors
                )

        return self