def validate(self, model=None, context=None):
        """
        Validate model and return validation result object
        :param model:  object or dict
        :param context: object, dict or None
        :return: shiftschema.result.Result
        """

        # inject with settings
        result = Result(translator=self.translator, locale=self.locale)

        # validate state
        state_result = self.validate_state(model, context=context)
        result.merge(state_result)

        # validate simple properties
        props_result = self.validate_properties(model, context=context)
        result.merge(props_result)

        # validate nested entity properties
        entities_result = self.validate_entities(model, context=context)
        result.merge(entities_result)

        # validate collection properties
        collections_result = self.validate_collections(model, context=context)
        result.merge(collections_result)

        # and return
        return result