added i32 and i64 support
This commit is contained in:
@@ -37,6 +37,8 @@ FLAG_SEP_CHAR := "="
|
|||||||
Flag_Value_Ptr :: union {
|
Flag_Value_Ptr :: union {
|
||||||
^bool,
|
^bool,
|
||||||
^int,
|
^int,
|
||||||
|
^i32,
|
||||||
|
^i64,
|
||||||
^string,
|
^string,
|
||||||
^f32,
|
^f32,
|
||||||
^f64,
|
^f64,
|
||||||
@@ -99,6 +101,10 @@ print_usage :: proc() {
|
|||||||
fmt.printfln("\t%s%s:\n\t\t%s (default: %v)%s\n", FLAG_START_CHAR, f.name, f.usage, v^, req_msg)
|
fmt.printfln("\t%s%s:\n\t\t%s (default: %v)%s\n", FLAG_START_CHAR, f.name, f.usage, v^, req_msg)
|
||||||
case ^int:
|
case ^int:
|
||||||
fmt.printfln("\t%s%s:\n\t\t%s (default: %d)%s\n", FLAG_START_CHAR, f.name, f.usage, v^, req_msg)
|
fmt.printfln("\t%s%s:\n\t\t%s (default: %d)%s\n", FLAG_START_CHAR, f.name, f.usage, v^, req_msg)
|
||||||
|
case ^i32:
|
||||||
|
fmt.printfln("\t%s%s:\n\t\t%s (default: %d)%s\n", FLAG_START_CHAR, f.name, f.usage, v^, req_msg)
|
||||||
|
case ^i64:
|
||||||
|
fmt.printfln("\t%s%s:\n\t\t%s (default: %d)%s\n", FLAG_START_CHAR, f.name, f.usage, v^, req_msg)
|
||||||
case ^string:
|
case ^string:
|
||||||
fmt.printfln("\t%s%s:\n\t\t%s (default: %s)%s\n", FLAG_START_CHAR, f.name, f.usage, v^, req_msg)
|
fmt.printfln("\t%s%s:\n\t\t%s (default: %s)%s\n", FLAG_START_CHAR, f.name, f.usage, v^, req_msg)
|
||||||
case ^f32:
|
case ^f32:
|
||||||
@@ -127,6 +133,24 @@ IntVar :: proc(ptr: ^int, name: string, default: int, usage: string, required :=
|
|||||||
append(&all_flags, Flag{name = name, value = ptr, usage = usage, required = required})
|
append(&all_flags, Flag{name = name, value = ptr, usage = usage, required = required})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Int32Var :: proc(ptr: ^i32, name: string, default: i32, usage: string, required := false) {
|
||||||
|
if ptr == nil {
|
||||||
|
fmt.fprintfln(os.stderr, "[ERROR]: Invalid usage of Int32Var: got nil for 'ptr' value!")
|
||||||
|
os.exit(1)
|
||||||
|
}
|
||||||
|
ptr^ = default
|
||||||
|
append(&all_flags, Flag{name = name, value = ptr, usage = usage, required = required})
|
||||||
|
}
|
||||||
|
|
||||||
|
Int64Var :: proc(ptr: ^i64, name: string, default: i64, usage: string, required := false) {
|
||||||
|
if ptr == nil {
|
||||||
|
fmt.fprintfln(os.stderr, "[ERROR]: Invalid usage of Int32Var: got nil for 'ptr' value!")
|
||||||
|
os.exit(1)
|
||||||
|
}
|
||||||
|
ptr^ = default
|
||||||
|
append(&all_flags, Flag{name = name, value = ptr, usage = usage, required = required})
|
||||||
|
}
|
||||||
|
|
||||||
StringVar :: proc(ptr: ^string, name: string, default: string, usage: string, required := false) {
|
StringVar :: proc(ptr: ^string, name: string, default: string, usage: string, required := false) {
|
||||||
if ptr == nil {
|
if ptr == nil {
|
||||||
fmt.fprintfln(os.stderr, "[ERROR]: Invalid usage of StringVar: got nil for 'ptr' value!")
|
fmt.fprintfln(os.stderr, "[ERROR]: Invalid usage of StringVar: got nil for 'ptr' value!")
|
||||||
@@ -214,6 +238,26 @@ parse_flags :: proc() {
|
|||||||
}
|
}
|
||||||
v^ = parsed
|
v^ = parsed
|
||||||
|
|
||||||
|
case ^i32:
|
||||||
|
if value == "" {break}
|
||||||
|
parsed, ok := strconv.parse_int(value)
|
||||||
|
if !ok {
|
||||||
|
fmt.fprintfln(os.stderr, "[ERROR] Failed to parse flag %s: got %T, wanted int",
|
||||||
|
f.name, value)
|
||||||
|
os.exit(1)
|
||||||
|
}
|
||||||
|
v^ = cast(i32)parsed
|
||||||
|
|
||||||
|
case ^i64:
|
||||||
|
if value == "" {break}
|
||||||
|
parsed, ok := strconv.parse_i64(value)
|
||||||
|
if !ok {
|
||||||
|
fmt.fprintfln(os.stderr, "[ERROR] Failed to parse flag %s: got %T, wanted int",
|
||||||
|
f.name, value)
|
||||||
|
os.exit(1)
|
||||||
|
}
|
||||||
|
v^ = parsed
|
||||||
|
|
||||||
case ^string:
|
case ^string:
|
||||||
if value == "" {break}
|
if value == "" {break}
|
||||||
// TODO: validate string?
|
// TODO: validate string?
|
||||||
|
|||||||
Reference in New Issue
Block a user