@@ -332,23 +332,27 @@ impl App {
332332 || vm. config . manifest . image . contains ( & request. keyword )
333333 }
334334 } )
335+ . cloned ( )
336+ . collect :: < Vec < _ > > ( ) ;
337+ infos. sort_by ( |a, b| {
338+ a. config
339+ . manifest
340+ . created_at_ms
341+ . cmp ( & b. config . manifest . created_at_ms )
342+ } ) ;
343+
344+ let total = infos. len ( ) as u32 ;
345+ let vms = paginate ( infos, request. page , request. page_size )
335346 . map ( |vm| {
336347 vm. merged_info (
337348 vms. get ( & vm. config . manifest . id ) ,
338349 & self . work_dir ( & vm. config . manifest . id ) ,
339350 )
340351 } )
352+ . map ( |info| info. to_pb ( & self . config . gateway ) )
341353 . collect :: < Vec < _ > > ( ) ;
342-
343- infos. sort_by ( |a, b| a. manifest . created_at_ms . cmp ( & b. manifest . created_at_ms ) ) ;
344-
345- let total = infos. len ( ) as u32 ;
346-
347- infos = paginate ( infos, request. page , request. page_size ) ;
348-
349- let gw = & self . config . gateway ;
350354 Ok ( StatusResponse {
351- vms : infos . into_iter ( ) . map ( |info| info . to_pb ( gw ) ) . collect ( ) ,
355+ vms,
352356 port_mapping_enabled : self . config . cvm . port_mapping . enabled ,
353357 total,
354358 } )
@@ -603,18 +607,19 @@ impl App {
603607 }
604608}
605609
606- fn paginate < T > ( items : Vec < T > , page : u32 , page_size : u32 ) -> Vec < T > {
610+ fn paginate < T > ( items : Vec < T > , page : u32 , page_size : u32 ) -> impl Iterator < Item = T > {
611+ let skip;
612+ let take;
607613 if page == 0 || page_size == 0 {
608- return items;
609- }
610- let page = page - 1 ;
611- let start = page * page_size;
612- let end = start + page_size;
613- items
614- . into_iter ( )
615- . skip ( start as usize )
616- . take ( end as usize )
617- . collect ( )
614+ skip = 0 ;
615+ take = items. len ( ) ;
616+ } else {
617+ let page = page - 1 ;
618+ let start = page * page_size;
619+ skip = start as usize ;
620+ take = page_size as usize ;
621+ }
622+ items. into_iter ( ) . skip ( skip) . take ( take)
618623}
619624
620625#[ derive( Clone ) ]
0 commit comments