// generateMediaTypes iterates through the media types and generate the data structures and // marshaling code. func (g *Generator) generateMediaTypes(verdir string, version *design.APIVersionDefinition) error { mtFile := filepath.Join(verdir, "media_types.go") mtWr, err := NewMediaTypesWriter(mtFile) if err != nil { panic(err) // bug } title := fmt.Sprintf("%s: Application Media Types", version.Context()) imports := []*codegen.ImportSpec{ codegen.SimpleImport("github.com/goadesign/goa"), codegen.SimpleImport("fmt"), } mtWr.WriteHeader(title, packageName(version), imports) err = version.IterateMediaTypes(func(mt *design.MediaTypeDefinition) error { data := &MediaTypeTemplateData{ MediaType: mt, Versioned: version.Version != "", DefaultPkg: TargetPackage, } if mt.Type.IsObject() || mt.Type.IsArray() { return mtWr.Execute(data) } return nil }) g.genfiles = append(g.genfiles, mtFile) if err != nil { return err } return mtWr.FormatCode() }