Skip to content

Commit 27b3c27

Browse files
committed
Generate Null Enum type
- We need to import driver to comply with the Valuer interface. - The Scan method uses the Scan from the Non Null Enum type
1 parent d20ca82 commit 27b3c27

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

internal/codegen/golang/imports.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ func (i *importer) modelImports() fileImports {
264264

265265
if len(i.Enums) > 0 {
266266
std["fmt"] = struct{}{}
267+
std["database/sql/driver"] = struct{}{}
267268
}
268269

269270
return sortedImports(std, pkg)

internal/codegen/golang/templates/template.tmpl

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,30 @@ func (e *{{.Name}}) Scan(src interface{}) error {
8787
return nil
8888
}
8989

90+
type Null{{.Name}} struct {
91+
{{.Name}} {{.Name}}
92+
Valid bool // Valid is true if String is not NULL
93+
}
94+
95+
// Scan implements the Scanner interface.
96+
func (ns *Null{{.Name}}) Scan(value interface{}) error {
97+
if value == nil {
98+
ns.{{.Name}}, ns.Valid = "", false
99+
return nil
100+
}
101+
ns.Valid = true
102+
return ns.{{.Name}}.Scan(value)
103+
}
104+
105+
// Value implements the driver Valuer interface.
106+
func (ns Null{{.Name}}) Value() (driver.Value, error) {
107+
if !ns.Valid {
108+
return nil, nil
109+
}
110+
return ns.{{.Name}}, nil
111+
}
112+
113+
90114
{{ if $.EmitEnumValidMethod }}
91115
func (e {{.Name}}) Valid() bool {
92116
switch e {

0 commit comments

Comments
 (0)