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
}