gen.go

 1package cmd
 2
 3import (
 4	"fmt"
 5	"io/ioutil"
 6	"os"
 7
 8	"github.com/99designs/gqlgen/codegen"
 9	"github.com/pkg/errors"
10	"github.com/urfave/cli"
11)
12
13var genCmd = cli.Command{
14	Name:  "generate",
15	Usage: "generate a graphql server based on schema",
16	Flags: []cli.Flag{
17		cli.BoolFlag{Name: "verbose, v", Usage: "show logs"},
18		cli.StringFlag{Name: "config, c", Usage: "the config filename"},
19	},
20	Action: func(ctx *cli.Context) {
21		var config *codegen.Config
22		var err error
23		if configFilename := ctx.String("config"); configFilename != "" {
24			config, err = codegen.LoadConfig(configFilename)
25			if err != nil {
26				fmt.Fprintln(os.Stderr, err.Error())
27				os.Exit(1)
28			}
29		} else {
30			config, err = codegen.LoadConfigFromDefaultLocations()
31			if os.IsNotExist(errors.Cause(err)) {
32				config = codegen.DefaultConfig()
33			} else if err != nil {
34				fmt.Fprintln(os.Stderr, err.Error())
35				os.Exit(1)
36			}
37		}
38
39		for _, filename := range config.SchemaFilename {
40			var schemaRaw []byte
41			schemaRaw, err = ioutil.ReadFile(filename)
42			if err != nil {
43				fmt.Fprintln(os.Stderr, "unable to open schema: "+err.Error())
44				os.Exit(1)
45			}
46			config.SchemaStr[filename] = string(schemaRaw)
47		}
48
49		if err = config.Check(); err != nil {
50			fmt.Fprintln(os.Stderr, "invalid config format: "+err.Error())
51			os.Exit(1)
52		}
53
54		err = codegen.Generate(*config)
55		if err != nil {
56			fmt.Fprintln(os.Stderr, err.Error())
57			os.Exit(2)
58		}
59	},
60}