From cec3beaf9087aec8d81228fc09e0a63b76ed2ed0 Mon Sep 17 00:00:00 2001 From: rick Date: Fri, 14 Apr 2023 14:42:04 +0200 Subject: [PATCH] add multi address with , --- src/enums.rs | 28 +++++++++++++++++++++++++++- src/main.rs | 12 ------------ 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/enums.rs b/src/enums.rs index 6b9e2f7..30487df 100644 --- a/src/enums.rs +++ b/src/enums.rs @@ -6,8 +6,9 @@ pub enum Address { Last, Line(usize), FromStartTo(usize), - FromToEnd(usize), + FromToEnd(usize), // pas sur ? FromTo(usize, usize), + All, Null, } @@ -27,6 +28,8 @@ pub fn parse_address(addr: &str) -> Address { if addr.is_empty() { Address::Actual + } else if addr.contains(',') { + parse_multi_addr(addr) } else if let Ok(l) = usize::from_str(addr) { Address::Line(l) } else { @@ -38,6 +41,29 @@ pub fn parse_address(addr: &str) -> Address { } } +fn parse_multi_addr(addr: &str) -> Address { + // garde con ou pas ? + let tmp: Vec<&str> = addr.split(",").collect(); + if tmp.len() != 2 { + Address::Null + } else { + let start = usize::from_str(tmp[0]); + let end = usize::from_str(tmp[1]); + + if let Ok(a) = start { + if let Ok(b) = end { + Address::FromTo(a, b) + } else { + Address::Line(a) + } + } else if let Ok(a) = end { + Address::FromStartTo(a) + } else { + Address::All + } + } +} + #[derive(Debug)] pub enum Command { Append(Address), diff --git a/src/main.rs b/src/main.rs index 88311dd..8d434a4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -17,18 +17,6 @@ use nom::Err::Error; const FILE : &'static str = "test"; -/* - * . - * $ - * [:digit:] - * '[:alpha:] - * /BRE/ - * +[:digit:] - * -[:digit:] - * [:digit:],[:digit:] - * [:digit:];[:digit:] - */ - // TODO juste $ pour l'instant dans l'adresse // TODO faire les commandes mais juste p pour l'instant // TODO faire un système de retour d'erreur pour afficher ? et l'erreur si l'utilisateur le demande