mirror of
https://github.com/jwetzell/showbridge-go.git
synced 2026-04-27 05:15:47 +00:00
switch module instances to map on id
This commit is contained in:
30
router.go
30
router.go
@@ -18,14 +18,15 @@ import (
|
|||||||
type Router struct {
|
type Router struct {
|
||||||
contextCancel context.CancelFunc
|
contextCancel context.CancelFunc
|
||||||
Context context.Context
|
Context context.Context
|
||||||
// TODO(jwetzell): change to map for faster lookup
|
ModuleInstances map[string]module.Module
|
||||||
ModuleInstances []module.Module
|
// TODO(jwetzell): change to something easier to lookup
|
||||||
RouteInstances []route.Route
|
RouteInstances []route.Route
|
||||||
moduleWait sync.WaitGroup
|
moduleWait sync.WaitGroup
|
||||||
logger *slog.Logger
|
logger *slog.Logger
|
||||||
tracer trace.Tracer
|
tracer trace.Tracer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(jwetzell): support removing module
|
||||||
func (r *Router) addModule(moduleDecl config.ModuleConfig) error {
|
func (r *Router) addModule(moduleDecl config.ModuleConfig) error {
|
||||||
if moduleDecl.Id == "" {
|
if moduleDecl.Id == "" {
|
||||||
return errors.New("module id cannot be empty")
|
return errors.New("module id cannot be empty")
|
||||||
@@ -35,25 +36,21 @@ func (r *Router) addModule(moduleDecl config.ModuleConfig) error {
|
|||||||
return errors.New("module type not defined")
|
return errors.New("module type not defined")
|
||||||
}
|
}
|
||||||
|
|
||||||
moduleInstanceExists := false
|
_, ok = r.ModuleInstances[moduleDecl.Id]
|
||||||
for _, moduleInstance := range r.ModuleInstances {
|
if ok {
|
||||||
if moduleInstance.Id() == moduleDecl.Id {
|
return errors.New("module id already exists")
|
||||||
moduleInstanceExists = true
|
|
||||||
return errors.New("duplicate module id")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if !moduleInstanceExists {
|
|
||||||
moduleInstance, err := moduleInfo.New(moduleDecl)
|
moduleInstance, err := moduleInfo.New(moduleDecl)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
r.ModuleInstances = append(r.ModuleInstances, moduleInstance)
|
r.ModuleInstances[moduleDecl.Id] = moduleInstance
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(jwetzell): support removing route
|
||||||
func (r *Router) addRoute(routeDecl config.RouteConfig) error {
|
func (r *Router) addRoute(routeDecl config.RouteConfig) error {
|
||||||
routeInstance, err := route.NewRoute(routeDecl)
|
routeInstance, err := route.NewRoute(routeDecl)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -64,18 +61,17 @@ func (r *Router) addRoute(routeDecl config.RouteConfig) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *Router) getModule(moduleId string) module.Module {
|
func (r *Router) getModule(moduleId string) module.Module {
|
||||||
for _, moduleInstance := range r.ModuleInstances {
|
moduleInstance, ok := r.ModuleInstances[moduleId]
|
||||||
if moduleInstance.Id() == moduleId {
|
if !ok {
|
||||||
return moduleInstance
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
|
}
|
||||||
|
return moduleInstance
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRouter(config config.Config, tracer trace.Tracer) (*Router, []module.ModuleError, []route.RouteError) {
|
func NewRouter(config config.Config, tracer trace.Tracer) (*Router, []module.ModuleError, []route.RouteError) {
|
||||||
|
|
||||||
router := Router{
|
router := Router{
|
||||||
ModuleInstances: []module.Module{},
|
ModuleInstances: make(map[string]module.Module),
|
||||||
RouteInstances: []route.Route{},
|
RouteInstances: []route.Route{},
|
||||||
logger: slog.Default().With("component", "router"),
|
logger: slog.Default().With("component", "router"),
|
||||||
tracer: tracer,
|
tracer: tracer,
|
||||||
|
|||||||
Reference in New Issue
Block a user