use std::sync::Arc;
use crate::assumption::AssumptionSet;
pub type ArtifactId = Arc<str>;
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ProvenanceNode {
pub artifact_id: ArtifactId,
pub operation: Arc<str>,
pub parents: Arc<[ArtifactId]>,
pub assumptions: AssumptionSet,
pub library_version: Arc<str>,
pub config_digest: Option<Arc<str>>,
}
#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct ProvenanceGraph {
pub nodes: Vec<ProvenanceNode>,
}
impl ProvenanceGraph {
#[must_use]
pub fn new() -> Self {
Self::default()
}
pub fn push(&mut self, node: ProvenanceNode) {
self.nodes.push(node);
}
#[must_use]
pub fn get(&self, artifact_id: &str) -> Option<&ProvenanceNode> {
self.nodes.iter().find(|n| &*n.artifact_id == artifact_id)
}
#[must_use]
pub fn len(&self) -> usize {
self.nodes.len()
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.nodes.is_empty()
}
}