From 86847689442589595adcef24fc217dd5301faf90 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Mon, 15 May 2023 16:10:24 -0700 Subject: [PATCH] better support for printing through optionals --- src/lib.zig | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/lib.zig b/src/lib.zig index b0d54ce4997f4658a8a58b3690d7a3fb286d4c7c..4aeed22acda29b33f56d062de2e87b5d2367bd9a 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -212,6 +212,7 @@ pub const DoOptions = struct { fn search(comptime args: []const string, ctx: anytype) FieldSearch(@TypeOf(ctx), args) { if (args.len == 0) return ctx; if (args[0][0] == '"') return std.mem.trim(u8, args[0], "\""); + if (@typeInfo(@TypeOf(ctx)) == .Optional) return search(args, ctx.?); const f = @field(ctx, args[0]); if (args.len == 1) return f; return search(args[1..], f); @@ -226,6 +227,10 @@ fn Field(comptime T: type, comptime field_name: string) type { if (std.meta.trait.isIndexable(T) and std.mem.eql(u8, field_name, "len")) { return usize; } + switch (@typeInfo(T)) { + .Optional => |info| return Field(info.child, field_name), + else => {}, + } for (std.meta.fields(T)) |fld| { if (std.mem.eql(u8, fld.name, field_name)) { return fld.type; -- 2.54.0