diff options
author | Silvan Jegen <s.jegen@gmail.com> | 2017-01-20 21:03:08 +0100 |
---|---|---|
committer | Silvan Jegen <s.jegen@gmail.com> | 2017-01-20 21:03:08 +0100 |
commit | 5c24009f2b1fd5a7e5abd4dc33ebdec0c6eaaf25 (patch) | |
tree | 7447a384efe6a5b45106fde621e53bdf38ad608a | |
parent | ba15251035961020363fa5aff95ff0a361023af9 (diff) |
Introduce registry
We introduce a registry that contains maps to builder functions. These
builder functions return the interface implementation of the modules
specified in the configuration.
We also make the input module type use the registry. All other module
types still have to be converted.
-rw-r--r-- | conf/parser.go | 7 | ||||
-rw-r--r-- | input/http/http.go (renamed from input/http.go) | 20 | ||||
-rw-r--r-- | input/inputinterface.go (renamed from input/interface.go) | 0 | ||||
-rw-r--r-- | input/stdin/stdin.go (renamed from input/stdin.go) | 10 | ||||
-rw-r--r-- | main.go | 4 | ||||
-rw-r--r-- | registry/registry.go | 20 |
6 files changed, 55 insertions, 6 deletions
diff --git a/conf/parser.go b/conf/parser.go index 6aca3aa..bdec888 100644 --- a/conf/parser.go +++ b/conf/parser.go @@ -19,6 +19,8 @@ import ( "fmt" "io" "os" + + "github.com/Shugyousha/stasher/registry" ) // Having a Config to Manager function could be nice? Or we could just @@ -55,6 +57,11 @@ func NewConfig(r io.Reader) *Config { func (p *parser) startparsing() { inputmdesc := p.module("input") fmt.Fprintf(os.Stderr, "input moduledesc: %#v\n", inputmdesc) + inputfunc, ok := registry.Inputregistry[inputmdesc.name] + if !ok { + fmt.Fprintf(os.Stderr, "input module is not known: %q\n", inputmdesc.name) + } + inputfunc(nil) filtermdesc := p.module("filter") fmt.Fprintf(os.Stderr, "filter moduledesc: %#v\n", filtermdesc) diff --git a/input/http.go b/input/http/http.go index 285f1f6..71a0340 100644 --- a/input/http.go +++ b/input/http/http.go @@ -1,20 +1,36 @@ -package input +package http import ( "fmt" "io/ioutil" "net/http" + "github.com/Shugyousha/stasher/input" + "github.com/Shugyousha/stasher/registry" "github.com/Shugyousha/stasher/work" ) +func init() { + registry.Inputregistry["http"] = New +} + type HTTPInput struct { retchan chan *work.Work prefix string port string } -func NewHTTPInput(prefix, port string) *HTTPInput { +func New(conf map[string]string) input.Input { + prefix := conf["prefix"] + if prefix == "" { + fmt.Printf("Need a prefix when setting up http input\n") + return nil + } + port := conf["port"] + if port == "" { + fmt.Printf("Need a port number when setting up http input\n") + return nil + } return &HTTPInput{prefix: prefix, port: port} } diff --git a/input/interface.go b/input/inputinterface.go index 1743249..1743249 100644 --- a/input/interface.go +++ b/input/inputinterface.go diff --git a/input/stdin.go b/input/stdin/stdin.go index 25840ef..fa4d21f 100644 --- a/input/stdin.go +++ b/input/stdin/stdin.go @@ -1,4 +1,4 @@ -package input +package stdin import ( "bufio" @@ -6,14 +6,20 @@ import ( "io" "os" + "github.com/Shugyousha/stasher/input" + "github.com/Shugyousha/stasher/registry" "github.com/Shugyousha/stasher/work" ) +func init() { + registry.Inputregistry["input"] = New +} + type StdinInput struct { retchan chan *work.Work } -func NewStdin() *StdinInput { +func New(map[string]string) input.Input { return &StdinInput{} } @@ -8,7 +8,7 @@ import ( "github.com/Shugyousha/stasher/conf" "github.com/Shugyousha/stasher/filter" - "github.com/Shugyousha/stasher/input" + "github.com/Shugyousha/stasher/input/stdin" "github.com/Shugyousha/stasher/output" ) @@ -26,7 +26,7 @@ func main() { ffmap["F"] = func(s string) string { return strings.ToUpper(s) } m := Manager{ - Input: input.NewStdin(), + Input: stdin.New(nil), Filter: filter.NewStringFilter(ffmap), Output: &output.StdoutOutput{}, } diff --git a/registry/registry.go b/registry/registry.go new file mode 100644 index 0000000..5b285b8 --- /dev/null +++ b/registry/registry.go @@ -0,0 +1,20 @@ +package registry + +import ( + "github.com/Shugyousha/stasher/input" + "github.com/Shugyousha/stasher/work" +) + +var ( + Inputregistry map[string]func(map[string]string) input.Input + Filterregistry map[string]func(map[string]string) Filter + Outputregistry map[string]func(map[string]string) Output +) + +type Filter interface { + Filter(*work.Work) *work.Work +} + +type Output interface { + Output(*work.Work) +} |