code: func doesFragmentConditionMatch(eCtx *executionContext, fragment ast.Node, ttype *Object) bool {
  
  	switch fragment := fragment.(type) {
  	case *ast.FragmentDefinition:
  		typeConditionAST := fragment.TypeCondition
  		if typeConditionAST == nil {
  			return true
  		}
  		conditionalType, err := typeFromAST(eCtx.Schema, typeConditionAST)
  		if err != nil {
  			return false
  		}
  		if conditionalType == ttype {
  			return true
  		}
  		if conditionalType.Name() == ttype.Name() {
  			return true
  		}
  		if conditionalType, ok := conditionalType.(*Interface); ok {
  			return eCtx.Schema.IsPossibleType(conditionalType, ttype)
  		}
  		if conditionalType, ok := conditionalType.(*Union); ok {
  			return eCtx.Schema.IsPossibleType(conditionalType, ttype)
  		}
  	case *ast.InlineFragment:
  		typeConditionAST := fragment.TypeCondition
  		if typeConditionAST == nil {
  			return true
  		}
  		conditionalType, err := typeFromAST(eCtx.Schema, typeConditionAST)
  		if err != nil {
  			return false
  		}
  		if conditionalType == ttype {
  			return true
  		}
  		if conditionalType.Name() == ttype.Name() {
  			return true
  		}
  		if conditionalType, ok := conditionalType.(*Interface); ok {
  			return eCtx.Schema.IsPossibleType(conditionalType, ttype)
  		}
  		if conditionalType, ok := conditionalType.(*Union); ok {
  			return eCtx.Schema.IsPossibleType(conditionalType, ttype)
  		}
  	}
  
  	return false
  }
docs: // Determines if a fragment is applicable to the given type.