use std::{fmt, io, string};

type OscResult<T> = Result<T, OscError>;

pub enum OscError {
    StringError(string::FromUtf8Error),
    ReadError(io::Error),
    BadOscPacket(String),
    BadOscAddress(String),
    BadOscMessage(String),
    BadOscString(String),
    BadOscBundle,
}

impl fmt::Display for OscError {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match self {
            _ => write!(f, "{}", "TODO"),
        }
    }
}

use std::fmt;

type OscResult<T> = Result<T, OscError>;

pub enum OscError {
    BadOscPacket(String),
    BadOscAddress(String),
    BadOscMessage(String),
    BadOscString(String),
    BadOscBundle,
}

impl fmt::Display for OscError {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match self {
            _ => write!(f, "{}", "TODO"),
        }
    }
}

--- 
+++ 
@@ -1,8 +1,10 @@
-use std::fmt;
+use std::{fmt, io, string};
 
 type OscResult<T> = Result<T, OscError>;
 
 pub enum OscError {
+    StringError(string::FromUtf8Error),
+    ReadError(io::Error),
     BadOscPacket(String),
     BadOscAddress(String),
     BadOscMessage(String),
Add String and Read error
