diff --git a/src/commands/mod.rs b/src/commands/mod.rs
index a7654ce..1daf601 100644
--- a/src/commands/mod.rs
+++ b/src/commands/mod.rs
@@ -1,5 +1,7 @@
+use std::error::Error;
 use std::io::{
     Error as IoError,
+    ErrorKind,
     stdin,
     Stdin
 };
@@ -8,6 +10,7 @@ use futures::{
     prelude::*,
     stream::MapErr
 };
+use hyper::Error as HyperError;
 use tokio_io::{
     io::AllowStdIo,
     codec::{
@@ -28,3 +31,10 @@ pub fn stdin_stream() -> MapErr<FramedRead<AllowStdIo<Stdin>, BytesCodec>, fn(Io
     FramedRead::new(AllowStdIo::new(stdin()), BytesCodec::new())
     .map_err(WebmetroError::IoError)
 }
+
+pub fn to_hyper_error(err: WebmetroError) -> HyperError {
+    match err {
+        WebmetroError::IoError(io_err) => io_err.into(),
+        err => IoError::new(ErrorKind::InvalidData, err.description()).into()
+    }
+}
diff --git a/src/error.rs b/src/error.rs
index d0c754d..ad11148 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -17,6 +17,16 @@ pub enum WebmetroError {
     Unknown(Box<Error + Send>)
 }
 
+impl WebmetroError {
+    pub fn from_str(string: &str) -> WebmetroError {
+        string.into()
+    }
+
+    pub fn from_err<E: Error + Send + 'static>(err: E) -> WebmetroError {
+        WebmetroError::Unknown(Box::new(err))
+    }
+}
+
 impl Display for WebmetroError {
     fn fmt(&self, f: &mut Formatter) -> FmtResult {
         match self {