419f7d0f0c
This adds a NARCalculationService trait, which will take a root node, and provide a proto::CalculateNarResponse in return. It also adds a NonCachingNARCalculationService implementation, that will simply always render the NAR in memory to calculate the size and sha256, without any caching. Change-Id: Id1ffb18559212fa6001f70f2634bbc3dfd0aa343 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8096 Reviewed-by: raitobezarius <tvl@lahfa.xyz> Tested-by: BuildkiteCI
36 lines
1.2 KiB
Rust
36 lines
1.2 KiB
Rust
use crate::proto;
|
|
use data_encoding::BASE64;
|
|
use thiserror::Error;
|
|
|
|
mod non_caching_calculation_service;
|
|
mod renderer;
|
|
|
|
pub use non_caching_calculation_service::NonCachingNARCalculationService;
|
|
pub use renderer::NARRenderer;
|
|
|
|
/// Errors that can encounter while rendering NARs.
|
|
#[derive(Debug, Error)]
|
|
pub enum RenderError {
|
|
#[error("failure talking to a backing store client: {0}")]
|
|
StoreError(crate::Error),
|
|
|
|
#[error("unable to find directory {}, referred from {}", BASE64.encode(.0), .1)]
|
|
DirectoryNotFound(Vec<u8>, String),
|
|
|
|
#[error("unable to find blob {}, referred from {}", BASE64.encode(.0), .1)]
|
|
BlobNotFound(Vec<u8>, String),
|
|
|
|
#[error("unexpected size in metadata for blob {}, referred from {} returned, expected {}, got {}", BASE64.encode(.0), .1, .2, .3)]
|
|
UnexpectedBlobMeta(Vec<u8>, String, u32, u32),
|
|
|
|
#[error("failure using the NAR writer: {0}")]
|
|
NARWriterError(std::io::Error),
|
|
}
|
|
|
|
/// The base trait for something calculating NARs, and returning their size and sha256.
|
|
pub trait NARCalculationService {
|
|
fn calculate_nar(
|
|
&self,
|
|
root_node: proto::node::Node,
|
|
) -> Result<proto::CalculateNarResponse, RenderError>;
|
|
}
|