make error_or 4 bytes smaller at the cost of a slight interface change