func()

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
}