use thiserror::Error;
#[derive(Error, Debug)]
pub enum ParseError {
#[error("YAML parse error at line {line}, column {column}: {message}")]
Syntax {
line: usize,
column: usize,
message: String,
},
#[error("invalid float value '{value}': {source}")]
InvalidFloat {
value: String,
#[source]
source: std::num::ParseFloatError,
},
#[error("YAML scanner error: {0}")]
Scanner(#[from] saphyr::ScanError),
}
#[derive(Error, Debug)]
pub enum EmitError {
#[error("failed to emit YAML: {0}")]
Emit(String),
#[error("unsupported type for serialization: {0}")]
UnsupportedType(String),
}
pub type ParseResult<T> = std::result::Result<T, ParseError>;
pub type EmitResult<T> = std::result::Result<T, EmitError>;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_parse_error_display() {
let err = ParseError::Syntax {
line: 10,
column: 5,
message: "unexpected token".to_string(),
};
assert!(err.to_string().contains("line 10"));
assert!(err.to_string().contains("column 5"));
}
#[test]
fn test_emit_error_display() {
let err = EmitError::UnsupportedType("CustomType".to_string());
assert!(err.to_string().contains("CustomType"));
}
}