return the result / error directly, instead of wrapped in an object