blob: b743f264b0ff57f9fd20321ed62dd0bf69f08c01 (
plain) (
tree)
|
|
use count_write::CountWrite;
use sha2::{Digest, Sha256};
use crate::blobservice::BlobService;
use crate::directoryservice::DirectoryService;
use crate::proto;
use super::renderer::NARRenderer;
use super::{NARCalculationService, RenderError};
/// A NAR calculation service which simply renders the whole NAR whenever
/// we ask for the calculation.
pub struct NonCachingNARCalculationService<DS: DirectoryService> {
nar_renderer: NARRenderer<DS>,
}
impl<DS: DirectoryService> NonCachingNARCalculationService<DS> {
pub fn new(blob_service: Box<dyn BlobService>, directory_service: DS) -> Self {
Self {
nar_renderer: NARRenderer::new(blob_service, directory_service),
}
}
}
impl<DS: DirectoryService> NARCalculationService for NonCachingNARCalculationService<DS> {
fn calculate_nar(&self, root_node: &proto::node::Node) -> Result<(u64, [u8; 32]), RenderError> {
let h = Sha256::new();
let mut cw = CountWrite::from(h);
self.nar_renderer.write_nar(&mut cw, root_node)?;
Ok((cw.count(), cw.into_inner().finalize().into()))
}
}
|