use crate::classify::classify;
use crate::identity::{artifact_identifier, artifact_identifiers};
use crate::relationships::corpus_items;
pub struct IndexEntry {
pub id: String,
pub artifact_type: String,
pub title: Option<String>,
pub path: String,
pub aliases: Vec<String>,
}
pub struct RepositoryIndex {
pub directory: String,
pub recursive: bool,
pub artifacts: Vec<IndexEntry>,
}
pub fn build_repository_index(directory: &str, recursive: bool) -> RepositoryIndex {
let items = corpus_items(directory, recursive);
let artifacts = items
.iter()
.map(|it| IndexEntry {
id: artifact_identifier(&it.artifact, it.spec, &it.path),
artifact_type: classify(&it.artifact).artifact_type,
title: it.artifact.product.title.clone(),
path: it.path.clone(),
aliases: artifact_identifiers(&it.artifact, it.spec, &it.path),
})
.collect();
RepositoryIndex {
directory: directory.to_string(),
recursive,
artifacts,
}
}