heroforge-core 0.2.2

Pure Rust core library for reading and writing Fossil SCM repositories
Documentation
//! Rhai API Error Types
//!
//! Provides a unified error type for Rhai scripting operations.

use rhai::EvalAltResult;
use std::fmt;
use thiserror::Error;

/// Unified error type for Heroforge Rhai operations.
#[derive(Error, Debug)]
pub enum RhaiError {
    /// Rust operation failed
    #[error("Operation failed: {0}")]
    OperationError(String),

    /// Script execution error
    #[error("Script error: {0}")]
    ScriptError(String),

    /// IO error
    #[error("IO error: {0}")]
    IoError(#[from] std::io::Error),

    /// Repository error
    #[error("Repository error: {0}")]
    RepoError(String),

    /// Socket communication error
    #[error("Socket error: {0}")]
    SocketError(String),

    /// Fatal unrecoverable error
    #[error("Fatal: {0}")]
    Fatal(String),
}

impl From<Box<EvalAltResult>> for RhaiError {
    fn from(e: Box<EvalAltResult>) -> Self {
        RhaiError::ScriptError(e.to_string())
    }
}

impl From<crate::FossilError> for RhaiError {
    fn from(e: crate::FossilError) -> Self {
        RhaiError::RepoError(e.to_string())
    }
}

impl From<RhaiError> for Box<EvalAltResult> {
    fn from(e: RhaiError) -> Self {
        Box::new(EvalAltResult::ErrorRuntime(
            e.to_string().into(),
            rhai::Position::NONE,
        ))
    }
}

/// Result type for Rhai operations.
pub type RhaiResult<T> = std::result::Result<T, RhaiError>;

/// Convert a Result with any error to a Rhai-compatible Result.
pub fn to_rhai_result<T, E: fmt::Display>(result: Result<T, E>) -> Result<T, Box<EvalAltResult>> {
    result.map_err(|e| {
        Box::new(EvalAltResult::ErrorRuntime(
            e.to_string().into(),
            rhai::Position::NONE,
        ))
    })
}