// Package generate provides programmatic access to genqlient's functionality, // and documentation of its configuration options. For general usage // documentation, see github.com/Khan/genqlient. package generate import ( "fmt" "io/ioutil" "os" "path/filepath" "strings" "github.com/alexflint/go-arg" ) func readConfigGenerateAndWrite(configFilename string) error { config, err := ReadAndValidateConfig(configFilename) if err != nil { return err } generated, err := Generate(config) if err != nil { return err } for filename, content := range generated { err = os.MkdirAll(filepath.Dir(filename), 0o755) if err != nil { return errorf(nil, "could not create parent directory for generated file %v: %v", filename, err) } err = ioutil.WriteFile(filename, content, 0o644) if err != nil { return errorf(nil, "could not write generated file %v: %v", filename, err) } } return nil } type cliArgs struct { ConfigFilename string `arg:"positional" placeholder:"CONFIG" default:"genqlient.yaml" help:"path to genqlient configuration (default genqlient.yaml)"` Init bool `arg:"--init" help:"write out and use a default config file"` } func (cliArgs) Description() string { return strings.TrimSpace(` Generates GraphQL client code for a given schema and queries. See https://github.com/Khan/genqlient for full documentation. `) } // Main is the command-line entrypoint to genqlient; it's equivalent to calling // `go run github.com/Khan/genqlient`. For lower-level control over // genqlient's operation, see Generate. func Main() { exitIfError := func(err error) { if err != nil { fmt.Println(err) os.Exit(1) } } var args cliArgs arg.MustParse(&args) if args.Init { err := initConfig(args.ConfigFilename) exitIfError(err) } err := readConfigGenerateAndWrite(args.ConfigFilename) exitIfError(err) }