We should have granular function level errors. Instead of one big error struct. This serves as documentation as well as allows users to handle specific errors easily.