sbpf_common/
errors.rs

1use {std::ops::Range, thiserror::Error};
2
3#[derive(Debug, Error)]
4pub enum SBPFError {
5    #[error("Bytecode error: {error}")]
6    BytecodeError {
7        error: String,
8        span: Range<usize>,
9        custom_label: Option<String>,
10    },
11}
12
13impl SBPFError {
14    pub fn label(&self) -> &str {
15        match self {
16            Self::BytecodeError { custom_label, .. } => {
17                custom_label.as_deref().unwrap_or("Bytecode error")
18            }
19        }
20    }
21
22    pub fn span(&self) -> &Range<usize> {
23        match self {
24            Self::BytecodeError { span, .. } => span,
25        }
26    }
27}
28
29#[cfg(test)]
30mod tests {
31    use super::*;
32
33    #[test]
34    fn test_bytecode_error() {
35        let error = SBPFError::BytecodeError {
36            error: "Invalid opcode".to_string(),
37            span: 10..20,
38            custom_label: Some("Custom error message".to_string()),
39        };
40
41        assert_eq!(error.label(), "Custom error message");
42        assert_eq!(error.span(), &(10..20));
43        assert_eq!(error.to_string(), "Bytecode error: Invalid opcode");
44    }
45}