@@ -67,7 +67,7 @@ pub enum FilterOperator {
6767 NotStartsWith ,
6868}
6969
70- #[ derive( Debug , Serialize , Deserialize ) ]
70+ #[ derive( Debug , Clone , Serialize , Deserialize ) ]
7171pub struct QueryFilter {
7272 pub member : String ,
7373 pub operator : FilterOperator ,
@@ -135,13 +135,21 @@ pub struct ConfigItem {
135135 #[ serde( skip_serializing_if = "Option::is_none" ) ]
136136 pub meta : Option < Value > ,
137137 #[ serde( skip_serializing_if = "Option::is_none" ) ]
138- pub drill_members : Option < Vec < Value > > ,
138+ pub drill_members : Option < Vec < String > > ,
139139 #[ serde( skip_serializing_if = "Option::is_none" ) ]
140- pub drill_members_grouped : Option < Value > ,
140+ pub drill_members_grouped : Option < DrillMembersGrouped > ,
141141 #[ serde( skip_serializing_if = "Option::is_none" ) ]
142142 pub granularities : Option < Vec < GranularityMeta > > ,
143143}
144144
145+ #[ derive( Debug , Clone , Serialize , Deserialize ) ]
146+ pub struct DrillMembersGrouped {
147+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
148+ pub measures : Option < Vec < String > > ,
149+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
150+ pub dimensions : Option < Vec < String > > ,
151+ }
152+
145153#[ derive( Debug , Clone , Serialize , Deserialize ) ]
146154#[ serde( rename_all = "camelCase" ) ]
147155pub struct AnnotatedConfigItem {
@@ -191,29 +199,23 @@ pub enum MemberOrMemberExpression {
191199 MemberExpression ( ParsedMemberExpression ) ,
192200}
193201
194- #[ derive( Debug , Serialize , Deserialize ) ]
202+ #[ derive( Debug , Clone , Serialize , Deserialize ) ]
195203pub struct LogicalAndFilter {
196- pub and : Vec < LogicalFilter > ,
204+ pub and : Vec < QueryFilterOrLogicalFilter > ,
197205}
198206
199- #[ derive( Debug , Serialize , Deserialize ) ]
207+ #[ derive( Debug , Clone , Serialize , Deserialize ) ]
200208pub struct LogicalOrFilter {
201- pub or : Vec < LogicalFilter > ,
202- }
203-
204- #[ derive( Debug , Serialize , Deserialize ) ]
205- pub enum QueryFilterOrLogicalFilter {
206- QueryFilter ( QueryFilter ) ,
207- LogicalAndFilter ( LogicalAndFilter ) ,
208- LogicalOrFilter ( LogicalOrFilter ) ,
209+ pub or : Vec < QueryFilterOrLogicalFilter > ,
209210}
210211
211- #[ derive( Debug , Serialize , Deserialize ) ]
212+ #[ derive( Debug , Clone , Serialize , Deserialize ) ]
212213#[ serde( untagged) ]
213- pub enum LogicalFilter {
214+ pub enum QueryFilterOrLogicalFilter {
214215 QueryFilter ( QueryFilter ) ,
215216 LogicalAndFilter ( LogicalAndFilter ) ,
216217 LogicalOrFilter ( LogicalOrFilter ) ,
218+ NormalizedQueryFilter ( NormalizedQueryFilter ) ,
217219}
218220
219221#[ derive( Debug , Serialize , Deserialize ) ]
@@ -225,7 +227,7 @@ pub struct Query {
225227 // pub dimensions: Option<Vec<MemberOrMemberExpression>>,
226228 pub dimensions : Option < Vec < String > > ,
227229 #[ serde( skip_serializing_if = "Option::is_none" ) ]
228- pub filters : Option < Vec < LogicalFilter > > ,
230+ pub filters : Option < Vec < QueryFilterOrLogicalFilter > > ,
229231 #[ serde( skip_serializing_if = "Option::is_none" ) ]
230232 pub time_dimensions : Option < Vec < QueryTimeDimension > > ,
231233 #[ serde( skip_serializing_if = "Option::is_none" ) ]
@@ -282,7 +284,7 @@ pub struct NormalizedQuery {
282284 #[ serde( skip_serializing_if = "Option::is_none" ) ]
283285 pub response_format : Option < ResultType > ,
284286 #[ serde( skip_serializing_if = "Option::is_none" ) ]
285- pub filters : Option < Vec < NormalizedQueryFilter > > ,
287+ pub filters : Option < Vec < QueryFilterOrLogicalFilter > > ,
286288 #[ serde( skip_serializing_if = "Option::is_none" ) ]
287289 pub row_limit : Option < u32 > ,
288290 #[ serde( skip_serializing_if = "Option::is_none" ) ]
0 commit comments