use std::fs; use std::io; /// Struct to store robot position struct Position { x: u32, y: u32, } /// A Robot *aka droid* is represented here. /// Each robot must have a unique id. struct Robot { id: u32, o: Orientation, p: Position, } /// Enum to store all possible orientations. enum Orientation { N, E, S, W, } /// Enum to store all possible instructions. enum Instruction { L, R, F, } /// Parse char and return corresponding orientation. fn parse_orientation(c: char) -> Result { match c { 'N' => Ok(Orientation::N), 'E' => Ok(Orientation::E), 'S' => Ok(Orientation::S), 'W' => Ok(Orientation::W), _ => Err("Invalid character, does not match any orientations"), } } /// Parse char and return corresponding instruction. fn parse_instruction(c: char) -> Result { match c { 'L' => Ok(Instruction::L), 'R' => Ok(Instruction::R), 'F' => Ok(Instruction::F), _ => Err("Invalid character, does not match any instructions"), } } /// Retrieve the content of a file and return it as a string. fn open_file(filename: &str) -> io::Result { let content = fs::read_to_string(filename)?; Ok(content) } fn main() { let mut robot_pool: Vec = Vec::new(); let conf = open_file("two_robots.txt"); } #[cfg(test)] mod tests { use super::*; #[test] fn test_parse_orientation() { assert!(parse_orientation('N').is_ok()); assert!(parse_orientation('E').is_ok()); assert!(parse_orientation('S').is_ok()); assert!(parse_orientation('W').is_ok()); assert!(parse_orientation('Z').is_err()); } #[test] fn test_parse_instruction() { assert!(parse_instruction('L').is_ok()); assert!(parse_instruction('R').is_ok()); assert!(parse_instruction('F').is_ok()); assert!(parse_instruction('Z').is_err()); } #[test] fn test_open_file() { assert!(open_file("two_robots.txt").is_ok()); assert!(open_file("test_unexisting_file.extension").is_err()); } }