func generateSerializationLogic()

in tpgtools/main.go [298:346]


func generateSerializationLogic(specs map[Version][]*Resource) {
	buf := bytes.Buffer{}
	tmpl, err := template.New("serialization.go.tmpl").Funcs(TemplateFunctions).ParseFiles(
		"templates/serialization.go.tmpl",
	)
	if err != nil {
		glog.Exit(err)
	}

	packageMap := make(map[string]string)
	for v, resList := range specs {
		for _, res := range resList {
			var pkgName, pkgPath string
			pkgName = res.Package().lowercase() + v.SerializationSuffix
			if v == GA_VERSION {
				pkgPath = res.Package().lowercase()
			} else {
				pkgPath = path.Join(res.Package().lowercase(), v.V)
			}

			if _, ok := packageMap[pkgPath]; !ok {
				packageMap[pkgName] = pkgPath
			}
		}
	}

	tmplInput := SerializationInput{
		Resources: specs,
		Packages:  packageMap,
	}

	if err = tmpl.ExecuteTemplate(&buf, "serialization.go.tmpl", tmplInput); err != nil {
		glog.Exit(err)
	}

	formatted, err := formatSource(&buf)
	if err != nil {
		glog.Error(fmt.Errorf("error formatting serialization logic: %v", err))
	}

	if oPath == nil || *oPath == "" {
		fmt.Printf("%v", string(formatted))
	} else {
		err := ioutil.WriteFile(path.Join(*oPath, "serialization.go"), formatted, 0644)
		if err != nil {
			glog.Exit(err)
		}
	}
}