use std::collections::BTreeSet;
use crate::sources::{Source, Sources};
#[derive(Debug)]
pub enum ActOnSources {
All,
Named(Vec<String>),
}
impl ActOnSources {
pub fn sources_mut<'a>(
&'a self,
sources: &'a mut Sources,
) -> impl Iterator<Item = &'a mut Source> + 'a {
match self {
ActOnSources::All => Box::new(sources.iter_mut())
as Box<dyn Iterator<Item = &'a mut Source> + 'a>,
ActOnSources::Named(aliases) => {
let aliases = aliases.iter().cloned().collect::<BTreeSet<_>>();
Box::new(
sources
.iter_mut()
.filter(move |source| aliases.contains(source.alias())),
)
}
}
}
}