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) {...@@ -8,7 +8,7 @@ pub const Value = union(enum) {
8 Bool: bool,8 Bool: bool,
9 Null: void,9 Null: void,
1010
11 pub fn get(self: Value, key: []const u8) ?Value {11 fn get_obj(self: Value, key: []const u8) ?Value {
12 if (self == .Object) {12 if (self == .Object) {
13 for (self.Object) |member| {13 for (self.Object) |member| {
14 if (std.mem.eql(u8, member.key, key)) {14 if (std.mem.eql(u8, member.key, key)) {
...@@ -19,7 +19,17 @@ pub const Value = union(enum) {...@@ -19,7 +19,17 @@ pub const Value = union(enum) {
19 return null;19 return null;
20 }20 }
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 }
23 return self.fetch_inner(query, 0);33 return self.fetch_inner(query, 0);
24 }34 }
2535
...@@ -31,7 +41,7 @@ pub const Value = union(enum) {...@@ -31,7 +41,7 @@ pub const Value = union(enum) {
31 const TO = @TypeOf(i);41 const TO = @TypeOf(i);
32 const TI = @typeInfo(TO);42 const TI = @typeInfo(TO);
33 if (comptime std.meta.trait.isZigString(TO)) {43 if (comptime std.meta.trait.isZigString(TO)) {
34 if (self.get(i)) |v| {44 if (self.get_obj(i)) |v| {
35 return v.fetch_inner(query, n + 1);45 return v.fetch_inner(query, n + 1);
36 }46 }
37 }47 }
src/main.zig+1-1
...@@ -22,7 +22,7 @@ pub fn main() !void {...@@ -22,7 +22,7 @@ pub fn main() !void {
22 std.log.info("", .{});22 std.log.info("", .{});
2323
24 var count: usize = 1;24 var count: usize = 1;
25 for (val.fetch(.{ "data", "children" }).?.Array) |ch| {25 for (val.get(.{ "data", "children" }).?.Array) |ch| {
26 const post = ch.get("data").?;26 const post = ch.get("data").?;
27 const title = post.get("title").?.String;27 const title = post.get("title").?.String;
28 const author = post.get("author").?.String;28 const author = post.get("author").?.String;