-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathconditional_processor.go
84 lines (69 loc) · 1.76 KB
/
conditional_processor.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
package pluto
type ConditionalProcessor struct {
main Processor
success, fail ProcessorBucket
}
func NewConditionalProcessor(processor Processor) *ConditionalProcessor {
return &ConditionalProcessor{
main: processor,
success: ProcessorBucket{Processors: make([]Processor, 0)},
fail: ProcessorBucket{Processors: make([]Processor, 0)},
}
}
func (s *ConditionalProcessor) Process(processable Processable) (Processable, bool) {
res, ok := s.main.Process(processable)
if ok {
if len(s.success.Processors) >= 0 {
s.success.Process(res)
}
return res, true
}
if len(s.fail.Processors) >= 0 {
s.fail.Process(processable)
}
return processable, false
}
func (s *ConditionalProcessor) Success(success ProcessorBucket) *ConditionalProcessor {
s.success = success
return s
}
func (s *ConditionalProcessor) Fail(fail ProcessorBucket) *ConditionalProcessor {
s.fail = fail
return s
}
func (s *ConditionalProcessor) GetDescriptor() ProcessorDescriptor {
return ProcessorDescriptor{
Name: "Conditional Processor",
Description: "Description",
Input: "",
Output: "",
}
}
type FinalProcessor struct {
main Processor
final Processor
}
func NewFinalProcessor(processor Processor) *FinalProcessor {
return &FinalProcessor{
main: processor,
}
}
func (s *FinalProcessor) Process(processable Processable) (Processable, bool) {
res, ok := s.main.Process(processable)
if s.final != nil {
return s.final.Process(res)
}
return res, ok
}
func (s *FinalProcessor) Final(final Processor) *FinalProcessor {
s.final = final
return s
}
func (s *FinalProcessor) GetDescriptor() ProcessorDescriptor {
return ProcessorDescriptor{
Name: "Final Processor",
Description: "Description",
Input: "",
Output: "",
}
}