@@ -3,7 +3,6 @@ use std::collections::hash_map::{Entry, HashMap};
33use std:: collections:: { BTreeMap , BTreeSet , HashSet } ;
44use std:: path:: { Path , PathBuf } ;
55use std:: rc:: Rc ;
6- use std:: slice;
76
87use anyhow:: { bail, Context as _} ;
98use glob:: glob;
@@ -136,13 +135,6 @@ pub struct WorkspaceRootConfig {
136135 custom_metadata : Option < toml:: Value > ,
137136}
138137
139- /// An iterator over the member packages of a workspace, returned by
140- /// `Workspace::members`
141- pub struct Members < ' a , ' cfg > {
142- ws : & ' a Workspace < ' cfg > ,
143- iter : slice:: Iter < ' a , PathBuf > ,
144- }
145-
146138impl < ' cfg > Workspace < ' cfg > {
147139 /// Creates a new workspace given the target manifest pointed to by
148140 /// `manifest_path`.
@@ -466,11 +458,14 @@ impl<'cfg> Workspace<'cfg> {
466458 }
467459
468460 /// Returns an iterator over all packages in this workspace
469- pub fn members < ' a > ( & ' a self ) -> Members < ' a , ' cfg > {
470- Members {
471- ws : self ,
472- iter : self . members . iter ( ) ,
473- }
461+ pub fn members ( & self ) -> impl Iterator < Item = & Package > {
462+ let packages = & self . packages ;
463+ self . members
464+ . iter ( )
465+ . filter_map ( move |path| match packages. get ( path) {
466+ & MaybePackage :: Package ( ref p) => Some ( p) ,
467+ _ => None ,
468+ } )
474469 }
475470
476471 /// Returns a mutable iterator over all packages in this workspace
@@ -494,11 +489,14 @@ impl<'cfg> Workspace<'cfg> {
494489 }
495490
496491 /// Returns an iterator over default packages in this workspace
497- pub fn default_members < ' a > ( & ' a self ) -> Members < ' a , ' cfg > {
498- Members {
499- ws : self ,
500- iter : self . default_members . iter ( ) ,
501- }
492+ pub fn default_members < ' a > ( & ' a self ) -> impl Iterator < Item = & Package > {
493+ let packages = & self . packages ;
494+ self . default_members
495+ . iter ( )
496+ . filter_map ( move |path| match packages. get ( path) {
497+ & MaybePackage :: Package ( ref p) => Some ( p) ,
498+ _ => None ,
499+ } )
502500 }
503501
504502 /// Returns an iterator over default packages in this workspace
@@ -1569,26 +1567,6 @@ impl<'cfg> Packages<'cfg> {
15691567 }
15701568}
15711569
1572- impl < ' a , ' cfg > Iterator for Members < ' a , ' cfg > {
1573- type Item = & ' a Package ;
1574-
1575- fn next ( & mut self ) -> Option < & ' a Package > {
1576- loop {
1577- let next = self . iter . next ( ) . map ( |path| self . ws . packages . get ( path) ) ;
1578- match next {
1579- Some ( & MaybePackage :: Package ( ref p) ) => return Some ( p) ,
1580- Some ( & MaybePackage :: Virtual ( _) ) => { }
1581- None => return None ,
1582- }
1583- }
1584- }
1585-
1586- fn size_hint ( & self ) -> ( usize , Option < usize > ) {
1587- let ( _, upper) = self . iter . size_hint ( ) ;
1588- ( 0 , upper)
1589- }
1590- }
1591-
15921570impl MaybePackage {
15931571 fn workspace_config ( & self ) -> & WorkspaceConfig {
15941572 match * self {
0 commit comments