Rust What is the main purpose of the derive macro statement