use crate::dependency::RetrievedDependency;
use futures::{future::BoxFuture, stream::FuturesUnordered};
use std::fmt::Debug;
pub type RetrievedDependencyStream<'a> = FuturesUnordered<BoxFuture<'a, RetrievedDependency>>;
pub type RetrievedDependencyStreamResult<'a> = Result<RetrievedDependencyStream<'a>, Error>;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("Error deserialiazing yaml: {0}")]
YamlSerde(#[from] serde_yaml::Error),
#[error("Error deserialiazing json: {0}")]
JsonSerde(#[from] package_lock_json_parser::PackageLockJsonError),
#[error("Error parsing yarn.lock file {0}")]
YarnLock(#[from] yarn_lock_parser::YarnLockError),
#[error("Error parsing Cargo.lock file {0}")]
CargoLock(#[from] cargo_lock::Error),
}
pub trait Collector: Debug + Send + Sync {
fn get_name(&self) -> String;
}
pub trait FileCollector: Collector {
fn get_dependency_filename(&self) -> String;
fn get_dependencies(&self, dependency_file_content: &str) -> RetrievedDependencyStreamResult;
}