// generateUserTypes iterates through the user types and generates the data structures and // marshaling code. func (g *Generator) generateUserTypes(verdir string, version *design.APIVersionDefinition) error { utFile := filepath.Join(verdir, "user_types.go") utWr, err := NewUserTypesWriter(utFile) if err != nil { panic(err) // bug } title := fmt.Sprintf("%s: Application User Types", version.Context()) imports := []*codegen.ImportSpec{ codegen.SimpleImport("github.com/goadesign/goa"), codegen.SimpleImport("fmt"), codegen.SimpleImport("time"), } if !version.IsDefault() { appPkg, err := AppPackagePath() if err != nil { return err } imports = append(imports, codegen.SimpleImport(appPkg)) } utWr.WriteHeader(title, packageName(version), imports) err = version.IterateUserTypes(func(t *design.UserTypeDefinition) error { data := &UserTypeTemplateData{ UserType: t, Versioned: version.Version != "", DefaultPkg: TargetPackage, } return utWr.Execute(data) }) g.genfiles = append(g.genfiles, utFile) if err != nil { return err } return utWr.FormatCode() }