rename Subsystem -> Module, add NewLifecycleL
This commit is contained in:
49
module.go
Normal file
49
module.go
Normal file
@@ -0,0 +1,49 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
)
|
||||
|
||||
// Module represents a sub-system of the application, with its setup and
|
||||
// teardown functions and dependencies.
|
||||
type Module struct {
|
||||
logger *slog.Logger
|
||||
name string
|
||||
setup setupFn
|
||||
teardown teardownFn
|
||||
depends []*Module
|
||||
}
|
||||
|
||||
// ModuleOpts contains user-exposed options when defining a module.
|
||||
type ModuleOpts struct {
|
||||
// Setup is the setup function for the module.
|
||||
Setup setupFn
|
||||
// Teardown is the teardown function for the module.
|
||||
Teardown teardownFn
|
||||
// Depends is a list of modules that this module depends on.
|
||||
Depends []*Module
|
||||
}
|
||||
|
||||
// NewModule creates a new Module instance with the given name and options.
|
||||
func NewModule(name string, opts ModuleOpts) *Module {
|
||||
return &Module{
|
||||
name: name,
|
||||
setup: opts.Setup,
|
||||
teardown: opts.Teardown,
|
||||
depends: opts.Depends,
|
||||
}
|
||||
}
|
||||
|
||||
// Logger returns the logger for the module.
|
||||
func (s *Module) Logger() *slog.Logger {
|
||||
if s.logger == nil {
|
||||
panic(fmt.Sprintf("subsytem %s used before logger was initialized", s.name))
|
||||
}
|
||||
return s.logger
|
||||
}
|
||||
|
||||
// Name returns the name of the module.
|
||||
func (s *Module) Name() string {
|
||||
return s.name
|
||||
}
|
||||
Reference in New Issue
Block a user