Avoid Option in ffi

Option seems to work fine on rustc 1.43+ but not 1.42.
diff --git a/src/exception.rs b/src/exception.rs
index 3f32b45..57ff552 100644
--- a/src/exception.rs
+++ b/src/exception.rs
@@ -1,23 +1,29 @@
-use crate::rust_str::RustStr;
 use std::fmt::Display;
 use std::ptr;
-use std::slice;
-use std::str;
 
-pub unsafe fn r#try<T, E>(ret: *mut T, result: Result<T, E>) -> Option<RustStr>
+#[repr(C)]
+pub struct Error {
+    ptr: *const u8,
+    len: usize,
+}
+
+pub unsafe fn r#try<T, E>(ret: *mut T, result: Result<T, E>) -> Error
 where
     E: Display,
 {
     match result {
         Ok(ok) => {
             ptr::write(ret, ok);
-            None
+            Error {
+                ptr: ptr::null(),
+                len: 0,
+            }
         }
-        Err(err) => Some(to_c_string(err.to_string())),
+        Err(err) => to_c_string(err.to_string()),
     }
 }
 
-unsafe fn to_c_string(msg: String) -> RustStr {
+unsafe fn to_c_string(msg: String) -> Error {
     let mut msg = msg;
     msg.as_mut_vec().push(b'\0');
     let ptr = msg.as_ptr();
@@ -29,7 +35,5 @@
     }
 
     let copy = error(ptr, len);
-    let slice = slice::from_raw_parts(copy, len);
-    let string = str::from_utf8_unchecked(slice);
-    RustStr::from(string)
+    Error { ptr: copy, len }
 }