derive macros for error union