Macro kubos_service::run [−][src]
macro_rules! run { ($func:expr) => { ... }; ($func:expr, $master:expr) => { ... }; }
Execute a function and return Result<func_data, String>
Optionally:
Add the error string to the master error string for later consumption,
prefixed with the name of the function being called
Examples
#[macro_use] extern crate failure; use failure::{Error, Fail}; use std::cell::RefCell; #[derive(Fail, Debug)] pub enum RootError { #[fail(display = "RootError: {}", message)] RootError { message: String }, } #[derive(Fail, Debug)] pub enum TopError { #[fail(display = "TopError: {}", message)] Error { #[fail(cause)] cause: RootError, message: String, }, } fn test_func(fail: bool, output: String) -> Result<String, Error> { match fail { true => { let chain: TopError = TopError::Error { cause: RootError::RootError { message: "root".to_owned() }, message: "top".to_owned(), }; Err(chain.into()) } false => Ok(output), } } fn main() { let master_err = RefCell::new(vec![]); let result = run!(test_func(true, "test".to_owned()), master_err); assert_eq!(result, Err("TopError: top, RootError: root".to_owned())); assert_eq!( vec!["test_func (src/macros.rs:41): TopError: top, RootError: root".to_owned()], master_err.borrow().clone() ); }