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