diff options
| author | Loyalsoldier <[email protected]> | 2024-11-02 10:59:58 +0800 |
|---|---|---|
| committer | Loyalsoldier <[email protected]> | 2024-11-02 11:21:53 +0800 |
| commit | 7f5d3a7680e791f9b3f0c1515e147e2ee437c4f1 (patch) | |
| tree | eccecc4177636c16f4eec30d2d8668825c062852 /lib/instance.go | |
| parent | fd436022b0021691cc7f0b7803136d268178af26 (diff) | |
Refactor: lookup command
Diffstat (limited to 'lib/instance.go')
| -rw-r--r-- | lib/instance.go | 88 |
1 files changed, 59 insertions, 29 deletions
diff --git a/lib/instance.go b/lib/instance.go index 0a16442e..d2f5e00b 100644 --- a/lib/instance.go +++ b/lib/instance.go @@ -9,21 +9,31 @@ import ( "github.com/tailscale/hujson" ) -type Instance struct { - config *config +type Instance interface { + InitConfig(configFile string) error + InitConfigFromBytes(content []byte) error + AddInput(InputConverter) + AddOutput(OutputConverter) + ResetInput() + ResetOutput() + RunInput(Container) error + RunOutput(Container) error + Run() error +} + +type instance struct { input []InputConverter output []OutputConverter } -func NewInstance() (*Instance, error) { - return &Instance{ - config: new(config), +func NewInstance() (Instance, error) { + return &instance{ input: make([]InputConverter, 0), output: make([]OutputConverter, 0), }, nil } -func (i *Instance) Init(configFile string) error { +func (i *instance) InitConfig(configFile string) error { var content []byte var err error configFile = strings.TrimSpace(configFile) @@ -36,50 +46,48 @@ func (i *Instance) Init(configFile string) error { return err } + return i.InitConfigFromBytes(content) +} + +func (i *instance) InitConfigFromBytes(content []byte) error { + config := new(config) + // Support JSON with comments and trailing commas content, _ = hujson.Standardize(content) - if err := json.Unmarshal(content, &i.config); err != nil { + if err := json.Unmarshal(content, &config); err != nil { return err } - for _, input := range i.config.Input { + for _, input := range config.Input { i.input = append(i.input, input.converter) } - for _, output := range i.config.Output { + for _, output := range config.Output { i.output = append(i.output, output.converter) } return nil } -func (i *Instance) InitFromBytes(content []byte) error { - // Support JSON with comments and trailing commas - content, _ = hujson.Standardize(content) - - if err := json.Unmarshal(content, &i.config); err != nil { - return err - } - - for _, input := range i.config.Input { - i.input = append(i.input, input.converter) - } +func (i *instance) AddInput(ic InputConverter) { + i.input = append(i.input, ic) +} - for _, output := range i.config.Output { - i.output = append(i.output, output.converter) - } +func (i *instance) AddOutput(oc OutputConverter) { + i.output = append(i.output, oc) +} - return nil +func (i *instance) ResetInput() { + i.input = make([]InputConverter, 0) } -func (i *Instance) Run() error { - if len(i.input) == 0 || len(i.output) == 0 { - return errors.New("input type and output type must be specified") - } +func (i *instance) ResetOutput() { + i.output = make([]OutputConverter, 0) +} +func (i *instance) RunInput(container Container) error { var err error - container := NewContainer() for _, ic := range i.input { container, err = ic.Input(container) if err != nil { @@ -87,6 +95,10 @@ func (i *Instance) Run() error { } } + return nil +} + +func (i *instance) RunOutput(container Container) error { for _, oc := range i.output { if err := oc.Output(container); err != nil { return err @@ -95,3 +107,21 @@ func (i *Instance) Run() error { return nil } + +func (i *instance) Run() error { + if len(i.input) == 0 || len(i.output) == 0 { + return errors.New("input type and output type must be specified") + } + + container := NewContainer() + + if err := i.RunInput(container); err != nil { + return err + } + + if err := i.RunOutput(container); err != nil { + return err + } + + return nil +} |
