func()

in codegen/module_system.go [1147:1209]


func (g *EndpointGenerator) ComputeSpec(
	instance *ModuleInstance,
) (interface{}, error) {
	endpointYamls := []string{}
	endpointSpecs := []*EndpointSpec{}
	clientSpecs := readClientDependencySpecs(instance)

	endpointConfig, err := readEndpointConfig(instance.YAMLFileRaw)
	if err != nil {
		return nil, errors.Wrapf(
			err,
			"Error reading HTTP endpoint %q YAML config",
			instance.InstanceName,
		)
	}

	endpointConfigDir := filepath.Join(
		instance.BaseDirectory,
		instance.Directory,
	)
	for _, fileName := range endpointConfig.Config.Endpoints {
		endpointYamls = append(
			endpointYamls, filepath.Join(endpointConfigDir, fileName),
		)
	}
	var wg sync.WaitGroup
	wg.Add(len(endpointYamls))
	ch := make(chan endpointSpecRes, len(endpointYamls))
	for _, yamlFile := range endpointYamls {
		go func(yamlFile string) {
			defer wg.Done()
			espec, err := NewEndpointSpec(yamlFile, g.packageHelper, g.packageHelper.MiddlewareSpecs())
			if err != nil {
				err = errors.Wrapf(
					err, "Error creating endpoint spec for endpoint: %s", yamlFile,
				)
				ch <- endpointSpecRes{err: err}
				return
			}
			err = espec.SetDownstream(clientSpecs, g.packageHelper)
			if err != nil {
				err = errors.Wrapf(
					err, "Error parsing downstream info for endpoint: %s", yamlFile,
				)
				ch <- endpointSpecRes{err: err}
				return
			}
			ch <- endpointSpecRes{espec: espec, err: err}
		}(yamlFile)
	}
	go func() {
		wg.Wait()
		close(ch)
	}()

	for endpointSpecRes := range ch {
		if endpointSpecRes.err != nil {
			return nil, endpointSpecRes.err
		}
		endpointSpecs = append(endpointSpecs, endpointSpecRes.espec)
	}
	return endpointSpecs, nil
}