loader.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package loader
  2. import (
  3. "errors"
  4. )
  5. var (
  6. ErrConfigIDKeyNotFound = errors.New("Config ID key is not found.")
  7. ErrConfigIDExists = errors.New("Config ID already exists.")
  8. ErrUnknownConfigID = errors.New("Unknown config ID.")
  9. )
  10. type ConfigCreator func() interface{}
  11. type ConfigLoader interface {
  12. RegisterCreator(string, ConfigCreator) error
  13. CreateConfig(string) (interface{}, error)
  14. Load([]byte) (interface{}, error)
  15. LoadWithID([]byte, string) (interface{}, error)
  16. }
  17. type BaseConfigLoader struct {
  18. creators map[string]ConfigCreator
  19. }
  20. func NewBaseConfigLoader() *BaseConfigLoader {
  21. return &BaseConfigLoader{
  22. creators: make(map[string]ConfigCreator),
  23. }
  24. }
  25. func (this *BaseConfigLoader) RegisterCreator(id string, creator ConfigCreator) error {
  26. if _, found := this.creators[id]; found {
  27. return ErrConfigIDExists
  28. }
  29. this.creators[id] = creator
  30. return nil
  31. }
  32. func (this *BaseConfigLoader) CreateConfig(id string) (interface{}, error) {
  33. creator, found := this.creators[id]
  34. if !found {
  35. return nil, ErrUnknownConfigID
  36. }
  37. return creator(), nil
  38. }