Failure data type seems should be a user defined error data object, so can we pass in the error data type? Now it simply use `Error`