in codegen/module_system.go [1603:1727]
func (generator *GatewayServiceGenerator) Generate(instance *ModuleInstance) (*BuildResult, error) {
var fileMap sync.Map
workCount := 5
runner := parallelize.NewUnboundedRunner(workCount)
f := func() (interface{}, error) {
service, err := ExecuteDefaultOrCustomTemplate(
"service.tmpl",
generator.templates,
instance.CustomTemplates,
instance.Config,
instance,
generator.packageHelper,
)
if err != nil {
err = errors.Wrapf(
err,
"Error generating service service.go for %s",
instance.InstanceName,
)
return nil, err
}
fileMap.Store("service.go", service)
return nil, nil
}
runner.SubmitWork(parallelize.StatelessFunc(f))
f = func() (interface{}, error) {
// generate main.go
main, err := ExecuteDefaultOrCustomTemplate(
"main.tmpl",
generator.templates,
instance.CustomTemplates,
instance.Config,
instance,
generator.packageHelper,
)
if err != nil {
err = errors.Wrapf(
err,
"Error generating service main.go for %s",
instance.InstanceName,
)
return nil, err
}
fileMap.Store("main/main.go", main)
return nil, nil
}
runner.SubmitWork(parallelize.StatelessFunc(f))
f = func() (interface{}, error) {
// generate main_test.go
mainTest, err := ExecuteDefaultOrCustomTemplate(
"main_test.tmpl",
generator.templates,
instance.CustomTemplates,
instance.Config,
instance,
generator.packageHelper,
)
if err != nil {
err = errors.Wrapf(
err,
"Error generating service main_test.go for %s",
instance.InstanceName,
)
return nil, err
}
fileMap.Store("main/main_test.go", mainTest)
return nil, nil
}
runner.SubmitWork(parallelize.StatelessFunc(f))
f = func() (interface{}, error) {
dependencies, err := GenerateDependencyStruct(
instance,
generator.packageHelper,
generator.templates,
)
if err != nil {
err = errors.Wrapf(
err,
"Error generating service dependencies for %s",
instance.InstanceName,
)
return nil, err
}
fileMap.Store("module/dependencies.go", dependencies)
return nil, nil
}
runner.SubmitWork(parallelize.StatelessFunc(f))
f = func() (interface{}, error) {
initializer, err := GenerateInitializer(
instance,
generator.packageHelper,
generator.templates,
)
if err != nil {
err = errors.Wrapf(
err,
"Error generating service initializer for %s",
instance.InstanceName,
)
return nil, err
}
fileMap.Store("module/init.go", initializer)
return nil, nil
}
runner.SubmitWork(parallelize.StatelessFunc(f))
if _, err := runner.GetResult(); err != nil {
return nil, err
}
files := make(map[string][]byte)
fileMap.Range(func(key, value interface{}) bool {
files[key.(string)] = value.([]byte)
return true
})
return &BuildResult{
Files: files,
}, nil
}