Skip to content

Commit dfea101

Browse files
author
Jeff.Peirson
committed
Validating optional strings in Validate() func
Addresses issue raised in ardielle#65
1 parent e1fe189 commit dfea101

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

gen/gomodel/gomodel.go

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -755,23 +755,32 @@ func (gen *modelGenerator) emitStructValidator(st *rdl.StructTypeDef, flattened
755755
for _, f := range flattened {
756756
fname := capitalize(string(f.Name))
757757
ftype := string(f.Type)
758-
if !f.Optional {
759-
bt := gen.registry.FindBaseType(f.Type)
760-
switch bt {
761-
case rdl.BaseTypeString, rdl.BaseTypeSymbol:
758+
bt := gen.registry.FindBaseType(f.Type)
759+
switch bt {
760+
case rdl.BaseTypeString, rdl.BaseTypeSymbol:
761+
if !f.Optional {
762762
gen.emit(fmt.Sprintf("\tif self.%s == \"\" {\n", fname))
763763
gen.emit(fmt.Sprintf("\t\treturn fmt.Errorf(\"%s.%s is missing but is a required field\")\n", st.Name, f.Name))
764-
if FullValidation {
765-
if bt == rdl.BaseTypeString && fname != "String" {
766-
gen.emit(fmt.Sprintf("\t} else {\n\t\tval := %sValidate(%sSchema(), %q, self.%s)\n\t\tif !val.Valid {\n\t\t\treturn fmt.Errorf(\"%s.%s does not contain a valid %s (%%v)\", val.Error)\n\t\t}\n", rdlPrefix, capitalize(string(gen.schema.Name)), ftype, fname, st.Name, string(f.Name), ftype))
764+
}
765+
if FullValidation {
766+
if bt == rdl.BaseTypeString && fname != "String" {
767+
if !f.Optional {
768+
gen.emit("\t} else {\n")
769+
} else {
770+
gen.emit(fmt.Sprintf("\tif self.%s != \"\" {\n", fname))
767771
}
772+
gen.emit(fmt.Sprintf("\t\tval := %sValidate(%sSchema(), %q, self.%s)\n\t\tif !val.Valid {\n\t\t\treturn fmt.Errorf(\"%s.%s does not contain a valid %s (%%v)\", val.Error)\n\t\t}\n", rdlPrefix, capitalize(string(gen.schema.Name)), ftype, fname, st.Name, string(f.Name), ftype))
768773
}
769-
gen.emit("\t}\n")
770-
case rdl.BaseTypeTimestamp:
774+
}
775+
gen.emit("\t}\n")
776+
case rdl.BaseTypeTimestamp:
777+
if !f.Optional {
771778
gen.emit(fmt.Sprintf("\tif self.%s.IsZero() {\n", fname))
772779
gen.emit(fmt.Sprintf("\t\treturn fmt.Errorf(\"%s: Missing required field: %s\")\n", st.Name, f.Name))
773780
gen.emit("\t}\n")
774-
case rdl.BaseTypeArray, rdl.BaseTypeMap, rdl.BaseTypeStruct, rdl.BaseTypeUUID:
781+
}
782+
case rdl.BaseTypeArray, rdl.BaseTypeMap, rdl.BaseTypeStruct, rdl.BaseTypeUUID:
783+
if !f.Optional {
775784
gen.emit(fmt.Sprintf("\tif self.%s == nil {\n", fname))
776785
gen.emit(fmt.Sprintf("\t\treturn fmt.Errorf(\"%s: Missing required field: %s\")\n", st.Name, f.Name))
777786
gen.emit("\t}\n")

0 commit comments

Comments
 (0)