Validate
        Perform value validation and return result

        :param value:           value to check
        :param model:           parent model being validated
        :param context:         object or None, validation context
        :return:                shiftschema.results.SimpleResult

def validate(self, value, model=None, context=None):
        """
        Validate
        Perform value validation and return result

        :param value:           value to check
        :param model:           parent model being validated
        :param context:         object or None, validation context
        :return:                shiftschema.results.SimpleResult
        """

        # ok if non-empty string
        if type(value) is str:
            value = value.strip()
            if value != '':
                return Error()

        # ok if has value
        if value:
            return Error()

        # ok if false, but false is allowed
        if value is False and self.allow_false:
            return Error()

        # ok if 0, but zero is allowed
        if value == 0 and self.allow_zero:
            return Error()

        # error otherwise
        return Error(self.value_required)