summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSilvan Jegen <s.jegen@gmail.com>2017-01-20 21:03:08 +0100
committerSilvan Jegen <s.jegen@gmail.com>2017-01-20 21:03:08 +0100
commit5c24009f2b1fd5a7e5abd4dc33ebdec0c6eaaf25 (patch)
tree7447a384efe6a5b45106fde621e53bdf38ad608a
parentba15251035961020363fa5aff95ff0a361023af9 (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.go7
-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.go4
-rw-r--r--registry/registry.go20
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{}
}
diff --git a/main.go b/main.go
index 7a3bb88..a52b5ac 100644
--- a/main.go
+++ b/main.go
@@ -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)
+}