Skip to main content

trueno/tiling/
error.rs

1#![allow(missing_docs)]
2//! Tiling error types.
3
4use super::geometry::TcbLevel;
5use std::fmt;
6
7/// Tiling configuration errors
8#[derive(Debug, Clone)]
9pub enum TilingError {
10    /// Tile hierarchy is invalid (e.g., micro > midi)
11    InvalidHierarchy { reason: String },
12    /// Tile dimensions not divisible
13    DivisibilityError { level: &'static str, dimension: &'static str, larger: u32, smaller: u32 },
14    /// Tile doesn't fit in cache
15    CacheOverflow { level: TcbLevel, required_bytes: usize, available_bytes: usize },
16    /// Alignment violation
17    AlignmentError { required: u32, actual: u32 },
18    /// Quantization alignment violated
19    QuantAlignmentError { format: &'static str, required_k: u32, actual_k: u32 },
20}
21
22impl fmt::Display for TilingError {
23    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
24        match self {
25            TilingError::InvalidHierarchy { reason } => {
26                write!(f, "Invalid tiling hierarchy: {}", reason)
27            }
28            TilingError::DivisibilityError { level, dimension, larger, smaller } => {
29                write!(
30                    f,
31                    "Tiling divisibility error at {}: {} ({}) not divisible by {}",
32                    level, dimension, larger, smaller
33                )
34            }
35            TilingError::CacheOverflow { level, required_bytes, available_bytes } => {
36                write!(
37                    f,
38                    "Tile exceeds {:?} cache: {} bytes required, {} available",
39                    level, required_bytes, available_bytes
40                )
41            }
42            TilingError::AlignmentError { required, actual } => {
43                write!(f, "Alignment error: required {} bytes, actual {} bytes", required, actual)
44            }
45            TilingError::QuantAlignmentError { format, required_k, actual_k } => {
46                write!(
47                    f,
48                    "Quantization alignment error for {}: K must be multiple of {}, got {}",
49                    format, required_k, actual_k
50                )
51            }
52        }
53    }
54}
55
56impl std::error::Error for TilingError {}