func NewDefaultModuleSystem()

in codegen/module_system.go [279:411]


func NewDefaultModuleSystem(
	h *PackageHelper,
	selectiveBuilding bool,
	hooks ...PostGenHook,
) (*ModuleSystem, error) {
	system := NewModuleSystem(h.moduleSearchPaths, h.defaultDependencies, selectiveBuilding, hooks...)

	tmpl, err := NewDefaultTemplate()
	if err != nil {
		return nil, err
	}

	// Register client module class and type generators
	if err := system.RegisterClass(ModuleClass{
		Name:       "client",
		NamePlural: "clients",
		ClassType:  MultiModule,
	}); err != nil {
		return nil, errors.Wrapf(err, "Error registering client class")
	}

	if err := system.RegisterClassType("client", "http", newHTTPClientGenerator(tmpl, h)); err != nil {
		return nil, errors.Wrapf(
			err,
			"Error registering HTTP client class type",
		)
	}

	if err := system.RegisterClassType("client", "tchannel", newTChannelClientGenerator(tmpl, h)); err != nil {
		return nil, errors.Wrapf(
			err,
			"Error registering TChannel client class type",
		)
	}

	if err := system.RegisterClassType("client", "custom", newCustomClientGenerator(tmpl, h)); err != nil {
		return nil, errors.Wrapf(
			err,
			"Error registering custom client class type",
		)
	}

	if err := system.RegisterClassType("client", "grpc", newGRPCClientGenerator(tmpl, h)); err != nil {
		return nil, errors.Wrapf(
			err,
			"Error registering grpc client class type",
		)
	}

	if err := system.RegisterClass(ModuleClass{
		Name:       "middleware",
		NamePlural: "middlewares",
		ClassType:  MultiModule,
		DependsOn:  []string{"client"},
	}); err != nil {
		return nil, errors.Wrapf(
			err,
			"Error registering middleware class",
		)
	}

	if err := system.RegisterClassType("middleware", "http", &MiddlewareGenerator{
		templates:     tmpl,
		packageHelper: h,
	}); err != nil {
		return nil, errors.Wrapf(
			err,
			"Error registering Gateway middleware class type",
		)
	}

	if err := system.RegisterClassType("middleware", "tchannel", &MiddlewareGenerator{
		templates:     tmpl,
		packageHelper: h,
	}); err != nil {
		return nil, errors.Wrapf(
			err,
			"Error registering Gateway middleware class type",
		)
	}

	// Register endpoint module class and type generators
	if err := system.RegisterClass(ModuleClass{
		Name:       "endpoint",
		NamePlural: "endpoints",
		ClassType:  MultiModule,
		DependsOn:  []string{"client", "middleware"},
	}); err != nil {
		return nil, errors.Wrapf(err, "Error registering endpoint class")
	}

	if err := system.RegisterClassType("endpoint", "http", &EndpointGenerator{
		templates:     tmpl,
		packageHelper: h,
	}); err != nil {
		return nil, errors.Wrapf(
			err,
			"Error registering HTTP endpoint class type",
		)
	}

	if err := system.RegisterClassType("endpoint", "tchannel", &EndpointGenerator{
		templates:     tmpl,
		packageHelper: h,
	}); err != nil {
		return nil, errors.Wrapf(
			err,
			"Error registering TChannel endpoint class type",
		)
	}

	if err := system.RegisterClass(ModuleClass{
		Name:       "service",
		NamePlural: "services",
		ClassType:  MultiModule,
		DependsOn:  []string{"endpoint"},
	}); err != nil {
		return nil, errors.Wrapf(
			err,
			"Error registering service class",
		)
	}

	if err := system.RegisterClassType("service", "gateway",
		NewGatewayServiceGenerator(tmpl, h)); err != nil {
		return nil, errors.Wrapf(
			err,
			"Error registering Gateway service class type",
		)
	}

	return system, nil
}