use camino::Utf8Path;
use crate::domain::debt::Measurement;
use crate::domain::gate_id::GateId;
use crate::error::AppError;
use crate::gates::GateCtx;
use crate::domain::debt::BUDGET_GATES;
pub fn measure_gate(root: &Utf8Path, id: GateId) -> Result<Vec<Measurement>, AppError> {
let ctx: GateCtx = crate::commands::gate::context_at(root, id)?;
let measured = match id {
GateId::AdrWordCap => crate::gates::adr_word_cap::measure(&ctx),
GateId::AgentsDigestSize => crate::gates::agents_digest_size::measure(&ctx),
GateId::ChapterSizeCap => crate::gates::chapter_size_cap::measure(&ctx),
GateId::SpecSizeCap => crate::gates::spec_size_cap::measure(&ctx),
_ => Ok(Vec::new()),
};
Ok(measured?)
}
pub fn measure_all(root: &Utf8Path) -> Result<Vec<Measurement>, AppError> {
let mut all = Vec::new();
for id in BUDGET_GATES {
all.extend(measure_gate(root, *id)?);
}
Ok(all)
}