wifi-densepose/v2/crates/wifi-densepose-calibration/src/error.rs

50 lines
1.5 KiB
Rust

//! Error types for the calibration pipeline.
use thiserror::Error;
/// Errors surfaced by the per-room calibration & training pipeline (ADR-151).
#[derive(Debug, Error)]
pub enum CalibrationError {
/// An anchor was recorded with zero frames.
#[error("anchor '{0}' captured no frames")]
EmptyAnchor(String),
/// The enrollment session is missing anchors required to train a specialist.
#[error("enrollment incomplete: missing anchors {missing:?}")]
IncompleteEnrollment {
/// Labels still required.
missing: Vec<String>,
},
/// A frame did not match the expected tier geometry.
#[error("frame geometry mismatch: {0}")]
Geometry(String),
/// Not enough samples to fit a specialist.
#[error("insufficient samples for '{kind}': have {have}, need {need}")]
InsufficientSamples {
/// Specialist kind.
kind: String,
/// Samples available.
have: usize,
/// Samples required.
need: usize,
},
/// Serialization / persistence failure.
#[error("serialization error: {0}")]
Serde(String),
/// The specialist bank was trained against a different baseline and is stale.
#[error("bank is STALE: trained against baseline {trained}, current is {current}")]
StaleBaseline {
/// Baseline id the bank was trained against.
trained: String,
/// Current baseline id.
current: String,
},
}
/// Convenience result alias.
pub type Result<T> = std::result::Result<T, CalibrationError>;