-
Notifications
You must be signed in to change notification settings - Fork 0
/
builders.go
99 lines (81 loc) · 2.99 KB
/
builders.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package builders
import (
"github.com/Focinfi/go-pipeline"
"github.com/Focinfi/misa/builders/formatters"
"github.com/Focinfi/misa/builders/generators"
"github.com/Focinfi/misa/builders/gui"
"github.com/Focinfi/misa/builders/interpreters"
"github.com/Focinfi/misa/builders/io"
"github.com/Focinfi/misa/builders/iterators"
"github.com/Focinfi/misa/builders/net"
"github.com/Focinfi/misa/builders/nosql"
"github.com/Focinfi/misa/builders/os"
"github.com/Focinfi/misa/builders/parsers"
"github.com/Focinfi/misa/builders/sql"
"github.com/Focinfi/misa/builders/strings"
"github.com/Focinfi/misa/builders/utils"
)
type Builder interface {
Build() (pipeline.Handler, error)
}
type BuilderMap map[string]Builder
func (m BuilderMap) GetHandlerBuilderOK(id string) (pipeline.HandlerBuilder, bool) {
tb, ok := m[id]
if !ok {
return nil, false
}
return pipeline.HandlerBuilderFunc(func(conf map[string]interface{}) (pipeline.Handler, error) {
if len(conf) > 0 {
if err := utils.JSONUnmarshalWithMap(conf, tb); err != nil {
return nil, err
}
}
return tb.Build()
}), true
}
type SingletonBuilder struct {
Handler pipeline.Handler
}
func (b SingletonBuilder) Build() (pipeline.Handler, error) { return b.Handler, nil }
var Builders = BuilderMap{
// interpreters
"interpreter": &interpreters.Conf{},
// generators
"generator-int-range": SingletonBuilder{Handler: generators.DefaultIntRange},
"generator-time-range": SingletonBuilder{Handler: generators.DefaultTimeRange},
// io
"io-reader-clipboard": SingletonBuilder{Handler: io.DefaultReaderClipboard},
"io-writer-clipboard": SingletonBuilder{Handler: io.DefaultWriterClipboard},
"io-writer-stdout": SingletonBuilder{Handler: io.DefaultWriterStdOut},
"io-writer-file": &io.WriterFile{},
// parser
"parser-unix": SingletonBuilder{Handler: parsers.DefaultUnixParser},
"parser-json": SingletonBuilder{Handler: parsers.DefaultJSONParser},
"parser-xlsx": SingletonBuilder{Handler: parsers.DefaultXLSXParser},
"parser-base64": SingletonBuilder{Handler: parsers.DefaultBase64Parser},
// formatter
"formatter-xml": SingletonBuilder{Handler: formatters.DefaultXML},
// iterators
"iterator": &iterators.Conf{},
"iterator-map": &iterators.Conf{Type: "map"},
"iterator-reduce": &iterators.Conf{Type: "reduce"},
"iterator-select": &iterators.Conf{Type: "select"},
"iterator-chunk": &iterators.Conf{Type: "chunk"},
// string
"string-split": &strings.SeparatorConf{Type: "split"},
"string-join": &strings.SeparatorConf{Type: "join"},
"string-replace": &strings.Replacer{},
"string-regexp-all-replace": &strings.RegexpAllReplacer{},
"string-unquote": SingletonBuilder{Handler: &strings.Unquote{}},
"finder-json-attr": &strings.FinderJSONAttr{},
// net
"net-http": SingletonBuilder{Handler: net.DefaultHTTP},
// gui
"notify-desktop": &gui.DesktopNotificator{},
// sql
"mysql": &sql.MySQL{},
// nosql
"redis": &nosql.Redis{},
// os
"os-cmd-exec": &os.CmdExec{},
}