in codegen/module_system.go [492:571]
func (g *httpClientGenerator) Generate(
instance *ModuleInstance,
) (*BuildResult, error) {
clientSpecUntyped, err := g.ComputeSpec(instance)
if err != nil {
return nil, errors.Wrapf(
err,
"Error initializing HTTPClientSpec for %q",
instance.InstanceName,
)
}
clientSpec := clientSpecUntyped.(*ClientSpec)
exposedMethods := reverseExposedMethods(clientSpec)
sort.Sort(&clientSpec.ModuleSpec.Services)
// transfer only the methods that belong to the client with the qps level
var clientQPSLevels map[string]string = GetClientQPSLevels(instance.QPSLevels, exposedMethods, clientSpec.ClientID)
clientMeta := &ClientMeta{
Instance: instance,
ExportName: clientSpec.ExportName,
ExportType: clientSpec.ExportType,
Services: clientSpec.ModuleSpec.Services,
IncludedPackages: clientSpec.ModuleSpec.IncludedPackages,
ClientID: clientSpec.ClientID,
ExposedMethods: exposedMethods,
QPSLevels: clientQPSLevels,
SidecarRouter: clientSpec.SidecarRouter,
}
client, err := ExecuteDefaultOrCustomTemplate(
"http_client.tmpl",
g.templates,
instance.CustomTemplates,
instance.Config,
clientMeta,
g.packageHelper,
)
if err != nil {
return nil, errors.Wrapf(
err,
"Error executing HTTP client template for %q",
instance.InstanceName,
)
}
// When it is possible to generate structs for all module types, the
// module system will do this transparently. For now we are opting in
// on a per-generator basis.
dependencies, err := GenerateDependencyStruct(
instance,
g.packageHelper,
g.templates,
)
if err != nil {
return nil, errors.Wrapf(
err,
"Error generating dependencies struct for %q %q",
instance.ClassName,
instance.InstanceName,
)
}
baseName := filepath.Base(instance.Directory)
clientFilePath := baseName + ".go"
files := map[string][]byte{
clientFilePath: client,
}
if dependencies != nil {
files["module/dependencies.go"] = dependencies
}
return &BuildResult{
Files: files,
Spec: clientSpec,
}, nil
}