diff options
Diffstat (limited to 'core/flags/errors.odin')
| -rw-r--r-- | core/flags/errors.odin | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/core/flags/errors.odin b/core/flags/errors.odin new file mode 100644 index 000000000..1862a7a00 --- /dev/null +++ b/core/flags/errors.odin @@ -0,0 +1,58 @@ +package flags + +import "base:runtime" +import "core:net" +import "core:os" + +Parse_Error_Reason :: enum { + None, + // An extra positional argument was given, and there is no `varg` field. + Extra_Positional, + // The underlying type does not support the string value it is being set to. + Bad_Value, + // No flag was given by the user. + No_Flag, + // No value was given by the user. + No_Value, + // The flag on the struct is missing. + Missing_Flag, + // The type itself isn't supported. + Unsupported_Type, +} + +Unified_Parse_Error_Reason :: union #shared_nil { + Parse_Error_Reason, + runtime.Allocator_Error, + net.Parse_Endpoint_Error, +} + +// Raised during parsing, naturally. +Parse_Error :: struct { + reason: Unified_Parse_Error_Reason, + message: string, +} + +// Raised during parsing. +// Provides more granular information than what just a string could hold. +Open_File_Error :: struct { + filename: string, + errno: os.Errno, + mode: int, + perms: int, +} + +// Raised during parsing. +Help_Request :: distinct bool + + +// Raised after parsing, during validation. +Validation_Error :: struct { + message: string, +} + +Error :: union { + Parse_Error, + Open_File_Error, + Help_Request, + Validation_Error, +} |