11package filter
22
3+ var extractChain = func (rules []Filter ) []Condition {
4+ var conditions []Condition
5+ for _ , rule := range rules {
6+ conditions = append (conditions , rule .ExtractConditions ()... )
7+ }
8+
9+ return conditions
10+ }
11+
312// All represents a filter chain type that matches when all of its Rules matches.
413type All struct {
514 rules []Filter
@@ -20,6 +29,10 @@ func (a *All) Eval(filterable Filterable) (bool, error) {
2029 return true , nil
2130}
2231
32+ func (a * All ) ExtractConditions () []Condition {
33+ return extractChain (a .rules )
34+ }
35+
2336// Any represents a filter chain type that matches when at least one of its Rules matches.
2437type Any struct {
2538 rules []Filter
@@ -40,6 +53,10 @@ func (a *Any) Eval(filterable Filterable) (bool, error) {
4053 return false , nil
4154}
4255
56+ func (a * Any ) ExtractConditions () []Condition {
57+ return extractChain (a .rules )
58+ }
59+
4360// None represents a filter chain type that matches when none of its Rules matches.
4461type None struct {
4562 rules []Filter
@@ -60,115 +77,141 @@ func (n *None) Eval(filterable Filterable) (bool, error) {
6077 return true , nil
6178}
6279
80+ func (n * None ) ExtractConditions () []Condition {
81+ return extractChain (n .rules )
82+ }
83+
6384// Condition represents a single filter condition.
6485type Condition struct {
65- column string
66- value string
86+ Column string
87+ Value string
6788}
6889
69- func NewCondition (column string , value string ) * Condition {
70- return & Condition {
71- column : column ,
72- value : value ,
90+ func NewCondition (column string , value string ) Condition {
91+ return Condition {
92+ Column : column ,
93+ Value : value ,
7394 }
7495}
7596
76- type Exists Condition
97+ func (e Condition ) ExtractConditions () []Condition {
98+ return []Condition {e }
99+ }
100+
101+ type Exists struct {
102+ Condition
103+ }
77104
78105func NewExists (column string ) * Exists {
79- return & Exists {column : column }
106+ return & Exists {Condition { Column : column } }
80107}
81108
82109func (e * Exists ) Eval (filterable Filterable ) (bool , error ) {
83- return filterable .EvalExists (e .column ), nil
110+ return filterable .EvalExists (e .Column ), nil
84111}
85112
86- type Equal Condition
113+ type Equal struct {
114+ Condition
115+ }
87116
88117func (e * Equal ) Eval (filterable Filterable ) (bool , error ) {
89- match , err := filterable .EvalEqual (e .column , e .value )
118+ match , err := filterable .EvalEqual (e .Column , e .Value )
90119 if err != nil {
91120 return false , err
92121 }
93122
94123 return match , nil
95124}
96125
97- type UnEqual Condition
126+ type UnEqual struct {
127+ Condition
128+ }
98129
99130func (u * UnEqual ) Eval (filterable Filterable ) (bool , error ) {
100- match , err := filterable .EvalEqual (u .column , u .value )
131+ match , err := filterable .EvalEqual (u .Column , u .Value )
101132 if err != nil {
102133 return false , err
103134 }
104135
105- return filterable .EvalExists (u .column ) && ! match , nil
136+ return filterable .EvalExists (u .Column ) && ! match , nil
106137}
107138
108- type Like Condition
139+ type Like struct {
140+ Condition
141+ }
109142
110143func (l * Like ) Eval (filterable Filterable ) (bool , error ) {
111- match , err := filterable .EvalLike (l .column , l .value )
144+ match , err := filterable .EvalLike (l .Column , l .Value )
112145 if err != nil {
113146 return false , err
114147 }
115148
116149 return match , nil
117150}
118151
119- type Unlike Condition
152+ type Unlike struct {
153+ Condition
154+ }
120155
121156func (u * Unlike ) Eval (filterable Filterable ) (bool , error ) {
122- match , err := filterable .EvalLike (u .column , u .value )
157+ match , err := filterable .EvalLike (u .Column , u .Value )
123158 if err != nil {
124159 return false , err
125160 }
126161
127- return filterable .EvalExists (u .column ) && ! match , nil
162+ return filterable .EvalExists (u .Column ) && ! match , nil
128163}
129164
130- type LessThan Condition
165+ type LessThan struct {
166+ Condition
167+ }
131168
132169func (less * LessThan ) Eval (filterable Filterable ) (bool , error ) {
133- match , err := filterable .EvalLess (less .column , less .value )
170+ match , err := filterable .EvalLess (less .Column , less .Value )
134171 if err != nil {
135172 return false , err
136173 }
137174
138175 return match , nil
139176}
140177
141- type LessThanOrEqual Condition
178+ type LessThanOrEqual struct {
179+ Condition
180+ }
142181
143182func (loe * LessThanOrEqual ) Eval (filterable Filterable ) (bool , error ) {
144- match , err := filterable .EvalLessOrEqual (loe .column , loe .value )
183+ match , err := filterable .EvalLessOrEqual (loe .Column , loe .Value )
145184 if err != nil {
146185 return false , err
147186 }
148187
149188 return match , nil
150189}
151190
152- type GreaterThan Condition
191+ type GreaterThan struct {
192+ Condition
193+ }
153194
154195func (g * GreaterThan ) Eval (filterable Filterable ) (bool , error ) {
155- match , err := filterable .EvalLessOrEqual (g .column , g .value )
196+ match , err := filterable .EvalLessOrEqual (g .Column , g .Value )
156197 if err != nil {
157198 return false , err
158199 }
159200
160- return filterable .EvalExists (g .column ) && ! match , nil
201+ return filterable .EvalExists (g .Column ) && ! match , nil
161202}
162203
163- type GreaterThanOrEqual Condition
204+ type GreaterThanOrEqual struct {
205+ Condition
206+ }
164207
165208func (goe * GreaterThanOrEqual ) Eval (filterable Filterable ) (bool , error ) {
166- match , err := filterable .EvalLess (goe .column , goe .value )
209+ match , err := filterable .EvalLess (goe .Column , goe .Value )
167210 if err != nil {
168211 return false , err
169212 }
170213
171- return filterable .EvalExists (goe .column ) && ! match , nil
214+ return filterable .EvalExists (goe .Column ) && ! match , nil
172215}
173216
174217var (
0 commit comments