use super::{CompositionIssue, PROVIDER_LIMIT, Provider};
use crate::bounded::NonEmpty;
pub(super) fn doubled_providers(
declared: &NonEmpty<Provider, PROVIDER_LIMIT>,
) -> Vec<CompositionIssue> {
let mut issues: Vec<CompositionIssue> = Vec::new();
for (position, provider) in declared.iter().enumerate() {
let earlier = declared
.iter()
.take(position)
.any(|other| other.identity == provider.identity);
let repeated = declared
.iter()
.skip(position.saturating_add(1))
.any(|other| other.identity == provider.identity);
if repeated && !earlier {
issues.push(CompositionIssue::ProviderDoubled {
provider: provider.identity,
});
}
}
issues
}