def run(self, value, model=None, context=None):
        """
        Run validation
        Wraps concrete implementation to ensure custom validators return
        proper type of result.

        :param value:               a value to validate
        :param model:               parent model of the property
        :param context:             parent model or custom context
        :return:                    shiftschema.result.Error
        """
        res = self.validate(value, model, context)
        if not isinstance(res, Error):
            err = 'Validator "{}" result must be of type "{}", got "{}"'
            raise InvalidErrorType(err.format(
                self.__class__.__name__,
                Error,
                type(res))
            )

        return res