From edb685f04be9aef407dc8abac7bb76fb51184f9f Mon Sep 17 00:00:00 2001 From: Feoramund <161657516+Feoramund@users.noreply.github.com> Date: Thu, 6 Jun 2024 18:35:43 -0400 Subject: Add package `core:flags` --- core/flags/errors.odin | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 core/flags/errors.odin (limited to 'core/flags/errors.odin') 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, +} -- cgit v1.2.3