1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
use std::process::exit; pub trait Rust<T, F> { fn rust(self, F) -> T; } impl<T, E, F> Rust<T, F> for Result<T, E> where E: ::std::error::Error, F: Fn(E) -> () { fn rust(self, f: F) -> T { match self { Ok(s) => s, Err(e) => { f(e); exit(-1) } } } } impl<T, F> Rust<T, F> for Option<T> where F: Fn() -> () { fn rust(self, f: F) -> T { match self { Some(s) => s, None => { f(); exit(-1) } } } } pub fn e<T: ::std::fmt::Display>(e: T) { println!("doesn't rust: {}", e); }