//! Error handling for Rhai integration //! //! This module provides utilities for converting SAL error types to Rhai error types. use rhai::{EvalAltResult, Position}; use crate::os::{FsError, DownloadError}; /// Convert a FsError to a Rhai EvalAltResult pub fn fs_error_to_rhai_error(err: FsError) -> Box { let err_msg = err.to_string(); Box::new(EvalAltResult::ErrorRuntime( err_msg.into(), Position::NONE )) } /// Convert a DownloadError to a Rhai EvalAltResult pub fn download_error_to_rhai_error(err: DownloadError) -> Box { let err_msg = err.to_string(); Box::new(EvalAltResult::ErrorRuntime( err_msg.into(), Position::NONE )) } /// Register error types with the Rhai engine pub fn register_error_types(engine: &mut rhai::Engine) -> Result<(), Box> { // Register helper functions for error handling // Note: We don't register the error types directly since they don't implement Clone // Instead, we'll convert them to strings in the wrappers // Register functions to get error messages engine.register_fn("fs_error_message", |err_msg: &str| -> String { format!("File system error: {}", err_msg) }); engine.register_fn("download_error_message", |err_msg: &str| -> String { format!("Download error: {}", err_msg) }); Ok(()) } /// Trait for converting SAL errors to Rhai errors pub trait ToRhaiError { /// Convert the error to a Rhai EvalAltResult fn to_rhai_error(self) -> Result>; } impl ToRhaiError for Result { fn to_rhai_error(self) -> Result> { self.map_err(fs_error_to_rhai_error) } } impl ToRhaiError for Result { fn to_rhai_error(self) -> Result> { self.map_err(download_error_to_rhai_error) } }