94
94
}
95
95
}
96
96
97
+ macro_rules! body_to_rows {
98
+ ( $body: ident, $this: ident) => { {
99
+ let metadata_res: error:: Result <RowsMetadata > = $body
100
+ . as_rows_metadata( )
101
+ . ok_or( "Pager query should yield a vector of rows" . into( ) ) ;
102
+ let metadata = metadata_res?;
103
+
104
+ $this. pager_state. has_more_pages =
105
+ Some ( RowsMetadataFlag :: has_has_more_pages( metadata. flags) ) ;
106
+ $this. pager_state. cursor = metadata. paging_state;
107
+ $body. into_rows( )
108
+ . ok_or( "Pager query should yield a vector of rows" . into( ) )
109
+ } } ;
110
+ }
111
+
97
112
pub struct QueryPager < ' a , Q : ToString , P : ' a > {
98
113
pager : & ' a mut P ,
99
114
pub pager_state : PagerState ,
@@ -128,16 +143,7 @@ impl<
128
143
. query_with_params ( self . query . to_string ( ) , params. finalize ( ) )
129
144
. and_then ( |frame| frame. get_body ( ) ) ?;
130
145
131
- let metadata_res: error:: Result < RowsMetadata > = body
132
- . as_rows_metadata ( )
133
- . ok_or ( "Pager query should yield a vector of rows" . into ( ) ) ;
134
- let metadata = metadata_res?;
135
-
136
- self . pager_state . has_more_pages =
137
- Some ( RowsMetadataFlag :: has_has_more_pages ( metadata. flags . clone ( ) ) ) ;
138
- self . pager_state . cursor = metadata. paging_state . clone ( ) ;
139
- body. into_rows ( )
140
- . ok_or ( "Pager query should yield a vector of rows" . into ( ) )
146
+ body_to_rows ! ( body, self )
141
147
}
142
148
143
149
pub fn has_more ( & self ) -> bool {
@@ -166,8 +172,9 @@ impl<
166
172
{
167
173
pub fn next ( & mut self ) -> error:: Result < Vec < Row > > {
168
174
let mut params = QueryParamsBuilder :: new ( ) . page_size ( self . pager . page_size ) ;
169
- if self . pager_state . cursor . is_some ( ) {
170
- params = params. paging_state ( self . pager_state . cursor . clone ( ) . unwrap ( ) ) ;
175
+
176
+ if let Some ( cursor) = & self . pager_state . cursor {
177
+ params = params. paging_state ( cursor. clone ( ) ) ;
171
178
}
172
179
173
180
let body = self
@@ -176,16 +183,7 @@ impl<
176
183
. exec_with_params ( self . query , params. finalize ( ) )
177
184
. and_then ( |frame| frame. get_body ( ) ) ?;
178
185
179
- let metadata_res: error:: Result < RowsMetadata > = body
180
- . as_rows_metadata ( )
181
- . ok_or ( "Pager query should yield a vector of rows" . into ( ) ) ;
182
- let metadata = metadata_res?;
183
-
184
- self . pager_state . has_more_pages =
185
- Some ( RowsMetadataFlag :: has_has_more_pages ( metadata. flags . clone ( ) ) ) ;
186
- self . pager_state . cursor = metadata. paging_state . clone ( ) ;
187
- body. into_rows ( )
188
- . ok_or ( "Pager query should yield a vector of rows" . into ( ) )
186
+ body_to_rows ! ( body, self )
189
187
}
190
188
191
189
pub fn has_more ( & self ) -> bool {
0 commit comments