authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2023-05-15 16:10:24 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2023-05-15 16:10:24 -07:00
log86847689442589595adcef24fc217dd5301faf90
treee9353c5f33e813e03e3808a32b145f8de7f8324c
parentfd35ab1d9e31c744afd20b2c3f8101976d382172

better support for printing through optionals


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

src/lib.zig+5
......@@ -212,6 +212,7 @@ pub const DoOptions = struct {
212212fn search(comptime args: []const string, ctx: anytype) FieldSearch(@TypeOf(ctx), args) {
213213 if (args.len == 0) return ctx;
214214 if (args[0][0] == '"') return std.mem.trim(u8, args[0], "\"");
215 if (@typeInfo(@TypeOf(ctx)) == .Optional) return search(args, ctx.?);
215216 const f = @field(ctx, args[0]);
216217 if (args.len == 1) return f;
217218 return search(args[1..], f);
......@@ -226,6 +227,10 @@ fn Field(comptime T: type, comptime field_name: string) type {
226227 if (std.meta.trait.isIndexable(T) and std.mem.eql(u8, field_name, "len")) {
227228 return usize;
228229 }
230 switch (@typeInfo(T)) {
231 .Optional => |info| return Field(info.child, field_name),
232 else => {},
233 }
229234 for (std.meta.fields(T)) |fld| {
230235 if (std.mem.eql(u8, fld.name, field_name)) {
231236 return fld.type;