/
multi.go
64 lines (56 loc) · 1.73 KB
/
multi.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
package binutil
import "fmt"
func NewMulti(steps ...string) (_ *MultiPipeline, err error) {
pipes := make(map[string]*Pipeline, len(steps))
for _, step := range steps {
var pipe *Pipeline
if pipe, err = New(step); err != nil {
return nil, err
}
pipes[step] = pipe
}
return &MultiPipeline{steps: pipes}, nil
}
// MultiPipeline is able to convert input data type to multiple output types.
type MultiPipeline struct {
steps map[string]*Pipeline
}
// Bin2Bin transforms binary input data into binary output data for the named step.
func (p *MultiPipeline) Bin2Bin(name string, in []byte) (_ []byte, err error) {
pipe, ok := p.steps[name]
if !ok {
return nil, fmt.Errorf("no pipeline named %q", name)
}
return pipe.Bin2Bin(in)
}
// Bin2Str transforms binary input data into a string representation for the named step.
func (p *MultiPipeline) Bin2Str(name string, in []byte) (out string, err error) {
pipe, ok := p.steps[name]
if !ok {
return "", fmt.Errorf("no pipeline named %q", name)
}
return pipe.Bin2Str(in)
}
// Str2Bin transforms binary input data into binary output data for the named step.
func (p *MultiPipeline) Str2Bin(name, in string) (out []byte, err error) {
pipe, ok := p.steps[name]
if !ok {
return nil, fmt.Errorf("no pipeline named %q", name)
}
return pipe.Str2Bin(in)
}
// Str2Str transforms string input data into a different string representation for the named step.
func (p *MultiPipeline) Str2Str(name, in string) (out string, err error) {
pipe, ok := p.steps[name]
if !ok {
return "", fmt.Errorf("no pipeline named %q", name)
}
return pipe.Str2Str(in)
}
func (p *MultiPipeline) MustBin2Str(name string, in []byte) string {
out, err := p.Bin2Str(name, in)
if err != nil {
panic(err)
}
return out
}