fn trim_me(input: &str) -> &str { // TODO: Remove whitespace from both ends of a string // can find the 1st not whitespace and last not whitespace and then return slice let f = input .find(|c: char| !c.is_whitespace()) .unwrap_or(input.len()); let r = input.rfind(|c: char| !c.is_whitespace()).unwrap_or(0); if f < r { &input[f..r + 1] } else { &input[..input.len() - f] } // input.trim() } fn compose_me(input: &str) -> String { // TODO: Add " world!" to the string! There are multiple ways to do this. input.to_owned() + " world!" } fn replace_me(input: &str) -> String { // TODO: Replace "cars" in the string with "balloons". input.to_owned().replace("cars", "balloons") } fn main() { // You can optionally experiment here. } #[cfg(test)] mod tests { use super::*; #[test] fn trim_a_string() { assert_eq!(trim_me(" "), ""); assert_eq!(trim_me("Hello! "), "Hello!"); assert_eq!(trim_me(" What's up!"), "What's up!"); assert_eq!(trim_me(" Hola! "), "Hola!"); assert_eq!(trim_me("Hi!"), "Hi!"); } #[test] fn compose_a_string() { assert_eq!(compose_me("Hello"), "Hello world!"); assert_eq!(compose_me("Goodbye"), "Goodbye world!"); } #[test] fn replace_a_string() { assert_eq!( replace_me("I think cars are cool"), "I think balloons are cool", ); assert_eq!( replace_me("I love to look at cars"), "I love to look at balloons", ); } }