| ... | @@ -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, |
| 10 | | 10 | |
| 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 | } |
| 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 | return self.fetch_inner(query, 0); | 33 | return self.fetch_inner(query, 0); |
| 24 | } | 34 | } |
| 25 | | 35 | |
| ... | @@ -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 | } |