| ... | ... | @@ -314,6 +314,8 @@ fn ResolveArg(comptime arg: astgen.Arg, comptime This: type, comptime Ctx: type) |
| 314 | 314 | fn search(comptime args: []const string, ctx: anytype) FieldSearch(@TypeOf(ctx), args) { |
| 315 | 315 | if (args.len == 0) return ctx; |
| 316 | 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 | 319 | if (@typeInfo(@TypeOf(ctx)) == .Optional) return search(args, ctx.?); |
| 318 | 320 | const f = @field(ctx, args[0]); |
| 319 | 321 | if (args.len == 1) return f; |
| ... | ... | @@ -322,6 +324,8 @@ fn search(comptime args: []const string, ctx: anytype) FieldSearch(@TypeOf(ctx), |
| 322 | 324 | |
| 323 | 325 | fn FieldSearch(comptime T: type, comptime args: []const string) type { |
| 324 | 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 | 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 | } |
| 327 | 331 | |