crate::ix!();
error_tree!{
pub enum AiFileFilterError {
#[display("IoError: {context} => {io_error}")]
IoError {
io_error: std::sync::Arc<std::io::Error>,
context: String,
},
#[display("An error occurred in the cargo toml layer: {0}")]
CargoTomlError(CargoTomlError),
#[display("Error from the language model workflow: {0}")]
LanguageModelBatchWorkflowError(LanguageModelBatchWorkflowError),
WorkspacerFallbackError(WorkspacerFallbackError),
BatchWorkspaceError(BatchWorkspaceError),
#[display("Generic fallback error in AiFileFilter")]
GenericError,
}
}
pub fn map_filter_error_into_workspace_error(e: AiFileFilterError) -> WorkspaceError {
use workspacer_errors::ReadmeWriteError;
match e {
AiFileFilterError::IoError{io_error, context} => {
WorkspaceError::IoError {
io_error,
context,
}
}
AiFileFilterError::LanguageModelBatchWorkflowError(lm_err) => {
let dummy = ReadmeWriteError::AiReadmeWriterError;
warn!("Mapping AiFileFilterError::LanguageModelBatchWorkflowError => dummy readme error variant");
WorkspaceError::ReadmeWriteError(dummy)
}
AiFileFilterError::CargoTomlError(e2) => {
WorkspaceError::InvalidCargoToml(e2)
}
AiFileFilterError::WorkspacerFallbackError(e2) => {
let message = format!("Workspacer fallback error: {:?}", e2);
WorkspaceError::IoError {
io_error: Arc::new(std::io::Error::new(std::io::ErrorKind::Other, message.clone())),
context: message,
}
}
AiFileFilterError::BatchWorkspaceError(e2) => {
error!("Mapping AiFileFilterError::BatchWorkspaceError => returning cargo workspace error");
WorkspaceError::InvalidWorkspace {
invalid_workspace_path: PathBuf::from("unknown"),
}
}
AiFileFilterError::GenericError => {
WorkspaceError::ReadmeWriteError(ReadmeWriteError::AiReadmeWriterError)
}
}
}