use magnus::{error::IntoError, function, rb_assert, Error, Ruby}; struct CustomError(&'static str); impl IntoError for CustomError { fn into_error(self, ruby: &Ruby) -> Error { Error::new( ruby.exception_runtime_error(), format!("Custom error: {}", self.0), ) } } fn example() -> Result<(), CustomError> { Err(CustomError("test")) } #[test] fn it_can_bind_function_returning_custom_error() { let ruby = unsafe { magnus::embed::init() }; ruby.define_global_function("example", function!(example, 0)); rb_assert!( ruby, r#"(example rescue $!).message == "Custom error: test""# ); }