lifecycle_legacy.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package adapter
  2. func LegacyStart(starter any, stage StartStage) error {
  3. if lifecycle, isLifecycle := starter.(Lifecycle); isLifecycle {
  4. return lifecycle.Start(stage)
  5. }
  6. switch stage {
  7. case StartStateInitialize:
  8. if preStarter, isPreStarter := starter.(interface {
  9. PreStart() error
  10. }); isPreStarter {
  11. return preStarter.PreStart()
  12. }
  13. case StartStateStart:
  14. if starter, isStarter := starter.(interface {
  15. Start() error
  16. }); isStarter {
  17. return starter.Start()
  18. }
  19. case StartStateStarted:
  20. if postStarter, isPostStarter := starter.(interface {
  21. PostStart() error
  22. }); isPostStarter {
  23. return postStarter.PostStart()
  24. }
  25. }
  26. return nil
  27. }
  28. type lifecycleServiceWrapper struct {
  29. SimpleLifecycle
  30. name string
  31. }
  32. func NewLifecycleService(service SimpleLifecycle, name string) LifecycleService {
  33. return &lifecycleServiceWrapper{
  34. SimpleLifecycle: service,
  35. name: name,
  36. }
  37. }
  38. func (l *lifecycleServiceWrapper) Name() string {
  39. return l.name
  40. }
  41. func (l *lifecycleServiceWrapper) Start(stage StartStage) error {
  42. return LegacyStart(l.SimpleLifecycle, stage)
  43. }
  44. func (l *lifecycleServiceWrapper) Close() error {
  45. return l.SimpleLifecycle.Close()
  46. }