Remove mayfail from the common library (#418)

diff --git a/common/README.md b/common/README.md
index 8cf7ce0..fb92f49 100644
--- a/common/README.md
+++ b/common/README.md
@@ -7,7 +7,6 @@
 This directory contains some supporting libraries such as error handling, file
 system, and database for the Teaclave platform, or more general TEE system.
 
-- `mayfail`: A crate to help manage chained error in Rust.
 - `protected_fs_rs`: A userspace file system implementation secured by SGX.
 - `rusty_leveldb_sgx`: A LevelDB implementation, making key-value database in
   SGX enclave possible.
diff --git a/common/mayfail/Cargo.toml b/common/mayfail/Cargo.toml
deleted file mode 100644
index 0b927d9..0000000
--- a/common/mayfail/Cargo.toml
+++ /dev/null
@@ -1,14 +0,0 @@
-[package]
-name = "mayfail"
-version = "0.1.0"
-authors = ["Teaclave Contributors <dev@teaclave.apache.org>"]
-license = "Apache-2.0"
-edition = "2018"
-
-[features]
-default = []
-mesalock_sgx = ["sgx_tstd", "mesatee_core/mesalock_sgx"]
-sgx_tstd        = { version = "1.1.2", features = ["net", "backtrace"], optional = true }
-
-[dependencies]
-mesatee_core    = { version = "0.1.0" }
diff --git a/common/mayfail/src/lib.rs b/common/mayfail/src/lib.rs
deleted file mode 100644
index d0bed80..0000000
--- a/common/mayfail/src/lib.rs
+++ /dev/null
@@ -1,207 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-//! Monadic mayfail notation for chained error handling
-
-#![cfg_attr(feature = "mesalock_sgx", no_std)]
-#[cfg(feature = "mesalock_sgx")]
-extern crate sgx_tstd as std;
-
-/// maiyfail use duck typing.
-///
-/// Syntax:
-/// `(instr)*; ret expr`
-///
-/// instr can be:
-///
-/// * `pattern =<< expression`: unbox the value as `pattern` from `expression`.
-/// `expression` can be converted to a monadic value of type `M<T> through a
-/// `to_mt_result` method. `M<T>` should support a monadic bind operation
-/// `and_then<U, F>(self, f: F)-> M<U> where F: FnOnce(T)->M<U>`. `expression`s
-/// in the same mayfail! block should be convertable to the same `M<T>`.
-///
-/// * `let pattern = expression`: assign expression to pattern, as
-/// normal rust let.
-///
-/// The mayfial module provides the `MayfailNop` trait to trivially convert
-/// `std::option::Option<T>` and `std::result::Result<T, E>` to `mesatee_core::Result<T>`.
-/// Users can define their own traits to implement `to_mt_result` for types
-/// appearing in `mayfail!` blocks.
-///
-/// Example:
-///
-/// ```
-/// fn main() {
-///     use mesatee_core::mayfail::MayfailNop;
-///
-///     let result_x: Option<i32> = Some(1);
-///     let ret = mayfail! {
-///     let n = 3;
-///         x =<< result_x;
-///         y =<< Some(n);
-///         ret x + y
-///     };
-///     assert!(ret.is_ok() && ret.unwrap() == 4);
-/// }
-/// ```
-
-macro_rules! mayfail {
-    (let $p: pat = $e: expr ; $($t: tt)*) => (
-        { let $p = $e; mayfail! { $($t)* } }
-    );
-    (let $p: ident : $ty: ty = $e: expr; $($t: tt)*) => (
-        { let $p: $ty = $e; mayfail! { $($t)* } }
-    );
-    ($p: pat =<< $e: expr; $($t: tt)*) => (
-        ($e).to_mt_result(file!(), line!()).and_then(move |$p| mayfail! { $($t)* })
-    );
-    ($p: ident : $ty: ty =<< $e: expr ; $($t: tt)*) => (
-        ($e).to_mt_result(file!(), line!()).and_then(move |$p : $ty| mayfail! { $($t)* })
-    );
-    (ret $f: expr) => (Ok($f))
-}
-
-use mesatee_core::Error;
-use mesatee_core::ErrorKind;
-use mesatee_core::Result;
-
-pub trait MayfailNop<T> {
-    fn to_mt_result(self: Self, file: &'static str, line: u32) -> Result<T>;
-}
-
-impl<T> MayfailNop<T> for Option<T> {
-    #[inline]
-    fn to_mt_result(self: Self, _file: &'static str, _line: u32) -> Result<T> {
-        self.ok_or_else(|| Error::from(ErrorKind::MissingValue))
-    }
-}
-
-impl<T, E> MayfailNop<T> for std::result::Result<T, E> {
-    #[inline]
-    fn to_mt_result(self: Self, _file: &'static str, _line: u32) -> Result<T> {
-        self.map_err(|_| Error::unknown())
-    }
-}
-
-pub trait MayfailTrace<T> {
-    fn to_mt_result(self: Self, file: &'static str, line: u32) -> Result<T>;
-}
-
-impl<T> MayfailTrace<T> for Option<T> {
-    #[inline]
-    fn to_mt_result(self: Self, file: &'static str, line: u32) -> Result<T> {
-        self.ok_or_else(|| {
-            trace!("error at {}:{}", file, line);
-            Error::from(ErrorKind::MissingValue)
-        })
-    }
-}
-
-impl<T, E> MayfailTrace<T> for std::result::Result<T, E> {
-    #[inline]
-    default fn to_mt_result(self: Self, file: &'static str, line: u32) -> Result<T> {
-        self.map_err(|_| {
-            trace!("error at {}:{}", file, line);
-            Error::unknown()
-        })
-    }
-}
-
-impl<T> MayfailTrace<T> for Result<T> {
-    #[inline]
-    fn to_mt_result(self: Self, _file: &'static str, _line: u32) -> Result<T> {
-        self
-    }
-}
-
-#[cfg(test)]
-mod test {
-    use crate::ErrorKind;
-
-    #[test]
-    fn test_mayfail_option() {
-        let ret = mayfail! {
-            let n = 3;
-            x =<< Some(1);
-            y =<< Some(n);
-            ret x + y
-        };
-        assert!(ret.is_ok() && ret.unwrap() == 4);
-
-        let ret = mayfail! {
-            let n: Option<i32> = None;
-            x =<< Some(1i32);
-            y =<< n;
-            ret x + y
-        };
-        assert!(ret.is_err());
-        assert_eq!(ret.unwrap_err().kind(), ErrorKind::MissingValue);
-    }
-
-    #[derive(Debug)]
-    struct SomeThirdPartyError;
-
-    impl std::fmt::Display for SomeThirdPartyError {
-        fn fmt(&self, _: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-            Ok(())
-        }
-    }
-
-    impl std::error::Error for SomeThirdPartyError {
-        fn description(&self) -> &str {
-            "test"
-        }
-    }
-
-    type TestResult<T> = std::result::Result<T, SomeThirdPartyError>;
-
-    use super::MayfailNop;
-
-    #[test]
-    fn test_mayfail_result() {
-        let result_x: TestResult<i32> = Ok(1);
-        let ret = mayfail! {
-            let n = 3;
-            x =<< result_x;
-            y =<< TestResult::<i32>::Ok(n);
-            ret x + y
-        };
-        assert!(ret.is_ok() && ret.unwrap() == 4);
-
-        let result_x: TestResult<i32> = Ok(1);
-        let ret = mayfail! {
-            let err = SomeThirdPartyError;
-            x =<< result_x;
-            y =<< TestResult::<i32>::Err(err);
-            ret x + y
-        };
-        assert!(ret.is_err());
-        assert_eq!(ret.unwrap_err().kind(), ErrorKind::Unknown);
-    }
-
-    #[test]
-    fn test_mayfail_mix() {
-        let result_x: TestResult<i32> = Ok(1);
-        let ret = mayfail! {
-            x =<< result_x;
-            y =<< Option::<i32>::None;
-            ret x + y
-        };
-        assert!(ret.is_err());
-        assert_eq!(ret.unwrap_err().kind(), ErrorKind::MissingValue);
-    }
-}