diff --git a/src/traft/error.rs b/src/traft/error.rs
index 2f3fa3bf4a883cc5faf19511673439121c9087a4..0ccfc5fb4feab3939590a56aa938d4a05d1e871e 100644
--- a/src/traft/error.rs
+++ b/src/traft/error.rs
@@ -83,6 +83,22 @@ impl Error {
     {
         Self::Other(error.into())
     }
+
+    /// Temporary solution until proc_cas returns structured errors
+    pub fn is_cas_err(&self) -> bool {
+        self.to_string().contains("compare-and-swap request failed")
+    }
+
+    /// Temporary solution until proc_cas returns structured errors
+    pub fn is_term_mismatch_err(&self) -> bool {
+        self.to_string()
+            .contains("operation request from different term")
+    }
+
+    /// Temporary solution until proc_cas returns structured errors
+    pub fn is_not_leader_err(&self) -> bool {
+        self.to_string().contains("not a leader")
+    }
 }
 
 impl<E> From<timeout::Error<E>> for Error