authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2023-11-25 15:55:42 -08:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2023-11-25 15:55:42 -08:00
log3ba77713aba930dca5b08532d1a41e52ddb6f5d7
tree2f9946a7cb119549a49c7526fa5c6f35edffc921
parent3706f0c2e0910395c88fc39fe2301f4fd84d5b41

support true/false literal bool args in custom function params


1 files changed, 4 insertions(+), 0 deletions(-)

src/lib.zig+4
...@@ -314,6 +314,8 @@ fn ResolveArg(comptime arg: astgen.Arg, comptime This: type, comptime Ctx: type)...@@ -314,6 +314,8 @@ fn ResolveArg(comptime arg: astgen.Arg, comptime This: type, comptime Ctx: type)
314fn search(comptime args: []const string, ctx: anytype) FieldSearch(@TypeOf(ctx), args) {314fn search(comptime args: []const string, ctx: anytype) FieldSearch(@TypeOf(ctx), args) {
315 if (args.len == 0) return ctx;315 if (args.len == 0) return ctx;
316 if (args[0][0] == '"') return std.mem.trim(u8, args[0], "\"");316 if (args[0][0] == '"') return std.mem.trim(u8, args[0], "\"");
317 if (comptime std.mem.eql(u8, args[0], "true")) return true;
318 if (comptime std.mem.eql(u8, args[0], "false")) return false;
317 if (@typeInfo(@TypeOf(ctx)) == .Optional) return search(args, ctx.?);319 if (@typeInfo(@TypeOf(ctx)) == .Optional) return search(args, ctx.?);
318 const f = @field(ctx, args[0]);320 const f = @field(ctx, args[0]);
319 if (args.len == 1) return f;321 if (args.len == 1) return f;
...@@ -322,6 +324,8 @@ fn search(comptime args: []const string, ctx: anytype) FieldSearch(@TypeOf(ctx),...@@ -322,6 +324,8 @@ fn search(comptime args: []const string, ctx: anytype) FieldSearch(@TypeOf(ctx),
322324
323fn FieldSearch(comptime T: type, comptime args: []const string) type {325fn FieldSearch(comptime T: type, comptime args: []const string) type {
324 if (args.len > 0 and args[0][0] == '"') return string;326 if (args.len > 0 and args[0][0] == '"') return string;
327 if (args.len > 0 and std.mem.eql(u8, args[0], "true")) return bool;
328 if (args.len > 0 and std.mem.eql(u8, args[0], "false")) return bool;
325 return if (args.len == 0) T else if (args.len == 1) Field(T, args[0]) else FieldSearch(Field(T, args[0]), args[1..]);329 return if (args.len == 0) T else if (args.len == 1) Field(T, args[0]) else FieldSearch(Field(T, args[0]), args[1..]);
326}330}
327331