use super::Entry;
use indexmap::IndexMap;
use serde::Serialize;
use std::path::PathBuf;
pub use summary::Iter as SummaryIter;
pub use summary::Opts as SummaryOpts;
pub use summary::Summary;
mod summary;
#[derive(Debug, Serialize)]
pub struct Analysis(pub(super) IndexMap<PathBuf, Entry>);
impl Analysis {
pub fn iter(&self) -> impl Iterator<Item = (&PathBuf, &Entry)> {
let results = &self.0;
results.iter()
}
pub fn summary(&self) -> Summary {
let opts = SummaryOpts {
all: false,
..Default::default()
};
self.summary_with(opts)
}
pub fn summary_with(&self, opts: SummaryOpts) -> Summary {
let mut summary = IndexMap::new();
for (_, entry) in self.iter() {
if !(opts.all || entry.detectable()) {
continue;
}
let language = *entry.language();
*summary.entry(language).or_insert(0) += entry.size();
}
Summary(summary)
}
}