@@ -473,6 +473,26 @@ impl<'cfg> Workspace<'cfg> {
473473 }
474474 }
475475
476+ /// Returns a mutable iterator over all packages in this workspace
477+ pub fn members_mut ( & mut self ) -> impl Iterator < Item = & mut Package > {
478+ let packages = & mut self . packages . packages ;
479+ let members: HashSet < _ > = self
480+ . members
481+ . iter ( )
482+ . map ( |path| path. parent ( ) . unwrap ( ) . to_owned ( ) )
483+ . collect ( ) ;
484+
485+ packages. iter_mut ( ) . filter_map ( move |( path, package) | {
486+ if members. contains ( path) {
487+ if let MaybePackage :: Package ( ref mut p) = package {
488+ return Some ( p) ;
489+ }
490+ }
491+
492+ None
493+ } )
494+ }
495+
476496 /// Returns an iterator over default packages in this workspace
477497 pub fn default_members < ' a > ( & ' a self ) -> Members < ' a , ' cfg > {
478498 Members {
@@ -481,6 +501,26 @@ impl<'cfg> Workspace<'cfg> {
481501 }
482502 }
483503
504+ /// Returns an iterator over default packages in this workspace
505+ pub fn default_members_mut ( & mut self ) -> impl Iterator < Item = & mut Package > {
506+ let packages = & mut self . packages . packages ;
507+ let members: HashSet < _ > = self
508+ . default_members
509+ . iter ( )
510+ . map ( |path| path. parent ( ) . unwrap ( ) . to_owned ( ) )
511+ . collect ( ) ;
512+
513+ packages. iter_mut ( ) . filter_map ( move |( path, package) | {
514+ if members. contains ( path) {
515+ if let MaybePackage :: Package ( ref mut p) = package {
516+ return Some ( p) ;
517+ }
518+ }
519+
520+ None
521+ } )
522+ }
523+
484524 /// Returns true if the package is a member of the workspace.
485525 pub fn is_member ( & self , pkg : & Package ) -> bool {
486526 self . member_ids . contains ( & pkg. package_id ( ) )
0 commit comments