enum ParseToIntError {
    Empty,
    Syntax(String),
}

fn parse_to_int(n: &str) -> Result<i32, ParseToIntError> {
    if n.is_empty() {
        return Err(ParseToIntError::Empty);
    }
    match n.parse::<i32>() {
        Ok(i) => Ok(i),
        Err(e) => Err(ParseToIntError::Syntax(format!("Error:{}", e))),
    }
}

fn main() {
    match parse_to_int("123") {
        Ok(i) => println!("Parsed: {}", i),
        Err(e) => match e {
            ParseToIntError::Empty => println!("Empty input."),
            ParseToIntError::Syntax(m) => println!("Error syntax: {}", m),
        }
    }
}