-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathlogical_matcher.go
72 lines (60 loc) · 1.64 KB
/
logical_matcher.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
package wiremock
import (
"encoding/json"
)
type LogicalMatcher struct {
operator string
operands []BasicParamMatcher
}
// MarshalJSON returns the JSON encoding of the matcher.
func (m LogicalMatcher) MarshalJSON() ([]byte, error) {
return json.Marshal(m.ParseMatcher())
}
// ParseMatcher returns the map representation of the structure.
func (m LogicalMatcher) ParseMatcher() map[string]interface{} {
if m.operator == "not" {
return map[string]interface{}{
m.operator: m.operands[0],
}
}
return map[string]interface{}{
m.operator: m.operands,
}
}
// Or returns a logical OR of the current matcher and the given matcher.
func (m LogicalMatcher) Or(matcher BasicParamMatcher) BasicParamMatcher {
if m.operator == "or" {
m.operands = append(m.operands, matcher)
return m
}
return Or(m, matcher)
}
// And returns a logical AND of the current matcher and the given matcher.
func (m LogicalMatcher) And(matcher BasicParamMatcher) BasicParamMatcher {
if m.operator == "and" {
m.operands = append(m.operands, matcher)
return m
}
return And(m, matcher)
}
// Or returns a logical OR of the list of matchers.
func Or(matchers ...BasicParamMatcher) LogicalMatcher {
return LogicalMatcher{
operator: "or",
operands: matchers,
}
}
// And returns a logical AND of the list of matchers.
func And(matchers ...BasicParamMatcher) LogicalMatcher {
return LogicalMatcher{
operator: "and",
operands: matchers,
}
}
// Not returns a logical NOT of the given matcher. Required wiremock version >= 3.0.0
func Not(matcher BasicParamMatcher) LogicalMatcher {
return LogicalMatcher{
operator: "not",
operands: []BasicParamMatcher{matcher},
}
}