returning a string as an error is not very idiomatic