## easy_traits ### Instructions Your task is to implement the trait `AppendStr` for the type StringValue. The trait `AppendStr` has the following functions: - `append_str`, that appends to the value of the structure a new_str of type String - `append_number`, that appends to the value of the structure a new_number of type f64 - `remove_punctuation_marks`, that removes from the value of the structure the following punctuation marks: `. , ? !` ### Expected Function ```rust #[derive(Clone)] struct StringValue { value: String, } trait AppendStr { fn append_str(self, new_str: String) -> Self; fn append_number(self, new_number: f64) -> Self; fn remove_punctuation_marks(self) -> Self; } impl AppendStr for StringValue { } ``` ### Usage Here is a program to test your function. ```rust use easy_traits::*; fn main() { let mut str_aux = StringValue { value: String::from("hello"), }; println!("Before append: {}", str_aux.value); str_aux.append_str(String::from(" there!")); println!("After append: {}", str_aux.value); str_aux.remove_punctuation_marks(); println!("After removing punctuation: {}", str_aux.value); } ``` And its output ```console $ cargo run Before append: hello After append: hello there! After removing punctuation: hello there $ ```