github.com/pouriasharifi/gqlgen@v0.7.2/codegen/directive_build.go (about)

     1  package codegen
     2  
     3  import (
     4  	"sort"
     5  
     6  	"github.com/pkg/errors"
     7  )
     8  
     9  func (cfg *Config) buildDirectives(types NamedTypes) ([]*Directive, error) {
    10  	var directives []*Directive
    11  
    12  	for name, dir := range cfg.schema.Directives {
    13  		if name == "skip" || name == "include" || name == "deprecated" {
    14  			continue
    15  		}
    16  
    17  		var args []FieldArgument
    18  		for _, arg := range dir.Arguments {
    19  			newArg := FieldArgument{
    20  				GQLName:   arg.Name,
    21  				Type:      types.getType(arg.Type),
    22  				GoVarName: sanitizeArgName(arg.Name),
    23  			}
    24  
    25  			if !newArg.Type.IsInput && !newArg.Type.IsScalar {
    26  				return nil, errors.Errorf("%s cannot be used as argument of directive %s(%s) only input and scalar types are allowed", arg.Type, dir.Name, arg.Name)
    27  			}
    28  
    29  			if arg.DefaultValue != nil {
    30  				var err error
    31  				newArg.Default, err = arg.DefaultValue.Value(nil)
    32  				if err != nil {
    33  					return nil, errors.Errorf("default value for directive argument %s(%s) is not valid: %s", dir.Name, arg.Name, err.Error())
    34  				}
    35  			}
    36  			args = append(args, newArg)
    37  		}
    38  
    39  		directives = append(directives, &Directive{
    40  			Name: name,
    41  			Args: args,
    42  		})
    43  	}
    44  
    45  	sort.Slice(directives, func(i, j int) bool { return directives[i].Name < directives[j].Name })
    46  
    47  	return directives, nil
    48  }