diff --git a/src/lib.zig b/src/lib.zig index 8b5fbe12b2f9c11bcf3be7f4928435c134b32c5a..4a88eafc3cd00c54b8908ff06dcbf5711a76ab2e 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -8,7 +8,7 @@ pub const Value = union(enum) { Bool: bool, Null: void, - pub fn get(self: Value, key: []const u8) ?Value { + fn get_obj(self: Value, key: []const u8) ?Value { if (self == .Object) { for (self.Object) |member| { if (std.mem.eql(u8, member.key, key)) { @@ -19,7 +19,17 @@ pub const Value = union(enum) { return null; } - pub fn fetch(self: Value, query: anytype) ?Value { + pub fn get(self: Value, query: anytype) ?Value { + const TO = @TypeOf(query); + if (comptime std.meta.trait.isZigString(TO)) { + return self.get_obj(@as([]const u8, query)); + } + const TI = @typeInfo(TO); + if (TI == .Int or TI == .ComptimeInt) { + if (self == .Array) { + return self.Array[i]; + } + } return self.fetch_inner(query, 0); } @@ -31,7 +41,7 @@ pub const Value = union(enum) { const TO = @TypeOf(i); const TI = @typeInfo(TO); if (comptime std.meta.trait.isZigString(TO)) { - if (self.get(i)) |v| { + if (self.get_obj(i)) |v| { return v.fetch_inner(query, n + 1); } } diff --git a/src/main.zig b/src/main.zig index c46ab2f5814055365a90412fcb8a5f2da4a0a24f..6fa8741a58775c353dc5087c834539b748cb461a 100644 --- a/src/main.zig +++ b/src/main.zig @@ -22,7 +22,7 @@ pub fn main() !void { std.log.info("", .{}); var count: usize = 1; - for (val.fetch(.{ "data", "children" }).?.Array) |ch| { + for (val.get(.{ "data", "children" }).?.Array) |ch| { const post = ch.get("data").?; const title = post.get("title").?.String; const author = post.get("author").?.String;