本文整理汇总了Golang中github.com/goadesign/goa/design.APIDefinition.IterateVersions方法的典型用法代码示例。如果您正苦于以下问题:Golang APIDefinition.IterateVersions方法的具体用法?Golang APIDefinition.IterateVersions怎么用?Golang APIDefinition.IterateVersions使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/goadesign/goa/design.APIDefinition
的用法示例。
在下文中一共展示了APIDefinition.IterateVersions方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Generate
// Generate the application code, implement codegen.Generator.
func (g *Generator) Generate(api *design.APIDefinition) (_ []string, err error) {
if api == nil {
return nil, fmt.Errorf("missing API definition, make sure design.Design is properly initialized")
}
go utils.Catch(nil, func() { g.Cleanup() })
defer func() {
if err != nil {
g.Cleanup()
}
}()
outdir := AppOutputDir()
err = api.IterateVersions(func(v *design.APIVersionDefinition) error {
verdir := outdir
if v.Version != "" {
verdir = filepath.Join(verdir, codegen.VersionPackage(v.Version))
}
if err := os.MkdirAll(verdir, 0755); err != nil {
return err
}
if err := g.generateContexts(verdir, api, v); err != nil {
return err
}
if err := g.generateControllers(verdir, v); err != nil {
return err
}
if err := g.generateHrefs(verdir, v); err != nil {
return err
}
if err := g.generateMediaTypes(verdir, v); err != nil {
return err
}
if err := g.generateUserTypes(verdir, v); err != nil {
return err
}
return nil
})
if err != nil {
return nil, err
}
return g.genfiles, nil
}
示例2: generateUserTypes
// generateUserTypes iterates through the user types and generates the data structures and
// marshaling code.
func (g *Generator) generateUserTypes(outdir string, api *design.APIDefinition) error {
err := api.IterateVersions(func(version *design.APIVersionDefinition) error {
if version.Version != "" {
return nil
}
var modelname, filename string
err := GormaDesign.IterateStores(func(store *RelationalStoreDefinition) error {
err := store.IterateModels(func(model *RelationalModelDefinition) error {
modelname = strings.ToLower(codegen.Goify(model.Name, false))
filename = fmt.Sprintf("%s_gen.go", modelname)
utFile := filepath.Join(outdir, filename)
err := os.RemoveAll(utFile)
if err != nil {
fmt.Println(err)
}
utWr, err := NewUserTypesWriter(utFile)
if err != nil {
panic(err) // bug
}
title := fmt.Sprintf("%s: Models", version.Context())
ap, err := AppPackagePath()
if err != nil {
panic(err)
}
imports := []*codegen.ImportSpec{
codegen.SimpleImport(ap),
codegen.SimpleImport("github.com/jinzhu/gorm"),
codegen.SimpleImport("golang.org/x/net/context"),
}
needDate := false
for _, field := range model.RelationalFields {
if field.Datatype == Timestamp || field.Datatype == NullableTimestamp {
needDate = true
}
}
if needDate {
imp := codegen.SimpleImport("time")
imports = append(imports, imp)
}
utWr.WriteHeader(title, "genmodels", imports)
data := &UserTypeTemplateData{
APIDefinition: api,
UserType: model,
DefaultPkg: TargetPackage,
AppPkg: AppPackage,
}
err = utWr.Execute(data)
g.genfiles = append(g.genfiles, utFile)
if err != nil {
fmt.Println(err)
return err
}
err = utWr.FormatCode()
if err != nil {
fmt.Println(err)
}
return err
})
return err
})
return err
})
return err
}