From cad8246ab54f7c81b70d1445ccac356bc4b06d02 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Wed, 6 Apr 2016 12:39:16 -0400 Subject: Implement `build_alias` Copy of the functionality in W. Caleb McDaniel's Bash script implemented in Rust: echo "${MESSAGE}" | grep ^"From: " | sed s/[\,\"\']//g | awk '{$1=""; if (NF == 3) {print "alias" $0;} else if (NF == 2) {print "alias" $0 $0;} else if (NF > 3) {print "alias", tolower($(NF-1))"-"tolower($2) $0;}}' Doesn't currently include the [,"'] filtering. Added a couple of new test cases to cover other address formats. Not sure if I should use `if..else if` here or a `match`. I feel like I should return an empty string at the end if we can't build an alias line. --- src/main.rs | 22 +++++++++++++++++++++- src/tests.rs | 10 ++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index 92ea8e1..2a0a471 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,7 +8,27 @@ fn handle_alias(s: &str) { } fn build_alias(s: &str) -> String { - String::from("String") + // Replace , ' " with nothing + + let mut split: Vec<&str> = s.split_whitespace().collect(); + + // Remove "From: " + split.remove(0); + + let mut alias_line = String::from("alias "); + + if split.len() == 1 { + alias_line.push_str(&format!("{} ", split[0].to_lowercase())); + alias_line.push_str(&split.join(" ")) + } else if split.len() == 2 { + alias_line.push_str(&format!("{} ", split[0].to_lowercase())); + alias_line.push_str(&split.join(" ")); + } else if split.len() > 2 { + alias_line.push_str(&format!("{}-{} ", split[split.len() - 2], split[0]).to_lowercase()); + alias_line.push_str(&split.join(" ")); + } + + alias_line } fn main() { diff --git a/src/tests.rs b/src/tests.rs index 20bbcc5..eff385a 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -2,6 +2,16 @@ use super::build_alias; #[test] fn test_build_alias() { + assert_eq!( + "alias producer@765pro.ductions producer@765pro.ductions", + build_alias("From: producer@765pro.ductions") + ); + + assert_eq!( + "alias decim Decim ", + build_alias("From: Decim ") + ); + assert_eq!( "alias farnsworth-hubert Hubert Farnsworth ", build_alias("From: Hubert Farnsworth ") -- cgit v1.2.3