| ... | ... | @@ -8,7 +8,7 @@ pub const Value = union(enum) { |
| 8 | 8 | Bool: bool, |
| 9 | 9 | Null: void, |
| 10 | 10 | |
| 11 | | pub fn get(self: Value, key: []const u8) ?Value { |
| 11 | fn get_obj(self: Value, key: []const u8) ?Value { |
| 12 | 12 | if (self == .Object) { |
| 13 | 13 | for (self.Object) |member| { |
| 14 | 14 | if (std.mem.eql(u8, member.key, key)) { |
| ... | ... | @@ -19,7 +19,17 @@ pub const Value = union(enum) { |
| 19 | 19 | return null; |
| 20 | 20 | } |
| 21 | 21 | |
| 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 | 33 | return self.fetch_inner(query, 0); |
| 24 | 34 | } |
| 25 | 35 | |
| ... | ... | @@ -31,7 +41,7 @@ pub const Value = union(enum) { |
| 31 | 41 | const TO = @TypeOf(i); |
| 32 | 42 | const TI = @typeInfo(TO); |
| 33 | 43 | if (comptime std.meta.trait.isZigString(TO)) { |
| 34 | | if (self.get(i)) |v| { |
| 44 | if (self.get_obj(i)) |v| { |
| 35 | 45 | return v.fetch_inner(query, n + 1); |
| 36 | 46 | } |
| 37 | 47 | } |