use crate::cargo::multi_target_metadata::MultiTargetMetadata;
use crate::cargo::unify_types::TransitivePin;
use crate::progress;
use std::sync::Arc;
pub struct TransitivePlanner<'a> {
metadata: &'a MultiTargetMetadata,
}
impl<'a> TransitivePlanner<'a> {
pub fn new(metadata: &'a MultiTargetMetadata) -> Self {
Self { metadata }
}
pub fn find_pins(&self) -> Vec<TransitivePin> {
progress!("Analyzing transitive dependencies...");
let fragmented = self.metadata.find_fragmented_transitives();
fragmented
.into_iter()
.map(|f| TransitivePin {
name: Arc::from(f.name),
version: f.version,
features: f.unified_features.into_iter().map(Arc::from).collect(),
})
.collect()
}
}