zig-lys/src/args/parsers/parsers.zig

33 lines
1,015 B
Zig
Raw Normal View History

2024-11-23 23:26:03 +00:00
const std = @import("std");
/// A signature for a 'parse' function. It takes a string and returns an error or a value.
///
/// This function should *not* be called directly, but rather through the `parse` field of a `Marker`.
pub fn ParseSignature(comptime T: type) type {
return *const fn (value: []const u8) anyerror!T;
}
pub const num = @import("./num.zig").num;
pub const boolean = @import("./boolean.zig").boolean;
pub const enumLiteral = @import("./enumLiteral.zig").enumLiteral;
test "valid parser signatures" {
const t = std.testing;
try t.expectEqual(ParseSignature(u8), @TypeOf(num(u8)));
try t.expectEqual(ParseSignature(bool), @TypeOf(&boolean));
const Enum = enum { Value, Other };
try t.expectEqual(ParseSignature(Enum), @TypeOf(enumLiteral(Enum)));
}
comptime {
const builtin = @import("builtin");
if (builtin.is_test) {
std.mem.doNotOptimizeAway(num);
std.mem.doNotOptimizeAway(boolean);
std.mem.doNotOptimizeAway(enumLiteral);
}
}