summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)
+}