@@ -20,6 +20,10 @@ func (a *All) Eval(filterable Filterable) (bool, error) {
2020 return true , nil
2121}
2222
23+ func (a * All ) ExtractConditions () []Condition {
24+ return extractConditions (a .rules )
25+ }
26+
2327// Any represents a filter chain type that matches when at least one of its Rules matches.
2428type Any struct {
2529 rules []Filter
@@ -40,6 +44,10 @@ func (a *Any) Eval(filterable Filterable) (bool, error) {
4044 return false , nil
4145}
4246
47+ func (a * Any ) ExtractConditions () []Condition {
48+ return extractConditions (a .rules )
49+ }
50+
4351// None represents a filter chain type that matches when none of its Rules matches.
4452type None struct {
4553 rules []Filter
@@ -60,115 +68,151 @@ func (n *None) Eval(filterable Filterable) (bool, error) {
6068 return true , nil
6169}
6270
71+ func (n * None ) ExtractConditions () []Condition {
72+ return extractConditions (n .rules )
73+ }
74+
6375// Condition represents a single filter condition.
6476type Condition struct {
65- column string
66- value string
77+ Column string
78+ Value string
6779}
6880
69- func NewCondition (column string , value string ) * Condition {
70- return & Condition {
71- column : column ,
72- value : value ,
81+ func NewCondition (column string , value string ) Condition {
82+ return Condition {
83+ Column : column ,
84+ Value : value ,
7385 }
7486}
7587
76- type Exists Condition
88+ func (e Condition ) ExtractConditions () []Condition {
89+ return []Condition {e }
90+ }
91+
92+ type Exists struct {
93+ Condition
94+ }
7795
7896func NewExists (column string ) * Exists {
79- return & Exists {column : column }
97+ return & Exists {Condition { Column : column } }
8098}
8199
82100func (e * Exists ) Eval (filterable Filterable ) (bool , error ) {
83- return filterable .EvalExists (e .column ), nil
101+ return filterable .EvalExists (e .Column ), nil
84102}
85103
86- type Equal Condition
104+ type Equal struct {
105+ Condition
106+ }
87107
88108func (e * Equal ) Eval (filterable Filterable ) (bool , error ) {
89- match , err := filterable .EvalEqual (e .column , e .value )
109+ match , err := filterable .EvalEqual (e .Column , e .Value )
90110 if err != nil {
91111 return false , err
92112 }
93113
94114 return match , nil
95115}
96116
97- type UnEqual Condition
117+ type UnEqual struct {
118+ Condition
119+ }
98120
99121func (u * UnEqual ) Eval (filterable Filterable ) (bool , error ) {
100- match , err := filterable .EvalEqual (u .column , u .value )
122+ match , err := filterable .EvalEqual (u .Column , u .Value )
101123 if err != nil {
102124 return false , err
103125 }
104126
105- return filterable .EvalExists (u .column ) && ! match , nil
127+ return filterable .EvalExists (u .Column ) && ! match , nil
106128}
107129
108- type Like Condition
130+ type Like struct {
131+ Condition
132+ }
109133
110134func (l * Like ) Eval (filterable Filterable ) (bool , error ) {
111- match , err := filterable .EvalLike (l .column , l .value )
135+ match , err := filterable .EvalLike (l .Column , l .Value )
112136 if err != nil {
113137 return false , err
114138 }
115139
116140 return match , nil
117141}
118142
119- type Unlike Condition
143+ type Unlike struct {
144+ Condition
145+ }
120146
121147func (u * Unlike ) Eval (filterable Filterable ) (bool , error ) {
122- match , err := filterable .EvalLike (u .column , u .value )
148+ match , err := filterable .EvalLike (u .Column , u .Value )
123149 if err != nil {
124150 return false , err
125151 }
126152
127- return filterable .EvalExists (u .column ) && ! match , nil
153+ return filterable .EvalExists (u .Column ) && ! match , nil
128154}
129155
130- type LessThan Condition
156+ type LessThan struct {
157+ Condition
158+ }
131159
132160func (less * LessThan ) Eval (filterable Filterable ) (bool , error ) {
133- match , err := filterable .EvalLess (less .column , less .value )
161+ match , err := filterable .EvalLess (less .Column , less .Value )
134162 if err != nil {
135163 return false , err
136164 }
137165
138166 return match , nil
139167}
140168
141- type LessThanOrEqual Condition
169+ type LessThanOrEqual struct {
170+ Condition
171+ }
142172
143173func (loe * LessThanOrEqual ) Eval (filterable Filterable ) (bool , error ) {
144- match , err := filterable .EvalLessOrEqual (loe .column , loe .value )
174+ match , err := filterable .EvalLessOrEqual (loe .Column , loe .Value )
145175 if err != nil {
146176 return false , err
147177 }
148178
149179 return match , nil
150180}
151181
152- type GreaterThan Condition
182+ type GreaterThan struct {
183+ Condition
184+ }
153185
154186func (g * GreaterThan ) Eval (filterable Filterable ) (bool , error ) {
155- match , err := filterable .EvalLessOrEqual (g .column , g .value )
187+ match , err := filterable .EvalLessOrEqual (g .Column , g .Value )
156188 if err != nil {
157189 return false , err
158190 }
159191
160- return filterable .EvalExists (g .column ) && ! match , nil
192+ return filterable .EvalExists (g .Column ) && ! match , nil
161193}
162194
163- type GreaterThanOrEqual Condition
195+ type GreaterThanOrEqual struct {
196+ Condition
197+ }
164198
165199func (goe * GreaterThanOrEqual ) Eval (filterable Filterable ) (bool , error ) {
166- match , err := filterable .EvalLess (goe .column , goe .value )
200+ match , err := filterable .EvalLess (goe .Column , goe .Value )
167201 if err != nil {
168202 return false , err
169203 }
170204
171- return filterable .EvalExists (goe .column ) && ! match , nil
205+ return filterable .EvalExists (goe .Column ) && ! match , nil
206+ }
207+
208+ // extractConditions extracts filter conditions from the specified filter rules.
209+ func extractConditions (rules []Filter ) []Condition {
210+ var conditions []Condition
211+ for _ , rule := range rules {
212+ conditions = append (conditions , rule .ExtractConditions ()... )
213+ }
214+
215+ return conditions
172216}
173217
174218var (
0 commit comments