@@ -473,6 +473,26 @@ impl<'cfg> Workspace<'cfg> {
473
473
}
474
474
}
475
475
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
+
476
496
/// Returns an iterator over default packages in this workspace
477
497
pub fn default_members < ' a > ( & ' a self ) -> Members < ' a , ' cfg > {
478
498
Members {
@@ -481,6 +501,26 @@ impl<'cfg> Workspace<'cfg> {
481
501
}
482
502
}
483
503
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
+
484
524
/// Returns true if the package is a member of the workspace.
485
525
pub fn is_member ( & self , pkg : & Package ) -> bool {
486
526
self . member_ids . contains ( & pkg. package_id ( ) )
0 commit comments