authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2021-04-29 23:31:22 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2021-04-29 23:31:22 -07:00
logad4232e15255cd90619d72c193e0ad9e9b1c595a
treef81cdd6081a7b9f4362be51d5d966a5ce474d3d1
parent77f139238ef84daefae80a9be6b708b669fcd3ce

only expose `get` for both single and tuple queries


2 files changed, 14 insertions(+), 4 deletions(-)

src/lib.zig+13-3
......@@ -8,7 +8,7 @@ pub const Value = union(enum) {
88 Bool: bool,
99 Null: void,
1010
11 pub fn get(self: Value, key: []const u8) ?Value {
11 fn get_obj(self: Value, key: []const u8) ?Value {
1212 if (self == .Object) {
1313 for (self.Object) |member| {
1414 if (std.mem.eql(u8, member.key, key)) {
......@@ -19,7 +19,17 @@ pub const Value = union(enum) {
1919 return null;
2020 }
2121
22 pub fn fetch(self: Value, query: anytype) ?Value {
22 pub fn get(self: Value, query: anytype) ?Value {
23 const TO = @TypeOf(query);
24 if (comptime std.meta.trait.isZigString(TO)) {
25 return self.get_obj(@as([]const u8, query));
26 }
27 const TI = @typeInfo(TO);
28 if (TI == .Int or TI == .ComptimeInt) {
29 if (self == .Array) {
30 return self.Array[i];
31 }
32 }
2333 return self.fetch_inner(query, 0);
2434 }
2535
......@@ -31,7 +41,7 @@ pub const Value = union(enum) {
3141 const TO = @TypeOf(i);
3242 const TI = @typeInfo(TO);
3343 if (comptime std.meta.trait.isZigString(TO)) {
34 if (self.get(i)) |v| {
44 if (self.get_obj(i)) |v| {
3545 return v.fetch_inner(query, n + 1);
3646 }
3747 }
src/main.zig+1-1
......@@ -22,7 +22,7 @@ pub fn main() !void {
2222 std.log.info("", .{});
2323
2424 var count: usize = 1;
25 for (val.fetch(.{ "data", "children" }).?.Array) |ch| {
25 for (val.get(.{ "data", "children" }).?.Array) |ch| {
2626 const post = ch.get("data").?;
2727 const title = post.get("title").?.String;
2828 const author = post.get("author").?.String;