ruvector_cognitive_container/
error.rs1use thiserror::Error;
2
3#[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
25pub 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}