The sol! macro Contracts Events and errors Decode returns Structs and enums User defined types all_derives attribute extra_derives attribute