The sol! macro Contract Events and errors Structs and enums User defined types all_derives attribute extra_derives attribute