| ... | ... | @@ -212,6 +212,7 @@ pub const DoOptions = struct { |
| 212 | 212 | fn search(comptime args: []const string, ctx: anytype) FieldSearch(@TypeOf(ctx), args) { |
| 213 | 213 | if (args.len == 0) return ctx; |
| 214 | 214 | if (args[0][0] == '"') return std.mem.trim(u8, args[0], "\""); |
| 215 | if (@typeInfo(@TypeOf(ctx)) == .Optional) return search(args, ctx.?); |
| 215 | 216 | const f = @field(ctx, args[0]); |
| 216 | 217 | if (args.len == 1) return f; |
| 217 | 218 | return search(args[1..], f); |
| ... | ... | @@ -226,6 +227,10 @@ fn Field(comptime T: type, comptime field_name: string) type { |
| 226 | 227 | if (std.meta.trait.isIndexable(T) and std.mem.eql(u8, field_name, "len")) { |
| 227 | 228 | return usize; |
| 228 | 229 | } |
| 230 | switch (@typeInfo(T)) { |
| 231 | .Optional => |info| return Field(info.child, field_name), |
| 232 | else => {}, |
| 233 | } |
| 229 | 234 | for (std.meta.fields(T)) |fld| { |
| 230 | 235 | if (std.mem.eql(u8, fld.name, field_name)) { |
| 231 | 236 | return fld.type; |