mirror of
https://github.com/v2fly/v2ray-core.git
synced 2026-01-02 07:25:19 -05:00
unified config loader
This commit is contained in:
47
common/loader/loader.go
Normal file
47
common/loader/loader.go
Normal file
@@ -0,0 +1,47 @@
|
||||
package loader
|
||||
|
||||
import (
|
||||
"errors"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrConfigIDKeyNotFound = errors.New("Config ID key is not found.")
|
||||
ErrConfigIDExists = errors.New("Config ID already exists.")
|
||||
ErrUnknownConfigID = errors.New("Unknown config ID.")
|
||||
)
|
||||
|
||||
type ConfigCreator func() interface{}
|
||||
|
||||
type ConfigLoader interface {
|
||||
RegisterCreator(string, ConfigCreator) error
|
||||
CreateConfig(string) (interface{}, error)
|
||||
Load([]byte) (interface{}, error)
|
||||
LoadWithID([]byte, string) (interface{}, error)
|
||||
}
|
||||
|
||||
type BaseConfigLoader struct {
|
||||
creators map[string]ConfigCreator
|
||||
}
|
||||
|
||||
func NewBaseConfigLoader() *BaseConfigLoader {
|
||||
return &BaseConfigLoader{
|
||||
creators: make(map[string]ConfigCreator),
|
||||
}
|
||||
}
|
||||
|
||||
func (this *BaseConfigLoader) RegisterCreator(id string, creator ConfigCreator) error {
|
||||
if _, found := this.creators[id]; found {
|
||||
return ErrConfigIDExists
|
||||
}
|
||||
|
||||
this.creators[id] = creator
|
||||
return nil
|
||||
}
|
||||
|
||||
func (this *BaseConfigLoader) CreateConfig(id string) (interface{}, error) {
|
||||
creator, found := this.creators[id]
|
||||
if !found {
|
||||
return nil, ErrUnknownConfigID
|
||||
}
|
||||
return creator(), nil
|
||||
}
|
||||
Reference in New Issue
Block a user