diff --git a/Makefile b/Makefile index d12751e..6e5e01e 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ example: - go run . example/genql.yaml + go generate ./... go run ./example/cmd/example/main.go csilvers .PHONY: example diff --git a/README.md b/README.md index 9a858a9..fb77bfb 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,8 @@ func getViewer(ctx context.Context, client *graphql.Client) (*getViewerResponse, graphqlClient := graphql.NewClient("https://example.com/graphql", http.DefaultClient) viewerResp, _ := getViewer(context.Background(), graphqlClient) fmt.Println("you are", *viewerResp.Viewer.MyName) + +//go:generate go run github.com/Khan/genql ``` For a complete working example, see `example/`. @@ -64,6 +66,7 @@ Config options: - file locations (queries, generated, schema (or get via HTTP)) - use ctx or not, including complexities of how Khan uses context - HTTP calling convention (is there enough variation to matter?) +- proper config/arguments setup (e.g. with [viper](https://github.com/spf13/viper) Other: - error-checking/validation/etc. everywhere diff --git a/generate/config.go b/generate/config.go index 3acbbde..abd4a1c 100644 --- a/generate/config.go +++ b/generate/config.go @@ -56,18 +56,22 @@ func (c *Config) ValidateAndFillDefaults() error { } func ReadAndValidateConfig(filename string) (*Config, error) { - text, err := ioutil.ReadFile(filename) - if err != nil { - return nil, fmt.Errorf("unreadable config file %v: %v", filename, err) - } - var config Config - err = yaml.Unmarshal(text, &config) - if err != nil { - return nil, fmt.Errorf("invalid config file %v: %v", filename, err) + if filename == "" { + config = *defaultConfig + } else { + text, err := ioutil.ReadFile(filename) + if err != nil { + return nil, fmt.Errorf("unreadable config file %v: %v", filename, err) + } + + err = yaml.Unmarshal(text, &config) + if err != nil { + return nil, fmt.Errorf("invalid config file %v: %v", filename, err) + } } - err = config.ValidateAndFillDefaults() + err := config.ValidateAndFillDefaults() if err != nil { return nil, fmt.Errorf("invalid config file %v: %v", filename, err) } diff --git a/generate/main.go b/generate/main.go index 67f2566..764388e 100644 --- a/generate/main.go +++ b/generate/main.go @@ -35,11 +35,12 @@ func Main() { } }() - if len(os.Args) != 2 { - // TODO: omit config to get it from genql.yaml, or to use the defaults. - err = fmt.Errorf("usage: %s genql.yaml", os.Args[0]) - return + switch len(os.Args) { + case 2: + err = readConfigGenerateAndWrite(os.Args[1]) + case 1: + err = readConfigGenerateAndWrite("") + default: + err = fmt.Errorf("usage: %s [config]", os.Args[0]) } - - err = readConfigGenerateAndWrite(os.Args[1]) }