From f9bb10d1047cfa80831302dbf8e4d084c0a2de2f Mon Sep 17 00:00:00 2001 From: rick Date: Sat, 22 Apr 2023 15:12:27 +0200 Subject: [PATCH] add error if command not found --- src/enums.rs | 14 +++++++------- src/main.rs | 30 ++++++++---------------------- 2 files changed, 15 insertions(+), 29 deletions(-) diff --git a/src/enums.rs b/src/enums.rs index 0b25186..14e16da 100644 --- a/src/enums.rs +++ b/src/enums.rs @@ -136,17 +136,17 @@ fn parse_without_addr(c: char) -> Command { } */ -fn parse(c: char, addr: Address) -> Command { +fn parse(c: char, addr: Address) -> Result { match c { - 'p' => Command::Print(addr), - 'n' => Command::Number(addr), - 'q' => Command::Quit(false), - 'Q' => Command::Quit(true), - _ => Command::Help, + 'p' => Ok(Command::Print(addr)), + 'n' => Ok(Command::Number(addr)), + 'q' => Ok(Command::Quit(false)), + 'Q' => Ok(Command::Quit(true)), + _ => Ok(Command::Help), } } -pub fn parse_command(c: char, addr: Address) -> Command { +pub fn parse_command(c: char, addr: Address) -> Result { parse(c, addr) /* if let Some(a) = addr { diff --git a/src/main.rs b/src/main.rs index 4a39fee..fb8953a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -33,20 +33,6 @@ fn read_address(input: &str) -> Result<&str, Address> { * Le char doit ĂȘtre une commande valide. */ - -/* -fn parse_multi_addr(addr: &str) -> Address { - //let extract = take_till::<&str, &str, Error>(|c| c == ','); - let extract = take_till::<&str, &str, Error<&str>>(|c| c != ","); - if let Ok((still, before)) = extract(addr) { - if let Ok((still, after)) = extract(addr) { - } - } - - Address::Null -} -*/ - fn check_address(c: char) -> bool { c.is_digit(10) || c == '$' || c == ' ' || c == '.' } @@ -76,13 +62,11 @@ fn parse_line(input: &str) -> Result { let tmp = (address, command).parse(input); if let Ok((input, (a, c))) = tmp { let addr = parse_address(a); - Ok(parse_command(c, addr)) + parse_command(c, addr) } else if let Err(Error((_, t))) = tmp { - println!("?"); - Err(String::from("bruh moment")) + Err(String::from("Erreur de parsing")) } else { - println!("bruh"); - Err(String::from("bruh moment")) + Err(String::from("Grosse erreur")) } } @@ -103,13 +87,15 @@ fn main() { let mut input = String::new(); match io::stdin().read_line(&mut input) { Ok(n) => { - if let Ok(c) = parse_line(&input) { + let result_parse = parse_line(&input); + if let Ok(c) = result_parse { let tmp = execute_command(&mut buffer_struct, c); if tmp { quit = true; } - } else { - //println!("coucou"); + } else if let Err(e) = result_parse { + println!("?"); + println!("{}", e); } }, Err(e) => println!("error"),