Skip to content

Commit b26ceda

Browse files
committed
Simplify Workspace::members()/default_members()
1 parent 6fe08fa commit b26ceda

File tree

2 files changed

+17
-39
lines changed

2 files changed

+17
-39
lines changed

src/cargo/core/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ pub use self::resolver::{Resolve, ResolveVersion};
1010
pub use self::shell::{Shell, Verbosity};
1111
pub use self::source::{GitReference, Source, SourceId, SourceMap};
1212
pub use self::summary::{FeatureMap, FeatureValue, Summary};
13-
pub use self::workspace::{MaybePackage, Members, Workspace, WorkspaceConfig, WorkspaceRootConfig};
13+
pub use self::workspace::{MaybePackage, Workspace, WorkspaceConfig, WorkspaceRootConfig};
1414

1515
pub mod compiler;
1616
pub mod dependency;

src/cargo/core/workspace.rs

Lines changed: 16 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use std::collections::hash_map::{Entry, HashMap};
33
use std::collections::{BTreeMap, BTreeSet, HashSet};
44
use std::path::{Path, PathBuf};
55
use std::rc::Rc;
6-
use std::slice;
76

87
use anyhow::{bail, Context as _};
98
use 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-
146138
impl<'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-
15921570
impl MaybePackage {
15931571
fn workspace_config(&self) -> &WorkspaceConfig {
15941572
match *self {

0 commit comments

Comments
 (0)