use thiserror::Error;
#[derive(Error, Debug, Clone, PartialEq, Eq)]
pub enum LmsError {
#[error("[{pipeline_step}] Strategy Execution Failure ({context}): {reason}")]
StrategyExecutionFailure {
pipeline_step: String,
context: String,
reason: String,
},
#[error("[{pipeline_step}] Missing Trait ({trait_key}): {reason}")]
MissingTrait {
pipeline_step: String,
trait_key: String,
reason: String,
},
#[error("[{pipeline_step}] Invalid Tag ({tag}): {reason}")]
InvalidTag {
pipeline_step: String,
tag: String,
reason: String,
},
#[error("[{pipeline_step}] Resolution Failed ({tag}): {reason}")]
ResolutionFailed { pipeline_step: String, tag: String, reason: String },
#[error("[{pipeline_step}] Integrity Violation ({context}): {reason}")]
IntegrityViolation { pipeline_step: String, context: String, reason: String },
#[error("[{pipeline_step}] Integrity Failure ({context}): {reason}")]
SecurityFault { pipeline_step: String, context: String, reason: String },
#[error("[{pipeline_step}] Persistence Fault ({context}): {reason}")]
PersistenceFault {
pipeline_step: String,
context: String,
reason: String,
},
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_error_narrative_formatting() {
let error = LmsError::StrategyExecutionFailure {
pipeline_step: "Phase 4: Strategy Execution".to_string(),
context: "input_word".to_string(),
reason: "Agglutinative stemmer encountered invalid suffix".to_string(),
};
let output = error.to_string();
assert_eq!(
output,
"[Phase 4: Strategy Execution] Strategy Execution Failure (input_word): Agglutinative stemmer encountered invalid suffix"
);
}
}