summaryrefslogtreecommitdiff
path: root/lib/instance.go
diff options
context:
space:
mode:
authorLoyalsoldier <[email protected]>2024-11-02 10:59:58 +0800
committerLoyalsoldier <[email protected]>2024-11-02 11:21:53 +0800
commit7f5d3a7680e791f9b3f0c1515e147e2ee437c4f1 (patch)
treeeccecc4177636c16f4eec30d2d8668825c062852 /lib/instance.go
parentfd436022b0021691cc7f0b7803136d268178af26 (diff)
Refactor: lookup command
Diffstat (limited to 'lib/instance.go')
-rw-r--r--lib/instance.go88
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
+}