Skip to main content

ruvector_cognitive_container/
error.rs

1use thiserror::Error;
2
3/// Errors that can occur during cognitive container operations.
4#[derive(Error, Debug)]
5pub enum ContainerError {
6    #[error("Memory allocation failed: requested {requested} bytes, available {available}")]
7    AllocationFailed { requested: usize, available: usize },
8
9    #[error("Epoch budget exhausted: used {used} of {budget} ticks")]
10    EpochExhausted { used: u64, budget: u64 },
11
12    #[error("Witness chain broken at epoch {epoch}")]
13    BrokenChain { epoch: u64 },
14
15    #[error("Invalid configuration: {reason}")]
16    InvalidConfig { reason: String },
17
18    #[error("Container not initialized")]
19    NotInitialized,
20
21    #[error("Slab overflow: component {component} exceeded budget")]
22    SlabOverflow { component: String },
23}
24
25/// Convenience alias for container results.
26pub type Result<T> = std::result::Result<T, ContainerError>;
27
28#[cfg(test)]
29mod tests {
30    use super::*;
31
32    #[test]
33    fn test_error_display() {
34        let err = ContainerError::AllocationFailed {
35            requested: 1024,
36            available: 512,
37        };
38        assert!(err.to_string().contains("1024"));
39        assert!(err.to_string().contains("512"));
40    }
41
42    #[test]
43    fn test_error_variants() {
44        let err = ContainerError::EpochExhausted {
45            used: 100,
46            budget: 50,
47        };
48        assert!(err.to_string().contains("100"));
49
50        let err = ContainerError::BrokenChain { epoch: 7 };
51        assert!(err.to_string().contains("7"));
52
53        let err = ContainerError::InvalidConfig {
54            reason: "bad value".into(),
55        };
56        assert!(err.to_string().contains("bad value"));
57
58        let err = ContainerError::NotInitialized;
59        assert!(err.to_string().contains("not initialized"));
60
61        let err = ContainerError::SlabOverflow {
62            component: "graph".into(),
63        };
64        assert!(err.to_string().contains("graph"));
65    }
66}