code: func getOperationRootType(schema Schema, operation ast.Definition) (*Object, error) {
  	if operation == nil {
  		return nil, errors.New("Can only execute queries, mutations and subscription")
  	}
  
  	switch operation.GetOperation() {
  	case ast.OperationTypeQuery:
  		return schema.QueryType(), nil
  	case ast.OperationTypeMutation:
  		mutationType := schema.MutationType()
  		if mutationType == nil || mutationType.PrivateName == "" {
  			return nil, gqlerrors.NewError(
  				"Schema is not configured for mutations",
  				[]ast.Node{operation},
  				"",
  				nil,
  				[]int{},
  				nil,
  			)
  		}
  		return mutationType, nil
  	case ast.OperationTypeSubscription:
  		subscriptionType := schema.SubscriptionType()
  		if subscriptionType == nil || subscriptionType.PrivateName == "" {
  			return nil, gqlerrors.NewError(
  				"Schema is not configured for subscriptions",
  				[]ast.Node{operation},
  				"",
  				nil,
  				[]int{},
  				nil,
  			)
  		}
  		return subscriptionType, nil
  	default:
  		return nil, gqlerrors.NewError(
  			"Can only execute queries, mutations and subscription",
  			[]ast.Node{operation},
  			"",
  			nil,
  			[]int{},
  			nil,
  		)
  	}
  }
docs: // Extracts the root type of the operation from the schema.