Add "generic" option to the "optional" configuration for handling nullable types (#252)
This is an implementation for #251, it adds a new `"generic"` option for the `"optional"` configuration, and a companion type `"optional_generic_type"` which is a fully qualified type with a placeholder `%` for the generic parameter. Co-authored-by: Dylan R. Johnston <[email protected]> Co-authored-by: Ben Kraft <[email protected]>
This commit is contained in:
co-authored by
Dylan R. Johnston
Ben Kraft
parent
94b6a71403
commit
c61d7acaa5
+23
-12
@@ -22,18 +22,19 @@ type Config struct {
|
||||
// The following fields are documented in the [genqlient.yaml docs].
|
||||
//
|
||||
// [genqlient.yaml docs]: https://github.com/Khan/genqlient/blob/main/docs/genqlient.yaml
|
||||
Schema StringList `yaml:"schema"`
|
||||
Operations StringList `yaml:"operations"`
|
||||
Generated string `yaml:"generated"`
|
||||
Package string `yaml:"package"`
|
||||
ExportOperations string `yaml:"export_operations"`
|
||||
ContextType string `yaml:"context_type"`
|
||||
ClientGetter string `yaml:"client_getter"`
|
||||
Bindings map[string]*TypeBinding `yaml:"bindings"`
|
||||
PackageBindings []*PackageBinding `yaml:"package_bindings"`
|
||||
Optional string `yaml:"optional"`
|
||||
StructReferences bool `yaml:"use_struct_references"`
|
||||
Extensions bool `yaml:"use_extensions"`
|
||||
Schema StringList `yaml:"schema"`
|
||||
Operations StringList `yaml:"operations"`
|
||||
Generated string `yaml:"generated"`
|
||||
Package string `yaml:"package"`
|
||||
ExportOperations string `yaml:"export_operations"`
|
||||
ContextType string `yaml:"context_type"`
|
||||
ClientGetter string `yaml:"client_getter"`
|
||||
Bindings map[string]*TypeBinding `yaml:"bindings"`
|
||||
PackageBindings []*PackageBinding `yaml:"package_bindings"`
|
||||
Optional string `yaml:"optional"`
|
||||
OptionalGenericType string `yaml:"optional_generic_type"`
|
||||
StructReferences bool `yaml:"use_struct_references"`
|
||||
Extensions bool `yaml:"use_extensions"`
|
||||
|
||||
// Set to true to use features that aren't fully ready to use.
|
||||
//
|
||||
@@ -99,6 +100,16 @@ func (c *Config) ValidateAndFillDefaults(baseDir string) error {
|
||||
c.ContextType = "context.Context"
|
||||
}
|
||||
|
||||
if c.Optional != "" && c.Optional != "value" && c.Optional != "pointer" && c.Optional != "generic" {
|
||||
return errorf(nil, "optional must be one of: 'value' (default), 'pointer', or 'generic'")
|
||||
}
|
||||
|
||||
if c.Optional == "generic" && c.OptionalGenericType == "" {
|
||||
return errorf(nil, "if optional is set to 'generic', optional_generic_type must be set to the fully"+
|
||||
"qualified name of a type with a single generic parameter"+
|
||||
"\nExample: \"github.com/Org/Repo/optional.Value\"")
|
||||
}
|
||||
|
||||
if c.Package == "" {
|
||||
abs, err := filepath.Abs(c.Generated)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user